0

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

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

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

这是我的address复杂类型:

<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"地址呢?

4

1 回答 1

0

在 XSD 1.0 中,我不知道有一种方法可以实现你所说的你想要的。(XML 的设计基于不同类型的对象被称为不同事物的前提;如果您希望家庭地址和工作地址具有不同的验证行为,这很好地证明它们是不同的事物,出于您的目的,并且不应该被称为相同的东西。如果你命名元素 WorkAddress 和 HomeAddress,你没有问题。如果我们不对处理器撒谎,事情会变得更好。)

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

于 2013-02-06T15:46:33.087 回答