XML 入門基礎(chǔ)知識(shí)

最近接觸到了TVML,平時(shí)也會(huì)使用過XML。在這里也整理XML簡易語法規(guī)則以便回顧查閱。文章主要介紹 XML 文檔的基礎(chǔ)結(jié)構(gòu),以及創(chuàng)建構(gòu)造良好的 XML 需要遵循的規(guī)則,包括命名約定、正確的標(biāo)記嵌套、屬性規(guī)則、聲明和實(shí)體。


XMLHTML

標(biāo)記語言從早期的私有公司和政府制定形式逐漸演變成標(biāo)準(zhǔn)通用標(biāo)記語言(Standard Generalized Markup Language,SGML)、超文本標(biāo)記語言(Hypertext Markup Language,HTML),并且最終演變成 XML。SGML 比較復(fù)雜,HTML(實(shí)際上僅是一組元素集)在識(shí)別信息方面不夠強(qiáng)大。XML 則是一種易于使用和易于擴(kuò)展的標(biāo)記語言。

總之,我們可以使用 XML 創(chuàng)建自己的元素,從而能夠更精確地表示自己的信息。


構(gòu)建 XML

XML 文件由 內(nèi)容標(biāo)記 組成。通常,標(biāo)記包圍內(nèi)容。


創(chuàng)建 XML 文件

XML 文檔的第一行通常是一個(gè) XML 聲明。
形式:<?xml version="1.0" encoding="utf-8"?>
作用:將文件識(shí)別為 XML 文件,有助于工具和人類識(shí)別 XML(不會(huì)誤認(rèn)為是 SGML 或其他標(biāo)記)。
PS:什么情況下通常忽略這個(gè)可選信息?打算將多個(gè)小的 XML 文件合并為一個(gè)大 XML 文件。

創(chuàng)建根元素

一個(gè)文件只能有一個(gè)根元素,并且需要使用 “包裝器” 包含它。一個(gè)文件只能有一個(gè)根元素,并且需要使用 “包裝器” 包含它。內(nèi)容和其他標(biāo)記必須放在 根元素 中間。

命名元素

命名時(shí)需要注意的地方:
· 元素名中不能出現(xiàn)空格。
· 名稱只能以英文字母開始,不能是數(shù)字或符號。
· 對大小寫沒有限制,但前后要保持一致,以免造成混亂。

嵌套元素

把某個(gè)元素放到其他元素的內(nèi)部。這些新的元素稱為 元素,包含它們的元素稱為 元素。
PS:注意兩個(gè)錯(cuò)誤嵌套(1.任何子元素都要完全包含在其父元素的開始和結(jié)束標(biāo)記內(nèi)部。2.每個(gè)同胞(Sibling)元素必須在下一個(gè)同胞元素開始之前結(jié)束。)

添加屬性

