2012-10-18 2 views
1

고유 한 요소를 만들려고합니다. 여기 내 코드의 일부입니다. XS- 스키마 고유 요소

<complexType name="DeliveryOrder"> 
    <sequence> 
     <element name="Depot" type="tns:County" minOccurs="1" maxOccurs="1"></element> 
     <element name="CustomerDetails" type="tns:CustomerDetails" minOccurs="1" maxOccurs="1"></element> 
     <element name="ItemsToBeDelivered" 
      type="tns:ItemsToBeDelivered" maxOccurs="unbounded" minOccurs="1"> 
     </element> 
    </sequence> 
</complexType> 

<complexType name="CustomerDetails"> 
    <sequence> 
     <element name="FirstName"> 
      <simpleType> 
       <restriction base="string"> 
        <pattern value="[a-zA-Z][a-z][a-z]*"></pattern> 
       </restriction> 
      </simpleType> 
     </element> 
     <element name="Surname"> 
      <simpleType> 
       <restriction base="string"> 
        <pattern value="[a-z{^}A-Z][a-z][a-z]*"></pattern> 
       </restriction> 
      </simpleType> 
     </element> 
     <element name="AddressLine1"> 
      <simpleType> 
       <restriction base="string"> 
        <minLength value="4"></minLength> 
        <whiteSpace value="collapse"></whiteSpace> 
       </restriction> 
      </simpleType> 
     </element> 
     <element name="AddressLine2"> 
      <simpleType> 
       <restriction base="string"> 
        <minLength value="4"></minLength> 
        <whiteSpace value="collapse"></whiteSpace> 
       </restriction> 
      </simpleType> 
     </element> 
     <element name="AddressLine3" type="string"> 
     </element> 
     <element name="County" type="tns:County" maxOccurs="1" minOccurs="1"></element> 
    </sequence> 
</complexType> 

<complexType name="County"> 
    <choice> 
     <element name="CountyName"> 
      <simpleType> 
       <restriction base="string"> 
        <enumeration value="Dublin"></enumeration> 
        <enumeration value="Cork"></enumeration> 
        <enumeration value="Kildare"></enumeration> 
        <enumeration value="Waterford"></enumeration> 
        <enumeration value="Wicklow"></enumeration> 
       </restriction> 
      </simpleType> 
     </element> 
    </choice> 
</complexType> 

<complexType name="DaysForDelivery"> 
    <sequence> 
     <element name="Day"> 
      <simpleType> 
       <restriction base="string"> 
        <enumeration value="Monday"></enumeration> 
        <enumeration value="Tuesday"></enumeration> 
        <enumeration value="Wednesday"></enumeration> 
        <enumeration value="Thursday"></enumeration> 
        <enumeration value="Friday"></enumeration> 
       </restriction> 
      </simpleType> 
     </element> 
    </sequence> 
</complexType> 

<element name="DeliveryOrder" type="tns:DeliveryOrder"></element> 

<complexType name="ItemsToBeDelivered"> 
    <sequence> 
     <element name="DaysForDelivery" type="tns:DaysForDelivery" 
      maxOccurs="unbounded" minOccurs="1"> 
     </element> 
     <element name="Item" type="tns:Item" maxOccurs="unbounded" minOccurs="1"></element> 
    </sequence> 
</complexType> 

<complexType name="Item"> 
    <sequence> 
     <element name="Description"> 
      <simpleType> 
       <restriction base="string"> 
        <enumeration 
         value="Regular Milk - 1 litre carton."> 
        </enumeration> 
        <enumeration 
         value="Low Fat Milk - 1 litre carton."> 
        </enumeration> 
        <enumeration 
         value="Strawberry Yoghurt - 100ml pot"> 
        </enumeration> 
        <enumeration 
         value="Raspberry Yoghurt - 100ml pot"> 
        </enumeration> 
        <enumeration value="Cream - 125ml carton"></enumeration> 
        <enumeration value="Cream - 250ml carton"></enumeration> 
       </restriction> 
      </simpleType> 
     </element> 
     <element name="Quantity"> 
      <simpleType> 
       <restriction base="int"> 
        <minInclusive value="1"></minInclusive> 
       </restriction> 
      </simpleType> 
     </element> 
    </sequence> 
