2016-12-01 5 views
1

Ich wollte erwähnt für die unten XMLMit xs: Erweiterung und xs: restriction in einem XSD

<?xml version="1.0" encoding="utf-8"?> 
<records> 
    <row id="1"> 
    <record> 
     <Value class="field">486.89</Value> 
    </record> 
    <record> 
     <Value class="field">811.49</Value> 
    </record> 
    </row> 
    <row id="2"> 
    <record> 
     <Value class="field">123.45</Value> 
    </record> 
    <record> 
     <Value class="field">678.91</Value> 
    </record> 
    </row> 
</records> 

Im Folgenden sowohl xs:extensions und xs:restriction zusammen in meinem XSD verwenden ist die XSD im Versuch:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="records"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="row"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element name="record" maxOccurs="unbounded" minOccurs="0"> 
       <xs:complexType> 
        <xs:sequence>      
        <xs:element name="Value"> 
         <xs:simpleType> 
         <xs:restriction base="xs:decimal"> 
          <xs:totalDigits value="12"/> 
          <xs:fractionDigits value="2" /> 
         </xs:restriction> 
         </xs:simpleType> 
         <xs:complexType> 
         <xs:simpleContent> 
          <xs:extension base="xs:decimal"> 
          <xs:attribute type="xs:string" name="class" use="optional"/> 
          </xs:extension> 
         </xs:simpleContent> 
         </xs:complexType> 
        </xs:element>      
        </xs:sequence> 
       </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
      <xs:attribute type="xs:byte" name="id" use="required"/> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType>  
    </xs:element> 
</xs:schema> 

Das obige XSD funktioniert nicht, das ist die Lösung, die ich hier gefunden habe Using xs:extension & xs:restriction together?. Es wird ein Fehler ausgegeben Das Element 'complexType' ist bereits im Inhaltsmodell vorhanden.

Antwort

3

Sie müssen das eingeschränkte xs:simpleType, das Sie erweitern möchten, global definieren und benennen, nicht lokal unter Value definieren.

Beachten Sie auch, dass Sie unter rowmaxOccurs="unbounded" (oder etwas größer als die Standardeinstellung 1) benötigen.

Insgesamt wird diese XSD Ihre XML erfolgreich validieren:

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

    <xs:simpleType name="Decimal12.2"> 
    <xs:restriction base="xs:decimal"> 
     <xs:totalDigits value="12"/> 
     <xs:fractionDigits value="2" /> 
    </xs:restriction> 
    </xs:simpleType> 

    <xs:element name="records"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="row" maxOccurs="unbounded"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element name="record" maxOccurs="unbounded" 
          minOccurs="0"> 
       <xs:complexType> 
        <xs:sequence>      
        <xs:element name="Value"> 
         <xs:complexType> 
         <xs:simpleContent> 
          <xs:extension base="Decimal12.2"> 
          <xs:attribute type="xs:string" 
              name="class" 
              use="optional"/> 
          </xs:extension> 
         </xs:simpleContent> 
         </xs:complexType> 
        </xs:element>      
        </xs:sequence> 
       </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
      <xs:attribute type="xs:byte" name="id" use="required"/> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType>  
    </xs:element> 
</xs:schema> 
Verwandte Themen