2011-10-04 110 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元素的约束以及枚举中只有两个可能的值,所有值必须出现一次。

相关问题