Das annotation-Element von W3C XML Schema

(Auszug aus "XML Schema" von Eric van der Vlist)

Die empfohlene Methode, einem W3C XML Schema Kommentare und Dokumentation hinzuzufügen, läuft über das Anmerkungselement xs:annotation. Dieses Element kann fast allen Elementen von W3C XML Schema hinzugefügt werden (tatsächlich allen mit Ausnahme von xs:annotation selbst und seinen Kindelementen, also xs:documentation und xs:appinfo). Im allgemeinen erscheint es als erstes Kindelement (außer bei dem Element xs:schema, bei dem xs:annotation überall auftreten kann).

Das Element xs:annotation ist ein Container für die Elemente xs:documentation und xs:appinfo, die zusätzliche Informationen enthalten. Diese beiden Elemente sind dazu gedacht, für Menschen lesbare Dokumentationen (xs:documentation) bzw. maschinell verarbeitbare Informationen (xs:appinfo) aufzunehmen. Sie akzeptieren beliebige Text- und Kindelemente. (Dies sind die einzigen Elemente von W3C XML Schema, die ein gemischtes Inhaltsmodell haben.) Das Schema für Schema legt fest, daß die Verarbeitung des Inhalts dieser Elemente lax sein soll. Elemente von W3C XML Schema können also in diesen Elementen enthalten sein; wenn sie es sind, müssen sie jedoch gültig laut dem Schema für Schema sein. Das gemischte Inhaltsmodell erlaubt die Einbindung von fast beliebigen Inhalten, also auch von Text:

<xs:element name="author" type="authorType">
   <xs:annotation>
      <xs:documentation xml:lang="en">The author of a book.</xs:documentation>
      <xs:documentation xml:lang="de">Der Autor eines Buches.</xs:documentation>
      <xs:documentation xml:lang="fr">Designe l'auteur d'un livre.</xs:documentation>
   </xs:annotation>
</xs:element>

Es erlaubt auch angereicherten Inhalt wie beispielsweise XHTML, der zusammengestellt werden kann, um benutzerfreundlichere und besser lesbare Dokumentation zu erzeugen:

<xs:element name="author" type="authorType">
   <xs:annotation>
      <xs:documentation xml:lang="de">
         <p id="author" xmlns="http://www.w3.org/1999/xhtml">Dieses Element beschreibt den <em>Autor</em> eines <a href="#book">Buches</a>.</p>
      </xs:documentation>
   </xs:annotation>
</xs:element>  

Es läßt sogar SVG zu wie in dem folgenden Beispiel, das ein Bild davon gibt, wie ein Autor aussehen mag:

<xs:element name="author" type="authorType">
   <xs:annotation>
      <xs:documentation>
         <svg xmlns="http://www.w3.org/2000/svg">
            <title>Ein Autor</title>
            <ellipse style="stroke:#000000;fill:#e3e000;stroke-width:2pt;" id="head" cx="280" cy="250" rx="110" ry="130"/>
            <ellipse style="stroke:none;fill:#7f7f7f;" id="leftEye" cx="240"cy="225" rx="18" ry="18"/>
            <ellipse style="stroke:none;fill:#7f7f7f;" id="rightEye" cx="320"cy="225" rx="18" ry="18"/>
            <path style="fill:none;stroke:#7F7F7F;stroke-width:5pt;" id="mouth"d="M 222 280 A 58 48 0 0 0 338 280"/>
         </svg>
      </xs:documentation>
   </xs:annotation>
</xs:element>

Dublin-Core-Elemente werden im Web weithin benutzt, um Webseiten zu charakterisieren. Sie werden von zahlreichen Anwendungen unterstützt und können als Allzweck-Metadaten in die Schema-Anmerkungen eingebettet werden:

<xs:element name="author" type="authorType">
   <xs:annotation>
      <xs:appinfo xmlns:dc="http://purl.org/dc/elements/1.1/">
         <dc:creator>Eric van der Vlist (mailto:vdv@dyomedea.com)</dc:creator>
         <dc:date>2002-02-01</dc:date>
         <dc:subject>Autor,Person,Buch</dc:subject>
         <dc:description>Dieses Element beschreibt den Autor eines Buches.</dc:description>
      </xs:appinfo>
   </xs:annotation>
</xs:element>

Anmerkungen sind auch gute Container für anwendungsspezifische Metadaten. Ein Beispiel hierfür gibt das Schema für Schema, das solche Metadaten zur Beschreibung der Liste von Facetten und Eigenschaften der primitiven Datentypen verwendet:

<xs:simpleType name="string" id="string">
   <xs:annotation>
      <xs:appinfo>
         <hfp:hasFacet name="length"/>
         <hfp:hasFacet name="minLength"/>
         <hfp:hasFacet name="maxLength"/>
         <hfp:hasFacet name="pattern"/>
         <hfp:hasFacet name="enumeration"/>
         <hfp:hasFacet name="whiteSpace"/>
         <hfp:hasProperty name="ordered" value="false"/>
         <hfp:hasProperty name="bounded" value="false"/>
         <hfp:hasProperty name="cardinality" value="countably infinite"/>
         <hfp:hasProperty name="numeric" value="false"/>
      </xs:appinfo>
      <xs:documentation source="http://www.w3.org/TR/xmlschema-2/#string"/>
   </xs:annotation>
   <xs:restriction base="xs:anySimpleType">
      <xs:whiteSpace value="preserve" id="string.preserve"/>
   </xs:restriction>
</xs:simpleType>

