PubMan Days Entwickler Workshop 2012
Datenmigration in PubMan[edit]
Folien: File:PubMan Days 2012 Developer Workshop.pdf
Beispiel: Vom Excel-File zum (CoNE-)RDF[edit]
Excel-Vorlage: File:CoNE sample.xls
Voraussetzung ist, dass auf dem Server bereits die OU-Struktur angelegt wurde!
- Excel-Datei als XML-Kalkulationstabelle speichern
- Transformation mittels excel2conerdf.xsl-Stylesheet. (Auf die richtigen Parameter, wie z.B. Server achten)
- Enstandenes RDF enthält die Personen aus dem Excel-File verknüpft mit den OUs von unserem Server (sofern die Namen korrekt in der OU-Struktur vorhanden waren).
- Dieses RDF lässt sich nun einfach in CoNE importieren
Beispiel: Properties anpassen[edit]
Importspezifische Konfigurationen werden aus der zugehörigen Java-Klasse automatisch ausgelesen, sofern diese eine getConfiguration()-Methode definiert. Die Konfiguration selbst ist in einer Property-File, die von der Transformation entsprechend ausgelesen, und der XSL-Transformation dann entsprechend den Nutzeraktionen als Parameter übergeben wird.
Wir passen also lediglich das Property-File der Transformation an. In unserem Fall also die [endnote.properties].
- endnote.properties-File vor den Änderungen:
configuration=Flavor=OTHER,CoNE=true
Flavor=ICE,BGC,OTHER
CoNE=true,false
- endnote.properties-File nach den Änderungen:
configuration=Flavor=OTHER,CoNE=true,Organisation=OTHER
Flavor=ICE,BGC,OTHER
CoNE=true,false
Organisation=MeineOU,OTHER
Die oberste Zeile definiert dabei die Default-Werte. Die restlichen Zeilen sind die Werte, welche die jeweilige Option annehmen kann
Beispiel: Import - Authorenabfrage[edit]
Endnote Testfile: File:Endnote sample.txt
- Um eine CoNE-Authorenabfrage speziell für unsere OU einzubinden müssen wir eine Verzweigung in das XSL-Stylesheet einbauen, die den Parameter Organisation auswertet und dann dementsprechen weiter vorgeht
- Zuerst den Parameter übernehmen, den wir übergeben
<xsl:param name="Organisation" select="''"/>
- Dann die Verzweigung in das Template createPerson einbauen (Die [Util-Klasse] bietet hier bereits einige Möglichkeiten für CoNE-Abfragen an)
<xsl:otherwise>
<xsl:choose>
<xsl:when test="$Organisation = 'MeineOU'">
<xsl:variable name="cone-creator" select=""Util:queryConeExact('persons', concat($person/familyname, ', ', $person/givenname), 'MeineOU')""/>
<xsl:variable name="multiplePersonsFound" select="exists($cone-creator/cone/rdf:RDF/rdf:Description[@rdf:about != preceding-sibling::attribute/@rdf:about])"/>
<xsl:if test="$multiplePersonsFound">
<xsl:value-of select="error(QName('http://www.escidoc.de', 'err:MultipleCreatorsFound' ), concat('There is more than one CoNE entry matching -', concat($person/familyname, ', ', $person/givenname), '-'))"/>
</xsl:if>
<xsl:element name="person:person">
<xsl:element name="eterms:family-name">
<xsl:value-of select="$person/familyname"/>
</xsl:element>
<xsl:element name="eterms:given-name">
<xsl:value-of select="$person/givenname"/>
</xsl:element>
<xsl:choose>
<xsl:when test="exists($cone-creator/cone/rdf:RDF/rdf:Description/esc:position)">
<xsl:for-each select="$cone-creator/cone/rdf:RDF[1]/rdf:Description/esc:position">
<organization:organization>
<dc:title>
<xsl:value-of select="rdf:Description/eprints:affiliatedInstitution"/>
</dc:title>
<dc:identifier>
<xsl:value-of select="rdf:Description/dc:identifier"/>
</dc:identifier>
</organization:organization>
</xsl:for-each>
</xsl:when>
<xsl:when test="not($isSource)">
<organization:organization>
<dc:title>Max Planck Society</dc:title>
<dc:identifier>
<xsl:value-of select="$root-ou"/>
</dc:identifier>
</organization:organization>
</xsl:when>
</xsl:choose>
<xsl:choose>
<xsl:when test="exists($cone-creator/cone/rdf:RDF/rdf:Description)">
<dc:identifier xsi:type="CONE">
<xsl:value-of select="$cone-creator/cone/rdf:RDF[1]/rdf:Description[1]/@rdf:about"/>
</dc:identifier>
</xsl:when>
</xsl:choose>
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="cone-creator" select="Util:queryCone('persons', concat($person/familyname, ', ', $person/givenname))"/>
<xsl:variable name="multiplePersonsFound" select="exists($cone-creator/cone/rdf:RDF/rdf:Description[@rdf:about != preceding-sibling::attribute/@rdf:about])"/>
<xsl:if test="$multiplePersonsFound">
<xsl:value-of select="error(QName('http://www.escidoc.de', 'err:MultipleCreatorsFound' ), concat('There is more than one CoNE entry matching -', concat($person/familyname, ', ', $person/givenname), '-'))"/>
</xsl:if>
<xsl:element name="person:person">
<xsl:element name="eterms:family-name">
<xsl:value-of select="$person/familyname"/>
</xsl:element>
<xsl:element name="eterms:given-name">
<xsl:value-of select="$person/givenname"/>
</xsl:element>
<xsl:choose>
<xsl:when test="exists($cone-creator/cone/rdf:RDF/rdf:Description/esc:position)">
<xsl:for-each select="$cone-creator/cone/rdf:RDF[1]/rdf:Description/esc:position">
<organization:organization>
<dc:title>
<xsl:value-of select="rdf:Description/eprints:affiliatedInstitution"/>
</dc:title>
<dc:identifier>
<xsl:value-of select="rdf:Description/dc:identifier"/>
</dc:identifier>
</organization:organization>
</xsl:for-each>
</xsl:when>
<xsl:when test="not($isSource)">
<organization:organization>
<dc:title>Max Planck Society</dc:title>
<dc:identifier>
<xsl:value-of select="$root-ou"/>
</dc:identifier>
</organization:organization>
</xsl:when>
</xsl:choose>
<xsl:choose>
<xsl:when test="exists($cone-creator/cone/rdf:RDF/rdf:Description)">
<dc:identifier xsi:type="CONE">
<xsl:value-of select="$cone-creator/cone/rdf:RDF[1]/rdf:Description[1]/@rdf:about"/>
</dc:identifier>
</xsl:when>
</xsl:choose>
</xsl:element>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
- Nun können wir dast Testfile importieren und die Authoren werden nur mit CoNE-Einträgen verlichen, die unserer OU zugeordnet sind. (Wir müssen lediglich beachten bei der Konfiguration unsere MeineOU als Organisation anzugeben)