DTD约束技术
-
创建一个dtd文件
-
步骤
-
(1) xml中有多少个元素 就在dtd文件中有几个<!ELEMENT>
-
(2) 判断是简单元素 还是复杂元素
简单元素 : 没有子元素
<!ELEMENT 元素名称(# PCDATA)>
复杂元素 : 有子元素的元素
<!ELEMENT,元素名称(子元素)>
有几个元素 写几个 <!ELEMENT>
例子:
<!ELEMENT person (name,age)>
<!ELEMENT name (#PCDATA) >
<!ELEMENT age (#PCDATA) >
-
XML引入dtd文件
<!DOCTYPE 根元素名称 SYSTEM "DTD文件的路径" 例子: <?xml version="1.0" encoding="gbk"?> <!DOCTYPE person SYSTEM "1.dtd"> <person> <name>张三</name> <age>16</age> <!-- <a>16</a>--> 这行加上会提示错误(校验 xml 的约束) </person>
DTD引入方式
(1)引入外部的 dtd 文件 <!DOCTYPE 根元素名称 SYSTEM “dtd路径”> (2)使用内部的 dtd 文件 -< !DOCTYPE 根元素名称[ <!ELEYENT person (name , age )> <!ELEMENT name (#PCDATA) <!ELEMENT age (#PCDATA )> ]> 举例: <?xml version="1.0" encoding="gbk"?> <!--<!DOCTYPE person SYSTEM "1.dtd">--> <!DOCTYPE person [ <!ELEMENT person (name,age)> <!ELEMENT name (#PCDATA) > <!ELEMENT age (#PCDATA) >]> <person> <name>张三</name> <age>16</age> <!-- <a>16</a>--> </person> (3) 使用外部的 dta 文件(网络上的 dtd 文件)(看懂 知道什么意思就🆗了) <!DOCTYPE 根元素 PUBLIC “DTD 名称”“DTD 文档的 URL” > -后面学到框架 struts2 使用配置文件使用
DTD定义元素
-
语法格式 : <!ELEMENT 元素名称 约束>
-
简单元素 :<!ELEMENT name (#PCDATA)>
<!ELEMENT name (#PCDATA)> 指name 是字符串类型的(#PCDATA) 字符串类型约束 EMPTY 空约束 不能有内容 ANY 任意类型
-
复杂元素 : <!ELEMENT person ( name,age, sex)>
这样写 子元素只可以出现一次 解决: 表示子元素出现的次数 + : 一次或者多次 ? : 0次或者一次 * : 任意 例子: This XML file does not appear to have any style information associated with it. The document tree is shown below. <!-- <!DOCTYPE person SYSTEM "1.dtd"> --> <person> <name>张三</name> <name>22</name> <!-- <age>16</age> --> <!-- <a>16</a> --> </person> 子元素用逗号进行隔开: 元素出现顺序要遵循; 子元素直接使用|隔开 表示元素只能出现其中的任意一个 例子: <?xml version="1.0" encoding="gbk"?> <!--<!DOCTYPE person SYSTEM "1.dtd">--> <!DOCTYPE person [ <!ELEMENT person (name|age)> <!ELEMENT name ANY> <!ELEMENT age ANY> ]> <person> <name>张三</name> <!-- <age>16</age>--> <!-- <a>16</a>--> </person>
DTD定义属性
-
语法 : <!ATTLIST 元素名称
-
属性名称属性类型属性的约束>
-
例子: <?xml version="1.0" encoding="gbk"?> <!--<!DOCTYPE person SYSTEM "1.dtd">--> <!DOCTYPE person [ <!ELEMENT person (name+,age)> <!ELEMENT name ANY> <!ELEMENT age ANY> <!-- 在age 加入一个属性 --> <!ATTLIST age ID1 CDATA #REQUIRED> ]> <person> <name>张三</name> <name>22</name> <age ID1="CESHI">16</age> <!-- <a>16</a>--> </person>
-
属性的类型
-
(1)\- CDATA :字符串
-
(2)- ( aa|bb|cc ) 枚举类型 只能出现其中一个
-
(3)- ID:值只能是字母或者下划线开头
-
-
属性的约束
-
- #REQUIRED :属性必须存在
-
- #IMPLIED :属性可有可无
-
- #FIXED :表示一个固定值 #FIXED " AAA "
-
-直接值
*不写属性,使用直接值
*写了属性,使用设置那个值
-
-
DTD定义实体
- 语法:
<!ENTITY 实体名称 “实体的值”>
*** <!ENTITY TEST “HAHAHEHE”>
-
使用实体 & 实体名称: 比如 &TEST;
-
注意
定义实体需要写在内部 dtd 里面,如果写在外部的 dtd 里面,有某些浏览器下,内容得不到。
XML测试代码
<?xml version="1.0" encoding="gbk"?>
<!--<!DOCTYPE person SYSTEM "1.dtd">-->
<!DOCTYPE person [
<!ELEMENT person (name+,age)>
<!ELEMENT name ANY>
<!ELEMENT age ANY>
<!-- 在age 加入一个属性 -->
<!-- <!ATTLIST age-->
<!-- ID1 CADATA #REQUIRED>-->
<!ATTLIST age
ID1 CDATA #IMPLIED>
<!ENTITY TEST "SAD">
]>
<person>
<name>&TEST;</name>
<name>22</name>
<age >16</age>
<!-- <a>16</a>-->
</person>