Announcement

Collapse
No announcement yet.

XML Schema Extension

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • XML Schema Extension

    Hallo,

    ich möchte Schemata aufbauen, die erweiterbar sind. Ein Beispiel ist die Definition einer allgemeinen Baumstruktur und einer speziellen Ausprügung als Baum von Dateien.

    In item.xsd wird nur ein item-Element mit dem Attribut name definiert.
    [highlight="xml"]
    <?xml version="1.0" encoding="UTF-8"?>
    <xs:schema
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    elementFormDefault="qualified">

    <xs:complexType name="itemType">
    <xs:attribute name="value"/>
    <xs:anyAttribute/>
    </xs:complexType>

    <xs:element name="item" type="itemType"/>

    </xs:schema>
    [/highlight]

    tree.xsd definiert eine Baumstruktur, bei der auf jeder Ebene tree- und item-Elemente existieren können.
    [highlight="xml"]
    <?xml version="1.0" encoding="UTF-8"?>
    <xs:schema
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    elementFormDefault="qualified">

    <xs:include schemaLocation="item.xsd"/>

    <xs:complexType name="treeType">
    <xs:sequence>
    <xs:choice minOccurs="0" maxOccurs="unbounded">
    <xs:element ref="tree" minOccurs="1" maxOccurs="1"/>
    <xs:element ref="item" minOccurs="1" maxOccurs="1"/>
    </xs:choice>
    </xs:sequence>
    <xs:attribute name="name" type="xs:string" use="optional"/>
    <xs:anyAttribute/>
    </xs:complexType>

    <xs:element name="tree" type="treeType"/>

    </xs:schema>
    [/highlight]

    tree-filetree.xsd soll nun tree.xsd dergestalt erweitern, daß zusätzlich zu den Definitionen aus tree.xsd die Elemente das Attribut last-modification-date haben müssen.
    [highlight="xml"]
    <?xml version="1.0" encoding="UTF-8"?>
    <xs:schema
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    elementFormDefault="qualified">

    <xs:include schemaLocation="tree.xsd"/>

    <xs:redefine schemaLocation="tree.xsd">
    <xs:complexType name="treeType">
    <xs:complexContent>
    <xs:extension base="treeType">
    <xs:attribute ref="last-modification-date"/>
    </xs:extension>
    </xs:complexContent>
    </xs:complexType>
    </xs:redefine>

    <xs:redefine schemaLocation="item.xsd">
    <xs:complexType name="itemType">
    <xs:complexContent>
    <xs:extension base="itemType">
    <xs:attribute ref="last-modification-date"/>
    </xs:extension>
    </xs:complexContent>
    </xs:complexType>
    </xs:redefine>

    <!-- Last modification date: 2012-10-29T16:40:07,860 -->
    <xs:attribute name="last-modification-date">
    <xs:simpleType>
    <xs:restriction base="xs:string">
    <xsattern value="[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.*"/>
    </xs:restriction>
    </xs:simpleType>
    </xs:attribute>

    </xs:schema>
    [/highlight]

    Während die Redefinition des treeType funktioniert, validieren die item-Elemente nicht, da angeblich das Attribut name - also das Original-Attribut aus item.xsd - nicht erlaubt sei.

    Was habe ich übersehen? Danke im voraus!
    --
    Cheers Vince
Working...
X