| 譯文 | XPointer 架構 | |
|---|---|---|
| ( http://www.opendl.com/openxml/w3/TR/xptr-framework/xptr-framework-big5.html ) | ||
| 英文 | XPointer Framework | |
| (http://www.w3.org/TR/xptr-framework/) | ||
| 注意 |
| |
| 譯者 |
| |
| 時間 | 初次定稿﹕2003 年 8 月 6 日 (NZT) | 最後修改: 2003 年 8 月 13 日 (UTC) |
Copyright © 2003 年 W3C® (MIT, INRIA, Keio), All Rights Reserved. W3C liability, trademark, document use, and software licensing rules apply.
本規格說明定義 XML 指針語言(XPointer)架構﹐該架構是一個用于 XML 的可擴展的定址系統﹐也是其它的 XPointer 模式規格說明的基礎。該架構計劃用作資源的片段標識符的基礎﹐這些資源可以是英特網媒體類型是 text/xml、application/xml、text/xml-external-parsed-entity、或 application/xml-external-parsed-entity 之一的任何資源。同時也鼓勵其它的基於 XML 的媒體類型使用這一個架構來定義它們自己的片段標識符語言。
本節描述本文檔在出版時的地位。其它的文檔可能代替本文檔。本文檔系列的最新狀態由 W3C 維護。
本文檔為萬維網協會 (W3C) 建議 (REC)。 本文檔已由萬維網協會(W3C)組織成員和其他感興趣的各方審閱﹐並已被組織理事批准為萬維網協會(W3C)建議。這是一個穩定的文檔﹐可以用作參考材料﹐也可以作為其它文檔的標準參考文獻。W3C 在建議制定過程中的作用是吸引對本規範的注意並促進它的廣泛使用。這能增強 Web 的功能性和互操作性。
本文檔是是作為 W3C XML 制定工作(W3C XML Activity)的一部份的 XML 鏈接工作組的工作成果。它計劃與附隨的 XPointer element() 模式和 XPointer xmlns() 模式規格說明一起﹐陳述最初的 XPointer 需求的核心子集﹐作為關於 XML 媒體類型的整個或基礎部份的片段標識符語法。
歡迎對本說明提建議。請電郵到公共郵件列表 www-xml-linking-comments@w3.org(存檔)。
有關本規格說明及附隨的 XPointer element() 模式 和 XPointer xmlns() 模式實現的資訊可參看實現報告。
與本推薦相關的應行公告的專利的事項和許可義務﹐依照 W3C 政策可在 XPointer 知識產權聲明頁上查到。
現有 W3C 建議和其它技術文檔的列表在 http://www.w3.org/TR。W3C 出版物可能隨時被其它的文檔更新、代替、或廢除。
1 介紹
1.1 符號表示法
1.2 術語
2 一致性
3 語言和處理
3.1 語法
3.2 簡寫指針
3.3 基於模式的指針
3.4 命名空間與上下文的綁定
4 字符轉義
4.1 上下文轉義
4.2 轉義的例子
本規格說明定義 XML 指針語言(XPointer)架構﹐該架構是一個用于 XML 的可擴展的定址系統﹐也是其它的 XPointer 模式規格說明的基礎。該架構計劃用作資源的片段標識符的基礎﹐這些資源可以是英特網媒體類型是 text/xml、application/xml、text/xml-external-parsed-entity、或 application/xml-external-parsed-entity 之一的任何資源。同時也鼓勵其它的基於 XML 的媒體類型使用這一個架構來定義它們自己的片段標識符語言。
處理 XML 的許多類型的應用程序都需使用 URI 引用來對 XML 資源的內在結構進行定址﹐例如﹐XML 鏈接語言〔XLink〕、XML Inclusions〔XInclude〕、the Resource Description Framework〔RDF〕、和 SOAP 1.2〔SOAP12〕。本規格說明既不限制對 XML 資源使用 URI 引用的應用程序的類型﹐也不限制或規定這些應用程序在定位了在那些資源內的所需要的信息後的行為。
〔定義﹕本規格說明中的關鍵字必須(must)、不能(must not)、必需的(required)、將(shall)、將不(shall not)、應該(should)、不應該(should not)、建議(recommended)、可能(may)、和可選的(optional)依照〔RFC 2119〕所描述的進行解釋。〕
用于 XPointer 架構的正式文法是在 XML 建議〔XML〕中所描述的、簡單的擴展貝克諾爾格式 (EBNF) 記號。
一個遵守本規格說明的字串。本規格說明定義指針的語法和語義。
指針的一部份﹐該部份提供了模式的名稱以及遵照那個模式定義的一些指針數據。
一個特定的指針數據格式﹐該格式有一個名稱並在某個規格說明中定義。
一個軟件組件﹐該組件藉由使用一個指針來識別 XML 資源的子資源。本規格說明定義 XPointer 處理器的行為。
一個軟件組件﹐該組件因為需要訪問 XML 資源的子資源而協同或使用 XPointer 處理器。每個應用程序所對應數據格式(可能是基於 XML 的或不是基於 XML 的)的定義決定了 XPointers 的出現和使用、以及對那些藉由處理 XPointer 而獲得的資源和子資源應採取的行為。例如﹐使用 XPointer 處理器的應用程序可以是 HTML〔HTML〕Web 瀏覽器和 XInclude 處理器。
一個對本規格說明的句法規則的違反﹐或一個識別子資源指針的失敗。
一個 XML 命名空間〔XML-Names〕定義的命名空間前綴與它們關聯的命名空間的名稱的綁定。
本規格說明定義了一個架構﹔目前它沒有為 XPointer 處理器定義一個最低的一致性的標準。因此﹐本節中的信息所定義的一致性需求只適合于任何最低的一致性的標準的架構部份。
XPointer 處理器依賴于應用程序的能力來翻轉任何的片段標識符編碼及轉碼(參看4 字符轉義)。
XPointer 處理器的行為依賴于來自 XML 資源中一定信息的可用性﹕用〔Infoset〕所提供的術語來說﹐信息項及在下面列表的的特性。信息項中的某些項及特性的出現又遵從 DTD 或 XML 模式的處理﹕並不要求遵從 XPointer 的處理器做這樣的處理﹐但是如果它們做這樣的處理﹐簡化的指針處理將會利用這些提供的信息。(參看3.2 簡寫指針)。
摘錄自 XML 信息集本身〔Infoset〕﹕
以下屬性信息項 和 元素信息項的特性摘錄自 XML 模式後模式校驗信息集(PSVI)〔XMLSchema〕﹕
[模式規格化值] 特性
Either:
[成員類型定義] 特性
[類型定義] 特性
and the [名稱], [target namespace] and [基本類型定義] 其值的特性
或﹕
[成員類型定義命名空間] 特性
[成員類型定義名稱] 特性
[類型定義命名空間] 特性
[類型定義名稱] 特性
聲明是 XPointer 處理器的軟件組件必須遵從這個 XPointer 架構規格說明﹐以及﹐包括本規格說明和任何其它定義關於 XPointer 最低的一致性的標準的規格說明﹐以及可能遵從于其它的 XPointer 模式規格說明。 XPointer 處理器必須載明它們所遵守的其它的 XPointer 模式規格說明。依賴于 XPointer 處理的規格說明應該載明它們需要和支援的模式。
遵守一致性的 XPointer 處理器必須向應用程序報告 XPointer 架構的錯誤。應用程序可以自由地選擇結束或以任何方式來從 XPointer 架構錯誤中恢復。
本節描述有 XPointer 架構和關於架構的 XPointer 處理器的行為。
XPointer 處理器接受一個 XML 資源和一個作為指針(例如﹐一個從用于存取資源的 URI 引用得來的經過轉義倒置的片段標識符)的字串作為輸入﹐嘗試針對該資源對指針進行求值﹐並生成一個子資源標識、或者一到多個的錯誤作為輸出。
如果一個字串用作為一個指針而不遵守在本節中定義的語法﹐則是一個錯誤。
符號 S 在〔XML〕中定義。符號NCName 和 QName 在〔XML-Names〕中定義。
| [1] | Pointer | ::= |
Shorthand | SchemeBased
|
| [2] | Shorthand | ::= |
NCName
|
| [3] | SchemeBased | ::= |
PointerPart (S? PointerPart)* |
| [4] | PointerPart | ::= |
SchemeName '(' SchemeData ')' |
| [5] | SchemeName | ::= |
QName
|
| [6] | SchemeData | ::= |
EscapedData*
|
| [7] | EscapedData | ::= |
NormalChar | '^(' | '^)' | '^^' | '(' SchemeData ')'
|
| [8] | NormalChar | ::= |
UnicodeChar - [()^]
|
| [9] | UnicodeChar | ::= |
[#x0-#x10FFFF]
|
如上述的產生式所示﹐右括弧“)”字符表示指針元件的結束﹐也平衡了元件的起頭的左括弧“(”字符。如果左邊或右邊的括弧在模式中出現而沒有由與它的配搭括弧來平衡﹐則必須在它之前以音調符號(^)來轉義。允許對成對的刮弧進行轉義。出現字面量的音調符號時必須用一個附加的音調符號來轉義(也就是^^)。音調符號的其它任何的用法都是一個錯誤。
簡寫指針﹐以前稱為 barename﹐由一個 NCName 單獨地組成。它最多標識在資源的信息集裡的一個元素﹐明確地說﹐即是在文檔順序下第一個(如果有任何的的話)匹配的 NCName 作為標識符。元素的標識符依下列各項決定﹕
如果元素信息項在它的[屬性]中有一個屬性信息項是由一個模式決定的 ID﹐那麼﹐它由該屬性信息項的[模式標準化的值]特性的值來標識﹔
如果元素信息項在它的[孩子]中有一個元素信息項是由一個模式決定的 ID﹐那麼﹐它由該元素信息項的[模式標準化的值]特性的值來標識﹔
如果元素信息項在它的[屬性]中有一個屬性信息項是由一個 DTD 決定的 ID﹐那麼﹐它由該屬性信息項的[模式標準化的值]特性的值來標識﹔
元素信息項也可能由外部決定的 ID 值來標識。
如果沒有元素信息項被簡寫指針的 NCName 來標識﹐該指針則是錯誤的。
注意﹕
文檔裡有超過一個 DTD 決定的 ID、模式決定的 ID、和外部決定的 ID 的時候﹐一個文檔元素信息項可能被多重的值標識。在這樣的文檔中﹐如果一個特定元素的標識符的值不是總是相同時﹐則可能導致互通性的喪失。
〔定義﹕元素或屬性信息項是一個模式決定的 ID﹐當且僅當﹐以下之一為真﹕〕
它有[成員類型定義]或[類型定義]特性﹐而且它們的值分別有[名稱]等於ID和[目標命名空間]等於http://www.w3.org/2001/XMLSchema﹔
它有[基本類型定義]且其值有[名稱]和[目標命名空間]﹔
它有[基本類型定義]且其值有值為[名稱]和[目標命名空間]的[基本類型定義]﹐等等﹐隨[基本類型定義]特性的遞歸﹔
它有[類型定義名稱]等於 ID 且[類型定義命名空間]等於 http://www.w3.org/2001/XMLSchema﹔
它有[成員類型定義名稱]等於ID且[成員類型定義命名空間]等於http://www.w3.org/2001/XMLSchema。
〔定義﹕屬性信息項是一個 DTD 決定的 ID﹐當且僅當﹐它有[類型定義]特性且值與 ID 相等。〕
〔定義﹕外部決定的 ID 是個代表元素的標識的符字串﹐其值由應用程序通過本規格說明範圍以外的機製來決定。〕
注意﹕
簡寫指針為基於 XML 的媒體類型的資源提供大致類似于 HTML 片段標識符的行為。然而﹐如果因為沒有 DTD、模式或應用程序特定的信息而導致沒有 ID 類型的信息﹐指針將不標識任何的元素。有一些方法可使元素標識更可靠。舉例來說﹐資源的創建者能使用內部的 DTD 子集來標示 ID 類型屬性的出現﹐而且指針的創建者能用基於模式的指針或者是以其它的方式提供一個或多個的模式來定址需要的元素而不是用簡寫指針。
基於模式的指針由一個或多個的指針元件所組成﹐元件可以有選擇地用空白符(S)分開。每個元件都有一個模式名稱並且在刮弧裡麵包含遵照所命名的模式數據(EscapedData)。如果模式數據包含刮弧﹐它們必須是配對的或者經過轉義的。
當提供有多個指針元件的時候﹐XPointer 處理器必須以左到右的順序來求值。如果 XPointer 處理器不支持指針元件所用的模式﹐則跳過該指針元件。如果指針元件沒有標識任何的子資源﹐如果還有下一個元件的話﹐則對下一個元件繼續進行求值。XPointer 處理器將報告第一個標識一個或多個的子資源的指針元件的求值結果﹐並將該結果作為整體求值的結果﹐然後停止求值。如果沒有指針元件標識子資源﹐則是個錯誤。
在以下例子中﹐如果 'xpointer' 指針元件不能明確或者沒有標識任何的子資源﹐則對 'element' 指針元件求值﹔如果 'xpointer' 指針元件標識子資源﹐則不對 'element' 指針元件求值。
#xpointer(id('boy-blue')/horn[1])element(boy-blue/3) |
如〔XML-Names〕所定義的﹐模式名稱可選擇的 Prefix 和 LocalPart 依照語法組成。理論上﹐模式名稱是個由 LocalPart 和與命名空間與上下文的綁定中的前綴所對應的命名空間名稱所組成的元組。如果命名空間與上下文的綁定中沒有包含對應的前綴﹐或者﹐XPointer 處理器所支持的模式名稱中沒有相對應的(namespace name﹐LocalPart)對﹐則跳過該指針元件。
本規格說明為所有以 W3C 建議方式規定的其它 XPointer 模式中的定義保留了不合法的模式名稱。用 QNames 作為模式名稱提供了一個適合于擴展的總體架構﹐使其它基於 XML 的媒體類型願在定義它們自己的片段標識符語言時使用這一架構。任何與 XPointer 架構一同使用的模式的定義必須為由(namespace name﹐LocalPart)對組成的模式指定名稱。
為了解釋在指針元件中出現的模式名稱或者元素名稱、屬性名稱及其它的 QNames 的前綴的目的﹐模式規格說明可能定義將命名空間〔XML-Names〕前綴綁定到命名空間名稱的方法。這些綁定提供了命名空間與上下文的綁定﹐而該綁定將應用于生成綁定的指針元件右側的所有指針元件﹐除非所述的模式明確地生成的例外。任何關於命名空間綁定模式的文檔都必須說明其綁定是否對隨後的指針元件保持有效。每個模式的文檔都必須 說明是否使用使用命名空間與上下文的綁定。
在下面的例子中﹐使用了 'xmlns' 模式(參看〔XPtrXmlns〕)在命名空間與上下文的綁定中增加了一個(前綴/命名空間名稱)綁定。XPointer 處理器利用該信息來確定 img:rect 是否表示它所支持的模式名稱。
#xmlns(img=http://example.org/image)img:rect(10,10,50,50) |
在第一個指針元件的求值之前的初始命名空間與上下文的綁定由單個條目組成﹕xml 前綴綁定到命名空間名稱 http://www.w3.org/XML/1998/namespace。命名空間與上下文的綁定需受以下限制﹔嘗試違犯這些限制將對命名空間與上下文的綁定沒有效果﹕
xml 前綴綁定到命名空間名稱 http://www.w3.org/XML/1998/namespace。 它不能綁定到任何其它的命名空間名稱。
命名空間名稱 http://www.w3.org/XML/1998/namespace 綁定到 xml 前綴。它不能綁定到任何其它的命名空間名稱。
xmlns 前綴不能綁定到命名空間名稱。
命名空間名稱 http://www.w3.org/2000/xmlns/ 不能綁定到任何的前綴。
以三個字母序列x、m、 l 起頭的前綴﹐包括任何的大小寫的組合都被保留。除了由 XML 及 XML 相關的規格說明定義外﹐用戶不應該使用它們。
XPointers 的字符集是〔Unicode〕。然而﹐ XPointer 語言是設計用在 URI 引用〔RFC 2396〕和〔IRI〕引用〔 IRI 〕環境中的﹐在這樣的環境中需要對特定的字符進行編碼及轉義。包含有 XPointer 的 XPointer 及 IRI 引用也時常出現在 XML 文檔及外部解析過的實體中﹐而當編碼限制了可直接使用的指令表﹐外部解析過的實體會實行它們自己所需要的轉義。 其它的環境下可能需要對 XPointer 應用額外的轉義。同樣﹐因為一些字符對 XPointer 的處理是有意義的﹐需要通過轉義來使用這些字符原來的意義。
在以下上下文中需要對 XPointer 應用各種不同的類型轉義﹕
〔定義﹕國際化資源標識符﹐或 IRI 是一個協議元素﹐該元素將 URI 的語法擴展到更加寬廣的統一碼字符〔Unicode〕指令表。〕 IRI 引用允許完整的轉義的 URI 引用字符的超集﹐但是﹐必須轉義正常的百分比號(%)﹐因為它在 URI 和 IRI 中作為轉義字符。
因此﹐當指針插入 IRI 引用時﹐任何出現的百分比號(%)必須要轉義。其它的字符也可能要轉義﹐雖然並不建議這樣做。字符依下列各項來轉義﹕
每個要轉義的字符轉換成一個或多個字節的 UTF-8〔RFC 2279〕。
所生成的字節是由 URI 轉義機製轉義的(也就是說﹐轉換成 %HH﹐HH HH是字節值的十六進制的表示法)。
原來的字符由生成的字符序列來代替。
例如﹕% 轉換成 %25。
IRI 引用可能轉換成 URI 引用而由 URI 解析器使用。URI 引用中所不允許的字符包括所有非 ASCII 字符、以及在〔RFC 2396〕的第 2.4 節中列出的拒絕接納的字符﹐除了在〔RFC 2732〕中重新允許的數目符(#)、百分號(%)和方括符外。不允許的字符必須依下列各項來轉碼﹕
每個不允許的字符轉換成一個或多個的 UTF-8〔RFC 2279〕字節。
所生成的字節是由 URI 轉義機製轉義的(也就是說﹐轉換成 %HH﹐HH是字節值的十六進制的表示法)。
原來的字符由生成的字符序列來代替。
如果指針出現在 XML 文檔或外部解析過的實體中﹐任何在編碼中不能表現的字符必須轉義成字符引用﹐而任何對 XML 的處理來說是重要的任何字符必須在它們出現的地方用像是字符引用或實體引用這樣適當的機製來轉義。當解析 XML 文檔或實體時﹐這些轉義將被保留。一般不建議在 XML 文檔之內使用 URI 引用(而用較通用的 IRI 引用)。如果因為一些不可避免的理由﹐則應用相同的轉義機製。
既然 XPointer 處理器只倒轉對 XPointer 有意義的字符的轉義(A)﹐應用程序必須倒轉指針需要的其它任何的編碼或轉義(如 B、C 或 D)。如果傳遞給 XPointer 處理器的結果沒有遵從本規格說明的 XPointer 語法規則﹐則是個錯誤。
下表顯示了在各種包含不配對的括弧、雙引號、以及空格符的 XPointer 上下文中的轉義。這些例子使用 'xpointer' 模式(參看〔XPtrXPointer〕)﹐因為在它的模式數據中允許字串字面量。
| 上下文 | 符號表示法 | |
|---|---|---|
| 初始模式數據 | 創建之初的 xpointer 模式數據﹕
|
|
| A. XPointer | 按本規格說明所要求﹐轉義了模式數據中帶有不配對的括弧﹕
|
|
| B. 在 IRI 引用中的指針 | 與 A 相同(沒有找到需要轉義的百分比號)﹕
|
|
| C. IRI 引用轉換成 URI 引用 | 出現了經過轉義的雙引號標記 (%22)、空格符 (%20)、和音調符號(%5E)﹕
|
|
| D. 在 XML 文檔中的 IRI 引用 | 使用 XML 預定義的實體 " 轉義雙引號標記(假定g該指針出現在由雙引號引起的屬性值裡的 IRI 引用中)﹕
|
下表顯示了包含在各種不同的上下中重音字符的 XPointer 的轉義。
假定 XML 文檔是用 US-ASCII 編碼的﹐該編碼不允許直接地出現字母“□”。
| 上下文 | 符號表示法 | |
|---|---|---|
| 初始模式數據 | 創建之初的 xpointer 模式數據﹕
|
|
| A. XPointer | XPointer (模式數據裡沒有需要轉義的音調符號或不配對的刮弧)﹕
|
|
| B. 在 IRI 引用中的指針 | 與 A 相同(沒有找到需要轉義的百分比號)﹕
|
|
| C. IRI 引用轉換成 URI 引用 | 出現的字母(%C3%A9)經過轉義﹕
|
|
| D. 在 XML 文檔中的 IRI 引用 | 代表在 US-ASCII 編碼裡﹔用 XML 的實體轉義的重音字符﹕
|