目錄
1、dtd 限制
【1】編寫步驟
【2】xml 檔案引入 dtd 檔案方法
【3】dtd 元素定義
【4】dtd 屬性定義
【5】dtd 定義實體
2、schema 限制
【1】屬性
【2】特點
【3】編寫步驟
【4】複雜元素訓示器
【5】限制屬性
1、dtd 限制
【1】編寫步驟
-
- 看 xml 中有多少個元素,有幾個就在 dtd 檔案中寫幾個 <!ELEMENT>
- 判斷元素是簡單元素還是複雜元素
-
-
-
簡單元素:沒有子元素
<!ELEMENT 元素名稱 (#PCDATA)>
-
複雜元素:有子元素的元素
<!ELEMENT 元素名稱 (子元素)>
-
-
需要在 xml 檔案中引入 dtd 檔案
<!DOCTYPE 根元素名稱 SYSTEM "dtd檔案的路徑">
【2】xml 檔案引入 dtd 檔案方法
-
-
内部引入
<!DOCTYPE students [
<!ELEMENT students (student*)>
<!ELEMENT student (name,age,sex)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ATTLIST student number ID #REQUIRED>
]>
- 外部引入
-
-
- 本地:<!DOCTYPE 根元素名稱 SYSTEM "dtd檔案路徑">
- 網絡:<!DOCTYPE 根元素名稱 PUBLIC "dtd名稱" "dtd檔案的URL">
-
-
- 内部引入:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE students [
<!ELEMENT students (student*)>
<!ELEMENT student (name,age,sex)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ATTLIST student number ID #REQUIRED>
]>
<students>
<student number="s001">
<name></name>
<age></age>
<sex></sex>
</student>
</students>
- 外部引入:
xml 檔案
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE students SYSTEM "student.dtd">
<students>
<student number="s001">
<name></name>
<age></age>
<sex></sex>
</student>
</students>
dtd 檔案
<!ELEMENT students (student*)>
<!ELEMENT student (name,age,sex)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ATTLIST student number ID #REQUIRED>
【3】dtd 元素定義
-
- 文法:<!ELEMENT 元素名 限制>
- 簡單元素:<!ELEMENT name (#PCDATA)>
-
- (#PCDATA):限制 name 是字元串類型
- EMPTY:限制元素為空
- AND:限制任意元素
- 複雜元素:<!ELEMENT student (name+,age?,sex*)>
-
- <!ELEMENT 元素名稱 (子元素)>
- 表示元素出現的次數:
-
- +:表示一次或者多次
- ?:表示零次或者一次
- *:表示零次或者多次
- 子元素直接使用逗号隔開
- 表示元素出現的順序
- 子元素直接使用 | 隔開
- 表示元素隻能出現其中的任意一個
【4】dtd 屬性定義
-
- 文法:<!ATTLIST 元素名稱 屬性名稱 屬性類型 屬性的限制>
- 屬性類型
-
- CDATA:字元串
- | :枚舉(aa|bb|cc)
- ID:值隻能是字元串或者下劃線開頭
- 屬性的限制
-
- #REQUIRED:表示屬性必須存在
- #IMPLIED:表示屬性可有可無
- #FIXED:表示一個固定值
- 直接值:直接設定
【5】dtd 定義實體
-
- 文法:<!ENTITY 實體名稱 "實體的值"> rg:<!ENTITY NAME "一顆星">
- 使用實體:&NAME;
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE students [
<!ELEMENT students (student*)>
<!ELEMENT student (name,age,sex)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ATTLIST age num (18|19|20) #REQUIRED>
<!ATTLIST student number ID #REQUIRED>
<!ENTITY NAME "一顆星">
]>
<students>
<student number="s001">
<name>&NAME;</name>
<age num="18"></age>
<sex></sex>
</student>
</students>
2、schema 限制
【1】屬性
在 schema 檔案裡面開頭有幾個屬性
-
- xmlns="http://www.w3.org/2001/XMLSchema"
- 表示目前xml是一個限制檔案
- targetNamespace="http://www.oneStar.cn"
- 使用schema限制檔案,直接通過這個位址引入限制檔案,可以是個随意的位址
- elementFormDefault="qualified">
- 表示品質良好
【2】特點
-
- schema 是 xml 語句,符合 xml 文法
- 一個 xml 中可以有多個 schema,多個 schema 使用命名空間來區分
- dtd 檔案裡面隻有 PCDATA 類型,但 schema 裡面可以支援更多的資料類型
- schema 文法更加的複雜
- 以 .xsd 為字尾名
【3】編寫步驟
-
- 看 xml 中有多少個元素,有多少個元素就寫多少個 <element>
- 看是簡單元素還是複雜元素
-
-
-
複雜元素:
<complexType>
<sequence>
子元素
</sequence>
</complexType>
-
簡單元素:寫在複雜元素<sequence>裡面
<sequence>
<element name="name" type="string"></element>
</sequence>
-
- 在 xml 中引入 xsd 檔案
-
-
- <person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-
- 表示該檔案時被限制檔案
- xmlns="http://www.oneStar.cn"
-
- 是限制檔案裡面的 targetNamespace
- xsi:schemaLocation="http://www.oneStar.cn person.xsd">
-
- targetNamespace + 空格 + 限制文檔的位址路徑
-
-
-
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.oneStar.cn"
elementFormDefault="qualified">
<element name="person">
<complexType>
<sequence>
<element name="name" type="string"></element>
<element name="age" type="int"></element>
</sequence>
</complexType>
</element>
</schema>
<?xml version="1.0" encoding="UTF-8"?>
<person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.oneStar.cn"
xsi:schemaLocation="http://www.oneStar.cn person.xsd">
<name>一顆星</name>
<age>18</age>
</person>
【4】複雜元素訓示器
-
- <sequence>:表示元素的出現順序
- <all>:表示元素隻能出現一次
- <choice>:表示元素隻能出現其中一個
- <maxOccurs="unbounded">:表示元素出現的次數,unbounded表示不限制次數
- <any></any>:表示任意元素
【5】限制屬性
- 位置:寫在複雜元素裡面的 </complexType> 之前 <attribute name="id1" type="int" use="required"></attribute>
-
- name:屬性名稱
- type:屬性類型 int string
- use:屬性是否必須出現 required