</complexType> 

그래서, 나는 요소 "DaysForDelivery"에서 "날"고유해야합니다. 예 : 나는 월요일에 X 항목을 가질 수 있으며 그 이후에 다시 월요일을 사용할 수 없게됩니다. 고유 태그를 사용해야한다는 것을 알고 있으며, 많은 예제를 살펴 보았지만 xpaths를 사용하여 엉망이되었습니다.

은 사전에 감사

답변

1

업데이트 : 다음은 수정 된 XSD입니다 :

<?xml version="1.0" encoding="utf-8" ?> 
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)--> 
<schema targetNamespace="http://tempuri.org/XMLSchema.xsd" elementFormDefault="qualified" xmlns:tns="http://tempuri.org/XMLSchema.xsd" xmlns="http://www.w3.org/2001/XMLSchema"> 
    <complexType name="DeliveryOrder"> 
     <sequence> 
      <element name="Depot" type="tns:County" minOccurs="1" maxOccurs="1"></element> 
      <element name="CustomerDetails" type="tns:CustomerDetails" minOccurs="1" maxOccurs="1"></element> 
      <element name="ItemsToBeDelivered" type="tns:ItemsToBeDelivered" maxOccurs="unbounded" minOccurs="1"> 
       <unique name="UQ"> 
        <selector xpath="tns:DaysForDelivery/tns:Day"/> 
        <field xpath="."/> 
       </unique> 
      </element> 
     </sequence> 
    </complexType> 
    <complexType name="CustomerDetails"> 
     <sequence> 
      <element name="FirstName"> 
       <simpleType> 
        <restriction base="string"> 
         <pattern value="[a-zA-Z][a-z][a-z]*"></pattern> 
        </restriction> 
       </simpleType> 
      </element> 
      <element name="Surname"> 
       <simpleType> 
        <restriction base="string"> 
         <pattern value="[a-z{^}A-Z][a-z][a-z]*"></pattern> 
        </restriction> 
       </simpleType> 
      </element> 
      <element name="AddressLine1"> 
       <simpleType> 
        <restriction base="string"> 
         <minLength value="4"></minLength> 
         <whiteSpace value="collapse"></whiteSpace> 
        </restriction> 
       </simpleType> 
      </element> 
      <element name="AddressLine2"> 
       <simpleType> 
        <restriction base="string"> 
         <minLength value="4"></minLength> 
         <whiteSpace value="collapse"></whiteSpace> 
        </restriction> 
       </simpleType> 
      </element> 
      <element name="AddressLine3" type="string"> 
      </element> 
      <element name="County" type="tns:County" maxOccurs="1" minOccurs="1"></element> 
     </sequence> 
    </complexType> 

    <complexType name="County"> 
     <choice> 
      <element name="CountyName"> 
       <simpleType> 
        <restriction base="string"> 
         <enumeration value="Dublin"></enumeration> 
         <enumeration value="Cork"></enumeration> 
         <enumeration value="Kildare"></enumeration> 
         <enumeration value="Waterford"></enumeration> 
         <enumeration value="Wicklow"></enumeration> 
        </restriction> 
       </simpleType> 
      </element> 
     </choice> 
    </complexType> 

    <complexType name="DaysForDelivery"> 
     <sequence> 
      <element name="Day"> 
       <simpleType> 
        <restriction base="string"> 
         <enumeration value="Monday"></enumeration> 
         <enumeration value="Tuesday"></enumeration> 
         <enumeration value="Wednesday"></enumeration> 
         <enumeration value="Thursday"></enumeration> 
         <enumeration value="Friday"></enumeration> 
        </restriction> 
       </simpleType> 
      </element> 
     </sequence> 
    </complexType> 

    <element name="DeliveryOrder" type="tns:DeliveryOrder"></element> 

    <complexType name="ItemsToBeDelivered"> 
     <sequence> 
      <element name="DaysForDelivery" type="tns:DaysForDelivery" maxOccurs="unbounded" minOccurs="1"> 
      </element> 
      <element name="Item" type="tns:Item" maxOccurs="unbounded" minOccurs="1"></element> 
     </sequence> 
    </complexType> 

    <complexType name="Item"> 
     <sequence> 
      <element name="Description"> 
       <simpleType> 
        <restriction base="string"> 
         <enumeration value="Regular Milk - 1 litre carton."> 
         </enumeration> 
         <enumeration value="Low Fat Milk - 1 litre carton."> 
         </enumeration> 
         <enumeration value="Strawberry Yoghurt - 100ml pot"> 
         </enumeration> 
         <enumeration value="Raspberry Yoghurt - 100ml pot"> 
         </enumeration> 
         <enumeration value="Cream - 125ml carton"></enumeration> 
         <enumeration value="Cream - 250ml carton"></enumeration> 
        </restriction> 
       </simpleType> 
      </element> 
      <element name="Quantity"> 
       <simpleType> 
        <restriction base="int"> 
         <minInclusive value="1"></minInclusive> 
        </restriction> 
       </simpleType> 
      </element> 
     </sequence> 
    </complexType> 
