2012-10-16 70 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