Схема XML - мне нужно убедиться, что у меня есть 2 экземпляра элемента, по одному с каждым атрибутом - PullRequest
1 голос
/ 04 октября 2011

Мне нужно убедиться, что у меня есть 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>

Это вообще возможно?

Спасибо и всего наилучшего,

Tony

1 Ответ

0 голосов
/ 06 октября 2011

Я думаю, что вы можете сделать это с ограничением уникальности.Вы должны будете знать элемент контейнера для элемента 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 элементов и только двух возможных значений в перечислении все значения должны встречаться один раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...