2013-03-15 66 views
1

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"/> 

是上述两种模式相同呢?

请帮忙

回答

0

不!他们不一样!

在第一模式中:元件<tuple>可以具有在它之下0或多个元件与任何名称/,那是因为你下complexType定义元件的tuple
另外由于必须添加<any>标签与minOccurs="0"maxOccurs="Unbounded"<any>下指定processContents="skip"它不打扰任何关于它的子元素..

例子:

<tuple> 
    <foo>data</foo> 
    <bar foobarattribute="foobardata">data</bar> 
</tuple> 

如您所见,尽管foobar及其属性foobarattribute未在XSD中定义,但它允许此XML有效。 但它不允许属性下<tuple>

编辑:

第二个架构: 这是因为声明类型anyType

<xsd:element name="tuple" type="xs:anyType"/> 

这意味着作为同它允许元组下的任何元素和任何属性。示例XML会是这样:

<tuple foo="bar"> 
    <foobar attrb="value">data</foobar> 
</tuple> 

你可以观察,不像第一个示例XML,这<tuple>下属性为好。之间的两个样品XSD代码

一个更重要的区别是: 在要指定的processContents为“跳过”第一代码:因为它的XML处理器不尝试验证从指定的命名空间的任何元件..

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

希望它有帮助..

+2

通常你的答案应该是downvoted;我希望你能改正它。虽然第一行是正确的,但在许多层面上的解释是错误的。 2.中的元组是[anyType](http://www.w3.org/TR/xmlschema-1/#d0e9252),这意味着它可以具有任何属性,任何元素,混合以及processingContents * * **不严;在1.元组支持**元素只有内容**,**没有属性**,没有混合,并且processingContents是**跳过**。 – 2013-03-15 12:12:55

+0

@PetruGardea,谢谢你验证我的答案。我承认,我在定义案例二时犯了错误。出于某种原因,在Vis Studio中,XSD验证的行为是不同的。它不会将'no type'视为'anyType'..我在发布解决方案之前实际验证过一次,但也应该使用在线验证器进行验证。谢谢,我知道anyType,但是到目前为止我一直对'没有类型'有错误的印象。我也用processContents信息更新了答案。 – 2013-03-15 12:54:59