xml约束(dtd)

什么xml使用约束? 使用约束xml文档 --- 元素内容格式更加规范
如果企业中xml没有使用约束 ------ 通过程序生成xml和解析xml时,不使用约束,代码更加简单

DTD

1、编写数据xml --- books.xml

<?xml version="1.0" encoding="UTF-8"?>
<books>
    <book>
        <name>java高效编程</name>
        <price>85</price>
    </book>
</books>

2、编写dtd文件

* 为文档每一个元素(不同名称) <!ELEMENT
语法 <!ELEMENT 元素名称 子元素>
元素内部文本 #PCDATA

<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT books (book)>
<!ELEMENT book (name,price)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT price (#PCDATA)>

3、将xml文件与dtd文件关联起来

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE books SYSTEM "books.dtd">
<books>
    <book>
        <name>java高效编程</name>
        <price>85</price>
    </book>
</books>

DTD与xml关联三种方式

1、内部DTD ----- 语法 <!DOCTYPE 根元素 []>
2、外部DTD (引用本地DTD) ----- 语法 <!DOCTYPE 根元素 SYSTEM "本地DTD文件位置" >
3、公共DTD (引用网络上DTD) <!DOCTYPE 文档根结点 PUBLIC "DTD名称" "DTD文件的URL">
* 公共DTD 使用 名称 W3C规范官方组织规定的

元素(ELEMENT)定义
* 内容特点符合含义
() 子元素、分组
, 代表子元素顺序
+ * ? ---- 正则表达式 + 1到多个 、* 任意个(0到多个)、 ? 0或者1个
| 多选一

特殊元素内容:文本类型内容 #PCDATA 子元素内容如果为空 EMPTY


属性(ATTLIST)定义
语法:<!ATTLIST 元素名称 属性列表 >
属性列表:
属性名称 类型 约束
属性名称 类型 约束
属性名称 类型 约束
属性名称 类型 约束

属性类型
1、CDATA 文本类型属性
2、(值1|值2|值3 ) 三个值选一个
3、ID 表示属性值唯一

约束
1、#REQUIERD 属性必须
2、#IMPLIED 属性可选
3、fixed value 属性值固定
4、default 默认值

实体(ENTITY)定义
对于xml数据内容重复,可以抽取实体
语法:<!ENTITY 实体名称 "实体内容" >

<?xml version="1.0" encoding="UTF-8"?>
<!-- 使用内部DTD约束XML [] 内部编写DTD内容-->
<!DOCTYPE books [
    <!ELEMENT books (book+)>
    <!ELEMENT book (name,(number|price),publish)>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT price EMPTY>
    <!--ID属性 不能以数字开始 -->
    <!--ID 必须且唯一-->
    <!--author 金庸古龙二选一,默认金庸-->
    <!ATTLIST book 
    
        bid ID #REQUIRED
        author (金庸|古龙) "金庸"
    >
    <!ELEMENT publish (#PCDATA) >
    <!-- 将公共的重复内容 提取实体-->
    <!ENTITY itcast "传智播客 JavaEE" >
]>
<books>
    <book bid="b100" author="古龙">
        <name>java</name>
        <price />
        <publish>&itcast;</publish>
    </book>
    <book bid="b200">
        <name>java</name>
        <price />
        <publish>&itcast;</publish>
    </book>
</books>

运行结果:

原文地址:https://www.cnblogs.com/jianfengyun/p/3823346.html