2016-12-01 27 views
1

我想都xs:extensionsxs:restriction一起在我的XSD的下方使用所提XML使用XS:擴展和xs:限制在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> 

下面是XSD我嘗試:

<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> 

上面的XSD不起作用,這是我在這裏找到的解決方案Using xs:extension & xs:restriction together?。它在內容模型中已經存在一個錯誤'complexType'元素。

回答

3

您必須全局定義並命名您想要擴展的受限制的xs:simpleType,而不是在本地根據Value定義它。

還請注意,在row您需要maxOccurs="unbounded"(或大於默認1的東西)。

總之,這將XSD成功驗證XML:

<?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>