比较全的XML笔记
Xml全稱為Extensible markup Language,可擴展標記語言
?
XML嚴格區分大小寫
?
Xml可用于保存關系數據,軟件的配置文件,描述軟件模塊之間的關系
?
xml文件包括以下幾個部分:
元素
屬性
注釋
CDATA區
特殊字符
?
最簡單的聲明語法:
<?xml version=”1.0” ?>
用encoding屬性說明文檔的字符編碼:
<?xml version=”1.0” encoding=“gb2312”?>??? (xml文檔以什么編碼保存,就要以什么編碼打開)
?
用standalone屬性說明文檔是否獨立:
<?xml version = “1.0” encoding=”gb2312”standalone=”yes” ?>
一般來講,xml文件伴隨著一個約束文件
?
XML語法
一個XML文件主要包括以下幾個部分內容
1、? 文檔聲明
2、? 元素
3、? 屬性
4、? 注釋
5、? CDATA區
6、? 特殊字符
?
xml文件的standalone屬性默認是no
?
xml文件中必須出現一個開始標簽,一個結束標簽。
一個標簽有以下幾種:
包含標簽體:<a>asdas</a>
不含標簽體:<a></a>?? 可以簡寫成為:<a/>
?
Xml中有且只能有一個根元素。
文檔中的空格和換行不同,默認文檔不同,但是解析器可以將之trim掉。
?
Xml元素的命名規范
一個元素可以包含字母、數字以及其它一些可見字符,但必須遵循以下規范:
區分大小寫,例如<p>和<P>是兩個不同的標簽。
Html不區分大小寫。
不能以數字或“_”(下劃線)開頭
不能以xml(或XML、或Xml等)開頭
?
不能包含空格
名稱中間不能包含冒號(:)。
?
標簽的屬性
一個標簽可以有多個屬性,每個屬性都有它自己的名稱和取值。例如:<input name=”text”>
?
屬性值一定要用雙引號(“)或單引號(‘)引起來
?
定義屬性必須遵循與標簽相同的命名規范
?
Xml中的注釋<!---->
?
注意:
1、? XML聲明之前不能有注釋
2、? 注釋不能嵌套
?
CDATA區
1、? 在編寫XML文件時,有些內容可能不想讓解析引擎執行,而是當做原始內容處理。
2、? 遇到此種情況,可以把這些內容放在CDATA中處理
?
?
XML約束
在XML里,可以編寫一個文檔來約束一個XML文檔的書寫規范,這稱之為XML文檔的書寫規范,這稱之為XML約束。
?
常見的約束技術有
xml?DTD:早期約束?? 必須是UTF-8或Unicode
xml?Schema:后期的約束
?
DTD約束快速入門
DTD(Document Type Definitiion)全稱為文檔類型定義。
?
DTD文件
寫在第一行的<!ELEMENT 書架 (書+)>:表示根元素? 根元素表示書架
+:表示一或多個。
#PCDATA:表示字符串。
xml文件被約束的條件是寫一個DOCTYPE,然后跟一個? 根元素用SYSTEM表示引用的是本地的一個定義。
?
<!DOCTYPE 書架 SYSTEM "book.dtd">??其中book.dtd表示相對路徑。
?
?
book.dtd文件,用以約束book.xml文件
<!ELEMENT 書架 (書+)>
<!ELEMENT 書(書名,作者,售價)>
<!ELEMENT 書名(#PCDATA)>
<!ELEMENT 作者(#PCDATA)>
<!ELEMENT 售價(#PCDATA)>
?
?
這里使用的是外部約束
book.xml文件
?
<?xml version="1.0"encoding="gbk" ?>
<!DOCTYPE 書架 SYSTEM "book.dtd">
<書架>
??? <書>
??? ??? <書名>javaweb開發</書名>
??? ??? <作者>老張</作者>
??? ??? <售價>30.00元</售價>
??? </書>
</書架>
?
同樣可以使用內部約束的方式如:
<!DOCTYPE 書架 [
?????? <!ELEMENT書架 (書+)>
?????? <!ELEMENT 書 (書名,作者,售價)>
?????? <!ELEMENT書名(#PCDATA)>
?????? <!ELEMENT作者(#PCDATA)>
?????? <!ELEMENT售價(#PCDATA)>
]>
<書架>
??? <書>
??? ??? <書名>javaweb開發</書名>
??? ??? <作者>老張</作者>
??? ??? <售價>30.00元</售價>
??? </書>
</書架>
?
當引用的文件是一個公共的文件時,采用如下方式:
<!DOCTYPE 文檔根節點 PUBLIC “DTD文件的URL“>
<!DOCTYPE web-app PUBLIC
?????? "-//SunMicrosystems, Inc.//DTD Web Application 2.3//EN“
?????? ?"http://java.sun.com/dtd/web-app_2_3.dtd">
?
元素定義
定義xml文件能寫哪些元素,以及這些元素的內容,定義能寫哪些標簽
?
?
屬性
定義標簽能寫哪些屬性
?
?
實體定義
在頁面中引用的變量
?
?
元素定義
在DTD文檔中使用ElEMENT聲明一個XML元素
語法格式如下
<!ELEMENT 元素名稱元素類型>
元素的類型可以是元素的內容或類型
<!ELEMENT 書架(作者,售價)>?? 復雜元素
<!ELEMENT 書名(#PCDATA)>表示簡單元素
?
如為元素類型,則直接書寫,如下:
<!ELEMENT 書架 EMPTY>
·EMPTY :用于表示空元素,例如<br/>
·ANY:表示元素內容為任意類型
?
約束中美約束的類型,則不能寫。
?
+:一次或多次
?:0次或一次
*:0次或多次。
?
<!ATTLIST 元素名:表示為哪個標簽元素聲明屬性
?
#REQUIRED:不需的
???? #REQUIRED:必須設置該屬性
???? #IMPLIED:可以設置也可以不設置
???? #FIXED:說明該屬性的取值固定為一個值,在 XML 文件中不能為該屬性設置其它值。但需要為該屬性提供這個值
直接使用默認值:在 XML 中可以設置該值也可以不設置該屬性值。若沒設置則使用默認值。?
?
DTD
在XML中ID不可以數字開頭。
?
xml解析中有一個getElementById(“aaa”);與Javascript中的不相同。
?
實體用于為一段內容創建一個別名,以后在XML文檔中就可以使用別名引用這段內容了。
?
在DTD定義中,一條<!ENTITY…>語句用于定義一個實體。
?
實體可以分為兩種類型:引用實體和參數實體。
?
引用實體主要在XML文檔中被應用
語法格式:
<!ENTITY 實體名稱“實體內容” >:直接轉變成實體內容
?
引用方式:
&實體名稱
?
舉例:
<!ENTITY copyright “I am a programmer”>
…
©right;
?
參數實體:
參數實體被DTD文件自身,
?
語法格式:
%實體名稱
?
舉例:
<! % TAG_NAMES “姓名 | EMAIL | 電話 | 地址”>
…
<!ELEMENT 客戶信息(%TAGINAMES;? | 公司名)>
?
?
在DTD中根本就不支持數據類型的。
?
?
XML Schema
xml schema 也是一種用于定義和描述XML文檔與內容的模式語言,其出現是為了克服DTD的局限性
?
xml schema特點:
1、? xml schema比dtd更加符合xml語法結構,因為xml schema自身就是一個xml文件,為了有所,擴展名通常為.xsd
2、? xml解析器很容易解析出xmlschema文檔中的內容。
3、? xml schema對名稱空間支持得非常好。
4、? xml schema比xml DTD 支持更多的數據類型,并支持用戶自定義新的數據類型
5、? xml Schema定義約束的能力非常強大,可以對xml實體文檔作出細致的語義限制。
?
一個XML schema 文檔通常稱之為模式文檔(約束文檔),遵循這個文檔書寫的xml文件稱之為實例文檔。
?
和XML文件一樣,一個XML Schema文檔必須有一個根節點,通常需要把這個文件生命的元素綁定到一個uri地址上,在XML Schema技術中有一個專業術語來描述這個過程,即把XML Schema 文檔聲明的元素綁定到一個命名空間上。以后xml文件就可以通過這個URL(即名稱空間)來告訴解析引擎,xml文檔中編寫的元素來自哪里,被誰約束。
?
名稱空間的概念
1、? 為什么要聲明名稱空間
由于xml文檔可以被任何組織和個人定義,這就完全有可能在一個xml文件中出現重復的元素,此時使用名稱空間可以加以區分。
2、? 在XML Schema中,每個文約束模式文檔就可以被賦以一個唯一的名稱空間,名稱空間用一個唯一的URL(UniformResource Identifier 統一資源標識符)表示。
3、? 通過xmlns關鍵字來引用一個名稱空間,用一個變量指定一個uri地址。如:xml文件中的內容。
<itcast:書架 xmlns:itcast=”http://www.itcast.cn”>
?????? <itcast:書>……</itcast:書>
</itcast:書架>
4、名稱空間中的url雖然是以http開頭的,但可以不指向任何一個真實的地址,而僅僅是作為一個名稱空間來聲明
?
MaxOccurs=”unbounded”:表示它的子節點是無上限的。
compleType:表示的意思是復雜元素
type='xs:string':表示數據類型為字符串。
?
?
book.xsd文檔
<?xml version="1.0"encoding="UTF-8">
<xs:schemaxmlns:xd="http://www.w3.org/2001/XMLSchema"
??? ??? ??? targetNamespace="http://www.itcast.cn"
??? ??? ??? elementFormDefault="qualified">
<xs:elementname="書架">
??? <xs:sequence maxOccurs='unbounded'>
??? ??? <xs:elementname='書'>
??? ??? ??? <xs:compleType>
??? ??? ??? ??? <xs:sequence>
??? ??? ??? ??? ??? <xs:element name='書名' type='xs:string'/>
??? ??? ??? ??? ??? <xs:element name='作者' type='xs:string'/>
??? ??? ??? ??? ??? <xs:element name='售價' type='xs:string'/>
??? ??? ??? ??? </xs:sequence>
??? ??? ??? </xs:compleType>
??? ??? </xs:element>
??? </xs:sequence>
</xs:element>
</xs:schema>
?
targetNamespace的作用是將shema文檔中定義的元素綁定到:http://www.itcast.cn這個名稱空間上了。
?
book.xml文檔,此文檔被上面一個文檔約束。
<?xml version="1.0"encoding="UTF-8" ?>
<itcast:書架 xmlns:itcast="http://www.itcast.cn"
??? ??? ??? ??? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
??? ??? ??? ??? xsi:schemaLocation="http://www.itcast.cnbook.xsd">
??? ??? <itcast:書>
??? ??? ??? <itcast:書名>JavaScript網頁開發</itcast:書名>
??? ??? ??? <itcast:作者>張孝祥</itcast:作者>
??? ??? ??? <itcast:售價>28.00元</itcast:售價>
??? ??? </itcast:書>
</itcast:書架>
?
xsi:schemaLocation="http://www.itcast.cn book.xsd":用于說明名稱空間是綁定在本地的book.xsd文件中。說明其下面的元素實際定義在什么位置。實際上是在http://www.itcast.cn book.xsd上。
?
schemaLocation:表示來自xsi名稱空間,而xsi有來自:xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”真實存在的網址。這是一個真實的約束文檔,輸入這個網址后可以看到一個真實約束文檔,這個文檔是w3c定義好的。
?
xs命名空間;來自w3c定義好的約束文檔中。
?
使用默認的名稱空間:
基本格式:xmlns=”URL”
舉例:
使用默認名稱空間的原因是,我的xml文檔只使用一個約束文檔。此時就可以不使用約束文檔。
那么itcast就可以省了。可以寫成以下的部分:
<書架 xmlns=”http://www.it315.org/xmlbook/schema”>
?????? xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
?????? xsi:schemaLocation=http://www.itcast.cn? book.xsd
?????? <書>
?????? ?????? <書名>Javascript網頁開發</書名>
?????? ?????? <作者>張孝祥</作者>
?????? ?????? <售價>28..00元</售價>
</書>
</書架>
?
不適用名稱空間引入XMLSchema文檔
文件清單:xmlbook.xml
<?xml version=”1.0” encoding=”UTF-8”?>
<書架 xmlns:xsi=”http://www.w3c.org/2001/XMLSchema-instance”
?????? ?????? ?????? xsi:noNamespaceSchemalLocation=”xmlbook.xsd”>
?????? ?????? ?????? <書>
?????? ?????? ?????? ?????? <書名>JavaScript網頁開發</書名>
?????? ?????? ?????? ?????? <作者>張孝祥</作者>
?????? ?????? ?????? ?????? <售價>28.00</售價>
</書>
</書架>
?
下面是引用CSS的方式,其中config.css和它是在同級目錄下的。
<?xml version="1.0"encoding="gb2312" standalone="no"?>
<?xml-stylesheettype="text/css" href="config.css"?>
<soft>
?????? <a>
?????? ?????? <a1 id="a1">中國</a1>
?????? ?????? <a2 id="a2">美國</a2>
?????? </a>
?????? <b>
?????? ?????? <b1 id="b1">英國</b1>
?????? ?????? <b2 id="b2">日本</b2>
?????? </b>
</soft>
??????
?
總結
- 上一篇: ◦将一个java文件变成Jar包的过程
- 下一篇: 为什么不爱吃香菜?