2013-03-15 110 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