2016-06-10 17 views
2

Ich arbeite mit einem XSD wie:Beschränken complexType mit Attributen in XSD?

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      elementFormDefault="qualified"> 
    <xs:element name="algo"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="nota" type="t_algo" minOccurs="0" 
        maxOccurs="unbounded"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 

    <xs:complexType name="t_algo"> 
    <xs:restriction base="xs:string"> 
     <xs:pattern value="[1][0]|[0-9]" /> 
    </xs:restriction> 
    <xs:attribute name="modul" type="t_modul"/> 
    </xs:complexType> 

    <xs:simpleType name="t_modul"> 
    <xs:restriction base="xs:string"> 
     <xs:pattern value="[m][0][0-9]"/> 
    </xs:restriction> 
    </xs:simpleType> 

</xs:schema> 

und einen Test XML wie folgt aus:

<?xml version="1.0" encoding="UTF-8"?> 
<algo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:noNamespaceSchemaLocation="file:///D:/DAM/RECUF1/Mispruebas/telf.xsd"> 
    <nota modul="m01">0</nota> 
    <nota modul="m01">7</nota> 
    <nota modul="m01">3</nota> 
    <nota modul="m01">1</nota> 
</algo> 

Ich möchte Kinder nota mit Werten zwischen 0-10 und mit dem Attribut haben modul mit einem Wert m0X wo x zwischen (0-9). Ich dachte, das vorherige XSD würde funktionieren, aber es nicht. Kann mir jemand erklären, was ich falsch mache?

+0

Das Muster, das Sie für den einfachen Typ "t_modul" angegeben haben, gilt für den in den Tags enthaltenen Wert und nicht für den Namen des Attributs. Ich glaube, der Name des Attributs ist fest und Sie müssen möglicherweise Tags für die verschiedenen Arten von Attributnamen definieren, die Sie erwarten. –

+0

Erzähl uns nicht, dass etwas nicht funktioniert. Sag uns, wie es scheitert. –

Antwort

2

Um ein Attribut auf ein Element mit eingeschränktem Inhalt zu haben, eine neue xs:simpleType definieren und xs:extension dann mit einem Attribut zu erweitern verwenden:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      elementFormDefault="qualified"> 

    <xs:element name="algo"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="nota" type="t_algo" minOccurs="0" maxOccurs="unbounded"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 

    <xs:complexType name="t_algo"> 
    <xs:simpleContent> 
     <xs:extension base="t_algo_content"> 
     <xs:attribute name="modul" type="t_modul"/> 
     </xs:extension> 
    </xs:simpleContent> 
    </xs:complexType> 

    <xs:simpleType name="t_modul"> 
    <xs:restriction base="xs:string"> 
     <xs:pattern value="m0[0-9]"/> 
    </xs:restriction> 
    </xs:simpleType> 

    <xs:simpleType name="t_algo_content"> 
    <xs:restriction base="xs:integer"> 
     <xs:minInclusive value="0"/> 
     <xs:maxInclusive value="10"/> 
    </xs:restriction> 
    </xs:simpleType> 

</xs:schema> 

Beachten Sie auch, dass ich Ihre RegexMuster vereinfacht haben in der erste Fall und verwendet minInclusive/maxInclusive zu natürlicheren Ausdruck Ihrer ganzzahligen Bereich im zweiten Fall.