簡體   English   中英

如果 XML 聲明和 DTD 都是 XML 文檔的有效性和格式良好的先決條件,那么它們如何在規范中是可選的?

[英]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 文檔示例

<?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 模式有效

  • 可以省略 DTD,原因與 XML 文檔不需要與任何 XML 模式相關聯的原因相同:對於應用程序而言,遵守格式良好的規則通常就足夠了。
  • 可以省略 XML 聲明,因為它的默認值足以支持整個建議書的 rest 中的格式良好規則。

也可以看看

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM