XML 是設計用來儲存數據和運載數據的
XML 是設計用來攜帶數據的,而不是展示數據的
XML 的標記不是預定義的,你必須自己定義自己的標記
XML 是用來攜帶數據和存儲的和簡化分享,而HTML 用來展示數據和格式化數據的 ,XML和HTML 在一起就是內容和形式的關系.
一套內容可以有多重表示方式,一個形式,可以展示同一結構的的不同的數據
Java EJB里的實體是一個POJO ,而XML 是一個 Plain text
WSDL for describing available web services
WAP and WML as markup languages for handled devices
RSS languages for news feeds
RDF and OWL for describing resource and ontology.
XML 文檔組成樹的結構 起于樹根 (root)到分支到樹葉 一個root element 其它都是child elements
parent children sibling
XML 規則
1.必須有個結束標記(tag)
The declaration is not a part of the XML document itself, and it has no closing tag.
聲明不是XML 文檔本身,所以沒有結束標記
2.XML tags 是區分大小寫的
3.XML 元素必須有合理的嵌套
4.XML必須有根元素
5.Entity References 由于字符的兩意性,所以必須用到實體的引用
如:< 在通常的文件表示兩種意思,一個是<>標號的開始,一個是<小于
在XML 里面如果用單個< 而沒有配對的部分,就報錯.不會認為是<小于
<message> if salary <1000 then </message> error
<meassge> if salary < ; 1000 then </message>
< | < | less than 小于 |
> | > | greater than 大于 |
& | & | ampersand |
' | ' | apostrophe單引號 |
" | " | quotation mark 雙引號 |
"<" and "$ 在XML 里面是非法的
XML 的注釋
<!-- This a comment-->
HTML 的注釋,JSP和XML注釋一樣
Java注釋有兩種
單行//
多行/* */
XQuery 的注釋用
(: :)
在XML 里面空格是保留不會被截去的
XML 的換行用LF
windows 用CR and LF unix 用LF ,Macintosh 用CR
XML element 是包含開始標簽和結束標簽之間的任何東西
XML 元素的命名規則:
1.命名可以有字母,數字,和其他字符.
2.打頭不能用數字和點號(.),或者是XML ,xml 等.
3.命名不能包含空格.
最佳命名實踐
1. 推薦<first_name>
2.不推薦用<first.name>【可以誤認為是屬性】 <first-name>【可以誤認為是減】 ,: (冒號是命名空間的保留符號)
XML 的屬性在開始標記里,屬性是給元素提供額外的信息,必須被引用無論是
單引號還是雙引號.可以單雙混合 在HTML 中屬性是方便的,在XML 中建議避免用元素Element 代替
為什么要避免使用屬性:
1.屬性不能有多個值(element 能夠)
2.屬性不能包含樹結構(element 能夠)
3.屬性擴展不易
XML Attributes for Metadata
元數據應該存儲為屬性,而數據本身應該存儲為元素.
正確的XML 文檔
格式良好的XML的XML 文檔必須遵循文檔類型定義(DTD)的規則.
引用DTD
<!DOCTYPE note SYSTEM "Note.dtd">
XML DTD
DTD 的作用是定義XML文檔的結構。它定義了合法元素的列表的結構
一個DTD的例子
<!DOCTYPE note [ <!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> ]> |
<!DOCTYPE root-element [element-declarations]>
外部定義如上.
為什么使用DTD
1.使用DTD ,每個XML文件攜帶自身格式的描述文檔。
2.驗證數據。
DTD-XML Building Blocks
XML 文檔由下面的構建塊組成:Elements元素,Attributes屬性,Entities實體
[當傳遞到XML解釋器中實體被展開]
PCDATA 意味著需要解釋的字符數據,entities 和標記會被解釋器檢查.
CDATA字符數據,不會被解釋器所解釋
Element元素
空元素
<!ELEMENT element-name EMPTY>
如:
<!ELEMENT br EMPTY>
<br />
元素包含可以剖析的字符數據
<!ELEMENT element-name (#PCDATA)>
元素包含任何內容
<!ELEMENT element-name ANY>
有子的元素
<!ELEMENT element-name (child1,child2,....)>
順序必須一樣
通配符(message) 只出現一次,(message+)至少一次,(message*)0次或更多
(message?)0次或者是1次
或關系(message|body)
聲明屬性
<!ATTLIST payment type CDATA "check">
枚舉屬性值
<!ATTLIST element-name attribute-name (en1|en2|..) default-value> |
<!ATTLIST payment type (check|cash) "cash">
屬性在和數據關聯不太密切的時候才建議使用
元數據存為屬性而數據本身存為元素
字符實體是一個變量用來定義標準文本和特殊字符
一個字符實體的聲明
<!ENTITY copyright "Copyright W3Schools">
<authou>©right;</author>
一個實體由三個部分:&,實體名,和分號;
應用外部實體聲明
<!ENTITY writer SYSTEM "http://www.w3schools.com/entities.dtd">
用XML Parser 驗證
load()用在文件中,loadXML()用在字符中
已有的元素必須符合已有的規則
用
xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); 驗證
XML Schema
XML Schema 支持數據類型和命名空間