Remove ads
由萬維網聯盟開發的用於數據編碼的標記語言 来自维基百科,自由的百科全书
可延伸標記式語言(英語:Extensible Markup Language,簡稱:XML)是一種標記式語言和用於儲存、傳輸和重構鬆散資料的檔案格式。它定義了一系列編碼文件的規則以使其在人類可讀的同時機器可讀。全球資訊網協會於1998年[1]發布的 XML 1.0 規範[2]和其他相關[3]開源標準共同定義了 XML[4]。
此條目翻譯品質不佳。 |
可延伸標記式語言 | |
狀態 | 已發布, 全球資訊網協會 |
---|---|
開始年 | 1996 |
首次出版 | 1998年2月10日 |
最新版本 | 1.1 (第二版) 2006年9月29日 |
組織 | 全球資訊網協會 |
編輯 | Tim Bray, Jean Paoli, Michael Sperberg-McQueen, Eve Maler, François Yergeau, John W. Cowan |
基礎標準 | SGML |
有關標準 | XML_Schema |
領域 | 序列化 |
縮寫 | XML |
網站 | www |
XML 的設計目標是注重簡潔、通用和網際網路可用性[5]。它是一種通過 Unicode 編碼實現對多種語言有強大支援的文字資料格式。儘管 XML 的設計重心在於文件,它被廣泛應用於網路服務中鬆散資料結構的表示。[6]
XML 的主要目的是序列化(如儲存、傳輸和重構鬆散資料)。對於兩個需要傳輸資訊的不同系統,它們也需要在檔案格式上達成一致。XML 規範了這個流程,因此其類似於用於表示資訊的通用語言。[7]
作為一個標記式語言,XML 標記,分類和在結構方面組織資料。[7]XML 標籤代表結構且包含元資料,標籤內是照 XML 標準編碼的資料。[7]一個附加的 XML 結構(XSD)定義了用於解釋和驗證 XML 的必要的元資料(這也被稱為結構典範)[7]。一個符合 XML 基本語法的文件是「結構良好」的(well-formed),一個符合其附加結構的是「有效」(valid)的。[7]
網際網路工程任務組的 RFC 7303(取代了舊的 RFC 3023)提供了用於構造 XML 中媒體類型的規則。它定義了三種媒體類型:
application/xml (text/xml是一个别名)
application/xml-external-parsed-entity (text/xml-external-parsed-entity是一个别名)
application/xml-dtd
它們被用於在不暴露內容的同時傳輸未經處理的 XML 檔案。RFC 7303 還建議基於 XML 的語言的媒體類型應以 +xml 結尾(如 SVG 的 image/svg+xml)。
對於 XML 在網路中的進一步使用指南於 RFC 3470 (也被稱為 IETF BCP 70,包含設計部署基於 XML 的語言的各個方面)提出。
XML 在網際網路資訊交換中已經被廣泛應用。數以百計使用 XML 語法的文件格式(包括 RSS、Atom、Office Open XML、OpenDocument、SVG、COLLADA 和 XHTML)被開發出來[8]。XML 還為多種通訊協定(如 SOAP 和 XMPP)提供了基礎語言。它還是AJAX使用的資訊交換格式之一。
許多工業資料標準,如Health Level 7、OpenTravel Alliance、FpML、MISMO和National Information Exchange Model,基於 XML 和 XML 附加結構豐富的特性。在出版領域,Darwin Information Typing Architecture 是一個 XML 行業資料標準。XML 被廣泛應用與支援各種出版格式。
該部分內容基於 XML 規範。注意這並不是一個詳盡的列出所有結構的列表,而是提供 XML 中常見組成的介紹。
XML 1.0 規範允許的(跳脫後的最終解碼值)合法字元: #x9(水平制表符)、#xA(回車字元)、#xD(換行符)、#x20-#xD7FF、#xE000-#xFFFD、#x10000-#x10FFFF。即任何Unicode字元,不包含 surrogate blocks, FFFE, FFFF。
XML 規範定義了5個"預定義實體"來表示特殊字元. XML也允許在每個文件定義任意數量的其它命名實體.
下表列出了5個XML預定義實體. 通過名字參照這些實體的格式為&name;
,例如, &
將繪製為&.
XML 處理器(Processor,也稱作XML parser)分析標記式語言並傳遞結構化資訊給應用(application)。
XML 規範規定了處理器要做什麼不能做什麼,但是應用並不在其討論範圍內。規範稱之為處理器的東西一般被通俗的稱為 XML 解析器。
XML文件的字元分為標記(Markup)與內容(content)兩類。可由簡單的語法判斷出來:標記通常以<
開頭,以>
結尾;或者以字元&
開頭,以;
結尾。不是標記的字元就是內容。但是CDATA部分,分解符號<![CDATA[
與]]>
是標記,二者之間的文字為內容。 最外界的空白符是標記。
一個tag屬於標記結構,以<
開頭,以>
結尾。Tag名字是大小寫敏感,不能包括任何字元 !"#$%&'()*+,/;<=>?@[\]^`{|}~, 也不能有空格符, 不能以"-"或"."或數字開始。可分為三
<section>
;</section>
;<line-break />
.元素是文件邏輯組件,它在起始標籤與匹配的結束標籤之間,或者僅由一個空白標籤組成。例如:<greeting>Hello, world!</greeting>
. 另一個例子是: <line-break />
.在標籤間的內容可以包含其他元素(稱為子元素)
屬性是由名稱-值對組成的標記結構,存在於開始標籤或空元素標籤內。例如,<img src="madonna.jpg" alt="Madonna" />
中,屬性的名稱是 "src" 和 "alt",它們的值分別是 "madonna.jpg" 和 "Madonna"。另一個例子是<step number="3">Connect A to B.</step>
,其中屬性的名稱是 "number",其值是 "3"。XML 屬性只能有一個值,每個屬性在每個元素上最多只能出現一次。在常見情況下,如果需要包含多個值的列表,則必須通過將列表編碼為符合良構性的 XML 屬性,其格式超出了 XML 本身的定義。通常,這可以是以逗號或分號分隔的列表,或者如果已知各個值不包含空格[ii],則可以使用以空格分隔的列表。例如,<div class="inner greeting-box">Welcome!</div>
中,屬性 "class" 的值是 "inner greeting-box",同時表示兩個 CSS 類名 "inner" 和 "greeting-box"。
XML文件如果以XML declaration開始,則表述了文件的一些資訊。如<?xml version="1.0" encoding="UTF-8"?>
.
XML 文件完全由 Unicode 字元庫中的字元組成。 除了少數特殊排除的控制字元外,Unicode 定義的任何字元都可以出現在 XML 文件的內容中。
XML 包含用於辨識構成文件的 Unicode 字元編碼的工具,以及用於表達由於某種原因不能直接使用的字元的工具。
以下範圍內的Unicode字碼在 XML 1.0 文件中是有效的:[9]
XML 1.1 擴充了允許的字元集以包含上述內容和U+0001 - U+001F[10],但同時,它限制使用 U+0009( 水平制表符 )、U+000A( 換行 )、U+000D( Enter )和 U+0085(下一行)以外的 C0 和 C1 控制字元 ),要求它們以跳脫形式編寫(例如 U+0001 必須寫為  或其等效形式)。 對於 C1 字元,此限制是向後不相容; 引入它是為了檢測常見的編碼錯誤。
U+0000 ( 空 )是唯一在任何 XML 1.1 文件中都不被允許的字碼。
Unicode 字元集可被編碼為二進制位元組以儲存或通過多種方式傳輸,這個過程被稱為編碼。Unicode 本身定義了一個覆蓋全字元集的編碼格式,其中知名的包含 UTF-8(不包含位順序記號,是XML 標準文件推薦使用的格式)和 UTF-16。還有許多早於 Unicode 的文字編碼,如 ASCII 和多種 ISO/IEC 8859 字元集,但是它們的字元集都是 Unicode 字元集的子集。
XML 允許使用任何 Unicode 定義的編碼以及其他字元集是Unicode子集的編碼。 XML 還提供了一種機制,使XML 處理器可以在沒有任何先驗知識的情況下可靠地確定正在使用哪種編碼。除 UTF-8 和 UTF-16 之外的編碼不一定能被每個 XML 解析器辨識(有些時候甚至不能辨識 UTF-16,儘管標準要求它也被辨識)。
XML 提供了跳脫工具以包含哪些不能直接引入的字元,例如:
跳脫前 | 跳脫後 |
---|---|
< | < |
> | > |
& | & |
' | ' |
" | " |
所有有效的 Unicode 字元都可以用數字字元參照表示。 例如漢字「中」,其在 Unicode 中的數字代碼是十六進制 4E2D,即十進制 20,013。 如果使用者無法輸入該字元,則仍然可以通過 中 或中 代表「中」這個字元。 類似地,字串「I <3 Jörg」可以被編碼為包含在 XML 文件中,如 I <3 Jörg
。
�
; 是不允許的,因為即使使用數字字元參照,空字元也是 XML 排除的控制字元之一。[11]需要使用 Base64 等替代編碼機制來表示此類字元。
注釋可以在文件內標記外的、XML聲明之後的任何地方出現,始於 。為了相容SGML,注釋內不得出現"--",這意味著注釋不能巢狀。& 符號在注釋中沒有特殊意義,因此實體和字元參照不會被辨識,自然無法表示文件編碼字元集之外的字元。
XML 1.0(第五版)和 XML 1.1 支援在元素名稱、屬性、注釋、字元資料和處理指令中直接使用幾乎任何 Unicode 字元(除了在 XML 中具有特殊符號含義的字元,例如小於符號「<」)。 以下是一個格式良好的 XML 文件,包括中文、亞美尼亞語和西里爾語字元:
<?xml version="1.0" encoding="UTF-8"?>
<俄语 լեզու="ռուսերեն">дані</俄语>
XML 規範中將符合語法規範的 XML 文件定義為格式良好的文件。規範中的語法規範中的關鍵點包括:
XML 文件的定義排除了那些違反了良構性規則的文字;這些文字根本不是 XML。遇到這種違反規則的情況時,XML 處理器需要報告這些錯誤並停止正常處理。這種政策,偶爾被稱為「嚴格錯誤處理」,與處理 HTML 的程式的行為形成了明顯對比,因為這些程式在存在嚴重標記錯誤的情況下,仍然能夠產生合理的結果。[12]這一方面的政策被批評為違反了 Postel 法則(「對傳送的內容要保守,對接受的內容要寬容」)。[13]
XML 規範將一個有效的 XML 文件定義為一個既符合良構性規則,又遵循文件類型定義(DTD)規則的 XML 文件。[14]
XML定義結構、儲存資訊、傳送資訊。下例為小張傳送給大元的便條,儲存為XML。
<?xml version="1.0"?>
<小紙條>
<收件人>大元</收件人>
<發件人>小張</發件人>
<主題>問候</主題>
<具體內容>早啊,飯吃了沒? </具體內容>
</小紙條>
這XML文件僅是純粹的資訊標籤,這些標籤意義的展開依賴於應用它的程式。
每個XML文件都由XML聲明開始,在上面的代碼中的第一行就是XML聲明,<?xml version="1.0"?>。這一行代碼會告訴解析器或瀏覽器,這個檔案應該按照XML規則進行解析。
但是,根元素到底叫<小紙條>還是<小便條>,則是由文件類型定義(DTD)或XML綱要(XML Schema)定義的。如果DTD規定根元素必須叫<小便條>,那麼若寫作<小紙條>就不符合要求。這種不符合DTD或XML綱要的要求的XML文件,被稱作不合法的XML,反之則是合法的XML。
XML檔案的第二行並不一定要包含文件元素;如果有注釋或者其他內容,文件元素可以遲些出現。
最常見的PI(processing instruction,像XML序言, 卻是不同類型的語法)是用來指定XML檔案的樣式表, 這個PI一般會直接放在XML序言之後,通常由Web瀏覽器使用,來將XML資料以特殊的樣式顯示出來。
XML的結構有一個缺陷,那就是不支援分訊框(framing)。當多條XML訊息在TCP上傳輸的時候,無法基於XML協定來確定一條XML訊息是否已經結束。
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.