JHS 193 Unik identifierare för geografisk information

Bilaga 2. Exempel på teknisk realisering av URI-tjänst hos dataleverantör

  • Version: 1.0
  • Publicerad: 2.9.2015
  • Giltighetstid: tills vidare

    1 Inledning

I denna bilaga beskrivs det tekniska genomförandet för en URI-tjänst som ger svar i enlighet med den svarspraxis som definieras i rekommendationen. De tekniska lösningar som används för genomförandet är bara exempel. Det är möjligt att realisera en tjänst som producerar svar enligt svarspraxisen även på många andra sätt. Kända alternativa realiseringssätt nämns i texten.

De identifierare som tilldelats geografiska informationsobjekt, fysiska objekt och begrepp enligt rekommendationen återfinns under domänen paikkatiedot.fi. Paikkatiedot.fi fungerar som en nationell omdirigeringstjänst för URI-identifierare för geodataobjekt och styr inkommande begäran vidare till dataleverantörens URI-tjänst.

Begäran gällande URI-identifierare bör omdirigeras till en URI-tjänst som dataleverantören tillhandahåller och vars svar överensstämmer med den svarspraxis som definieras i rekommendationen. Den webbadress (dokumentationens identifierare "doc", rekommendationens avsnitt 9.1.4) dit en förfrågan gällande ett geografiskt informationsobjekt, ett fysiskt objekt eller ett begrepp omdirigeras är allmänt på på formen

http://{domännamn}/doc/{materialidentifierare}/{lokal identifierare}[/{versionskod}]

    2 Funktionsprincip och svarspraxis för URI-tjänsten

Image1

Omdirigeringstjänsten Paikkatiedot.fi styr begäran som riktar sig till ett geografiskt informationsobjekt, ett fysiskt objekt eller ett begrepp till dataleverantörens URI-tjänst. URI-tjänsten returnerar den dokumentation som hör samman med det geografiska informationsobjektet, det fysiska objektet eller begreppet. I denna exempelrealisering presenteras dokumentationen i formatet RDF/XML.

