副檔名 | .xml |
---|---|
網路媒體型式 |
|
統一類型標識 | public.xml |
UTI結構 | public.text |
開發者 | 全球資訊網協會 |
格式類型 | 標記式語言 |
延伸自 | SGML |
延伸成 | |
標準 | |
自由格式 | 是 |
可延伸標記式語言(英語:Extensible Markup Language,簡稱:XML)是一種標記式語言。XML是從標準通用標記式語言(SGML)中簡化修改出來的。它主要用到的有可延伸標記式語言、可延伸樣式語言(XSL)、XBRL和XPath等。
歷史
XML的前身是SGML(The Standard Generalized Markup Language),是自IBM從1960年代就開始發展的GML(Generalized Markup Language)標準化後的名稱。
GML的重要概念:
- 檔案中能夠明確的將標示與內容分開
- 所有檔案的標示使用方法均一致
1978年,ANSI將GML加以整理規範,發佈成為SGML,1986年起為ISO所採用(ISO 8879),並且被廣泛地運用在各種大型的檔案計劃中,但是SGML是一種非常嚴謹的檔案描述法,導致過於龐大複雜(標準手冊就有500多頁),難以理解和學習,進而影響其推廣與應用。
同時W3C也發現到HTML的問題:
- 不能解決所有解釋資料的問題 - 像是影音檔或化學公式、音樂符號等其他形態的內容。
- 效能問題 - 需要下載整份檔案,才能開始對檔案做搜尋。
- 擴充性、彈性、易讀性均不佳。
為了解決以上問題,專家們使用SGML精簡製作,並依照HTML的發展經驗,產生出一套使用上規則嚴謹,但是簡單的描述資料語言:XML。
XML是在一個這樣的背景下誕生的——為了有一個更中立的方式,讓客戶端自行決定要如何消化、呈現從伺服器端所提供的資訊。
XML是從1995年開始有其雛形,並向W3C(全球資訊網聯盟)提案,而在1998年二月發佈為W3C的標準(XML1.0)。
XML被廣泛用來作為跨平台之間互動數據的形式,主要針對數據的內容,通過不同的格式化描述手段(XSLT,CSS等)可以完成最終的形式表達(生成對應的HTML,PDF或者其他的檔案格式)。
用途
XML設計用來傳送及攜帶資料資訊,不用來表現或展示資料,HTML則用來表現資料,所以XML用途的焦點是它說明資料是什麼,以及攜帶資料資訊。
- 富文件(Rich Documents)- 自訂檔案描述並使其更豐富
- 屬於檔案為主的XML技術應用
- 標記是用來定義一份資料應該如何呈現
- 元資料(Metadata)- 描述其它檔案或網路資訊
- 屬於資料為主的XML技術應用
- 標記是用來說明一份資料的意義
- 組態文件(Configuration Files)- 描述軟體設定的參數
重要術語
字元(characters)
XML 1.0規範允許的(跳脫後的最終解碼值)合法字元: #x9(水平制表符)、#xA(回車字元)、#xD(換行符)、#x20-#xD7FF、#xE000-#xFFFD、#x10000-#x10FFFF。即任何Unicode字元,不包含surrogate blocks, FFFE, FFFF。
XML規範定義了5個"預定義實體"來表示特殊字元. XML也允許在每個文件定義任意數量的其它命名實體.
下表列出了5個XML預定義實體. 通過名字參照這些實體的格式為&name;
,例如, &
將繪製為&.
名字 | 字元 | Unicode碼位(十進位) | 標準 | 描述 |
---|---|---|---|---|
quot | " | U+0022 (34) | XML 1.0 | 雙引號 |
amp | & | U+0026 (38) | XML 1.0 | & |
apos | ' | U+0027 (39) | XML 1.0 | 撇號 |
lt | < | U+003C (60) | XML 1.0 | 小於號 |
gt | > | U+003E (62) | XML 1.0 | 大於號 |
處理器(Processor)與應用(application)
XML處理器(Processor,也稱作XML parser)分析標記式語言並傳遞結構化資訊給應用(application)。
標記(Markup)與內容(content)
XML文件的字元分為標記(Markup)與內容(content)兩類。標記通常以<
開頭,以>
結尾;或者以字元&
開頭,以;
結尾。不是標記的字元就是內容。但是CDATA部分,分解符號<![CDATA[
與]]>
是標記,二者之間的文字為內容。 最外界的空白符是標記。
標籤(Tag)
一個tag屬於標記結構,以<
開頭,以>
結尾。Tag名字是大小寫敏感,不能包括任何字元 !"#$%&'()*+,/;<=>?@[\]^`{|}~, 也不能有空格符, 不能以"-"或"."或數字開始。可分為三類:
- start-tag,如
<section>
; - end-tag,如
</section>
; - empty-element tag,如
<line-break />
.
- start-tag,如
元素(Element)
元素是文件邏輯組成,或者在start-tag與匹配的end-tag之間,或者僅作為一個empty-element tag。例如:<greeting>Hello, world!</greeting>
. 另一個例子是: <line-break />
.
單個根(root)元素包含所有的其他元素。
屬性(Attribute)
屬性是一種標記結構,在start-tag或empty-element tag內部的「名字-值對」。例如:<img src="madonna.jpg" alt="Madonna" />
。每個元素中,一個屬性最多出現一次,一個屬性只能有一個值。
如果屬性有多個值,這需要採取XML協定以外的方式來表示,如採用逗號或分號間隔,對於CSS類或識別碼的名字可用空格來分隔。
XML 聲明(declaration)
XML文件如果以XML declaration開始,則表述了文件的一些資訊。如<?xml version="1.0" encoding="UTF-8"?>
.
例
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訊息是否已經結束。
參考文獻
- ↑ XML Media Types, RFC 7303. Internet Engineering Task Force. July 2014.
延伸閱讀
- Annex A of ISO 8879:1986 (SGML)
- Lawrence A. Cunningham. Language, Deals and Standards: The Future of XML Contracts. Washington University Law Review. 2005. SSRN 900616 .
- Bosak, Jon; Bray, Tim. XML and the Second-Generation Web. Scientific American. May 1999 [2018-01-19].
- Kelly, Sean. Making Mistakes with XML. Developer.com. 2006-02-06 [2010-10-26].
- St. Laurent, Simon. Five years later, XML... O'Reilly XML Blog. O'Reilly Media. 2003-02-12 [2010-10-26].
- W3C XML is Ten!. World Wide Web Consortium. 2008-02-12 [2010-10-26].
- Introduction to XML (PDF). Course Slides. Pierre Geneves. October 2012 [2018-01-19].
外部連結
- XML及SGML名詞英漢翻譯表 (繁體中文)
- XML格式化工具 (中文)
- XML驗證器 (英文)
- XML線上格式化工具[永久失效連結] (中文)