[英]How can both XML declaration and DTD be optional in the spec if they are both prerequisites to validity and well-formedness of an XML document?
仔細閱讀最新的 XML 1.0 規范,XML 文檔定義如下:
[1] document ::= prolog element Misc*
...
[22] prolog ::= XMLDecl? Misc* (doctypedecl Misc*)?
[23] XMLDecl ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>'
...
[28] doctypedecl ::= '<!DOCTYPE' S Name (S ExternalID)? S? ('[' intSubset ']' S?)? '>'
該規范指出
文檔類型聲明的定義有兩個格式約束和一個有效性約束,所以如果省略它,XML 文檔不能被認為是有效的。
那里有一個最小的 XML 文檔示例,
<?xml version="1.0"?>
<greeting>Hello, world!</greeting>
我理解為什么它格式正確但無效,但它仍然沒有解釋如果 XML 文檔有效,DTD 如何是可選的。
開始閱讀XML 規范,因為想要在進入 DocBook 5 之前獲得更好的理解,但它的手冊指出“ DocBook V5.0 是因此使用稱為 RELAX NG 的強大模式語言定義的”,因此它“不再依賴於 DTD ”,並且顯示的示例也完全省略了 DTD。
如果 XML 文檔有效,則說明 DTD 如何是可選的。
好吧,有效性是可選的,因此 DTD 是可選的。
我認為您對“有效”一詞的閱讀過多。 假設他們沒有稱其為“有效性”,而是稱其為“可愛”。 如果一個文檔有一個 DTD 並且與該 DTD 中定義的規則相匹配,那么它就是可愛的。 並非所有文件都很可愛; 可愛是可選的,因此 DTD 是可選的。
至於關於 DocBook 和 RelaxNG 的最后一段。 XML 規范中定義/描述的有效性是指基於 DTD 的有效性。 有效性的更廣泛擴展概念允許使用 DTD 以外的約束語言定義文檔結構,例如 XSD 或 RelaxNG。 沒有 Doctype/DTD 的文檔在 XML 規范的狹義上是無效的,但在允許替代模式語言的廣義上是有效的。
W3C XML 建議僅定義了一種類型的 XML 模式:DTD。 其他存在:XSD、Relax NG 和 Schematron 是其他 XML 模式。 事實上,DTD 很少用於定義現代 XML 模式,因為它的表達能力有限。
有效性的概念已擴展到適用於所有 XML 模式:如果 XML 文檔符合由模式和內容定義的模式約束,則對 XML 模式有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.