<a target="_blank" href="http://bbs.w3china.org/index.asp">更多資訊請通路 W3CHINA.ORG讨論區</a>
A website dedicated to promoting the widespread deployment of W3C technologies.
A website designed to propagate information on the future of the Web.
A website ideally suited for discussions and the exchange of relevant information.
譯文:
原文:
說明:
l 本文檔是根據2001年10月24日釋出的XML Information Set推薦标準進行翻譯的。
l 譯注的内容是非正式的,僅代表譯者個人觀點。
譯者:
時間:
首次釋出于2003年8月10日/最後更新于2003年8月10日
緻 謝
感謝所有在文檔翻譯過程中給予技術指點和解答的專家,他們是:
<a target="_blank" href="http://www.w3.org/"></a>
目前版本:
<a target="_blank" href="http://www.w3.org/TR/2001/REC-xml-infoset-20011024">http://www.w3.org/TR/2001/REC-xml-infoset-20011024</a>
最新版本:
<a target="_blank" href="http://www.w3.org/TR/xml-infoset">http://www.w3.org/TR/xml-infoset</a>
上一版本:
<a target="_blank" href="http://www.w3.org/TR/2001/PR-xml-infoset-20010810">http://www.w3.org/TR/2001/PR-xml-infoset-20010810</a>
編者:
本規範為那些需要引用XML文檔中的資訊的規範提供了一組定義。
這一部分描述了本文檔在釋出時的狀态。本文檔可能會被其他文檔所取代。本文檔系列的最新狀态由W3C維護。
本文檔已經過 W3C 成員和其他相關方面(interested parties)的審閱,并已被W3C Director準許為 W3C推薦标準(W3C Recommendation)。本文檔是穩定的(stable)。這意味着本文檔可被用作參考資料或其他文檔的規範性參考文獻(normative reference)。W3C 制定推薦标準的任務是使之受到關注,并促使其被廣泛使用。這将增強Web的功能性(functionality)與互操作性(interoperablity)。
本規範并不試圖做到毫無遺漏;一個資訊項(information item)或一個屬性(property)是否被包括在内,主要取決于它在未來規範中的用處。本規範并沒有規定XML處理器(XML processor)必須傳回的資訊。
資訊集的建立可以通過解析XML文檔的方式來進行,也可以通過調用方法的方式來進行(本規範沒有描述這種方法)。參見
XML資訊集沒有規定或傾向于使用某個或某一類接口。本規範使用被修飾的樹(modified tree)來描述XML資訊集是出于簡單和明了的考慮,并不表示一定要用樹結構來構造XML資訊集。其他類型的接口,比如(但不局限于)基于事件的(event-based)或基于查詢的(query-based)接口都可以遵照本規範來提供XML文檔中的資訊。
對于“資訊集(information set)”和“資訊項(information item)”這兩個術語,它們的含義類似于通常所說的“樹(tree)”和“結點(node)”。盡管如此,本規範中仍将使用前面兩個術語,以避免與其他一些資料模型(data model)混淆。注意:資訊項與DOM中的結點(node)或XPath資料模型中的樹(tree)和結點(node)沒有一一對應的關系。
[namespace name]屬性的值是規格化後的值;處理器不對它進行任何其它的URI轉義操作。
這些屬性的值不反映為擷取資源而可能需要的URI轉義操作,但是在下面兩種情況下這些屬性可能會包含轉義處理後的字元:(1)這些字元是在文檔中指定的;(2)這些字元是伺服器在重定向時傳回的。
在解析相對URI時,[base URI]屬性(property)應優先于xml:base屬性(attribute)被使用。因為在合成的資訊集(Synthetic Infosets)中,它們可能會不一緻。
有些屬性有時可以取值no value或unknown[譯注//注意:這裡的no value和unknown僅表示抽象的含義,并不表示實際的屬性值就是字元串“no value”或“unknown”。在實際應用中如何展現這兩個特殊的值與具體的資訊集接口(interface)有關,不同的資訊集接口可能會采取不同的方式來展現這兩個值]。它們分别表示該屬性的值未知或該屬性沒有值。這兩個值是互相差別的,它們與其它值也有所不同。要特别注意的是:這兩個值與空字元串(empty string)、空集(empty set)以及空清單(empty list)是不同的(後三者僅表示沒有成員)。本規範沒有使用null做為屬性值是因為:在某些領域,它(null)有着特殊的含義,而這些含義不符合這裡的需要。
本規範描述了通過解析XML文檔的方式得到的XML資訊集。XML資訊集也可以通過其他方式來構造(比如使用像DOM這樣的API,或對已有的資訊集進行修改)。
對應于一個真實XML文檔的資訊集必然在多處保持一緻。比如,某個元素的[in-scope namespace]屬性必然與該元素以及該元素的祖先的[namespace attributes]屬性一緻。但對于使用其它方法構造出的資訊集,這一點未必成立。在這種情況下,該資訊集沒有相應的XML文檔。是以,若要将其序列化(serialize),就必須解決這些不一緻(比如輸出所有在元素範圍内有效的命名空間的聲明)。
每個資訊集有且僅有一個文檔資訊項(document information item)。資訊集中的所有其他資訊項都可以從文檔資訊項的屬性以及屬性的屬性等等來獲得。
文檔資訊項包含以下屬性:
5. [base URI] 文檔實體的基準URI。
6. [character encoding scheme] 文檔實體(document entity)采用的字元編碼方案的名稱。
7. [standalone] 本屬性表明XML文檔是否是一個獨立文檔(standalone document)。它的值是根據XML聲明(位于文檔實體的首部)中的獨立文檔聲明(在XML聲明中是可選的)來設定的。如果沒有獨立文檔聲明,則該屬性沒有值(no value)。
8. [version] 一個字元串,表明文檔遵從的XML版本号。本屬性的值是根據XML聲明(位于文檔實體的首部,可選的)中的版本資訊來設定的。如果沒有XML聲明,則本屬性沒有值(no value)。
9. [all declarations processed] 嚴格地說,本屬性不屬于文檔資訊集的一部分,它僅表明XML處理器是否已經讀過了整個DTD。本屬性的值是一個布爾量,它可能會影響資訊集中的某些其他屬性(在介紹這些屬性時将給予說明)的取值:如果本屬性的值為false,則它們的值為未知(unknown);如果本屬性的值為true,則它們的值一定是未知(unknown)以外的值。
對于出現在XML文檔中的每個元素(element),在資訊集中都有一個相應的元素資訊項(element information item)。在所有的元素資訊項中,必有一個是文檔資訊項的[document element]屬性的值。這個元素資訊項對應于元素樹結構的根。以該元素資訊項為起點,遞歸地通路[children]屬性,便可獲得所有其餘的元素資訊項。
元素資訊項包含下列屬性:
1. [namespace name] 元素類型[譯注//這裡的元素指的是在XML文檔中與本資訊項對應的那個元素,下同。]的命名空間名(namespace name)(如果有的話)。如果元素不屬于任何命名空間,則本屬性沒有值(no value)。
2. [local name] 元素類型名(element-type name)的内部名(local part)。本屬性不包括命名空間字首(namespace prefix)和冒号。
3. [prefix] 元素類型名的命名空間字首(namespace prefix)。如果元素類型名沒有字首,則本屬性沒有值(no value)。注意:支援命名空間的應用程式應使用命名空間名(namespace name)而不是命名空間字首(namespace prefix)來辨別元素[譯注//命名空間名唯一地辨別一個命名空間,而命名空間字首則不一定。因為不同的命名空間字首可能對應着同一個命名空間名。]。
8. [base URI] 元素的基準URI。
9. [parent] 本屬性的值為一個文檔資訊項或元素資訊項,它的[children]屬性包含本資訊項。
對于元素的每個屬性(無論是被顯式指定屬性值,還是根據DTD得到預設屬性值),包括命名空間聲明,都有一個相應的屬性資訊項(attribute information item)。一般屬性對應的屬性資訊項出現在元素資訊項的[attribute]屬性中;而命名空間聲明對應的屬性資訊項出現在元素的[namespace attributes]屬性中。
既沒有預設值又沒有在使用時被顯式指定屬性值的屬性沒有相應的屬性資訊項。
屬性資訊項包含以下屬性(property)[譯注//注意區分attribute與property]:
1. [namespace name] 屬性(attribute)[譯注//即與本資訊項對應的屬性,下同。]的命名空間名(如果有的話)。對于不屬于任何命名空間的屬性(attribute),本屬性(property)沒有值(no value)。
2. [local name] 屬性名的内部名(local part)。本屬性(property)不含命名空間字首和冒号。
3. [prefix] 屬性名(attribute name)的命名空間字首。對于不包含命名空間字首的屬性名(attribute name),本屬性(property)沒有值(no value)。注意:支援命名空間的應用程式應使用命名空間名而不是命名空間字首來辨別屬性。
5. [specified] 本屬性(property)為一個标記(flag),它表示屬性值(attribute value)是在元素的首标簽中被顯式指定的,還是取自DTD中的預設值。
6. [attribute type] 屬性(attribute)的類型。本屬性(property)的合法值包括:ID、IDREF、IDREFS、ENTITY、ENTITIES、NMTOKEN、NMTOKENS、NOTATION、CDATA和ENUMERATION。對于沒有聲明的元素,該屬性沒有值(no value)。如果尚未讀到聲明,并且文檔資訊項的[all declarations processed]屬性為false(即可能還有未讀到的聲明),則本屬性的值為未知(unknown)。應用程式應将沒有值(no value)和未知(unknown)作為CDATA值來對待。
8. [owner element] 本屬性的值為一個元素資訊項,它的[attribute]屬性包含本資訊項。
文檔中的每個處理指令(processing instruction,簡稱PI)都有一個相應的PI資訊項(processing instruction inforamiton item)。注意:XML聲明(XML declaration)和文本聲明(text declaration)(用于外部已解析實體)不屬于處理指令(PI)範疇。
PI資訊項包含以下屬性:
1. [target] 本屬性的值為一個字元串,表示PI的目标(PI Target)。
2. [content] 本屬性的值為一個字元串,表示PI的内容(不包含PI目标和PI目标後的空白)。如果PI沒有内容,則本屬性的值為一個空字元串(empty string)。
3. [base URI] PI的基準URI。注意:在将一個資訊集序列化為一個XML文檔時,原來位于最高層外部實體中的那些PI的基準URI無法得到保留,因為沒有這樣的文法。
5. [parent] 本屬性的值為一個文檔資訊項、元素資訊項或文檔類型聲明資訊項,它的[children]屬性包含本資訊項。
XML處理器通過設定一個未展開實體引用資訊項(unexpanded entity reference information item)來表明處理器還沒有展開某個外部已解析實體(external parsed entity)。對于在元素内容中出現的每個尚未展開的對外部一般實體的引用,有一個相應的未展開實體引用資訊項。對于要讀取所有外部一般實體的XML處理器(無論是有驗證的還是無驗證的),它不為有效的文檔(valid document)建立本資訊項。
未展開實體引用資訊項包含以下屬性:
1. [name] 被引用實體的名稱。
2. [system identifier] 實體的系統辨別符(system identifier)。這裡的系統辨別符和在實體聲明中給出的系統辨別符是一樣的,XML處理器未對它進行URI轉義處理。如果沒有關于該實體的聲明,則本屬性沒有值(no value)。如果尚未讀到聲明,并且文檔資訊項的[all declarations processed]屬性為false(即可能還有未讀到的聲明),則本屬性的值為未知(unknown)。
4. [declaration base URI] 在解析系統辨別符(system identifier)時應參照的基準URI(也就是包含該實體的聲明的資源的基準URI)。如果[system identifier]屬性沒有值(no value)或屬性值為未知(unknown),則本屬性也沒有值(no value)或屬性值為未知(unknown)。
5. [parent] 本屬性的值為一個元素資訊項,它的[children]屬性包含本資訊項。
文檔中出現的每個資料字元(data character)(無論是字元引用還是CDATA段中的字元)都有一個相應的字元資訊項(character information item)。
每個字元在邏輯上都是分開的資訊項,但XML應用程式可以根據需要自由地将字元組織成更大的塊。
字元資訊項包含以下屬性:
1. [character code] 字元對應的ISO 10646字元代碼(範圍從0到#x10FFFF,盡管這個範圍内的值并不都是合法的XML字元代碼)。
3. [parent] 本屬性的值為一個元素資訊項,它的[children]屬性包含本資訊項。
原始文檔中的每個(除了DTD中的)XML注釋都有一個相應的注釋資訊項(comemnt information item)。
注釋資訊項包含以下屬性:
1. [content] 本屬性的值為一個字元串,它表示注釋的内容。
2. [parent] 本屬性的值為一個文檔資訊項或元素資訊項,它的[children]屬性包含本資訊項。
如果XML文檔有文檔類型聲明(document type declaration),則資訊集中包含一個文檔類型聲明資訊項(document type declaration information item)。注意:實體和格式(notation)是文檔資訊項的屬性,而不是文檔類型聲明資訊項的屬性。
文檔類型聲明資訊項包含以下屬性:
1. [system identifier] 外部子集的系統辨別符(system identifier)。這裡的系統辨別符和在DOCTYPE聲明中給出的系統辨別符是一樣的,XML處理器未對它進行URI轉義處理。如果沒有外部子集,則本屬性沒有值(no value)。
4. [parent] 本屬性的值為文檔資訊項。
在DTD中聲明的每個非解析一般實體(unparsed general entity)[譯注//非解析實體隻有一種,即外部非解析一般實體(external unparsed general entity)]都有一個非解析實體資訊項(Unparsed Entity Information Item)。
非解析實體資訊項包含以下屬性:
1. [name] 實體的名稱。
2. [system identifier] 實體的系統辨別符。這裡的系統辨別符和在實體聲明中給出的系統辨別符是一樣的,XML處理器未對它進行URI轉義處理。
4. [declaration base URI] 在解析系統辨別符時應參照的基準URI(也就是包含該實體的聲明的資源的基準URI)。
5. [notation name] 實體對應的格式名稱(notation name)。
在DTD中聲明的每個格式(notation)都有一個格式資訊項(notation information item)。
格式資訊項包含以下屬性:
1. [name] 格式的名稱。
2. [system identifier] 格式的系統辨別符(system identifier)。這裡的系統辨別符和在格式聲明中給出的系統辨別符是一樣的,XML處理器未對它進行URI轉義處理。如果沒有給出格式的系統辨別符,則本屬性沒有值(no value)。
4. [declaration base URI] 在解析系統辨別符(system identifier)時應參照的基準URI(也就是包含該格式的聲明的資源的基準URI)。
每個元素對應的元素資訊項都有一個[in-scope namespaces]屬性,對于在該元素範圍内有效的每個命名空間在這個屬性中都有一個相應的命名空間資訊項(namespace information item)[譯注//注意:并不是在該元素範圍内有效的每個命名空間都是隻有一個命名空間資訊項。比如,如果在該元素範圍内有兩個不同的命名空間字首綁定到同一個命名空間上,則将有兩個命名空間資訊項,它們分别對應于這兩個綁定。是以,嚴格地說,是該元素範圍内有效的每個命名空間綁定對應一個命名空間資訊項。]。
命名空間資訊項包含以下屬性:
1. [prefix] 命名空間的字首。從文法上說,本屬性(property)的值為屬性名(attribute name)[譯注//即聲明本命名空間的那個屬性的屬性名]中位于字首“xmlns:”後的部分。如果屬性名為“xmlns”(即聲明預設命名空間),則本屬性沒有值(no value)。
2. [namespace name] 命名空間字首對應的命名空間名(namespace name)。
資訊集的用途在于提供一組定義,是以,一緻性是對那些使用了這些定義的規範[譯注//比如SOAP和OWL等]而言的,而不是對這些規範的實作而言的。
引用了XML資訊集的規範必須:
· 指出哪些資訊項和屬性對于實作該規範是必需的。(這一點間接地對那些實作該規範的處理器施加了一緻性需求)
· 指出如何處理那些非必需的資訊項和屬性(比如,可以将它們原封不動地傳遞至下一處理階段)。
· 記錄所有要求XML文檔提供、而資訊集沒有定義的資訊。
· 記錄那些用法與資訊集的定義不同的術語(這是應當避免的)。
ISO (International Organization for Standardization). ISO/IEC 10646-1993 (E). Information technology -- Universal Multiple-Octet Coded Character Set (UCS) -- Part 1: Architecture and Basic Multilingual Plane. [Geneva]: International Organization for Standardization, 1993 (plus amendments AM 1 through AM 7).
通報需求包括錯誤(它不屬于本規範的讨論範圍)和文檔資訊。XML 1.0對文檔資訊通報的所有需求都已被綜合到本規範中。括号中的數字表示它們在XML 1.0推薦标準中的所在段落(section)。
1. XML處理器必須向應用程式提供文檔中所有非标記(markup)部分的字元(2.10)。
2. 有驗證的XML處理器必須向應用程式通封包檔中哪些字元資料是出現在元素内容中的空白(2.10)。
3. XML處理器必須在将行結束符(line-ends)傳遞給應用程式之前把它們規格化為LF(2.11)。
4. XML處理器必須在将屬性值傳遞給應用程式之前按照3.3.3節中的規則對它們進行規格化。
5. XML處理器必須将已聲明的格式的名稱和外部辨別符(系統辨別符、公共辨別符或兩者)傳遞給應用程式(4.7)。
6. 當一個非解析實體的名稱出現在ENTITY或ENTITIES屬性值中(無論是被顯式指定還是獲得預設值),XML處理器必須向應用程式提供這個實體的以及它的格式(notation)的名稱、系統辨別符和公共辨別符(如果有的話)(4.6,4.7)。
7. XML處理器必須将所有PI傳遞給應用程式(2.6)。
8. 如果一個XML處理器(無驗證的)沒有包含(include)外部已解析實體的替換文本(以替換實體引用),則它必須向應用程式通報它能識别但沒有讀取這個實體(4.4.3)。
9. 有驗證的XML處理器必須包含(include)實體的替換文本(以替換實體引用)(5.2)。
10. 如果某個元素類型的一個屬性有預設值,并且在該元素的首标簽中沒有為這個屬性顯式地指定屬性值,則XML處理器必須為這個屬性提供預設值。
看下面的示例XML文檔:
<?xml version="1.0"?>
<msg:message doc:date="19990421"
>Phone home!</msg:message>
這個XML文檔的資訊集包含以下資訊項:
目前版本的XML資訊集不包含下列資訊(本清單并不試圖做到毫無遺漏):
1. 在DTD的ELEMENT聲明中定義的元素内容模型(content model)。
2. ATTLIST聲明中屬性聲明的分組和次序。
3. 文檔類型的名稱。
4. 文檔元素以外的空白(white space)。
5. 緊随PI目标名(target name)後的空白。
6. 字元是否是以字元引用(character reference)的形式出現的。
7. 空元素的兩種形式(即<foo/>與<foo></foo> [譯注//關于foo的典故與含義,請參見RFC 3092])之間的差別。
8. 首标簽(start-tag)和尾标簽(end-tag)之間的空白(屬性值裡的有意義的空白除外)。
9. 行終止符CR、CR-LF和LF之間的差別。
10. 首标簽裡屬性的出現次序。
11. DTD中聲明的出現次序。
12. DTD中條件段(conditional sections)的邊界(boundaries)[譯注//即一個DTD片段是否來自條件段(conditional section)]。
13. DTD中參數實體的邊界。
14. DTD中的注釋(comment)。
15. 聲明的位置(内部實體、外部實體還是參數實體)。
16. 所有被忽略的聲明(包括那些在IGNORE條件段裡的),以及因為先前已有同樣的聲明而被忽略的實體和屬性聲明。
17. 括起屬性值的引号是單引号還是雙引号。
18. 一般已解析實體(general parsed entity)的邊界。
19. CDATA段的邊界。
20. 在DTD中為屬性聲明的預設值。