文章目录
- 5 XML的组成:字符区(了解)
- **6** **DTD约束(能够看懂即可)**
- **1** **什么是DTD**
- **2** **DTD约束的实现和语法规则(看懂dtd约束,书写符合规范的xml文件)**
5 XML的组成:字符区(了解)
当大量的转义字符出现在xml文档中时,会使XML文档的可读性大幅度降低。这时如果使用CDATA段就会好一些。
CDATA (Character Data)字符数据区,格式如下:
<![CDATA[
文本数据 < > & ; " "
]]>
- CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data)
- CDATA 部分由
<![CDATA[
开始,由]]>
结束;
例如:
<![CDATA[
if salary < 1000 then
]]
快捷模板:CD 回车
注意:
CDATA 部分不能包含字符串 “]]>”。也不允许嵌套的 CDATA 部分。
标记 CDATA 部分结尾的 “]]>” 不能包含空格或折行。
小结:
- 字符区的特点:
- 原样显示(书写的内容不会被xml解析器解析)
6 DTD约束(能够看懂即可)
1 什么是DTD
DTD(Document Type Definition),文档类型定义,用来约束XML文档。规定XML文档中元素的名称,子元素的名称及顺序,元素的属性等。
2 DTD约束的实现和语法规则(看懂dtd约束,书写符合规范的xml文件)
开发中,我们不会自己编写DTD约束文档,通常情况我们都是通过框架提供的DTD约束文档,编写对应的XML文档。
需求:接下来我们创建一个dtd约束文档,然后按照约束文档书写符合规范的xml文件。
我们先新建一个books.xml文件。
第一步:在项目下面创建一个dtd的文件夹,然后选中文件夹,鼠标右击,新创键一个books.xml文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oTtoRvkX-1687767096552)(imgs\8.bmp)]
第二步:我们先书写books.xml文件中的内容:
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book>
<name>面试宝典</name>
<author>锁哥</author>
<price>78.8</price>
</book>
<book>
<name>java从入门到精通</name>
<author>黑旋风</author>
<price>88.8</price>
</book>
</books>
经过上述四步我们就将books.xml文件书写完毕,接下来我们开始书写DTD约束。
关于DTD约束我们能够看懂即可。如下所示就是上述books.xml文件引入了DTD约束。
简单的DTD约束就写好了,如下所示:
我们直接将如下约束复制到我们上述书写好的books.xml文件中即可,能够读懂即可。
<?xml version="1.0" encoding="UTF-8"?>
<!--
1.在xml内部定义dtd约束的声明 : <!DOCTYPE 根元素 [元素声明]>
2.xml的元素(标签)的声明: <!ELEMENT 元素名称 (元素内容)>
<!ELEMENT books (book)> 表示books标签下是book标签
<!ELEMENT book (name,author,price)> 表示的是book标签下出现的name,author,price子标签
<!ELEMENT name (#PCDATA)> 表示name标签中出现的内容是文本
-->
<!DOCTYPE books [
<!--约束根标签 book* 表示books标签下可以有多个book子标签
* + ? 和正则表达式中表示的意思是一样的
* : 0 1 n
+ : 1 n
? : 0 1
-->
<!ELEMENT books (book*)>
<!--约束book标签-->
<!ELEMENT book (name,author,price)>
<!--约束name,author,price标签
但是这三个标签下就是文本了
#PCDATA 表示标签下内容是文本
-->
<!ELEMENT name (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT price (#PCDATA)>
]>
<books>
<book>
<name>面试宝典</name>
<author>锁哥</author>
<price>78.8</price>
</book>
<book>
<name>java从入门到精通</name>
<author>黑旋风</author>
<price>88.8</price>
</book>
</books>
说明:
1)xml中出现的标签,也叫做元素。那么我们书写的约束可以规范xml中到底能出现哪些标签。除此之外都不能出现。
所以xml中出现的标签都需要我们开发者在dtd约束中声明一下。只有声明了这个标签,xml中才能出现这个标签。如果约束中没有声明,那么xml中就不能出现。
所以,xml中出现的标签需要使用如下的语法(也就是xml中元素的声明语法)。
在xml内部定义dtd约束的声明 :
<!DOCTYPE 根元素 [元素声明]>
xml的元素(标签)的声明:
<!ELEMENT 元素名称 (元素内容)>
元素名:自定义。
元素内容包括:符号、数据类型和标签。
常见符号:? * + () |
常见数据类型:#PCDATA 表示内容是文本,不能是子标签。
标签:就是正常子标签。
2)由于 <!ELEMENT book (name,author,price)> 顺序是name,author,price,所以下面的顺序也得是:
<book>
<name>面试宝典</name>
<author>锁哥</author>
<price>78.8</price>
</book>
前后顺序不能换。
接下来对上述代码的标签添加属性,比如给book属性添加一个address地址,表示将书存放到哪里。
添加属性之后的代码如下所示:
<!DOCTYPE books [
<!--约束根标签 book* 表示books标签下可以有多个book子标签
* + ? 和正则表达式中表示的意思是一样的
-->
<!ELEMENT books (book*)>
<!--约束book标签-->
<!ELEMENT book (name,author,price)>
<!--约束name,author,price标签
但是这三个标签下就是文本了
#PCDATA 表示标签下内容是文本
-->
<!ELEMENT name (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ATTLIST book address CDATA "图书馆"
id ID #REQUIRED
>
]>
<books>
<book address="藏经阁" id="a1">
<name>面试宝典</name>
<author>锁哥</author>
<price>78.8</price>
</book>
<book id="a2">
<name>java从入门到精通</name>
<author>黑旋风</author>
<price>88.8</price>
</book>
</books>
对上述声明属性进行解释说明:
元素名称: 表示该属性使用在哪个标签上;
属性名称: 表示在标签上添加的属性名字;
属性类型: 添加的属性类型。
属性类型有如下几种:
类型 描述
CDATA 值为字符数据 (character data)
(en1|en2|…) 此值是枚举列表中的一个值
ID 值为唯一的 id
默认值: 表示最开始给属性的默认值。
值 解释
值 属性的默认值
#REQUIRED 属性值是必需的
#IMPLIED 属性不是必需的
#FIXED value 属性值是固定的