XML Schema - 我需要确保我有一个元素的2个实例,每个元素都有一个属性

时间:2011-10-04 14:54:51

标签: xsd

我需要确保我有2个元素实例,每个元素都有一个属性。

基本上我需要两者:

/*:SalesPersonParty/*:PartyID[@schemeAgencyName="SalesPersonID"]

/*:SalesPersonParty/*:PartyID[@schemeAgencyName="SalesPersonPduID"]

我有基数2..2但两个属性的2个实例都有效。我需要其中一个,订单无所谓。

以下是相关的架构组件:

<xs:simpleType name="RestrictedString">
    <xs:restriction base="xs:string">
        <xs:pattern value="([0-9]{3})|([0-9]{10})" />
    </xs:restriction>
</xs:simpleType>

<xs:element name="SalesPersonParty" minOccurs="2" maxOccurs="2">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="PartyID" minOccurs="1" maxOccurs="1">
                <xs:complexType>
                    <xs:simpleContent>
                        <xs:extension base="star:RestrictedString">
                            <xs:attribute name="schemeAgencyName" use="required">
                                <xs:simpleType>
                                    <xs:restriction base="xs:string">
                                        <xs:enumeration value="SalesPersonID" />
                                        <xs:enumeration value="SalesPersonPduID" />
                                    </xs:restriction>
                                </xs:simpleType>
                            </xs:attribute>
                        </xs:extension>
                    </xs:simpleContent>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:element>

这甚至可能吗?

谢谢和问候,

1 个答案:

答案 0 :(得分:0)

我认为你可以用唯一性约束来做到这一点。您必须知道SalesPersonParty元素的容器元素;称之为Transaction。然后你需要这样的东西:

<xs:element name="Transaction">
  ...
  <xs:unique name="uniqueAgencyNameConstraint">
    <xs:selector xpath="SalesPersonParty/PartyID">
    <xs:field xpath="@schemeAgencyName"/>
  </xs:unique>
</xs:element>

这表示每个SalesPersonParty/PartyID必须有唯一的schemeAgencyName。结合在枚举中只有两个SalesPersonParty元素和两个可能值的约束,所有值必须出现一次。