XML Schema基于另一个来限制一个字段

时间:2010-03-25 18:39:11

标签: xml xsd xsd-1.0

我有以下架构,我用它来确保一个人的PhoneNumberPhoneNumberType(家庭,工作等)不超过10个字符。但是,我想改进此架构,以便在未提供PhoneNumberType时不需要PhoneNumber,但如果提供PhoneNumber则需要<xs:assert/>。有没有办法在XML Schema 1.0中执行此操作?

我知道这可以使用<?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xs:element name="PhoneNumber"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:minLength value="0"/> <xs:maxLength value="10"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="PhoneNumberType"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:minLength value="0"/> <xs:maxLength value="10"/> </xs:restriction> </xs:simpleType> </xs:element> </xsd:schema> 在XML Schema 1.1中完成,但不幸的是我仍然坚持使用XML Schema 1.0。

{{1}}

3 个答案:

答案 0 :(得分:2)

答案 1 :(得分:0)

在我看来,这是一种“有”关系。

如果您有PhoneNumber元素,那么它应该具有PhoneNumberType类型的属性。我建议你将PhoneNumber变成一个复杂的元素,并使PhoneNumberType成为它的必需属性,而不是搞乱验证和限制。

答案 2 :(得分:0)

可能为时已晚,但你可以把它们放在这样的小组中

<xs:group name="group">
<xs:sequence>
    <xs:element ref="PhoneNumber"/>
    <xs:element ref="PhoneNymberType" />
</xs:sequence>

让这个群体成为必需