1、申明xml
<?xml version=1.0 encoding="UTF-8?>
2、引入外部樣式表
<?xml-sheetstyle type="text/css" href="c.css" ?>
3、自定義實體
<!DOCDYPE
ROOT[
<!ENTITY entityName entityValue>
]
>
eg:
<!DOCTYPE root[
<!ENTITY name "tom">
]>
4、編寫dtd
DTD的目的:
驗證該xml文檔是否是有效的xml文檔
如果一個良構的xml文檔滿足了DTD的聲明就是一個有效的xml文檔。
注意:良構 不一定 有效,但是有效一定良構
DTD對xml文件中元素的約束:
格式:<!ELEMENT 元素名 (內容模式)>
<!ELEMENT students (stu*)>
<!ELEMENT stu (#PCDATA|id|name|age)*>
內容模式:
empty
1).EMPTY:元素不能包含子元素和文本(空元素)
例如:
dtd文件:
<!ELEMENT students (stu)>
<!ELEMENT stu EMPTY>
xml文件:
<students>
<!--這個stu元素中的內容必須爲空-->
<stu></stu>
</students>
2).(#PCDATA):可以包含任何字符數據,但是不能在其中包含任何子元素
例如:
dtd文件:
<!ELEMENT students (stu)>
<!ELEMENT stu (#PCDATA)>
xml文件:
<students>
<stu>tom</stu>
</students>
3).ANY:元素內容爲任意的,主要是使用在元素內容不確定的情況下
例如:
dtd文件:
<!ELEMENT students (stu)>
<!ELEMENT stu ANY>
xml文件:
<students>
<stu>tom</stu>
</students>
或者
<students>
<stu>
<name>tom</name>
</stu>
</students>
修飾元素內容的
() 用來對元素的內容分組
| 或
+ 1 n
* 0 n
? 1或者0
, 按照順序
默認修飾符 有且僅有一個
屬性約束:
<!ATTLIST 元素名稱
屬性名稱 值類型 屬性特點
屬性名稱 值類型 屬性特點
>
<!ELEMENT students (stu*)>
<!ELEMENT stu (#PCDATA)>
<!ATTLIST stu
id CDATA #REQUIRED
name CDATA #REQUIRED
>
1、值類型:
1).CDATA:屬性值可以是任何字符(包括數字和中文)
2).ID:屬性值必須唯一,屬性值必須滿足xml命名規則
3).IDREF/IDREFS
IDREF屬性的值指向文檔中其它地方聲明的ID類型的值。
IDREFS同IDREF,但是可以具有由空格分開的多個引用。
4).enumerated:(枚舉值1|枚舉值2|枚舉值3...),屬性值必須在枚舉值中
例如:
dtd文件:
<!ELEMENT students (stu*)>
<!ELEMENT stu (#PCDATA)>
<!ATTLIST stu
id ID #REQUIRED
name CDATA #REQUIRED
gender (男|女) #REQUIRED
>
2、屬性特點:
1).#REQUIRED:元素的所有實例都必須有該屬性
例如:
dtd文件:
<!ELEMENT students (stu*)>
<!ELEMENT stu (#PCDATA)>
<!ATTLIST stu
name CDATA #REQUIRED
>
xml文件:
<students>
<stu name=""></stu>
<stu name="tom"></stu>
</students>
注意:
1. name屬性必須出現
2. name屬性的值可以爲空也可以不爲空
2).#IMPLIED :屬性可以不出現
例如:
dtd文件:
<!ELEMENT students (stu*)>
<!ELEMENT stu (#PCDATA)>
<!ATTLIST stu
name CDATA #IMPLIED
>
xml文件:
<students>
<stu name=""></stu>
<stu name="tom"></stu>
<stu></stu>
</students>
注意:
1. name屬性可以出現也可以不出現
2. name屬性的值可以爲空也可以不爲空
3).default-value:屬性可以不出現,並且當它不出現的時候是有默認值的,而該屬性的默認值就是atttibute-value
例如:
dtd文件:
<!ELEMENT students (stu*)>
<!ELEMENT stu (#PCDATA)>
<!ATTLIST stu
name CDATA "tom"
>
xml文件:
<students>
<stu name="zhangsan"></stu>
<stu></stu>
</students>
注意:
1. name屬性可以出現也可以不出現
2. name屬性如果不出現則默認值爲tom
4).#FIXED :屬性可以不出現,但是如果出現的話必須是指定的屬性值
例如:
dtd文件:
<!ELEMENT students (stu*)>
<!ELEMENT stu (#PCDATA)>
<!ATTLIST stu
name CDATA #IMPLIED
school CDATA #FIXED "briup"
>
xml文件:
<students>
<stu school="briup"></stu>
<stu></stu>
</students>
注意:
1. name/school屬性可以出現也可以不出現
2. school屬性如果出現那麼值一定要是briup
引入外部dtd
<!DOCDYPE root public id url >
<!DOCDYPE root system path>
內部dtd
<!DOCTYPE root[
<!--約束元素 element-->
<!ELEMENT root (test+)>
<!ELEMENT test (id)>
]>
混合dtd
<!DOCTYPE root SYSTEM "../dtd/dtdTest1.dtd"[
<!ELEMENT test (name)>
]>
<?xml version=1.0 encoding="UTF-8?>
2、引入外部樣式表
<?xml-sheetstyle type="text/css" href="c.css" ?>
3、自定義實體
<!DOCDYPE
ROOT[
<!ENTITY entityName entityValue>
]
>
eg:
<!DOCTYPE root[
<!ENTITY name "tom">
]>
4、編寫dtd
DTD的目的:
驗證該xml文檔是否是有效的xml文檔
如果一個良構的xml文檔滿足了DTD的聲明就是一個有效的xml文檔。
注意:良構 不一定 有效,但是有效一定良構
DTD對xml文件中元素的約束:
格式:<!ELEMENT 元素名 (內容模式)>
<!ELEMENT students (stu*)>
<!ELEMENT stu (#PCDATA|id|name|age)*>
內容模式:
empty
1).EMPTY:元素不能包含子元素和文本(空元素)
例如:
dtd文件:
<!ELEMENT students (stu)>
<!ELEMENT stu EMPTY>
xml文件:
<students>
<!--這個stu元素中的內容必須爲空-->
<stu></stu>
</students>
2).(#PCDATA):可以包含任何字符數據,但是不能在其中包含任何子元素
例如:
dtd文件:
<!ELEMENT students (stu)>
<!ELEMENT stu (#PCDATA)>
xml文件:
<students>
<stu>tom</stu>
</students>
3).ANY:元素內容爲任意的,主要是使用在元素內容不確定的情況下
例如:
dtd文件:
<!ELEMENT students (stu)>
<!ELEMENT stu ANY>
xml文件:
<students>
<stu>tom</stu>
</students>
或者
<students>
<stu>
<name>tom</name>
</stu>
</students>
修飾元素內容的
() 用來對元素的內容分組
| 或
+ 1 n
* 0 n
? 1或者0
, 按照順序
默認修飾符 有且僅有一個
屬性約束:
<!ATTLIST 元素名稱
屬性名稱 值類型 屬性特點
屬性名稱 值類型 屬性特點
>
<!ELEMENT students (stu*)>
<!ELEMENT stu (#PCDATA)>
<!ATTLIST stu
id CDATA #REQUIRED
name CDATA #REQUIRED
>
1、值類型:
1).CDATA:屬性值可以是任何字符(包括數字和中文)
2).ID:屬性值必須唯一,屬性值必須滿足xml命名規則
3).IDREF/IDREFS
IDREF屬性的值指向文檔中其它地方聲明的ID類型的值。
IDREFS同IDREF,但是可以具有由空格分開的多個引用。
4).enumerated:(枚舉值1|枚舉值2|枚舉值3...),屬性值必須在枚舉值中
例如:
dtd文件:
<!ELEMENT students (stu*)>
<!ELEMENT stu (#PCDATA)>
<!ATTLIST stu
id ID #REQUIRED
name CDATA #REQUIRED
gender (男|女) #REQUIRED
>
2、屬性特點:
1).#REQUIRED:元素的所有實例都必須有該屬性
例如:
dtd文件:
<!ELEMENT students (stu*)>
<!ELEMENT stu (#PCDATA)>
<!ATTLIST stu
name CDATA #REQUIRED
>
xml文件:
<students>
<stu name=""></stu>
<stu name="tom"></stu>
</students>
注意:
1. name屬性必須出現
2. name屬性的值可以爲空也可以不爲空
2).#IMPLIED :屬性可以不出現
例如:
dtd文件:
<!ELEMENT students (stu*)>
<!ELEMENT stu (#PCDATA)>
<!ATTLIST stu
name CDATA #IMPLIED
>
xml文件:
<students>
<stu name=""></stu>
<stu name="tom"></stu>
<stu></stu>
</students>
注意:
1. name屬性可以出現也可以不出現
2. name屬性的值可以爲空也可以不爲空
3).default-value:屬性可以不出現,並且當它不出現的時候是有默認值的,而該屬性的默認值就是atttibute-value
例如:
dtd文件:
<!ELEMENT students (stu*)>
<!ELEMENT stu (#PCDATA)>
<!ATTLIST stu
name CDATA "tom"
>
xml文件:
<students>
<stu name="zhangsan"></stu>
<stu></stu>
</students>
注意:
1. name屬性可以出現也可以不出現
2. name屬性如果不出現則默認值爲tom
4).#FIXED :屬性可以不出現,但是如果出現的話必須是指定的屬性值
例如:
dtd文件:
<!ELEMENT students (stu*)>
<!ELEMENT stu (#PCDATA)>
<!ATTLIST stu
name CDATA #IMPLIED
school CDATA #FIXED "briup"
>
xml文件:
<students>
<stu school="briup"></stu>
<stu></stu>
</students>
注意:
1. name/school屬性可以出現也可以不出現
2. school屬性如果出現那麼值一定要是briup
引入外部dtd
<!DOCDYPE root public id url >
<!DOCDYPE root system path>
內部dtd
<!DOCTYPE root[
<!--約束元素 element-->
<!ELEMENT root (test+)>
<!ELEMENT test (id)>
]>
混合dtd
<!DOCTYPE root SYSTEM "../dtd/dtdTest1.dtd"[
<!ELEMENT test (name)>
]>