具有属性的复杂类型的xml架构

时间:2014-02-13 15:22:59

标签: xml web

我正在尝试为此元素创建xml架构......

<shoesize country="yes">35</shoesize>

基于w3学校这是解决方案......

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="shoesize">
  <xs:complexType>
    <xs:simpleContent>
      <xs:extension base="xs:integer">
       <xs:attribute name="country" type="xs:string"  />
    </xs:extension>
   </xs:simpleContent>
  </xs:complexType>
</xs:element>
</xs:schema>

我想要限制的是,属性只能是“是”或“否”,内容只能是小于50的整数。任何人都可以给我一些指示如何做到这一点。


好吧所以我让它在单独的文件中工作,但是当我将这段代码放入

中的大模式时
<xsd:sequence>
        <xsd:element name="something" type="xsd:string"/> 
        <xsd:element name="something else" type="xsd:string"/> 
        ......
        ......
        code above
        ....
        ...
</xsd:sequence>

我收到错误

s4s-elt-must-match.1: The content of 'sequence' must match (annotation?, (element | group | choice | sequence | any)*). 

1 个答案:

答案 0 :(得分:1)

您必须分两个阶段执行此操作,首先定义一个命名的顶级simpleType以限制内容(将其置于所有现有xs:element声明之外,直接位于xs:schema下)

<xs:simpleType name="lessThanFifty">
  <xs:restriction base="xs:integer">
    <xs:maxExclusive value="50" />
  </xs:restriction>
</xs:simpleType>

然后让你的complexType扩展它以添加属性

<xs:element name="shoesize">
 <xs:complexType>
  <xs:simpleContent>
   <xs:extension base="lessThanFifty">
    <xs:attribute name="country">
     <!-- you might want to pull this out into a top-level type if you
          have other yes/no attributes elsewhere in the schema -->
     <xs:simpleType>
      <xs:restriction base="xs:string">
       <xs:enumeration value="yes" />
       <xs:enumeration value="no" />
      </xs:restriction>
     </xs:simpleType>
    </xs:attribute>
   </xs:extension>
  </xs:simpleContent>
 </xs:complexType>
</xs:element>

这将允许任何整数值达到并包括49,因此-500是有效值。从限制xs:nonNegativeInteger而不是xs:integer开始可能更合适。