Funktionsweise der GeoNetwork CSW Schnittstelle

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.

Lucene - Index betrachten

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

Für Fragen oder Anregungen bitte die Kommentarfunktion benutzen!

4 Gedanken zu „Funktionsweise der GeoNetwork CSW Schnittstelle

  1. Hallo Jürgen,
    einen tollen Blog hast du hier. Dennoch glaube ich, dass nicht das gesamt XML abgelegt wird sondern nur der MD_Metadata-Tag.
    mit bestem Gruß und der bitte um weitere Blogbeiträge*G*
    Tim

    • Hi Tim,

      in der Zelle ‚data‘ ist jeweils das MD_Metadata-Element (inkl. vollständigem Content) xml-kodiert abgelegt.

      SELECT data from metadata LIMIT 1;

      MD_Metadata ist das Root-Element der ISO19139-XML-Dateien. Jede ISO19139-Metadatenbeschreibung ist somit komplett in einer Zelle gespeichert.

  2. Hi Jürgen,

    auch von mir den Kompliment, ein tolle Seite mit reichlich Informationen. Eine kurze Frage ich, kann man über den CSW-Srervice die Metadaten von anderen Geodienste (zB WFS) angezeigt bekommen?

Schreibe einen Kommentar zu Tim Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert