OpenSource GeoNetwork bietet als Metadatenkatalog eine OGC konforme CSW 2.0.2 Schnittstelle an. Der folgende Artikel soll die technischen Hintergründe der Schnittstelle von GeoNetwork erläutern und dabei helfen etwaige Probleme bei der Metadatenrecherche nachvollziehen zu können.
GetCapabilities-Aufruf – Metadaten der Metadatenschnittstelle
http://localhost:8080/geonetwork/srv/en/csw?service=CSW&version=2.0.2&request=GetCapabilities
Queryables – Wonach kann man Suchen?
Sämtliche Attribute nach denen gesucht werden kann, sind im Capabilities-Dokument aufgeführt. Hier wird zwischen „SupportedISOQueryables“ (ISO-Suchattribute) und „AdditionalQueryables“ (Zusätzliche-Suchattribute) unterschieden.
<ows:Constraint name="SupportedISOQueryables"> <!-- Verkürztes Beispiel --> <ows:Value>Operation</ows:Value> <ows:Value>Format</ows:Value> <ows:Value>OrganisationName</ows:Value> <ows:Value>Type</ows:Value> <ows:Value>ServiceType</ows:Value> <ows:Value>AnyText</ows:Value> </ows:Constraint>
GetRecords-Operation – Erstellung von Suchanfragen
Mit der GetRecords-Anfrage kann eine Suche über mehrere Filter ausgeführt werden.
Beispiel 1: Volltextsuche (Filter: AnyText) nach „Flurkarte“ (komplette ISO Ausgabe)
<?xml version="1.0" encoding="UTF-8"?>
<GetRecords
xmlns="http://www.opengis.net/cat/csw/2.0.2"
xmlns:csw="http://www.opengis.net/cat/csw/2.0.2"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:ows="http://www.opengis.net/ows"
xmlns:dct="http://purl.org/dc/terms/"
xmlns:gml="http://www.opengis.net/gml"
xmlns:gmd="http://www.isotc211.org/2005/gmd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
service="CSW"
version="2.0.2"
maxRecords="50"
startPosition="1"
resultType="results"
outputFormat="application/xml"
outputSchema="csw:IsoRecord"
xsi:schemaLocation="http://www.opengis.net/cat/csw/2.0.2 http://schemas.opengis.net/csw/2.0.2/CSW-discovery.xsd">
<Query typeNames="gmd:MD_Metadata">
<ElementSetName typeNames="csw:IsoRecord">full</ElementSetName>
<Constraint version="1.1.0">
<ogc:Filter>
<ogc:PropertyIsLike escapeChar="\" singleChar="?" wildCard="*">
<ogc:PropertyName>any</ogc:PropertyName>
<ogc:Literal>*Flurkarte*</ogc:Literal>
</ogc:PropertyIsLike>
</ogc:Filter>
</Constraint>
</Query>
</GetRecords>
Beispiel 2: Volltextsuche (Filter: AnyText) nach „Flurkarte“ und räumliche Einschränkung auf Bayern (komplette ISO Ausgabe)
<?xml version="1.0" encoding="UTF-8"?>
<GetRecords
xmlns="http://www.opengis.net/cat/csw/2.0.2"
xmlns:csw="http://www.opengis.net/cat/csw/2.0.2"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:ows="http://www.opengis.net/ows"
xmlns:dct="http://purl.org/dc/terms/"
xmlns:gml="http://www.opengis.net/gml"
xmlns:gmd="http://www.isotc211.org/2005/gmd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
service="CSW"
version="2.0.2"
maxRecords="50"
startPosition="1"
resultType="results"
outputFormat="application/xml"
outputSchema="csw:IsoRecord"
xsi:schemaLocation="http://www.opengis.net/cat/csw/2.0.2 http://schemas.opengis.net/csw/2.0.2/CSW-discovery.xsd">
<Query typeNames="gmd:MD_Metadata">
<ElementSetName typeNames="csw:IsoRecord">full</ElementSetName>
<Constraint version="1.1.0">
<ogc:Filter>
<ogc:And>
<ogc:PropertyIsLike escapeChar="\" singleChar="?" wildCard="*">
<ogc:PropertyName>any</ogc:PropertyName>
<ogc:Literal>*Flurkarte*</ogc:Literal>
</ogc:PropertyIsLike>
<ogc:Contains>
<ogc:PropertyName>iso:BoundingBox</ogc:PropertyName>
<gml:Envelope>
<gml:lowerCorner>9.2 48</gml:lowerCorner>
<gml:upperCorner>13.2 50</gml:upperCorner>
</gml:Envelope>
</ogc:Contains>
</ogc:And>
</ogc:Filter>
</Constraint>
</Query>
</GetRecords>
Als Antwort auf den GetRecords-Request liefert der Server die Trefferliste in Form einer GetRecords-Response.
Zum einfachen Erproben von CSW-Requests bietet sich das „CSW ISO Test-Interface“ an, welches mit folgender URL direkt aufgerufen werden kann:
http://localhost:8080/geonetwork/srv/en/test.csw
Funktionsweise der Schnittstelle
GeoNetwork legt beim Import die Metadaten ( ISO19139 ) als vollständige XML-Datei in einer Datenbank-Zelle ab und greift bei der Suche auf eine spezielle Such-Maschine zurück: Apache-Lucene
Apache Lucene ist eine leistungsfähige OpenSource Java-Library zum Implementieren von Suchmöglichkeiten in die unterschiedlichsten Anwendungen.
In Lucene können so genannte Dokumente (in diesem Fall die Metadaten) in Felder zerlegt werden, auf die wiederum Suchen („Queries“) ausgeführt werden. Ein 5-Minuten Beispiel, welches die Funktionsweise von Lucene zeigt ist hier zu finden.
Grundsätzlich kann GeoNetwork also nach allen Eigenschaften filtern, die als Feld im Lucene-Index vorhanden sind. Dieser binäre Index ist unter folgendem Pfad zu finden:
/geonetwork/WEB-INF/lucene/nonspatial
Das Mapping zwischen den oben beschrieben CSW-Queryables und den Feldern im Lucene-Index erfolgt über die Datei:
/geonetwork/WEB-INF/config-csw.xml
Beispielsweise ist das Queryable „Identifier“ (vgl. GetRecord Beispiel) mit dem Lucene-Feld „fileId“ verknüpft.
<parameter name="Identifier"
field="fileId" type="SupportedISOQueryables" />
Die einfachste Art eine Suche nachzuvollziehen, ist ein direkter Blick in den Lucene-Index mit dem OpenSource Programm Luke.
Luke ermöglicht es u. a. den Inhalt von einzelnen Lucene-Feldern zu betrachten (siehe Screenshot – „fileId“), um prüfen zu können, ob die eigenen Metadaten (ISO19139) korrekt indexiert wurden.
In der aktuellen Version von GeoNetwork (2.4.3) kommt es zu Problemen mit der Großschreibung von einigen Begriffen (siehe Fehlermeldung). Dieser Fehler wird jedoch in der in wenigen Wochen erscheinenden Version 2.6.0 behoben sein.
Weblinks
- ISO 19115, ISO 19119, ISO 19139
- OGC Catalog Service Web (CSW 2.0.2)
- OpenSource GeoNetwork / GeoNetwork Mailing-Liste
- Deutschsprachige Mailing-Liste Metadaten (FOSSGIS)
Für Fragen oder Anregungen bitte die Kommentarfunktion benutzen!
