menu
{$Head.Title}}

Übung XML Schema Book

Übung XML Schema Book

Ausgangslage

Wir möchten unser XML Dokument mit einem XML Schema validieren können. Als Vorlage dient uns das folgenden Book Dokument:

<?xml version="1.0" encoding="UTF-8"?>
<document>
    <book>
        <title>XSLT</title>
        <author>Michael Kay</author>
        <publisher>Wrox Press Ltd.</publisher>
        <isbn>1-861003-12-9</isbn>
    </book>
    <book>
        <title>XML and Java</title>
        <author>Hiroshi Maruyama</author>
        <author>Kent Tamura</author>
        <author>Naohiko Uramoto</author>
        <publisher>Addison Wesley</publisher>
        <isbn>0201485435</isbn>
    </book>
    <book>
        <title>Java and XML</title>
        <author>Brett McLaughlin</author>
        <author>Mike Loukides</author>
        <publisher>O'Reilly</publisher>
        <isbn>0596000162</isbn>
    </book>
</document>
Vorgehen

Erstellen Sie im Visual Code Editor das Book Dokument gemäss dem zuvor angegebenen Listing.

Auf dem document-Element wird eine Warnung ... angezeigt. Solche besagt, dass keine DTD oder Schema dem Dokument zugeordnet ist:

Wählen Sie die erste Option und damit wird ein erstes XML Schema erstellt. Dieses Schema enthält die Informationen, wie das Book Dokument aussehen soll. Das XML Dokument wird mit dem Schema über das Root Element verlinkt und validiert.

Das automatisch generierte XML Schema:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="document">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="book" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="title" type="xs:string" />
                            <xs:element name="author" maxOccurs="unbounded" type="xs:string" />
                            <xs:element name="publisher" type="xs:string" />
                            <xs:element name="isbn" type="xs:string" />
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

Das generierte XML Schema arbeitet mit anonymen Typen.

Named Types

In der Praxis arbeiten wir besser mit Named Types. Wir kopieren das book.xml Dokument um nach book2.xml und das book.xsd nach book2.xsd.

Das book2.xsd passen wir wie folgt an:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="document" type="bookType" />
    <xs:complexType name="bookType">
        <xs:sequence>
            <xs:element name="book" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="title" type="xs:string" />
                        <xs:element name="author" maxOccurs="unbounded" type="xs:string" />
                        <xs:element name="publisher" type="xs:string" />
                        <xs:element name="isbn" type="xs:string" />
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:schema>

Verlinken Sie das book2.xml Dokument mit dem XML Schema book2.xsd, das Verhalten sollte identisch sein.