2012-09-18 69 views
2

我從客戶處獲得了以下XSD位。它是跨越數十個文件的傳統模式的一部分。xs:混合無元素是什麼意思?

<xs:element name="stateProvinceName"> 
    <xs:complexType mixed="true"> 
    <xs:attributeGroup ref="xml:attlist.global-attributes"/> 
    </xs:complexType> 
</xs:element> 

我想弄清楚他們真正想要什麼。沒有子元素,那麼這個'xs:mixed'的含義是什麼?它應該是簡單的內容,還是沒有內容?我告訴他們應該使用更多的標準構造,例如,

<xs:element name="stateProvinceName"> 
    <xs:complexType> 
    <xs:simpleContent> 
     <xs:extension base="xs:string"> 
     <xs:attributeGroup ref="xml:attlist.global-attributes"/> 
     </xs:extension> 
    </xs:simpleContent> 
    </xs:complexType> 
</xs:element> 

但他們不確定它是否意味着同樣的事情。兩種模式接受

<stateProvinceName ID="345643">California</stateProvinceName> 

<stateProvinceName ID="345643"/> 
+0

'的混合複雜類型的元素可以包含屬性,元件和text.' [來源](http://www.w3schools.com/schema/schema_complex_mixed.asp)你能發佈某些XML的實施例? – user1424311

+0

的可能的複製[混合=「真」和xs的差異:在擴展XML模式](http://stackoverflow.com/questions/6084431/difference-of-mixed-true-and-xsextension-in-xml-schema ) –

回答

5

這兩種類型在表面上可能是等效的,但它們的可擴展性是不同。使用簡單的xs:string內容類型,可以通過用正則表達式限制字符串來優化類型,而使用不帶元素的混合複雜內容類型則允許通過向模型添加元素來進行細化。

+0

「,而使用沒有元素的混合複雜內容類型允許通過向模型添加元素來進行細化」這是什麼意思?你可以添加一個例子嗎?謝謝。 – hariszhr

2

mixed用空內容模型的使用是完全標準。如果你不喜歡他們的內容模型,你需要一個不同的論點。

一般而言,mixed="true"意味着字符內容在給定的複雜類型的子元素中允許的;在這種情況下,由於內容模型中沒有子元素,父元素的唯一合法內容將是字符數據,註釋和處理指令。結果將是元素聲明接受相同的元素集合,如果元素是使用複雜類型進行鍵入的,而簡單內容聲明爲xs:string的擴展名。

混合內容和字符串之間的選擇是一個設計決定。一般而言,混合內容對自然語言散文來說更好,即使元素的初始設計沒有預見到子元素的需要。一般而言,如果作爲限制期望值集的基礎,則更易於使用xs:string。 (如果您想限制stateProvinceName僅接受特定郵政服務定義的代碼,則xs:string比混合內容更適合您的工作。)

+0

這不關乎__他們的模型。這是關於建議一個解決方法,直到我修復此錯誤,這可能需要一段時間(如果他們需要等待下一個版本,則需要更長的時間) – ModdyFire

+0

對不起,你已經失去了我。你問的問題是聲明的含義。這個問題沒有提到一個錯誤,也沒有說明要解決什麼問題。對不起,如果短語「如果你不喜歡他們的模型」擦你錯誤的方式;這是我試圖解釋原始文章中提出的觀點,與空白內容模型混合的內容在某種程度上不如'xs:string'標準。不是。祝好運修復錯誤,不管它是什麼。 –

0

這意味着您有一個名爲stateProvinceName的元素,它具有一個或多個屬性(由xml:attlist.global-attributes定義),其內容是一個字符串。因爲它與你推薦的結構沒有什麼不同。

他們的潛在的區別,但是,他們的擴展性,作爲@Michael Kay noted