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

use*_*323 23 xml xsd

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

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

TIA

dog*_*ane 30

这篇文章很好地解释了它.我引用:

XSD:anyType的是一种类型,就像XSD:整数(虽然XSD:anyType的是,它可以作为一个简单的或复杂类型的特殊作用,以及它给它验证树基本上没有限制 - 粗略地认为它作为模式语言的类似于java.lang.Object).

示例用法是:

<xsd:element name="e" type="xsd:anyType"/>
Run Code Online (Sandbox Code Playgroud)

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

xs:any是通配符,可用作内容模型中的术语.例如:

<xsd:complexType name="T">
  <xsd:sequence>
    <xsd:element ref="A"/>
    <xsd:any />
    <xsd:element ref="C"/>
  </xsd:sequence>
</xsd:complexType>
Run Code Online (Sandbox Code Playgroud)

类型T的元素必须具有内容 <A/><???/><C/>,其中<???>可以是任何命名元素.现在,如果你仔细观察,有一个近似于建议书中给出的xsd:anyType的定义,它使用xsd:any通配符作为说明它允许任何元素的方法.

另请参阅XML Schema.


小智 28

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

使用anyType架构:

<xsd:complexType name="Outer">
    <xsd:element name="e" type="xsd:anyType" />
</xsd:complexType>
Run Code Online (Sandbox Code Playgroud)

哪个允许这种格式:

<Outer>
    <e> // must be called "e"
        // but anything can go inside
    </e>
</Outer>
Run Code Online (Sandbox Code Playgroud)

并使用任何架构:

<xsd:complexType name="Outer">
    <xsd:any />
</xsd:complexType>
Run Code Online (Sandbox Code Playgroud)

哪个允许这种格式:

<Outer>
    //anything can go inside
</Outer>
Run Code Online (Sandbox Code Playgroud)

所以anyType是一个类型,任何都是一个元素