给定以下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>
答案 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>