2012-10-16 72 views
0

我有一個XML文件,它看起來像這樣:如何創建這樣一個XSD

<Summary> 
    <Persons> 
    <Status> 
     <Active value="false" text="Active" /> 
     <Inactive value="false" text="Inactive" /> 
    </Status> 
    <Language> 
     <Dutch value="false" text="" /> 
     <EnglishUK value="false" text="" /> 
     <EnglishUS value="false" text="" /> 
     <German value="false" text="" /> 
     <French value="false" text="" /> 
    </Language> 
</Persons> 
<Roles> 
    <Status> 
    <Active value="false" text="" /> 
    <Inactive value="false" text="" /> 
    </Status> 
    <AssignedUsers> 
    <m10 value="false" text="" /> 
    <b10and50 value="false" text="" /> 
    <x50 value="false" text="" /> 
    </AssignedUsers> 
</Roles> 
</Summary> 

我用網上的XSD發生器產生從該XML中的xsd:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
<xs:element name="Summary"> 
<xs:complexType> 
    <xs:sequence> 
    <xs:element name="Persons"> 
     <xs:complexType> 
     <xs:sequence> 
      <xs:element name="Status"> 
      <xs:complexType> 
       <xs:sequence> 
       <xs:element name="Active"> 
        <xs:complexType> 
        <xs:simpleContent> 
         <xs:extension base="xs:string"> 
         <xs:attribute type="xs:string" name="value"/> 
         <xs:attribute type="xs:string" name="text"/> 
         </xs:extension> 
        </xs:simpleContent> 
        </xs:complexType> 
       </xs:element> 
       <xs:element name="Inactive"> 
        <xs:complexType> 
        <xs:simpleContent> 
         <xs:extension base="xs:string"> 
         <xs:attribute type="xs:string" name="value"/> 
         <xs:attribute type="xs:string" name="text"/> 
         </xs:extension> 
        </xs:simpleContent> 
        </xs:complexType> 
       </xs:element> 
       </xs:sequence> 
      </xs:complexType> 
      </xs:element> 
      <xs:element name="Anonymous"> 
      <xs:complexType> 
       <xs:sequence> 
       <xs:element name="Yes"> 
        <xs:complexType> 
        <xs:simpleContent> 
         <xs:extension base="xs:string"> 
         <xs:attribute type="xs:string" name="value"/> 
         <xs:attribute type="xs:string" name="text"/> 
         </xs:extension> 
        </xs:simpleContent> 
        </xs:complexType> 
       </xs:element> 
       <xs:element name="No"> 
        <xs:complexType> 
        <xs:simpleContent> 
         <xs:extension base="xs:string"> 
         <xs:attribute type="xs:string" name="value"/> 
         <xs:attribute type="xs:string" name="text"/> 
         </xs:extension> 
        </xs:simpleContent> 
        </xs:complexType> 
       </xs:element> 
       </xs:sequence> 
      </xs:complexType> 
      </xs:element> 
      <xs:element name="Language"> 
      <xs:complexType> 
       <xs:sequence> 
       <xs:element name="Dutch"> 
        <xs:complexType> 
        <xs:simpleContent> 
         <xs:extension base="xs:string"> 
         <xs:attribute type="xs:string" name="value"/> 
         <xs:attribute type="xs:string" name="text"/> 
         </xs:extension> 
        </xs:simpleContent> 
        </xs:complexType> 
       </xs:element> 
       <xs:element name="EnglishUK"> 
        <xs:complexType> 
        <xs:simpleContent> 
         <xs:extension base="xs:string"> 
         <xs:attribute type="xs:string" name="value"/> 
         <xs:attribute type="xs:string" name="text"/> 
         </xs:extension> 
        </xs:simpleContent> 
        </xs:complexType> 
       </xs:element> 
       <xs:element name="EnglishUS"> 
        <xs:complexType> 
        <xs:simpleContent> 
         <xs:extension base="xs:string"> 
         <xs:attribute type="xs:string" name="value"/> 
         <xs:attribute type="xs:string" name="text"/> 
         </xs:extension> 
        </xs:simpleContent> 
        </xs:complexType> 
       </xs:element> 
       <xs:element name="German"> 
        <xs:complexType> 
        <xs:simpleContent> 
         <xs:extension base="xs:string"> 
         <xs:attribute type="xs:string" name="value"/> 
         <xs:attribute type="xs:string" name="text"/> 
         </xs:extension> 
        </xs:simpleContent> 
        </xs:complexType> 
       </xs:element> 
       <xs:element name="French"> 
        <xs:complexType> 
        <xs:simpleContent> 
         <xs:extension base="xs:string"> 
         <xs:attribute type="xs:string" name="value"/> 
         <xs:attribute type="xs:string" name="text"/> 
         </xs:extension> 
        </xs:simpleContent> 
        </xs:complexType> 
       </xs:element> 
       </xs:sequence> 
      </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
    <xs:element name="Roles"> 
     <xs:complexType> 
     <xs:sequence> 
      <xs:element name="Status"> 
      <xs:complexType> 
       <xs:sequence> 
       <xs:element name="Active"> 
        <xs:complexType> 
        <xs:simpleContent> 
         <xs:extension base="xs:string"> 
         <xs:attribute type="xs:string" name="value"/> 
         <xs:attribute type="xs:string" name="text"/> 
         </xs:extension> 
        </xs:simpleContent> 
        </xs:complexType> 
       </xs:element> 
       <xs:element name="Inactive"> 
        <xs:complexType> 
        <xs:simpleContent> 
         <xs:extension base="xs:string"> 
         <xs:attribute type="xs:string" name="value"/> 
         <xs:attribute type="xs:string" name="text"/> 
         </xs:extension> 
        </xs:simpleContent> 
        </xs:complexType> 
       </xs:element> 
       </xs:sequence> 
      </xs:complexType> 
      </xs:element> 
      <xs:element name="AssignedUsers"> 
      <xs:complexType> 
       <xs:sequence> 
       <xs:element name="m10"> 
        <xs:complexType> 
        <xs:simpleContent> 
         <xs:extension base="xs:string"> 
         <xs:attribute type="xs:string" name="value"/> 
         <xs:attribute type="xs:string" name="text"/> 
         </xs:extension> 
        </xs:simpleContent> 
        </xs:complexType> 
       </xs:element> 
       <xs:element name="b10and50"> 
        <xs:complexType> 
        <xs:simpleContent> 
         <xs:extension base="xs:string"> 
         <xs:attribute type="xs:string" name="value"/> 
         <xs:attribute type="xs:string" name="text"/> 
         </xs:extension> 
        </xs:simpleContent> 
        </xs:complexType> 
       </xs:element> 
       <xs:element name="x50"> 
        <xs:complexType> 
        <xs:simpleContent> 
         <xs:extension base="xs:string"> 
         <xs:attribute type="xs:string" name="value"/> 
         <xs:attribute type="xs:string" name="text"/> 
         </xs:extension> 
        </xs:simpleContent> 
        </xs:complexType> 
       </xs:element> 
       </xs:sequence> 
      </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
    </xs:sequence> 
</xs:complexType> 
</xs:element> 
</xs:schema> 

的問題是,每當我在Persons/Status中插入一個新元素,或者例如插入角色/ AssignedUsers時,我的驗證失敗。 我想要的是一個模式來驗證父元素,如人/狀態和角色/狀態和其他,但像'''這樣的子元素不需要存在,但如果他們存在,他們必須有屬性'值'和'文本'。 如何創建這樣的模式,一些幫助將是偉大的。

在此先感謝。

回答

0

您的驗證失敗,因爲您沒有將任何元素指定爲可選元素,因此所有這些元素都變爲強制性的。嘗試將minOccurs="0"添加到可選的元素中。

例如,我改變

<xs:element name="Anonymous" minOccurs="0"> 

和示例XML沒有錯誤

+0

謝謝你的反應是有效的,但我不完全理解。你是說通過添加minOccurs =「0」,我可以從xsd中刪除屬於我xml中的子元素的所有元素(屬於具有'value'和'text'屬性的元素的信息)? 。那麼我的子元素中的「值」和「文本」屬性的驗證呢?我怎麼才能驗證它們? – Djave