# [X分鐘速成Y](http://learnxinyminutes.com/)
## 其中 Y=xml
源代碼下載:?[learnxml-cn.xml](http://learnxinyminutes.com/docs/files/learnxml-cn.xml)
XML是一種標記語言,被設計用來存儲數據和傳輸數據。
不像HTML, XML不指定怎樣顯示或格式化數據,只是攜帶它。
* XML 語法
~~~
<!-- XML中的注解像這樣 -->
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
<!-- 上面是一個典型的XML文件。
它以一個聲明開始,通知一些元數據(自選的)
XML使用一個樹的結構。上面的文件中,根節點是'bookstore',它有三個孩子節點,
所有的'books'。那些節點有更多的孩子節點,等等。。。
節點用開放/關閉標簽創建, 并且孩子就是在開發和關閉標簽之間的節點。-->
<!-- XML 攜帶兩類信息:
1 - 屬性 -> 那是關于一個元素的元數據。
通常,XML解析器使用這些信息去正確地存儲數據。
它通過在開放標簽里出現在插入語中來表示。
2 - 元素 -> 那是純數據。
那就是解析器將從XML文件提取的東西。
元素出現在開放和關閉標簽之間,沒插入語。-->
<!-- 下面, 一個有兩個屬性的元素-->
<file type="gif" id="4293">computer.gif</file>
~~~
* 良好格式的文件 x 驗證
一個XML文件是良好格式的如果它是語法正確的。 但是, 使用文件定義,比如DTD和XML概要,在文件中插入更多的限制是可能的。
一個遵守一個文件定義的XML文件被叫做有效的,對于那個文件來說。
有了這個工具,你能夠在應用邏輯之外檢查XML數據。
~~~
<!-- 下面, 你能夠看到一個簡化版本的增加了DTD定義的bookstore文件。-->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note SYSTEM "Bookstore.dtd">
<bookstore>
<book category="COOKING">
<title >Everyday Italian</title>
<price>30.00</price>
</book>
</bookstore>
<!-- 這個DTD可能是像這樣的:-->
<!DOCTYPE note
[
<!ELEMENT bookstore (book+)>
<!ELEMENT book (title,price)>
<!ATTLIST book category CDATA "Literature">
<!ELEMENT title (#PCDATA)>
<!ELEMENT price (#PCDATA)>
]>
<!-- 這個DTD以一個聲明開始。
接下來, 根節點被聲明, 它需要一個或多個孩子節點'book'。
每個 'book' 應該準確包含一個 'title' 和 'price' 和
一個被叫做'category'的缺省值為"Literature"的屬性。
這個'title' 和 'price'節點包含一個解析過的字符數據。-->
<!-- 這個DTD可以在XML文件中本身被聲明。-->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note
[
<!ELEMENT bookstore (book+)>
<!ELEMENT book (title,price)>
<!ATTLIST book category CDATA "Literature">
<!ELEMENT title (#PCDATA)>
<!ELEMENT price (#PCDATA)>
]>
<bookstore>
<book category="COOKING">
<title >Everyday Italian</title>
<price>30.00</price>
</book>
</bookstore>
~~~