屬性是在使用元素時(shí)存儲(chǔ)額外信息的一種方式。
屬性由一個(gè)名稱-值對構(gòu)成,值包含在雙引號中("),比如:type="dessert"。
可以在元素的開始標(biāo)記內(nèi)部輸入一個(gè)或多個(gè)屬性。
例如:<recipename cuisine="american" servings="1">這是一個(gè)開始標(biāo)記哈。
PS:進(jìn)行分類的時(shí)候用的比較多。

使用實(shí)體

實(shí)體是對數(shù)據(jù)的引用。所有實(shí)體(除參數(shù)實(shí)體外)都以一個(gè)與字符(&)開始,以一個(gè)分號(;)結(jié)束。
實(shí)體的作用:
1.用實(shí)體代替特殊字符
2.定義實(shí)體來簡化創(chuàng)作
3.定義實(shí)體來簡化創(chuàng)作
實(shí)體的分類:

1.字符實(shí)體

由于我們不能直接在內(nèi)容中輸入特殊字符。如果要在文本中使用符號,必須使用它的字符代碼將它設(shè)置為實(shí)體。例如,大寫字母 A 是 Unicode 字符 U+0065。如果想將其表示為一個(gè)字符實(shí)體,可以輸入 A(十進(jìn)制值)或 A(十六進(jìn)制值)。另一個(gè)更有用的字符也許是 ? —— 版權(quán)符號。這個(gè)版權(quán)符號的字符實(shí)體是 & #169; 或 & #xa9;(如果將空格去掉那就會(huì)變成?)。

2.命名實(shí)體

命名實(shí)體在 DTD 或內(nèi)部子集(即文檔中 <!DOCTYPE> 語句的一部分)中聲明,在文檔中用作引用。在 XML 文檔解析過程中,實(shí)體引用將由它的表示替代。
簡單來說,實(shí)體就是宏,它們在我們處理文檔時(shí)得到擴(kuò)展。
<!ENTITY ndash "&#8211;">
&#8211 為 “–”
如上所示,命名實(shí)體由字符實(shí)體替代。我們在文檔中使用 – 時(shí),它由 Unicode 字符 U+2013(短橫線 - 字符)替代。由于 – 的替代文本是一個(gè)字符引用,因此它等同于輸入一個(gè)短橫線字符。

3.外部實(shí)體

外部實(shí)體表示外部文件的內(nèi)容。外部實(shí)體在有些情況下很有用,比如說,您在創(chuàng)建一本圖書并且想將每一章存儲(chǔ)為一個(gè)單獨(dú)的文件。

<!ENTITY chap1 SYSTEM "chapter-1.xml">//外部實(shí)體引用其他文件
<!ENTITY chap2 SYSTEM "chapter-2.xml">
<!ENTITY chap3 SYSTEM "chapter-3.xml">

現(xiàn)在,當(dāng)您在主圖書 XML 文件(參見下清單)中將這些實(shí)體放到一起時(shí),這些文件的內(nèi)容將插入在引用點(diǎn)。

<?xml version="1.0" encoding="utf-8"?>
<!-- Pull in the chapter content: -->
&chap1;
&chap2;
&chap3;

由于這些文件的內(nèi)容被插入到 XML 文檔中,因此它們也必須是有效的 XML,而且它們必須是平衡的。也就是說,在一個(gè)外部實(shí)體的引用文件中開始的任何元素也必須在那個(gè)文件中結(jié)束。當(dāng)上面代碼清單中的 XML 文檔被解析時(shí),它將被讀取為一個(gè)大文檔,包含 chapter-1.xml、chapter-2.xml 和 chapter-3.xml 文件的內(nèi)容;XML 處理應(yīng)用程序并不介意文檔寫入到 4 個(gè)單獨(dú)的文件中。

4.參數(shù)實(shí)體

參數(shù)實(shí)體只用于 DTD 和文檔的內(nèi)部子集中。它們使用百分號(%)而不是與字符,可以是命名實(shí)體或外部實(shí)體。
作用:
1.引用在外部文件中聲明的 Latin 1, Special Characters and Symbols 實(shí)體集
2.用作快捷方式以重用 DTD 的某些部分,比如每個(gè) XHTML 元素都支持的標(biāo)準(zhǔn)屬性集
例如:

<!ENTITY % attrs "%coreattrs; %i18n; %events;">
<!ENTITY % coreattrs
 "id          ID             #IMPLIED
  class       CDATA          #IMPLIED
  style       %StyleSheet;   #IMPLIED
  title       %Text;         #IMPLIED"
  >
<!ENTITY % i18n
 "lang        %LanguageCode; #IMPLIED
  xml:lang    %LanguageCode; #IMPLIED
  dir         (ltr|rtl)      #IMPLIED"
  >

如上,參數(shù)實(shí)體可以引用其他參數(shù)實(shí)體。與命名實(shí)體一樣,參數(shù)實(shí)體在整個(gè)文檔被讀取之后才被擴(kuò)展。

如何在DTD中聲明實(shí)體
<!-- 6.1 Named entity for site name: -->
<!ENTITY dw "developerWorks">

<!-- 6.2 External entity for re-use: -->
<!ENTITY bio SYSTEM "dw-author-bio.xml">

<!-- 6.3 Parameter entity for use in DTD -->
<!ENTITY % English "en-US|en-CA|en-UK">

內(nèi)部子集中的實(shí)體聲明
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html 
    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
[
    <!ENTITY test-entity "This <em>is</em> an entity.">
]>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="application/xhtml+xml;charset=utf-8"/>
    <title>Entities in XML</title>
</head>
<body>
    <h1>Entities in XML</h1>

    <p>&test-entity;</p>

    <p>You can use it anywhere you'd use a standard XHTML entity:</p>

    <pre>&test-entity;</pre>
</body>
</html>

XHTML 文檔(在系統(tǒng)上保存為 entities.xml)在其內(nèi)部子集中聲明了一個(gè)名為 test-entity 的新實(shí)體。內(nèi)部子集是 <!DOCTYPE> 聲明的一部分,位于 DTD 的 PUBLIC 和/或 SYSTEM 標(biāo)識(shí)符之后的方括號中。

通過實(shí)體減少輸入

在需要反復(fù)輸入相同的文本時(shí),可以嘗試?yán)脤?shí)體。以下是一些不錯(cuò)的實(shí)體示例:公司的正式名稱、正在進(jìn)行文檔記錄的產(chǎn)品的名稱、版權(quán)、商標(biāo)、注冊商標(biāo)通知,以及電子郵件地址。

