Franz-Josef Behr: GML-basierte Kodierung von Geodaten:  Einleitung | XML, SVG, CSS | GML | Definition von Objekten in GML | Zusammenfassung | Literatur

Grundlagen der GML-Schemadefinition

Die grundlegenden Elemente und Datentypen von GML3 sind in 33 XML-Schema-Dokumenten (Basisschemata) definiert. Für eine konkrete Anwendung muss davon ein anwendungsspezifisches Schema abgeleitet werden, d. h. eine formale Beschreibung aller für das Fachgebiet oder eine bestimmte Aufgabe relevanten Inhalte und Zusammenhänge erstellt werden (Düren / Riekert 2005). In einem solchen Anwendungsschema können, wie nachfolgend gezeigt, für eigene Geo-Objekte (Features) entsprechende Elemente und Eigenschaften definiert werden. Ein Beispiel für eine derartige Modellierung ist das AFIS-ALKIS-ATKIS-Anwendungsschema (Seifert 2005). Einen Leitfaden für die Modellierung von Fachinformationen im Kontext von ALKIS (vgl. Constantin 2005) bietet das AFIS-ALKIS-ATKIS-Koordinierungsgremium (AdV 2004); die Ausführungen dieses Beitrags beschränken sich jedoch auf GML.

Was verbirgt sich hinter einer Schemadefinition? Unterhalb des schema-Wurzelelements, das als Attribut den vorgesehenen Namensraum enthält (targetNamespace), wird die Struktur von Geo-Objekten in Form von Elementen deklariert. Dabei können vordefinierte, einfache Datentypen oder komplexe, selbst definierte Datentypen verwendet werden, Konzepte, wie sie seit Jahren bei objektorientierten Programmiersprachen bekannt sind.

Datentypen

Zu den einfachen, atomaren Datentypen in XML-Schema gehören unter anderem Zeichenketten (string), ganze und reelle Zahlen, Datums- und Zeitangaben (http://www.w3.org/TR/xmlschema-0/#CreatDt). Das folgende Element wird zum Beispiel mit dem Namen RW_OL deklariert und ist vom Datentyp double.

  <xs:element name="RW_UR" type="xsd:double"/>

Durch Facetten können Wertebereiche einfacher Datentypen eingeschränkt werden ("restriction"). Für den selbstdefinierten, ganzzahligen Typ objektArtType sind beispielsweise nur Werte 9401 - 9403 zulässig:

  <xs:simpleType name="objektArtType">
  <xs:restriction base="xs:integer">
  <xs:enumeration value="9401"/>
  <xs:enumeration value="9402"/>
  <xs:enumeration value="9403"/>
  </xs:restriction>
  </xs:simpleType>

Der Datentyp geometryType ist eigentlich vom Typ string, darf aber nur die drei definierten Werte annehmen:

  <xs:simpleType name="geometryType">
  <xs:restriction base="xs:string">
  <xs:enumeration value="Punkt"/>
  <xs:enumeration value="Linie"/>
  <xs:enumeration value="Flaeche"/>
  </xs:restriction>
  </xs:simpleType>

Aus einfachen Typen können komplexe Typen zusammengestellt werden, die ebenfalls wieder in anderen, komplexen Datentypen enthalten sein könnten. Der Datentyp BlattschnittType beispielweise verfügt über vier Eigenschaften, die die linke untere sowie die rechte obere Ecke eines Kartenblatts beschreiben; das fünfte Attribut FK_Name ist für die Kartenblattbezeichnung vorgesehen.

  <xs:complexType name="BlattschnittType">
  <xs:sequence>
  <xs:element name="RW_UL" type="xsd:double"/>
  <xs:element name="HW_UL" type="xsd:double"/>
  <xs:element name="RW_OR" type="xsd:double"/>
  <xs:element name="HW_OR" type="xsd:double"/>
  <xs:element name="FK_Name" type="xsd:string"/>
  </xs:sequence>
  </xs:complexType>

Abgeleitete Typen

Eigene Typen können von vordefinierten Typen durch Erweiterung oder sogenannte Äquivalenzklassen abgeleitet werden, eine Vorgehensweise, die bei GML sehr häufig zum Einsatz kommt.

Im folgenden Beispiel erweitert ("extension") der Datentyp BahnhofType den abstrakten Typ AbstractFeatureType des gml-Namensraums um die Eigenschaften tkn und centerOf.

  <xs:complexType name="BahnhofType">
  <xs:complexContent>
  <xs:extension base="gml:AbstractFeatureType">
  <xs:sequence>
  <xs:element name="tkn" type="xs:string">
  <xs:element ref="gml:centerOf"/>
  </xs:sequence>
  </xs:extension>
  </xs:complexContent>
  </xs:complexType>

Bei Äquivalenzklassen können Elemente der im substitutionGroup-Attribut spezifizierten Gruppe im abgeleiteten Typ ersetzt werden. Dies entspricht der Polymorphie-Eigenschaft objektorientierter Programmiersprachen (Kolbe 2004). Im nachfolgenden Beispiel wird ein Element TouristischeRouten vom Typ TouristischeRoutenType deklariert. Somit kann das Element aufgrund der substitutionGroup-Angabe immer auch dort auftreten, wo _FeatureCollection genutzt werden kann.


<xs:element name="TouristischeRouten" type="tkfd:TouristischeRoutenType" substitutionGroup="gml:_FeatureCollection" />


Elemente

Für die Deklaration von Elementen sind drei Varianten möglich (vgl. Kolbe 2004):

Mittels sequence deklarierte Inhaltselemente müssen in der vorgegebenen Reihenfolge im Instanzdokument vorkommen.

Daneben stehen noch zwei weitere Methoden zur Verfügung: Bei einer Deklaration mittels choice muss genau eine der Alternativen im Instanzdokument auftreten. Mittels group werden Gruppen deklariert, die über ihren Namen in Deklarationen eingefügt werden können.

Die Häufigkeit des Auftretens eines Elements kann durch die beiden Attribute minOccurs und maxOccurs festgelegt werden:

  <xs:element ref="tkfd:Bahnhof" minOccurs="0" maxOccurs="unbounded"/>

Ein Beispiel

Die Struktur eines Features BadeseeBadeplatz wird mittels XML-Schema festgelegt. Es ergibt sich folgende Schemadefinition:

  <xs:element name="BadeseeBadeplatz" type="tkfd:BadeseeBadeplatzType" substitutionGroup="gml:_Feature"/>
  <xs:complexType name="BadeseeBadeplatzType">
  <xs:complexContent>
  <xs:extension base="gml:AbstractFeatureType">
  <xs:sequence>
  <xs:element name="objektArt" type="tkfd:objektArtType">
  </xs:element>
  <xs:element name="tkn" type="xs:string">
  </xs:element>
  <xs:element ref="gml:centerOf"/>
  </xs:sequence>
  </xs:extension>
  </xs:complexContent>
  </xs:complexType>

Diese Definition umfasst zwei Teile:

In der Elementdeklaration wird durch den Wert gml:_Feature des Attributs substitutionGroup deutlich gemacht, dass es sich um die Deklaration eines Features handelt. Mit anderen Worten: Unser Datentyp BadeseeBadeplatzType leitet sich vom abstrakten Datentyp AbstractFeatureType ab, der allgemeine Eigenschaften für Features in GML beinhaltet. gml:_Feature ist ein Element dieses Datentyps.


Valid XHTML 1.0! Check valid XHTML
[ Sponsored Links ]