xsd:any和xsd:anyType之间的差异/相似之处

时间:2011-03-22 09:25:25

标签: xml xsd

我正在阅读有关XML,XML-Schema,DTD的内容,我并不完全理解 xsd:any xsd:anyType 之间的区别。

有人可以向我解释这个或指出一些好文章吗? (请不要链接到XML-Schema规范 - 我读过那些,我更困惑)

TIA

2 个答案:

答案 0 :(得分:29)

This post很好地解释了这一点。我引用:

  

xsd:anyType是一种类型,比如   xsd:integer(虽然xsd:anyType是   特别之处在于它可以作为一个简单的   或复杂的类型,它放置   基本上没有限制   它验证的树 - 想一想   像Schema语言一样松散   类似于java.lang.Object)。

     

示例用法是:

<xsd:element name="e" type="xsd:anyType"/>
  

这意味着命名的元素   <e>可以包含任何内容   属性等。

     

xs:any是一个通配符,可用作术语   在内容模型中。例如:

<xsd:complexType name="T">
  <xsd:sequence>
    <xsd:element ref="A"/>
    <xsd:any />
    <xsd:element ref="C"/>
  </xsd:sequence>
</xsd:complexType>
  

T类元素必须包含内容   <A/><???/><C/>,其中<???>可以   任何命名元素。现在,如果你看   真的很紧密有一个   近似于定义   xsd:anyType给出以供参考   建议,它使用xsd:any   通配符作为说法的手段   它允许任何元素。

另请查看XML Schema

答案 1 :(得分:28)

在我创建以下示例之前,在dogbane的回答中链接的邮件列表帖子并不清楚:

使用anyType架构:

<xsd:complexType name="Outer">
    <xsd:element name="e" type="xsd:anyType" />
</xsd:complexType>

允许这种格式:

<Outer>
    <e> // must be called "e"
        // but anything can go inside
    </e>
</Outer>

使用任何架构:

<xsd:complexType name="Outer">
    <xsd:any />
</xsd:complexType>

允许这种格式:

<Outer>
    //anything can go inside
</Outer>

所以anyType是一个类型,any是一个元素