2016-01-09 50 views
1

我想傳遞XML文件中乘客列表中每個屬性的唯一性。xs:獨特如何實現屬性?

我的XML文件是這樣的:

<passengers> 
    <passenger resnumb="872-AA"> 
     <name>John</name> 
     <surname>Doe</surname> 
     <datebirth>1997-10-01</datebirth> 
     <pricetix>1321</pricetix> 
     <telephone>+48 128382812</telephone> 
     <dateofbuy>2015-10-01</dateofbuy> 
     <comment>Confirmed</comment> 
    </passenger> 
    <passenger resnumb="962-AA"> 
     <name>Jack</name> 
     <surname>Lawnmower</surname> 
     <datebirth>1993-01-01</datebirth> 
     <pricetix>1243</pricetix> 
     <telephone>+48 183722842</telephone> 
     <dateofbuy>2015-09-01</dateofbuy> 
     <comment>Confirmed</comment> 
    </passenger> 
</passengers> 

和XML文件是這樣的:

<xs:complexType name="passengerslist"> 
    <xs:sequence> 
    <xs:element name="passenger" minOccurs="0" maxOccurs="unbounded"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element name="name" type="xs:string"/> 
     <xs:element name="surname" type="xs:string"/> 
     <xs:element name="datebirth" type="xs:date"/> 
     <xs:element name="pricetix" type="xs:integer"/> 
     <xs:element name="telephone" type="xs:string"/> 
     <xs:element name="dateofbuy" type="xs:date" minOccurs="0"/><!--Punkt 3--> 
     <xs:element ref="comment" minOccurs="0"/> 
    </xs:sequence> 
    <xs:attribute name="resnumb" type="PNR" use="required"/><!--Tutaj mamy punkt 4--> 
    </xs:complexType> 
    <xs:unique name="unique-resnumb"> 
    <xs:selector xpath="passenger"/> 
    <xs:field xpath="@resnumb"/> 
    </xs:unique> 
    </xs:element> 
    </xs:sequence> 
</xs:complexType> 

而且我的代碼包含使用正則表達式模式創建一個自定義類型:

<xs:simpleType name="PNR"> 
    <xs:restriction base="xs:string"> 
    <xs:pattern value="\d{3}-[A-Z]{2}"/> 
    </xs:restriction> 
</xs:simpleType> 

如何修改屬性「resnumb」使預訂號碼唯一?

謝謝,

回答

3

考慮發佈最小但完整的樣本。基本上將xs:unique移至xs:element聲明,例如

<xs:element name="passengers" type="passengerslist"> 
    <xs:unique name="unique-resnumb"> 
    <xs:selector xpath="passenger"/> 
    <xs:field xpath="@resnumb"/> 
    </xs:unique> 
</xs:element>