120 likes | 242 Views
Fedora Content Model en XSLT Fedora op Klompen, Amsterdam, 2008-01-20. Egbert Gramsbergen TU Delft Library / Digital Product Development e.f.gramsbergen@tudelft.nl. Motivatie. De meeste datastreams zijn xml De meeste disseminaties zijn x(ht)ml xml -> x(ht)ml : XSLT
E N D
Fedora Content Modelen XSLTFedora op Klompen, Amsterdam, 2008-01-20 Egbert GramsbergenTU Delft Library / Digital Product Developmente.f.gramsbergen@tudelft.nl
Motivatie • De meeste datastreams zijn xml • De meeste disseminaties zijn x(ht)ml • xml -> x(ht)ml : XSLT • Fedora heeft interne xslt service • Gebouwd met Saxon, ondersteunt xslt2.0 • XSLT zelf kan als datastream in Fedora object • Werkende disseminaties door enkele objecten,zonder programmeren
XSLT processing model XML parameters secundaire input documenten secundaire output documenten Voor Fedora context:relevantgewenstniet relevant extension:Java classes XML
Overige ingrediënten • Content Model Architecture (Fedora 3.x) • data object heeft alleen relatie met Content Model • alle gedrag (disseminaties) wordt van daaruit geregeld • RDF (RI index) • gevuld uit DC en RELS-EXT datastreams • RELS-EXT voor relaties tussen objecten • queries via REST API • REST API (API-A-LITE) • in: URI, uit: (meestal) xml • datastreams, disseminaties, queries • alles te gebruiken als secundair input document xslt
Toepassingen Van alles. Gewoon html genereren maar ook… • Navigatie tussen gerelateerde objecten • Aggregatie van content of metadata van gerelateerde objecten Bijvoorbeeld… • Een profiel van persoon verrijken met links naar zijn/haar artikelen en gegevens van zijn/haar organisatie • Datasets aanvullen met gegevens over apparaat, studie, lokatie, links naar gerelateerde datasets • “Jump-off” pagina’s maken voor collecties, instituten, hele repositories • “Dumbed-down” Dublin Core samenstellen voor OAI-MPH(+ namespace reparatie) • ORE Resource Maps genereren
Content Model Architecture welke datastreams? welke services? <= abstract (hieruit volgen URIs van disseminaties) Object RDF in RELS-EXT van vertrekpuntpijl <= implementie data object koppeling met web services, bijv. Saxon
URI’s in CMA • <host>/fedora/get/<PID>/<datastream> • <host>/fedora/get/<PID>/<SDef PID>/<method>[?params]Service Deployment komt hier niet in voor! • N.B. Alle relaties in CMA zijn n-n • Dus bijv: • n SDefs voor 1 Content Model • n SDeps voor 1 SDef(bijv. verschillend per Content Model) • n Content Models voor data object • TODO experiment:wat als zich meer SDeps aanbieden?
XSLT 2.0 vs. 1.0 XSLT 1.0 was goed in manipulatie van XML trees (nodesets) XSLT 2.0 voegt toe: • Text manupulatie • Regex, uri’s, date/time, allerlei extra functies • xPath 2.0 (ook basis van xQuery) • Sequences i.p.v. nodesets • Conditionals, iteratie , set operations • Multipass processing • Type system (gebaseerd op xml Schema) • Functies (toegang vanuit xPath) • Semi-gestructureerde data structureren • Multiple output docs • Standaard extensie mechanisme Resultaat: glijdende schaal van simpel template naar bijna complete (declaratieve) programmeertaal
Voorbeeld xslt fragment URI bakken voor query in RI index: <xsl:param name="itql-pars" select="'type=tuples&lang=itql&format=Sparql&query='"/> <xsl:param name="itql-template"> <![CDATA[ select$id $titlefrom <#ri> <= ITQL, een RDF query taaltje where $doc <dc:title> $title and $doc <dc:identifier> $id and $doc <dcterms:creator> <_> ]]> </xsl:param> <xsl:variable name="query" select="normalize-space(replace($itql-template,'_',$this))"/> <xsl:variable name="itql-uri" select="concat($local,'risearch?',$itql-pars,encode-for-uri($query))"/> en even verderop het resultaat verwerken: <ol> <xsl:for-each select="doc($itql-uri)//sparql:result"> <li><a href="{$fedora_get}{sparql:id}{$DC}"><xsl:value-of select="sparql:title"/></a></li> </xsl:for-each> </ol>
Wat nog ontbreekt XSLT parameters settenKan met Saxon, maar niet geïmplementeerd in service(feature request ingediend) Dus wat nog niet kan (bijv): • Query resultaten pagineren • Een lijst maken van leden van een collectie die tevens voldoen aan een bepaald Content Model • De schaal of range van een grafiek aanpassen En nog een foutje: MIME type (anders dan HTML) wordt genegeerd
3TU Datacentrum (ontwikkelsite) • Repository navigator • Dynamic DC