XML模式基数

时间:2014-06-28 22:04:56

标签: xml xsd schema

给定以下xml数据模型,我如何在xsd中指定dept数据模型可以有多个员工节点,但至少其中一个必须具有<isSupervisor></isSupervisor>元素。 换句话说,所有员工都不需要<isSupervisor></isSupervisor>,但至少有一名员工应该拥有它。

<Dept>
  <Employee>
    <name></name>
    <title></title>
    <isSupervisor></isSupervisor>
  </Employee>
  <Employee>
    <name></name>
    <title></title>
    <isSupervisor></isSupervisor>
  </Employee>
  <deptname></deptname>
  <deptid></deptid>
<Dept>

1 个答案:

答案 0 :(得分:1)

您需要 XSD 1.1 根据类型内容声明断言。

Employee的声明中,isSupervisor应声明为可选:

<xs:element name="Employee">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="name" type="xs:string"/>
            <xs:element name="title" type="xs:string"/>
            <xs:element name="isSupervisor" type="xs:boolean" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

Dept的声明中,xs:assert表达式应始终为true:

<xs:element name="Dept">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="Employee" minOccurs="1" maxOccurs="unbounded"/>
            <xs:element name="deptname"/>
            <xs:element name="deptid"/>
        </xs:sequence>
        <!-- true if at least one Employee/isSupervisor exists -->
        <xs:assert test="Employee/isSupervisor"/> 
    </xs:complexType>
</xs:element>