0

假设以下实例文档:

<person>
  <name>Maurice Moss</name>
  <addresses>
    <address current="true">441 Wallaby way</address>
    <address>2 Mercer Road</address>
  </addresses>
</person>

使用 XML Schema,是否可以强制在序列中只有一个<address>元素的current属性设置为“true”。

干杯

注意:我不太清楚如何表达这个问题,所以我希望任何有更好想法的人都可以修复标题或放置相关标签。

4

2 回答 2

1

I think using XSD 1.0 you can enforce that there is only one element with a "current" attribute, as RichardTowers shows, but you cannot allow multiple "current" attributes of which only one may be true.

You can do this of course in XSD 1.1 using assertions:

<xs:assert test="count(address[@current='true']) eq 1"/>

(or count(...) le 1 if that's what was intended).

于 2012-05-21T08:51:25.497 回答
0

至少部分可能使用<xsd:unique/>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:element name="person">
        <xs:complexType>
            <xs:all>
                <xs:element name="name"/>
                <xs:element name="addresses">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="address" maxOccurs="unbounded">
                                <xs:complexType>
                                    <xs:simpleContent>
                                        <xs:extension base="xs:string">
                                            <xs:attribute name="current" type="xs:boolean"/>
                                        </xs:extension>
                                    </xs:simpleContent>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                    <!-- HERE -->
                    <xs:unique name="onlyOneCurrentAddress">
                        <xs:selector xpath="address"/>
                        <xs:field xpath="@current"/>
                    </xs:unique>
                    <!-- /HERE -->
                </xs:element>
            </xs:all>
        </xs:complexType>
    </xs:element>
</xs:schema>

这将阻止多个current="true"属性,但不幸的是也可以阻止多个属性,current="false"因此您可能需要对其进行一些调整。

于 2012-05-21T08:21:24.210 回答