仔細閱讀最新的 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。
uj5u.com熱心網友回復:
W3C XML Recommendation 僅定義了一種型別的 XML 模式:DTD。其他存在:XSD、Relax NG 和 Schematron 是其他 XML 模式。事實上,由于表達能力有限,DTD 很少用于定義現代 XML 模式。
有效性的概念已擴展到適用于所有 XML 模式:如果 XML 檔案遵守模式定義的語法和內容約束,則稱該 XML 檔案對 XML 模式有效。
- 可以省略 DTD,原因與 XML 檔案不需要與任何 XML 模式相關聯的原因相同:對于應用程式來說,遵守格式良好的規則通常就足夠了。
- 可以省略 XML 宣告,因為其值的默認值足以支持整個建議書其余部分的格式良好的規則。
也可以看看
- “有效的 xml”和“格式良好的 xml”之間有什么區別嗎?
uj5u.com熱心網友回復:
如果 XML 檔案需要有效,請解釋 DTD 如何可以是可選的。
好吧,有效性是可選的,因此 DTD 是可選的。
我認為你對“有效”這個詞讀得太多了。讓我們假設他們沒有稱其為“有效性”,而是稱其為“可愛”。如果一個檔案有一個 DTD 并且與該 DTD 中定義的規則相匹配,那么它就是可愛的。并非所有檔案都很可愛;可愛性是可選的,因此 DTD 是可選的。
至于你關于 DocBook 和 RelaxNG 的最后一段。XML 規范中定義/描述的有效性意味著基于 DTD 的有效性。有效性的更廣泛擴展概念允許使用 DTD 以外的約束語言定義檔案結構,例如 XSD 或 RelaxNG。沒有 Doctype/DTD 的檔案在 XML 規范的狹義上是無效的,但在允許替代模式語言的更廣泛的意義上它可以是有效的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/368125.html
標籤:xml xsd dtd xml验证 docbook-5
