Kjør Ant build

Vår build bruker optional task scp, denne trenger å legge inn jar fil i ant sin lib. Denne kan kopieres fra \lib mappen, ellers kan alle optional tasks lastes ned: "Optionally, from the ANT_HOME directory run ant -f fetch.xml -Ddest=system to get the library dependencies of most of the Ant tasks that require them. If you don't do this, many of the dependent Ant tasks will not be available. See Optional Tasks for details and other options for the -Ddest parameter."

Default target for vår ant-build er test som laster inn test-properties, og så kjører main target, som inneholder
<target name="main" depends="queryMarcusForData,transformMarcus2oria,copyAndCommitIdentifierFile,DivideAndPackageResults,copyAndCommitIdentifierFile,validateByRNG"/>
For test konfigureres det for færre objekter, og istedenfor å bruke offset i spørringen, går den ut etter første spørring. Den kjører heller ikke target for opplasting til bibsys.
For å konfigurere ant build må to property filer fylles ut.
cp properties/local.bibsys.properties properties/bibsys.properties
og fyll så ut brukernavn passord og url for opplasting til bibsys. Sjekk at konfigurasjonsfil ikke er med i git. (Skal være i .gitignore)
bibsys.host=
bibsys.password=
bibsys.user=
De andre propertyfilene example.properties og marcus.properties inneholder properties som kan byttes ut for andre bibliotek eller avdelinger.
name=examples
queryMarcusForData.limit=2
queryMarcusForData.test-run=1
queryMarcusForData.out=input/${name}.xml
transformMarcus2oria.out=output/${name}.pnx
dummy.out=./output/dummy.xml
transformMarcus2oria.library=1120109
transformMarcus2oria.institution=UBB
transformMarcus2oria.searchscope=UBB_MARCUS
transformMarcus2oria.scope=UBB_MARCUS
transformMarcus2oria.publisher=Universitetsbiblioteket i Bergen

Den andre target som kan kjøres i prosjektet, kalles ved ant marcus og laster inn properties for marcus, fulgt av main. Den tar også inn inn bibsys.properties, og kjører så target uploadToBibsys for å overføre postene til bibsys.

Her følger en gjennomgang av Targets som brukes brukes:

queryMarcusForData kjører sparql-spørring for å hente data i marcus. Se getDocuments for dokumentasjon av hentingen av data.

        <target name="queryMarcusForData">          
          <xslt in="dummy.xml" style="xsl/getDocuments.xsl" force="yes" out="${queryMarcusForData.out}">
            <param name="limit" expression="${queryMarcusForData.limit}" type="INT"/>
            <param name="test-run" expression="${queryMarcusForData.test-run}"/>
            <classpath path="lib/saxon9he.jar"/>
            </xslt>                     
        </target>
      
transformMarcus2Oria

      <xslt style="xsl/marcus2pnx.xsl" in="${queryMarcusForData.out}" out="${transformMarcus2oria.out}">
        <param name="library" expression="${transformMarcus2oria.library}"/>
        <param name="institution" expression="${transformMarcus2oria.institution}"/>
        <param name="searchscope" expression="${transformMarcus2oria.searchscope}"/>
        <param name="scope" expression="${transformMarcus2oria.scope}"/>
        <param name="publisher" expression="${transformMarcus2oria.publisher}"/>
        <classpath path="lib/saxon9he.jar"/>            
      </xslt>
    
copyAndCommitIdentifierFile tar resultatfilen fra transformMarcus2Oria som input, og tar en tidligere identifier fil som input-parameter. Genererer md5 hash for streng-innhold av hver post, og oppdaterer modified på de som er endret. Kjører også igjennom en transformasjon for å generere poster som skal slettes. Så erstattes den gamle identifier filen, med den nye.

      <target name="copyAndCommitIdentifierFile">        
        <property name="copyAndCommitIdentifierFile.out" value="./${name}_identifiers.tmp" />
        <property name="copyAndCommitIdentifierFile.identifier" value="${name}_identifiers.xml"/>
        <xslt in="${transformMarcus2oria.out}" force="yes" style="xsl/updateIdentifiers.xsl" out="${copyAndCommitIdentifierFile.out}">
          <param name="identifiers" expression="${copyAndCommitIdentifierFile.identifier}"/>
          <!--SaxonB-->
          <classpath path="lib/saxon9.jar"/>
        </xslt>
        <tstamp/>        
        <xslt in="${copyAndCommitIdentifierFile.out}" style="xsl/createDeleteRecordsOai.xsl" out="./output/${name}_deleted_${DSTAMP}.xml">
          <classpath path="lib/saxon9he.jar"/>
        </xslt>
        <move file="${copyAndCommitIdentifierFile.out}" tofile="./${copyAndCommitIdentifierFile.identifier}"/>        
      </target>  
    
DivideAndPackageResults tar inn marcus2Oria output-fil, lengden i byte tas også inn som parameter, og xsl-stilark returnerer flere outputfiler basert på lengden til input fil. Output filer pakkes så ned, og output mappe for pnx slettes.

        <target name="DivideAndPackageResults" depends="">        
          <length file="${transformMarcus2oria.out}" property="pnx.length"/>
          <echo message="${pnx.length}"/>        
          <xslt in="${transformMarcus2oria.out}" style="xsl/divideRecordsToChunks.xsl" out="${dummy.out}" force="yes">
            <param name="file-size-in-bytes" expression="${pnx.length}"/>
            <classpath path="lib/saxon9he.jar"/>
            </xslt>
          <property name="archive" value="./output/${name}${DSTAMP}.tar.gz"/>
          <tar  basedir="output/pnx/"  destfile="${archive}" compression="gzip"/> 
          <delete dir="output/pnx/"/>       
        </target>
      
validateByRNG
      
      <target name="validateByRNG">
        <jing rngfile="schema/PNX.rng" >
          <fileset file="${transformMarcus2oria.out}"/>
          </jing>
      </target>
    
uploadToBibsys

              <target name="uploadToBibsys">
                <property file="properties/bibsys.properties"/>
                <scp  file="${archive}"  remotefile="${bibsys.user}:${bibsys.password}@${bibsys.host}:~/${archive}" trust="yes" />       
              </target>