View
226
Download
0
Embed Size (px)
Citation preview
XML簡介 Extensible Markup Language 人類、機器皆可讀懂的標籤 XML 的可攜性
跨平台 提供長期 data 保存的格式
理想的檔案交換格式
XML v.s. HTML
XML 有嚴格的語法規定 HTML 因長期使用而存在太多不合規定的語法
<p>(</p>)
XML 的標籤表達文件結構及語意 HTML 的標籤表達文件的版面配置
Xml <store></store> Html <td></td>
XML的組成 由標籤組成
<?xml version = “1.0”?>
<!- - 這裡是註解 - ->
<message id=“8942020”>
<data>Hello! XML!!</data>
</message>
沒有固定的 tag 和 elements <java></java> < 爪哇 ></ 爪哇 >
Parsers and Well-Form XML Documents
Parser 是用來解析 XML 文件的軟體 Well-formed :滿足 XML 語法,能順利被
parser 解讀 Html 存在太多不合規定的寫法,設計瀏覽器的程
式設計師必須花很多心力處理這種情況 <p>
XML 文件必須格式正確, Parser 才能順利解讀
Well-formed XML
每個起始標籤一定要有個相對應的結束標籤 ex: <data></data> 空元素 <br/> <br></br>
元素不可以重疊 Ex: <a><b></a></b>
屬性值必須加引號 Ex:<person id=“8942020”>purplesea</person>
元素或屬性裡不能有沒有跳脫的 < 或 & 符號 <SA&D></SA&D> <SA&D> </SA&D>
XML標籤語法 < 元素 > character data </ 元素 > 大小寫差異性 空元素 Well-formed
XML Tree
<person>
<name>
<first_name>purplesea</first_name>
<last_name>Huang</last_name>
</name>
<profession>programer</profession>
</person>
CDATA & 註解 之間的東西會被視為字元資料
<![CDATA & 第一行 & 第二行 ]]>
不可在標籤內使用” ]]>” 字元 因其為結束符號註解寫法:
<!-- 這裡是註解 - -> 不可用 ---> 當作結束符號
Namespaces
EX:
<subject>Math</subject>
<subject>Thrombosis</subject>
目的:解決名稱衝突 用 URI 確保相同名稱產生的混淆
<rdf:RDF xmlns:rdf=“http://www.w3.org/TR/REC-rdf-syntax#”>
修改 :
<rdf:subject ></rdf:subject>
<medical:subject></medical:subject>
Document Type Definition(DTD)
XML 除了 well-formed ,必須搭配著 DTD 清楚定義文件的格式。在資料互相傳送的過程中, parser 可以根據 DTD 瞭解格式是否確 。
如何使用 DTD
開始 <! DOCTYPE 結尾 >
1.internal subset *在xml裡<? xml verdion=”1.0” encoding=”Big5” ?>
<! DOCTYPE mybook [ <! ELEMENT mybook(#PCDATA)>
]><mybook>java</mybook>
2.external subset將 DTD 存到一個副檔名為 .dtd 的存文字檔中* 在 xml 裡<? xml verdion=”1.0” encoding=”Big5” ?>
<! DOCTYPE myMessage SYSTEM “mybook.dtd”>
<myMessage>
<message>welcome to xml</message>
</myMessage>
* 在 mybook.dtd 裡 <! ELEMENT myMessage (message)>
<! ELEMENT message(#PCDATA)>
3. 同時使用 internal and external subset
* 在 xml 裡<? xml version=”1.0” encoding=”Big5” ?><! DOCTYPE books SYSTEM “myMessage.dtd”[
<! Element title (#PCDATA) >
]>
…….
Element Type Declarations
element 之後放的是元素名稱,接著是內容* 在 dtd 裡<! ELEMENT book (title,price,author)>
<! ELEMENT title (#PCDATA)>
<! ELEMENT price (#PCDATA)>
<! ELEMENT author (#PCDATA)>
1.#PCDATA
<! ELEMENT title (#PCDATA)>1.1 指的就是 Parsable Character Data 是指可以
讓解析器去解讀 1.2 如果遇到需要在裡面使用 < > & 需要 跳脫 ,要使用 < ; > ; &
2. 子元素2.1comma( , )
<! ELEMENT book (title,price,author)>
2.2pipe( | )
<! ELEMENT classroom (teacher | student)>
2.3 元素出現的數量 ? * +
( + ) 一個到無限多個<! ELEMENT album (song+)>
( * ) 零個到無限多個<! ELEMENT library (book*)>
( ? ) 可以有零個或一個 <! ELEMENT seat (person?)>
2.4mixed
* 在 dtd 裡<! Element myMessage(#PCDATA|message)>
<! Element message (#PCDATD)>
* 在 xml 裡<myMessage>Here is some text,some
<message>other text</message>and
<message>even more text</message>.
</myMessage>
2.5empty
* 在 dtd 裡 <! Element image Empty>
* 在 xml 裡 <image></image> 或是 <image/>
2.6any
* 在 dtd 裡 <! Element book ANY>
Attribute Declarations
* 在 dtd 裡 <!ELEMENT X (#PCDATA)>
<!ATTLIST X Y CDATA #REQUIRED>
1.CDATA
指的是說可以包含任何一種文字除了 (<>& ‘ “)
* 和 XML 裡的 CDATA 些許不同
2.#REQUIRED 是指必須提供一個屬性給 x
* 在 dtd 裡<! ELEMENT book (price)>
<! ELEMENT price (#PCDATA)>
<!ATTLIST price currency CDATA #REQUIRED>
* 在 xml 裡<book>
<price currency=“dollar”>java</price>
</book>
3.#IMPLIED 是指不一定要提供屬性給ELEMENT
4.#FIXED 是指一定要使用原先所提供的值<! ATTLIST address zip #FIXED “804”>
Attribute Type
ID IDREF
IDREF的值一定要和 ID一樣ID的值一定不能是數字
<! ATTLIST shipping shipID ID #REQUIRED ><!ATTLIST book shippedBy IDREF #IMPLIED >
< shipping shipID=“suan” ><shipping shipID=“_123456”> 在數字之前加上底線<book shippedBy=“suan”>
Attribute Type
ENTITY 先宣告 ENTITY的值,然後在 attribute後面加上
ENTITY替代那個值。<! ENTITY city SYSTEM “tour.html” NDATA xtml >
<! ATTLIST company tour ENTITY #REQUIRD >
<company tour=“city”>…</company> O
<company tour=“country”>…</company> X
Attribute Type
NMTOKEN(name token) 允許屬性的值有特殊的符號,例如 --<! ATTLIST sportClub phone NMTOKEN #REQUIRED >
< sportsClub phone = “555-111-2002” >
Enumerated Attribute Types 列舉<! ATTLIST person gender ( M|F ) “F” >
<! ATTLIST person gender ( M|F ) #IMPLIED >
<! ATTLIST data day ( 1 | 2 | 3 | 4….| 31 ) #REQUIRED>
Conditional Sections INCLUDE IGNORE判斷是要用哪一個 element現在是用 include的這個
<! [ INCLUDE [<! ELEMENT message (approved, signature) >
]]><! [ IGNORE [
<! ELEMENT message (approved,reason, signature) >]]>
<message><approved flag=“true” /><signature>Chairman</signature>
</message>
Whitespace Characters
Whitespace 處理空白鍵DTD
<! DOCTYPE whitespace [<! ELEMENT whitespace (hasDATA, hasID, hasNMTOKEN, hasEnumeration, hasMixed )><! ATTLIST hasCDATA cdata CDATA #REQUIRED >
XML
<whitespace><hasCDATA cdata=“ simple cdata “ /><hasID = “ i20” />
…</whitespace>