在XML Schema(XSD 1.0)中,我对以下四个元素有以下要求:
我创建了一个满足除#2 和#6 之外的所有要求的方案。在我的架构中,element2和element3可以按任何顺序出现,但我无法限制element2只出现一次。此外,我无法确保 parent_element 中至少存在1个元素。
查看下面的架构,并建议更新以满足上述所有要求。
using(IUserRepository userRepo = new UserRepository())
{
IList<MyUser> users = userRepo.GetUsersInOU("someOuPath");
}
为了满足要求#2,我尝试了使用<xs:element name="parent_element">
<xs:complexType>
<xs:sequence>
<xs:element name="element1" type="type1" minOccurs="0" maxOccurs="1" />
<xs:choice minOccurs="0" maxOccurs="unbounded" >
<xs:element name="element2" type="type1" />
<xs:element name="element3" type="type1" />
</xs:choice>
<xs:element name="element4" type="type2" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
和element2(内部选择)的技巧,但它没有用,并且element2仍然可以使用element3以任何顺序重复多次。< / p>
maxOccurs="1"
答案 0 :(得分:1)
要求#4和#6排除使用XSD 1.0。
XSD 1.1可以通过xs:assert
:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
elementFormDefault="qualified"
vc:minVersion="1.1">
<xs:element name="parent_element">
<xs:complexType>
<xs:sequence>
<xs:element name="element1" minOccurs="0" maxOccurs="1" />
<xs:choice minOccurs="0" maxOccurs="unbounded" >
<xs:element name="element2" />
<xs:element name="element3" />
</xs:choice>
<xs:element name="element4" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:assert test="count(element2) < 2
and (element1 or element2 or element3 or element4)"/>
</xs:complexType>
</xs:element>
</xs:schema>