2011-10-04 52 views
1

我需要確保我有一個元素的兩個實例,每個元素具有一個屬性。XML Schema - 我需要確保我有一個元素的兩個實例,每個元素具有一個屬性

基本上我需要兩個:

/*: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> 

這甚至可能嗎?

感謝和問候,

託尼

回答

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元素的約束以及枚舉中只有兩個可能的值,所有值必須出現一次。

相關問題