Dokumentationen innehåller hänvisningar

  • till det geografiska informationsobjekt, fysiska objekt eller begrepp som dokumenterats
  • om dokumentationen gäller dataobjekt (geodataobjekt eller begrepp), till ifrågavarande dataobjekts olika visualiseringsformer (GML, JSON etc.)
  • i mån av möjlighet
  • till det fysiska objekt som motsvarar geodataobjektet.
  • till begrepp som beskriver geodataobjektet eller det fysiska objektet
  • andra geodataobjekt, fysiska objekt, begrepp eller annan dokumentation (bilder, texter o.s.v. som har samband med det dokumenterade geodataobjektet eller fysiska objektet.

I denna exempelrealisering styr URI-tjänsten förfrågningar till geodataobjektens visualiseringsformer till en Web Feature Service-tjänst som returnerar objektens data i önskat koordinatsystem och format. Geodataobjektets olika visualiseringsformer anges på formen:

http://{domännamn}/doc/{materialidentifierare}/{lokal identifierare}/{koordinatsystem}.{format}

till exempel

http://{domännamn}/doc/{materialidentifierare}/{lokal identifierare}/EPSG:3087.gml2

En mera detaljerad beskrivning av strukturen för det RDF-data som URI-tjänsten returnerar presenteras i kapitel 5. I kapitel 6.3 presenteras ett exempel på RDF-data som överensstämmer med denna strukturbeskrivning.

    3 Tekniska krav

För att realisera URI-tjänsten i detta exempel har följande tekniker använts:

  • Apache HTTP-server
  • Apache Jena Fuseki RDF-server

Driftsättningen av Apache HTTP- och Apache Jena Fuseki-servrar behandlas inte i denna bilaga, utan detta presenteras på produkternas egna webbplatser.

Apache Jena Fuseki-serverprogramvaran följer standarden SPARQL 1.1 så den kan ersättas med vilken som helst programvara som följer samma standard.

    4 Genomförandefaser för en URI-tjänst

Nedan presenteras ett exempel på stegvis realisering av en URI-tjänst. Alla filer som används i genomförandet presenteras i kapitel 6.

  1. Ett SPARQL update-uttryck som innehåller dokumentation i anslutning till geodataobjekten skapas i enlighet med RDF-schemat i kapitel 5. Uttrycket kan skapas med XSLT-konvertering av det GML-dokument som WSF:s GetFeature objektdatafråga returnerar. Det finns bra färdiga tillämpningar på nätet för att definiera och utföra konverteringen. Den XSLT-konverteringsfil som används i exempelrealiseringen återfinns i kapitel 6.1. Om geodatamaterialet finns tillgängligt i realtid i en databas och man vill undvika hanteringen av (möjligen stora) GML-dokument, kan SPARQL update-uttrycket alternativt skapas med hjälp av ett lämpligt script direkt ur databasen.
  2. Dokumentionen som hör ihop med geodataobjekten laddas upp till Apache Jena Fuseks RDF-databas med det SPARQL update-uttryck som skapades i punkt 1. Som ett alternativt sätt i punkt 1 kan GML-dokumentet (eller databasens innehåll) också konverteras (med XSLT-konvertering eller annat script) direkt till RDF/XML-format och därefter laddas upp i RDF-databasen med SPARQL LOAD-uttrycket.
  3. En SPARQLförfrågan till Apache Jena Fuseks databas skapas enligt kapitel 6.2. Frågan returnerar data enligt det RDF-schema som definieras i kapitel 5, ett exempel på detta finns i kapitel 6.3. För publicering av RDF-data kan alternativt också några hjälpverktyg användas som till exempel Pubby (https://github.com/cygri/pubby) eller Elda (https://github.com/epimorphics/elda).
  4. En .htaccess-fil som syns på nätet skapas i Apache HTTP-servern. I kapitel 6.4 ges ett exempel på en Apache .htaccess-omdirigeringsfil med förklaringar.

Obs! Detta är en exempelrealisering som är gjord i en viss miljö. Utöver dessa faser kan man bli tvungen att göra flera tekniska konfigurationer beroende på den befintliga servermiljön och nätinfrastrukturen.

    5 Strukturbeskrivning för RDF-data som URI-tjänsten returnerar

I nedanstående tabell visas strukturen för det data i RDF-format som URI-tjänsten returnerar. Ett exempel på RDF-svar enligt beskrivningen visas i kapitel 6.3.

Klass

Egenskap

Egenskapens värdeområde

Repetetivitet

Beskrivning

jhs:Doc

Dokumentation kopplad till resurs

jhs:so

Identifierare för geografiskt informationsobjekt

0–1

Om den dokumenterade resursen är ett geodataobjekt, en referens till det geodataobjekt som dokumentationen gäller

jhs:id

Identifierare för fysiskt objekt

0–1

Referens till det fysiska objekt som det dokumenterade geodataobjektet modellerar.

dct:hasFormat

jhs:Data

1–n

Visualiseringsformer som är tillgängliga för resursen

dct:subject

Identifierare för begrepp

0–n

Referens till begrepp som beskriver resursen

rdfs:seeAlso

Ytterligare information som gäller objekt eller begrepp

0–n

Referens till exempelvis geodataobjekt som modellerar samma fysiska objekt

jhs:Data

Resursens visualiseringsform

jhs:CRS

Visualiseringsformens koordinatsystem

0–1

EPSG-koden för visualiseringsformens koordinatsystem (endast geodataobjekt)

dc:format

Visuliseringsformens format

1

Visualiseringsformens MIME-typ

jhs:so

Identifierare för geografiskt informationsobjekt

0–1

Referens till det geodataobjekt som ska visas

jhs:def

Identifierare för begrepp

0–1

Referens till det geodatabegrepp som ska visas

Tabell 1. Strukturbeskrivning för RDF-data som URI-tjänsten returnerar.

jhs: http://paikkatiedot.fi/jhs-skeema#

dc: http://purl.org/dc/elements/1.1/

dct: http://purl.org/dc/terms/

Leverantören av URI-tjänsten kan fritt tillämpa ovan definierade RDF-struktur till exempel genom att utvidga det med sina egna element. Sådana kan vara till exempel olika slags länkningar till andra dataobjekt. Även datainnehållet i ett geodataobjekt eller begrepp kan inkluderas som en del av RDF-dokumentationen.

    6 Exempelfiler

      6.1 XSLT-konverteringsfil

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:tampere_ora="http://www.navici.com/ns/tampere_ora" xmlns:gml="http://www.opengis.net/gml" >

<xsl:output method="text" indent="yes"/>

<xsl:template match="/">

PREFIX rdf: &lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&gt;
PREFIX rdfs: &lt;http://www.w3.org/2000/01/rdf-schema#&gt;
PREFIX dc: &lt;http://purl.org/dc/elements/1.1/&gt;
PREFIX jhs: &lt;http://paikkatiedot.fi/jhs-skeema#&gt;

<!-- Ett SPARQL INSERT-uttryck skapas. I INSERT-uttrycket anges RDF-tripletterna i Turtle-format. -->

INSERT DATA {

<xsl:for-each select="//tampere_ora:1000358_WB">

<!-- Dokumentation gällande geodataobjekt -->

&lt;http://kartat.tampere.fi/uri/doc/1000358/<xsl:value-of select="tampere_ora:TUNNISTE"/>&gt; rdf:type jhs:Doc;
jhs:so &lt;http://paikkatiedot.fi/so/1000358/<xsl:value-of select="tampere_ora:TUNNISTE"/>&gt;;
jhs:id &lt;http://paikkatiedot.fi/id/1000040/<xsl:value-of select="tampere_ora:DIGIROAD_ID"/>&gt;;
rdfs:seeAlso &lt;http://paikkatiedot.fi/so/1000040/<xsl:value-of select="tampere_ora:DIGIROAD_ID"/>&gt;;
dct:hasFormat &lt;http://kartat.tampere.fi/uri/doc/1000358/<xsl:value-of select="tampere_ora:TUNNISTE"/>/EPSG:3067.json&gt;;
dct:hasFormat &lt;http://kartat.tampere.fi/uri/doc/1000358/<xsl:value-of select="tampere_ora:TUNNISTE"/>/EPSG:3067.gml2&gt;;
dct:hasFormat &lt;http://kartat.tampere.fi/uri/doc/1000358/<xsl:value-of select="tampere_ora:TUNNISTE"/>/EPSG:3878.json&gt;;
dct:hasFormat &lt;http://kartat.tampere.fi/uri/doc/1000358/<xsl:value-of select="tampere_ora:TUNNISTE"/>/EPSG:3878.gml2&gt;;
dct:subject &lt;http://www.yso.fi/onto/yso/p17892&gt;.

<!-- Geodataobjektets visualiseringsformer -->

&lt;http://kartat.tampere.fi/uri/doc/1000358/<xsl:value-of select="tampere_ora:TUNNISTE"/>/EPSG:3067.json&gt; rdf:type jhs:Data;
jhs:so &lt;http://paikkatiedot.fi/so/1000358/<xsl:value-of select="tampere_ora:TUNNISTE"/>&gt;;
jhs:CRS &lt;http://www.opengis.net/def/crs/EPSG/0/3067&gt;;
dc:format "application/json".

&lt;http://kartat.tampere.fi/uri/doc/1000358/<xsl:value-of select="tampere_ora:TUNNISTE"/>/EPSG:3067.gml2&gt; rdf:type jhs:Data;
jhs:so &lt;http://paikkatiedot.fi/so/1000358/<xsl:value-of select="tampere_ora:TUNNISTE"/>&gt;;
jhs:CRS &lt;http://www.opengis.net/def/crs/EPSG/0/3067&gt;;
dc:format "application/gml".

&lt;http://kartat.tampere.fi/uri/doc/1000358/<xsl:value-of select="tampere_ora:TUNNISTE"/>/EPSG:3878.json&gt; rdf:type jhs:Data;
jhs:so &lt;http://paikkatiedot.fi/so/1000358/<xsl:value-of select="tampere_ora:TUNNISTE"/>&gt;;
jhs:CRS &lt;http://www.opengis.net/def/crs/EPSG/0/3878&gt;;
dc:format "application/json".

&lt;http://kartat.tampere.fi/uri/doc/1000358/<xsl:value-of select="tampere_ora:TUNNISTE"/>/EPSG:3878.gml2&gt; rdf:type jhs:Data;
jhs:so &lt;http://paikkatiedot.fi/so/1000358/<xsl:value-of select="tampere_ora:TUNNISTE"/>&gt;;
jhs:CRS &lt;http://www.opengis.net/def/crs/EPSG/0/3878&gt;;
dc:format "application/gml".

</xsl:for-each>

}

</xsl:template>

</xsl:stylesheet>

      6.2 SPARQL-fråga

PREFIX rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
PREFIX rdfs: http://www.w3.org/2000/01/rdf-schema#
PREFIX dc: http://purl.org/dc/elements/1.1/
PREFIX jhs: <http://paikkatiedot.fi/jhs-skeema#>

CONSTRUCT {

<http://kartat.tampere.fi/uri/doc/1000358/0072> jhs:so ?so;
rdf:type ?a;
jhs:id ?h;
rdfs:seeAlso ?g;
dct:subject ?b;
dct:hasFormat ?c.
?c jhs:CRS ?d.
?c dc:format ?e.
?c rdf:type ?f
} WHERE
{
<http://kartat.tampere.fi/uri/doc/1000358/0072> jhs:so ?so;
rdf:type ?a;
jhs:id ?h;
rdfs:seeAlso ?g;
dct:subject ?b;
dct:hasFormat ?c.
?c jhs:CRS ?d.
?c dc:format ?e.
?c rdf:type ?f

}

      6.3 RDF-exempel

<rdf:RDF

xmlns:jhs="http://paikkatiedot.fi/jhs-skeema#"

xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"

xmlns:dc="http://purl.org/dc/elements/1.1/"

xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">

<jhs:Doc rdf:about="http://kartat.tampere.fi/uri/doc/1000358/6447">

<dct:hasFormat>

<jhs:Data rdf:about="http://kartat.tampere.fi/uri/doc/1000358/6447/EPSG:3067.json">

<dc:format>application/json</dc:format>

<jhs:CRS rdf:resource="http://www.opengis.net/def/crs/EPSG/0/3067"/>

</jhs:Data>

</dct:hasFormat>

<dct:hasFormat>

<jhs:Data rdf:about="http://kartat.tampere.fi/uri/doc/1000358/6447/EPSG:3067.gml2">

<dc:format>application/gml</dc:format>

<jhs:CRS rdf:resource="http://www.opengis.net/def/crs/EPSG/0/3067"/>

</jhs:Data>

</dct:hasFormat>

<dct:hasFormat>

<jhs:Data rdf:about="http://kartat.tampere.fi/uri/doc/1000358/6447/EPSG:3878.json">

<dc:format>application/json</dc:format>

<jhs:CRS rdf:resource="http://www.opengis.net/def/crs/EPSG/0/3878"/>

</jhs:Data>

</dct:hasFormat>

<dct:hasFormat>

<jhs:Data rdf:about="http://kartat.tampere.fi/uri/doc/1000358/6447/EPSG:3878.gml2">

<dc:format>application/gml</dc:format>

<jhs:CRS rdf:resource="http://www.opengis.net/def/crs/EPSG/0/3878"/>

</jhs:Data>

</dct:hasFormat>

<dct:subject rdf:resource="http://www.yso.fi/onto/yso/p17892"/>

<rdfs:seeAlso rdf:resource="http://paikkatiedot.fi/so/1000040/172353"/>

<jhs:id rdf:resource="http://paikkatiedot.fi/id/1000040/172353"/>

<jhs:so rdf:resource="http://paikkatiedot.fi/so/1000358/6447"/>

</jhs:Doc>

</rdf:RDF>

      6.4 Turtle-exempel

@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

@prefix jhs: <http://paikkatiedot.fi/jhs-skeema#> .

@prefix dc: <http://purl.org/dc/elements/1.1/> .

@prefix dct: <https://purl.org/dc/terms> .

@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .

<http://kartat.tampere.fi/uri/doc/1000358/6447>

rdf:type jhs:doc ;

jhs:id <http://paikkatiedot.fi/id/1000040/172353> ;

jhs:so <http://paikkatiedot.fi/so/1000358/6447> ;

dc:subject <http://www.yso.fi/onto/yso/p17892> ;

rdfs:seeAlso <http://paikkatiedot.fi/so/1000040/172353> ;

dct:hasFormat <http://kartat.tampere.fi/uri/doc/1000358/6447/EPSG:3067.gml2> ;

dct:hasFormat <http://kartat.tampere.fi/uri/doc/1000358/6447/EPSG:3067.json> .

<http://kartat.tampere.fi/uri/doc/1000358/6447/EPSG:3067.gml2>

rdf:type jhs:data ;

jhs:CRS <http://www.opengis.net/def/crs/EPSG/0/3067> ;

dc:format "application/gml" .

<http://kartat.tampere.fi/uri/doc/1000358/6447/EPSG:3067.json>

rdf:type jhs:data ;

jhs:CRS <http://www.opengis.net/def/crs/EPSG/0/3067> ;

dc:format "application/json" .

      6.5 Apache .htaccess-fil

<IfModule mod_rewrite.c>

RewriteEngine On

Rewritebase /uri/

# RewriteRule dirigerar om doc-sökvägskomponentens variabler ([a-zA-Z0-9]+)/([a-zA-Z0-9:]+).([a-zA-Z0-9]+) till wfs-objektfråga $1,$2,$3. Observera att RewriteRule ska stå på en rad, inte som visas nedan.

RewriteRule ^doc/1000358/([a-zA-Z0-9_]+)/([a-zA-Z0-9:]+).([a-zA-Z0-9]+)$ http://tampere.navici.com/tampere_wfs_geoserver/tampere_ora/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=tampere_ora:BUSSIPYSAKIT_WB&outputformat=$3&srsName=$2&Filter=<Filter><PropertyIsEqualTo><PropertyName>TUNNISTE</PropertyName><Literal>$1</Literal></PropertyIsEqualTo></Filter>

RewriteRule ^doc/1000359/([a-zA-Z0-9_]+)/([a-zA-Z0-9:]+).([a-zA-Z0-9]+)$ http://tampere.navici.com/tampere_wfs_geoserver/tampere_ora/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=tampere_ora:BUSSILINJAT&outputformat=$3&srsName=$2&Filter=<Filter><PropertyIsEqualTo><PropertyName>REITTI</PropertyName><Literal>$1</Literal></PropertyIsEqualTo></Filter>

RewriteRule ^doc/1000378/([a-zA-Z0-9_-]+)/([a-zA-Z0-9:]+).([a-zA-Z0-9]+)$ http://tampere.navici.com/tampere_wfs_geoserver/rakennukset/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=rakennukset:RAKENN_ST_FA_MVIEW&outputformat=$3&srsName=$2&Filter=<Filter><PropertyIsEqualTo><PropertyName>RAK_TUNNUS_FACTA</PropertyName><Literal>$1</Literal></PropertyIsEqualTo></Filter>

RewriteRule ^doc/1000040/([a-zA-Z0-9_-]+)/([a-zA-Z0-9:]+).([a-zA-Z0-9]+)$ https://extranet.liikennevirasto.fi/inspirepalvelu/maaliikenne_avoin/wfs?request=GetFeature&typeName=maaliikenne_avoin:bussipysakit&srsName=$2&Filter=<Filter><PropertyIsLike+wildCard="*"+singleChar=","+escapeChar="."><PropertyName>STOP_ID</PropertyName><Literal>$1</Literal></PropertyIsLike></Filter>&outputformat=$3

#RewriteRule dirigerar om doc-sökvägskomponentens variabel ([a-zA-Z0-9]+) till SPARQL-fråga $1. Observera att RewriteRule ska stå på en rad, inte som visas nedan.

RewriteRule ^doc/1000358/([a-zA-Z0-9_-]+)$ http://kartat.tampere.fi/fuseki/ds2/query?query=PREFIX+rdf:+<http://www.w3.org/1999/02/22-rdf-syntax-ns#>PREFIX+rdfs:+<http://www.w3.org/2000/01/rdf-schema#>PREFIX+dc:+<http://purl.org/dc/elements/1.1/>PREFIX+jhs:+<http://paikkatiedot.fi/jhs-skeema#>CONSTRUCT+{<http://kartat.tampere.fi/uri/doc/1000358/$1>+jhs:so+?jep;rdf:type+?f;jhs:id+?h;rdfs:seeAlso+?g;dct:subject+?a;dct:hasFormat+?b.?b+jhs:CRS+?c.?b+dc:format+?d.?b+rdf:type+?e}+WHERE{<http://kartat.tampere.fi/uri/doc/1000358/$1>+jhs:so+?jep;rdf:type+?f;jhs:id+?h;rdfs:seeAlso+?g;dct:subject+?a;dct:hasFormat+?b.?b+jhs:CRS+?c.?b+dc:format+?d.?b+rdf:type+?e}+&output=xml

RewriteRule ^doc/1000358/([a-zA-Z0-9_-]+)/$ http://kartat.tampere.fi/fuseki/ds2/query?query=PREFIX+rdf:+<http://www.w3.org/1999/02/22-rdf-syntax-ns#>PREFIX+rdfs:+<http://www.w3.org/2000/01/rdf-schema#>PREFIX+dc:+<http://purl.org/dc/elements/1.1/>PREFIX+jhs:+<http://paikkatiedot.fi/jhs-skeema#>CONSTRUCT+{<http://kartat.tampere.fi/uri/doc/1000358/$1>+jhs:so+?jep;rdf:type+?f;jhs:id+?h;rdfs:seeAlso+?g;dct:subject+?a;dct:hasFormat+?b.?b+jhs:CRS+?c.?b+dc:format+?d.?b+rdf:type+?e}+WHERE{<http://kartat.tampere.fi/uri/doc/1000358/$1>+jhs:so+?jep;rdf:type+?f;jhs:id+?h;rdfs:seeAlso+?g;dct:subject+?a;dct:hasFormat+?b.?b+jhs:CRS+?c.?b+dc:format+?d.?b+rdf:type+?e}+&output=xml

RewriteRule ^doc/1000040/([a-zA-Z0-9_-]+)$ http://kartat.tampere.fi/fuseki/ds2/query?query=PREFIX+rdf:+<http://www.w3.org/1999/02/22-rdf-syntax-ns#>PREFIX+rdfs:+<http://www.w3.org/2000/01/rdf-schema#>PREFIX+dc:+<http://purl.org/dc/elements/1.1/>PREFIX+jhs:+<http://paikkatiedot.fi/jhs-skeema#>CONSTRUCT+{<http://kartat.tampere.fi/uri/doc/1000040/$1>+jhs:so+?jep;rdf:type+?f;jhs:id+?h;rdfs:seeAlso+?g;dct:subject+?a;dct:hasFormat+?b.?b+jhs:CRS+?c.?b+dc:format+?d.?b+rdf:type+?e}+WHERE{<http://kartat.tampere.fi/uri/doc/1000040/$1>+jhs:so+?jep;rdf:type+?f;jhs:id+?h;rdfs:seeAlso+?g;dct:subject+?a;dct:hasFormat+?b.?b+jhs:CRS+?c.?b+dc:format+?d.?b+rdf:type+?e}+&output=xml

RewriteRule ^doc/1000040/([a-zA-Z0-9_-]+)/$ http://kartat.tampere.fi/fuseki/ds2/query?query=PREFIX+rdf:+<http://www.w3.org/1999/02/22-rdf-syntax-ns#>PREFIX+rdfs:+<http://www.w3.org/2000/01/rdf-schema#>PREFIX+dc:+<http://purl.org/dc/elements/1.1/>PREFIX+jhs:+<http://paikkatiedot.fi/jhs-skeema#>CONSTRUCT+{<http://kartat.tampere.fi/uri/doc/1000040/$1>+jhs:so+?jep;rdf:type+?f;jhs:id+?h;rdfs:seeAlso+?g;dct:subject+?a;dct:hasFormat+?b.?b+jhs:CRS+?c.?b+dc:format+?d.?b+rdf:type+?e}+WHERE{<http://kartat.tampere.fi/uri/doc/1000040/$1>+jhs:so+?jep;rdf:type+?f;jhs:id+?h;rdfs:seeAlso+?g;dct:subject+?a;dct:hasFormat+?b.?b+jhs:CRS+?c.?b+dc:format+?d.?b+rdf:type+?e}+&output=xml

</IfModule>