PubMan Days Entwickler Workshop 2012

From MPDLMediaWiki
Jump to navigation Jump to search

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)