<!ENTITY co "Father Karass' Olde Tyme Steambots, LLC">
<!ENTITY prod "Semi-Autonomous Security Servant (SASSbot)">
<!ENTITY c "Copyright &copy; 2010 &co; All Rights Reserved.">
<!ENTITY author "Chris Herborth (chrish@pobox.com)">

使用實(shí)體輕松更新不斷變化的文檔
<!-- Current name: -->
<!ENTITY prod "Semi-Autonomous Security Servant (SASSbot)">

<!-- Old names preserved for posterity: -->

<!-- Original R&D name: -->
<!--ENTITY prod "Security Bot"-->

<!-- Marketing name v1 -->
<!--ENTITY prod "Security Servant Bot"-->

<!-- Marketing name v2 -->
<!--ENTITY prod "Autonomous Security Servant Bot"-->

總之,命名實(shí)體的作用類似于宏,允許您使用實(shí)體引用替代重復(fù)或難以輸入的文本。盡管 Web 瀏覽器不支持外部實(shí)體,但是我們可以通過其他 XML 應(yīng)用程序來使用它們創(chuàng)建復(fù)合文檔,這使得標(biāo)準(zhǔn)化和重用文檔的某些部分變得更容易。


構(gòu)造良好并且有效的 XML

要實(shí)現(xiàn)構(gòu)造良好的 XML 取決于如何處理 XML。例如我們要根據(jù)菜譜類型進(jìn)行分類。那就需要確保每個(gè) <recipe> 元素都包含 type 屬性,以對菜譜進(jìn)行分類。能夠正確驗(yàn)證并確保存在屬性值(避免出現(xiàn)雙關(guān)語)。
所謂 驗(yàn)證 就是根據(jù)元素規(guī)則檢查文檔的結(jié)構(gòu),以及如何為每個(gè)父元素定義子元素。這些規(guī)則是在 文檔類型定義(Document Type Definition,DTD)或模式(schema )中定義的。
思路:驗(yàn)證要求您創(chuàng)建自己的 DTD 或 schema ,然后在 XML 文件中引用 DTD 或 schema 文件。
為了實(shí)現(xiàn)驗(yàn)證,必須在 XML 文檔的頂部附近包含文檔類型(DOCTYPE)。這行代碼將引用用于驗(yàn)證文檔的 DTD 或 schema (元素和規(guī)則列表)。例如,DOCTYPE可能類似于 <!DOCTYPE MyDocs SYSTEM "filename.dtd">


另外,整體規(guī)則很簡單,但是一定要注意錯(cuò)誤的發(fā)生。我們根據(jù)可分類性和可搜索性找出文檔中有價(jià)值的內(nèi)容,然后根據(jù)我們的需要設(shè)計(jì)元素和屬性。當(dāng)我們有了明確的目標(biāo),并知道如何標(biāo)記內(nèi)容的時(shí)候,我們就可以構(gòu)建高效的元素和屬性了。


The End .

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. XML簡介 以下內(nèi)容來自于http://www.w3school.com.cn/xml 基本知識(shí) XML 和...
    WebSSO閱讀 2,094評論 1 7
  • 經(jīng)過兩天的奮戰(zhàn),終于把xml簡略的過了一遍。 1.1XML介紹 xml是Extensible Markup lan...
    Ystrator閱讀 1,044評論 0 2
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,711評論 19 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,871評論 18 399
  • 有時(shí),跟朋友一起吃飯。如果朋友讓我點(diǎn)菜,我就會(huì)看看菜單,再看看她,一臉無辜。心想:這么殺腦細(xì)胞的事情,還是不要交給...
    小考拉俱樂部閱讀 705評論 2 1

友情鏈接更多精彩內(nèi)容