2013-04-30 124 views
3

我需要一個DTD其允許元素A爲具有0,1或2子元素B.我與DTD:0,1或2個元素

<!ELEMENT A (B? |(B,B))> 

嘗試過,但然後我得到一個錯誤:

validity error : Content model of A is not determinist 

這是什麼問題,我該如何解決它?或者不可能用DTD解決它?

+0

試試這個 – IndoKnight 2013-04-30 15:26:41

+0

這是我的第一個解決方案,但同樣的錯誤再次 – SPie 2013-05-02 00:43:22

回答

1

內容模型,如

(B? |(B,B)) 

(B?, B?) 

(B? | (B,B) | B) 

是非確定性的;解析器無法分辨哪個B正在被匹配,而沒有展望後面的內容。

XML 1.0建議中不允許使用非確定性內容模型:http://www.w3.org/TR/xml/#determinism。但是,確定性要求與SGML兼容。我想,這可能解釋XML解析器之間的行爲差​​異幫助:

  • xmllint(libxml2的)更「嚴厲」和報告上述所有內容模型爲錯誤的(「A的內容模型不確定性「)。
  • Xerces-J(用於氧氣的解析器,順便說一句)大概不會試圖與SGML兼容並接受它們。

參見:<!(?B1,B2)ELEMENT A>What is the reason for not allowing non-deterministic element declarations in DTDs and XSD schemas?

0

試試這個DTD,從而獲得所需XML:

<!ELEMENT A ((B?|(B,B)|B))> 
<!ELEMENT B (#PCDATA)> 
+0

同樣的錯誤 – SPie 2013-05-02 17:04:06

+0

我已經檢查這個DTD,它在氧氣中工作正常。它支持XML像,你需要的能力。 – 2013-05-03 05:35:11