XML模式限制,使得在任何给定时间点,子元素的值只能对一个父兄弟为真
我知道我没有很好地定义标题,不知道如何表达我的问题。让我在这里解释一下 我有这样的XML模式限制,使得在任何给定时间点,子元素的值只能对一个父兄弟为真,xml,xsd,Xml,Xsd,我知道我没有很好地定义标题,不知道如何表达我的问题。让我在这里解释一下 我有这样的XML: <School> <Teacher> <Student> <Name>Todd</Name> <Phone> <Number>7324567890</Number> <PrefPhone>1</PrefPhone> </Phone&
XML
:
<School>
<Teacher>
<Student>
<Name>Todd</Name>
<Phone>
<Number>7324567890</Number>
<PrefPhone>1</PrefPhone>
</Phone>
<Phone>
<Number>98765467890</Number>
<PrefPhone>0</PrefPhone>
</Phone>
<Phone>
<Number>77765467890</Number>
<PrefPhone>0</PrefPhone>
</Phone>
</Student>
</Teacher>
</School>
托德
7324567890
1.
98765467890
0
77765467890
0
现在我的问题是:如何定义每个
只有一个
将
设置为true
的模式限制?如果使用XML模式1.1,可以通过XPath 2.0。也就是说,类似这样的东西(未经测试):
确保恰好有一个(或最多一个)首选电话的最简单方法是为电话号码创建两个不同的元素:恰好(或最多)一个首选电话号码,以及任意数量的其他电话号码。这两个元素可以具有相同的类型,因为它们都是电话号码
一个更简单的解决方案是说首选号码是文档实例中给出的第一个电话号码 谢谢你的回复。你能详细回答一下你是如何定义
1.0
中的PrefPhone
元素的吗当然,我添加了两种方法的草图。哦,你的意思是将PrefPhone
定义为Student
的元素,而不是Phone
。。。是吗?是的,所以不要在手机上设置PrefPhone
标志,而是创建一种称为PreferedPhone
的特殊类型的手机,每个学生只能有一个(maxOccurs=“1”
)。
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
version="1.1">
<xs:element name="Student">
<xs:complexType>
<xs:sequence>
<xs:element name="Name"/>
<xs:element name="Phone" maxOccurs="unbounded" type="PhoneType"/>
</xs:sequence>
<xs:assert test="count('./Phone/PrefPhone[. = 1]') le 1"/>
</xs:complexType>
</xs:element>
</xs:schema>
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
version="1.0">
<xs:element name="Student">
<xs:complexType>
<xs:sequence>
<xs:element name="Name"/>
<xs:element name="PreferedPhone" maxOccurs="1" type="PhoneType"/>
<xs:element name="Phone" maxOccurs="unbounded" type="PhoneType"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>