2017-03-07 113 views
0

將「選擇」元素組合到xsd中的正確方法是什麼?XSD選擇組合

例如,如果選擇可用的地方(而只有以下允許1):

  • 細胞數量
  • 細胞數量和家庭數量
  • 家庭號碼和工作號碼

以下是我嘗試過的XSD,但生成時收到的錯誤是:

org.xml.sax.SAXParseException; systemId: file:/thefile.xsd; lineNumber: 13; columnNumber: 25; cos-nonambig: "namespace":CellNumber and "namespace":CellNumber (or elements from their substitution group) violate "Unique Particle Attribution". During validation against this schema, ambiguity would be created for those two particles. 

XSD:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema ...> 
    <xs:element name="AddNewPersonRequestMessage"> 
     <xs:complexType> 
      <xs:sequence> 
       ... 
       <xs:choice> 
        <xs:group ref="group1" /> 
        <xs:group ref="group2" /> 
        <xs:group ref="group3" /> 
       </xs:choice> 
       .. 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 

    <xs:element name="WorkNumber" type="xs:unsignedInt" /> 
    <xs:element name="CellNumber" type="xs:unsignedInt" /> 
    <xs:element name="HomeNumber" type="xs:unsignedInt" /> 
    <xs:group name="group1"> 
     <xs:sequence> 
      <xs:element ref="CellNumber" /> 
     </xs:sequence> 
    </xs:group> 
    <xs:group name="group2"> 
     <xs:sequence> 
      <xs:element ref="WorkNumber" /> 
      <xs:element ref="HomeNumber" /> 
     </xs:sequence> 
    </xs:group> 
    <xs:group name="group3"> 
     <xs:sequence> 
      <xs:element ref="CellNumber" /> 
      <xs:element ref="HomeNumber" /> 
     </xs:sequence> 
    </xs:group> 
</xs:schema> 

回答

1

您可以通過重新安排你的邏輯避免Unique Particle Attribution衝突。

觀察到的脫節

  • 細胞數量
  • 細胞數量和家庭數量

可以改寫爲

  • 細胞數量和可選首頁Numbe [R

和重寫你的XSD作爲

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      elementFormDefault="qualified"> 
    <xs:element name="AddNewPersonRequestMessage"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:choice> 
      <xs:group ref="group2" /> 
      <xs:group ref="group3" /> 
     </xs:choice> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 

    <xs:element name="WorkNumber" type="xs:unsignedInt" /> 
    <xs:element name="CellNumber" type="xs:unsignedInt" /> 
    <xs:element name="HomeNumber" type="xs:unsignedInt" /> 

    <xs:group name="group2"> 
    <xs:sequence> 
     <xs:element ref="WorkNumber" /> 
     <xs:element ref="HomeNumber" /> 
    </xs:sequence> 
    </xs:group> 
    <xs:group name="group3"> 
    <xs:sequence> 
     <xs:element ref="CellNumber"/> 
     <xs:element ref="HomeNumber" minOccurs="0"/> 
    </xs:sequence> 
    </xs:group> 
</xs:schema> 

,你將有不違反唯一粒子屬性的等價形式。

+0

謝謝,工作! – ljardim