2013-02-08 108 views
0

我的XML看起来是这样的:具有属性和子元素的元素的XSD表示是什么?

<root> 
    <elt att1="bla" att2="ble"> 
    <subelt satt1="bli" satt2="1" /> 
    <subelt satt1="blo" satt2="18" /> 
    <subelt satt1="blu" satt2="4" /> 
    </elt> 
</root> 

可能有1到任何ELT。 elt可能有1到任何子带。 我尝试使用此实用程序验证我的模式:http://www.utilities-online.info/xsdvalidation。这是我的xsd:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="root"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="elt" minOccurs="1" maxOccurs="unbounded"> 
      <xs:complexType> 
      <xs:attribute name="att1" type="xs:string" use="required"/> 
      <xs:attribute name="att2" type="xs:string" use="required"/> 
      <xs:sequence> 
       <xs:element name="subelt" minOccurs="1" maxOccurs="unbounded"> 
       <xs:complexType> 
        <xs:attribute name="subatt1" type="xs:string" use="required"/> 
        <xs:attribute name="subatt2" type="xs:integer"/> 
       </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

问题来自具有属性和子元素(序列)的元素。我尝试在序列周围放置一个xs:complexType,但仍然得到一个不同的错误。我是一个XML模式的初学者,所以对于我如何格式化它有点困难。你能给我一些关于它的建议吗?谢谢。

(有可能是在我的文件中有一些错别字,因为我改变元素和属性名)

回答

1

由于历史的原因,XSD复杂类型首先指定元素的内容模型,然后属性。所以elt元素的复杂类型应该看起来像这样:

<xs:complexType> 
    <xs:sequence> 
    <xs:element name="subelt" minOccurs="1" maxOccurs="unbounded"> 
     <xs:complexType> 
     <xs:attribute name="subatt1" type="xs:string" use="required"/> 
     <xs:attribute name="subatt2" type="xs:integer"/> 
     </xs:complexType> 
    </xs:element> 
    </xs:sequence> 
    <xs:attribute name="att1" type="xs:string" use="required"/> 
    <xs:attribute name="att2" type="xs:string" use="required"/> 
</xs:complexType> 
+0

我永远不会猜到。谢谢。 – Cyctemic 2013-02-11 13:58:21

+0

猜测对于某些语言来说效果惊人,对于XSD通常不那么好。如果我是你,我会得到一本好书和一个好的XSD编辑器。 – 2013-02-11 16:36:55

相关问题