XML-Know How

Das <xs:any>-Element

XSD sieht auch Mechanismen dafür vor, XML aus anderen Namespaces als dem targetNamespace zuzulassen. Dazu dient das Element <xs:any>:

<xs:any namespace="http://www.w3.org/1999/xhtml" processContents="strict"/>

Es kann überall verwendet werden, wo auch <xs:element> stehen kann. An der Stelle in der XSD, an der das vorstehende Beispiel erscheint, darf im XML-Dokument beliebiger XHTML-Code erscheinen, der valide sein muss.

Mit dem Attribut namespace kann angegeben werden, zu welchem Namespace das XML in diesem Bereich gehören muss (hier der XHTML-Namespace www.w3.org/1999/xhtml). Im XML-Dokument ist dann auch die entsprechende Namespace-Angabe durch ein xmlns-Attribut notwendig.

Wird kein Namespace angegeben, erzielt man mit <xs:any> denselben Effekt wie mit einem ANY-Element in einer DTD: alle im XSD global deklarierten Elemente können an dieser Stelle eingefügt werden:

<xs:any/>

Das Attribut processContents gibt an, ob das XML, das für <xs:any> im XML-Dokument steht, validiert werden soll oder nicht (Werte: »strict« streng validieren, »lax« lose validieren, d. h. es werden zwar falsche Elemente angemahnt, nicht aber fehlende, oder »skip« nicht validieren).

Verwendet man <xs:any> ohne namespace-Attribut und mit processContents="skip", kann beliebiger wohlgeformter XML-Code eingegeben werden:

<xs:any processContents=”skip”/>

Der XSD-Abschnitt, der das Element <notes> aus unserem Bookshop-Beispiel deklariert, muss daher so aussehen:

<xs:element name="notes">
<xs:complexType>
<xs:sequence>
<xs:any namespace="http://www.w3.org/1999/xhtml"
processContents="strict"/>

</xs:sequence>
</xs:complexType>
</xs:element>

Um die Zuordnung von beliebigen Attributen oder solchen aus einem anderen Namespace zu einem Element zu ermöglichen, steht das XSD-Element <xs:anyAttribute> zur Verfügung, das wie <xs:any> verwendet wird.