</schema> 

enter image description here

샘플 유효 XML :

<?xml version="1.0" encoding="utf-8" standalone="yes"?> 
<!-- Sample XML generated by QTAssistant (http://www.paschidev.com) --> 
<DeliveryOrder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://tempuri.org/XMLSchema.xsd"> 
    <Depot> 
     <CountyName>Dublin</CountyName> 
    </Depot> 
    <CustomerDetails> 
     <FirstName>Firstname</FirstName> 
     <Surname>Surname</Surname> 
     <AddressLine1>AddressLine11</AddressLine1> 
     <AddressLine2>AddressLine21</AddressLine2> 
     <AddressLine3>AddressLine31</AddressLine3> 
     <County> 
      <CountyName>Dublin</CountyName> 
     </County> 
    </CustomerDetails> 
    <ItemsToBeDelivered> 
     <DaysForDelivery> 
      <Day>Monday</Day> 
     </DaysForDelivery> 
     <DaysForDelivery> 
      <Day>Tuesday</Day> 
     </DaysForDelivery> 
     <Item> 
      <Description>Regular Milk - 1 litre carton.</Description> 
      <Quantity>1</Quantity> 
     </Item> 
     <Item> 
      <Description>Regular Milk - 1 litre carton.</Description> 
      <Quantity>1</Quantity> 
     </Item> 
    </ItemsToBeDelivered> 
</DeliveryOrder> 

는 당신이 Tuesday을 변경하는 경우 Monday 다음과 같이 표시됩니다.

Error occurred while loading [], line 22 position 17 
There is a duplicate key sequence 'Monday' for the 'http://tempuri.org/XMLSchema.xsd:UQ' key or unique identity constraint. 
Document1.xml is invalid. 
+0

답변 해 주셔서 감사합니다.하지만 같은 날을 입력해도 오류가 아닙니다. 아마 내 전체 xsd를 제공하는 것이 필요합니다. (따라서, xsd 코드 전체로 내 질문을 업데이트 할 것입니다.) – kostas89

+0

@ kostas89, 여기 오해의 소지가 있습니다. DaysForDelivery를 반복하는 대신 일을 반복해야합니다. 나는 이것이 여기에 약간의 혼란을 야기했을지도 모른다고 생각한다 ... –

+0

그것은 완벽하게 작동한다, 정말로 고마워! – kostas89

관련 문제