2016-12-01 62 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> 
相关问题