两种模式都是等价的吗?

时间:2013-03-15 10:37:46

标签: xsd xml-validation xsd-validation

1

<xsd:element name="tuple">
<xsd:complexType>
    <xsd:sequence>
        <xsd:any minOccurs="0" maxOccurs="unbounded" namespace="##any" processContents="skip" />
    </xsd:sequence>
</xsd:complexType>

2

<xsd:element name="tuple"/>

以上两种模式是否相同?

请帮忙

1 个答案:

答案 0 :(得分:0)

NO!他们不一样!

在第一个架构中:元素<tuple>下面可以包含0个或更多带有/的任何名称的元素,这是因为您添加了<any>标记{{1元素minOccurs="0"的{​​{1}}定义下的{}和maxOccurs="Unbounded"
另外,由于您在complexType下指定了tuple,因此不会对其子元素产生任何影响。

示例:

processContents="skip"

正如您所看到的,虽然在XSD中未定义<any><tuple> <foo>data</foo> <bar foobarattribute="foobardata">data</bar> </tuple> 及其属性foo,但它允许此XML有效。 但它不允许 bar

下的属性
  

编辑:

第二个架构: 它与将类型声明为foobarattribute

相同
<tuple>

这意味着它允许任何元素和元组下的任何属性。示例XML将如下:

anyType

您可以观察到,与第一个示例XML不同,它还具有<xsd:element name="tuple" type="xs:anyType"/> 下的属性。

两个示例XSD代码之间的另一个重要区别是: 在第一个代码中,您将processContents指定为“skip”:因为哪个XML处理器不会尝试验证指定命名空间中的任何元素..

在第二个代码中,对于anyType,processContents将是“lax”:因为XML处理器试图获取所需命名空间的模式并验证元素。

希望有所帮助......