XML Schema:具有不同属性限制的单个元素名称和类型

时间:2013-02-06 13:14:00

标签: xml xsd xml-attribute

我需要指定一个像这样的XML片段:

<address type="work">...</address>
<address type="home">...</address>

work地址是必需的,但home地址是可选的。如何在XML Schema中实现该限制?

这是我的address complexType:

<xs:complexType name="AddressType">
  <xs:sequence>
    <xs:element name="street" type="xs:string"></xs:element>
    <xs:element name="postalCode" type="PostalCodeType"></xs:element>
    <xs:element name="town" type="xs:string"></xs:element>
  </xs:sequence>
  <xs:attribute name="type" use="required">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:enumeration value="work" />
        <xs:enumeration value="home" />
      </xs:restriction>
    </xs:simpleType>
  </xs:attribute>
</xs:complexType>

我列出了address这样的元素:

<xs:element name="address" type="AddressType"></xs:element>
<xs:element name="address" type="AddressType" minOccurs="0"></xs:element>

那么,如何指定第一个是type="work"地址,另一个是type="home"地址?

1 个答案:

答案 0 :(得分:0)

在XSD 1.0中,我不知道如何实现您想要的效果。 (XML的设计基于这样的前提:不同类型的对象被称为不同的东西;如果您希望家庭地址和工作地址具有不同的验证行为,那么很好地证明它们是不同的东西,为了您的目的,并且不应该如果你将元素命名为WorkAddress和HomeAddress,那么你没有问题。如果我们不向处理器说谎是什么,事情会好得多。)

在XSD 1.1中,您可以在内容模型中指定'address'必须至少出现一次,并使用断言检查第一个出现的是type =“work”而第二个出现的是(如果出现的话)type =“家”。