Das Schema Adjunct Framework (SAF) ist ein Vorschlag, wie Schemas um die Informationen ergänzt werden könnten, die zur Erzeugung von Anwendungen benötigt werden. Eine seiner Notationen, »Schema adornments« (»Schema-Ausschmückungen«), verwendet ebenfalls xs:appinfo; auch wenn diese Schreibweise noch nicht an die W3C XML Schema Recommendation angepaßt wurde, könnte sie ungefähr so aussehen (dies ist meine eigene inoffizielle Anpassung, die hier nur als Beispiel dient):

<xs:element name="author" type="authorType">
   <xs:annotation>
      <xs:appinfo source="saf:meta-data-item" xmlns:sql="http://www.extensibility.com/saf/spec/safsample/sql-map.saf">
         <sql:select>
            select
            <sql:elem>
               name
            </sql:elem>
            ,
            <sql:elem>
               birthdate
            </sql:elem>
            ,
            <sql:attr>
               deathdate
            </sql:attr>
            from tbl_author
         </sql:select>
      </xs:appinfo>
   </xs:annotation>
</xs:element>

SAF definiert zudem eine Schreibweise zur Einbettung von als XPath-Ausdrücke geschriebenen Regeln, was auch die Domäne von Schematron ist. Schematron-Regeln können in xs:appinfo-Elemente eingebettet und dazu verwendet werden, Bedingungen zu überprüfen, die W3C XML Schema nicht prüfen kann – beispielsweise um sicherzustellen, daß das Geburtsdatum einer Person nicht nach ihrem Sterbedatum liegt.

Wie kann dies funktionieren angesichts der Tatsache, daß XPath 1.0, auf das Schematron aufbaut, keine Datumsangaben interpretieren kann? Dies ist eine ziemlich gefährliche Vorgehensweise, aber unter der Annahme, daß die Datumsangaben vier Ziffern für das Jahr und stets dieselbe Zeitzone verwenden (wir haben unter Reguläre Ausdrücke zur Spezifikation einfacher Datentypen geklärt, wie wir dies mit Hilfe von Mustern vorschreiben können), funktioniert es, weil Datumsangaben nach ISO 8601 dann stets der alphabetischen Sortierreihenfolge unterliegen.

<xs:element name="author" type="authorType">
   <xs:annotation>
      <xs:appinfo xmlns:sch="http://www.ascc.net/xml/schematron">
         <sch:pattern name="Born before dead">
            <sch:rule context="author">
               <sch:assert test="not(dead) or (dead &gt; born)" diagnostics="bornAfterDead">Ein Autor sollte erst nach seiner Geburt sterben.</sch:assert>
               <sch:diagnostics>
                  <sch:diagnostic id="bornAfterDead">Fehler, dieser Autor wurde erst nach seinem Tod geboren! Autor = <sch:value-of select="name"/> Geburt = <sch:value-of select="born"/> Tod = <sch:value-of select="dead"/></sch:diagnostic>
               </sch:diagnostics>
            </sch:rule>
         </sch:pattern>
      </xs:appinfo>
   </xs:annotation>
</xs:element>
                            

Auch wenn es keine gängige Praxis ist, ist es ebenfalls möglich, Codestücke wie dieses XSLT-Template zu verwenden:

<xs:element name="book" type="bookType">
   <xs:annotation>
      <xs:appinfo xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
         <xsl:template match="book">
            <xsl:apply-templates select="title"/>
            <xsl:apply-templates select="isbn"/>
            <p>Autoren:</p>
            <ul>
               <xsl:apply-templates select="author"/>
            </ul>
            <p>Figuren:</p>
            <ul>
               <xsl:apply-templates select="character"/>
            </ul>
         </xsl:template>
      </xs:appinfo>
   </xs:annotation>
</xs:element>

Statt Ressourcen einzubetten, können sie auch mit Hilfe von XLink verknüpft werden. RDDL, ein Vokabular, das auf die Beschreibung von Namensräumen ausgerichtet ist, kann von seinem ursprünglichen Ziel umgelenkt werden und das Fehlende liefern, um diese Links auszudrücken:

<xs:element name="author" type="authorType">
   <xs:annotation>
      <xs:appinfo xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:rddl="http://www.rddl.org/">
         <rddl:resource id="author-transform" xlink:arcrole="http://www.w3.org/1999/xhtml" xlink:role="http://www.w3.org/1999/XSL/Transform" xlink:title="Author template" xlink:href="library.xslt#author">
            <div class="resource">
               <h4>XSLT-Transformation</h4>
               <p>Dieses <a href="library.xslt#author">Template</a> zeigt die Beschreibung eines Autors an.</p>
            </div>
         </rddl:resource>
         <rddl:resource id="CSS" xlink:title="CSS Stylesheet" xlink:role="http://www.isi.edu/in-notes/iana/assignments/media-types/text/css" xlink:href="author.css">
            <div class="resource">
               <h4>CSS-Stylesheet</h4>
               <p>Ein <a href="author.css">CSS-Stylesheet</a>, das die Stile definiert, die zur Anzeige eines Autors verwendet werden können.</p>
            </div>
         </rddl:resource>
      </xs:appinfo>
   </xs:annotation>
</xs:element>     

RDDL spricht sich wie »riddle« aus.

Sowohl xs:documentation als auch Beschreibung akzeptieren ein optionales Attribut source, das ein URI ist, der die Quelle oder die Beschaffenheit der angegebenen Information identifiziert. Da xs:documentation für menschlichen Verzehr gedacht ist, kann hier wahlweise auch das Attribut xml:lang angegeben werden.

   

<< zurück vor >>

 

 

 

Tipp der data2type-Redaktion:
Zum Thema XML Schema bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © 2003 O'Reilly Verlag GmbH & Co. KG
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XML Schema" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

O’Reilly Verlag GmbH & Co. KG, Balthasarstraße 81, 50670 Köln, kommentar(at)oreilly.de