上接:JavaWeb学习总结笔记(1)
接着之前的开始写
dtd的三种引入方式:
- 引入外部的dtd文件
<!DOCTYPE 根元素名称 SYSTEM "dtd路径">
- 使用内部dtd文件
<!DOCTYPE 根元素名称 [
<!ELEMENT 根标签名称 (子标签,子标签)>
<!ELEMENT 子标签 (#PCDATA)>
]>
- 使用外部的dtd文件(网络上的dtd文件)
<!DOCTYPE 根元素 PUBLIC "dtd名称" “dtd文档的URL">
dtd文件代码
xml文件代码
运行正常
可以看到dtd文件里面只有person、name、age三个标签,当我添加了一个标签<aa></aa>,根标签那里会提示错误
The content of element type “person” must match “(name,age)”.(元素类型“人”的内容必须与“(姓名、年龄)”相匹配。)
表示xml里面只能使用规定好了的标签。
使用dtd定义约束元素
语法:<!ELEMENT 元素名 约束>
简单元素:没有子元素的元素
-
<!ELEMENT name (#PCDATA)>
-
(#PCDATA):约束name是字符串类型(这个一定要加括号,但是下面的几个不用)
-
EMPTY:元素为空(没有任何内容)
<aa>中间没有任何内容 </aa> -
ANY:表示元素中可以包含任何在dtd中定义的元素内容
复杂元素:有子元素的元素 -
<!ELEMENT person (name,age)>(子元素名字只能出现一次,出现第二次报错)
格式:<!ELEMENT 元素名称 (子元素+/*/?)>
+/*/?表示子元素出现的次数:
- +:表示出现一次或多次
- *:表示出现零次或多次(任意次数)
- ?:表示出现零次或一次
子元素直接使用”,“号隔开(表示元素出现的顺序)
子元素直接使用”|"隔开(表示括号里的几个子元素只能出现一个)
使用dtd定义约束属性
语法:<!ATTLIST 元素名称
属性名称 属性类型 属性的约束>
属性类型:
-
CDATA:字符串
<!ATTLISH name id1 CDATA #REQUIRED> -
(a|b|c)枚举:表示只能在一定范围内出现的值,但是每次只能出现其中一个(和红绿灯很相似,红黄绿三种颜色,每次只能出现其中一种)
格式:<!ATTLISH name id2 (a|b|c) #REQUIRED>
a,b,c三个属性选择一种 -
ID :只能是字母或下划线开头
<!ATTLISH name id3 ID #REQUIRED>
属性的约束
- #REQUIRED:表示属性必须出现
- #IMPLIED:表示属性可以出现也可以不出现
- #FIXED:表示一个固定值 #FIXED “aaa”(属性的值必须是你设置的那个值,否则报错)
- #直接值:如果不写属性,就默认使用直接值
如果使用,就是你定义的那个值
使用方法:<!ATTLISH name id4 CDATA “SSS”>
实体的定义
语法:<!ENTITY 实体名称 “实体的值”>
使用实体:&实体名称
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE person [
<!ELEMENT person (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
// 定义实体,注意:定义实体需要写在内部dtd里面,如果写在外面在某些浏览器下面内容得不到
<!ENTITY SS "啦啦啦啦啦">
]>
<person>
<name>张飞</name>
// 引用实体
<age>&SS;</age>
</person>
做一个小实战,根据dtd代码写出xml代码(符合规则不报错)
dtd实例代码复制自w3c,感兴趣的朋友们可以去搜索练习一下,直接搜索DTD教程,里面有DTD实例(下面这个比较简单,采用的是第二个,第一个相对来说比较复杂,视频上讲解的就是第一个,看完后发现基本上都记住怎么回事了,然后就去练习了第二个)。
标签里的内容纯属瞎填的,不要较真哦。
<?xml version="1.0" encoding="UTF-8"?>
//dtd代码
<!DOCTYPE NEWSPAPER [
<!ELEMENT NEWSPAPER (ARTICLE+)>
<!ELEMENT ARTICLE (HEADLINE,BYLINE,LEAD,BODY,NOTES)>
<!ELEMENT HEADLINE (#PCDATA)>
<!ELEMENT BYLINE (#PCDATA)>
<!ELEMENT LEAD (#PCDATA)>
<!ELEMENT BODY (#PCDATA)>
<!ELEMENT NOTES (#PCDATA)>
<!ATTLIST ARTICLE AUTHOR CDATA #REQUIRED>
<!ATTLIST ARTICLE EDITOR CDATA #IMPLIED>
<!ATTLIST ARTICLE DATE CDATA #IMPLIED>
<!ATTLIST ARTICLE EDITION CDATA #IMPLIED>
<!ENTITY NEWSPAPER "Vervet Logic Times">
<!ENTITY PUBLISHER "Vervet Logic Press">
<!ENTITY COPYRIGHT "Copyright 1998 Vervet Logic Press">
]>
// xml代码
<NEWSPAPER>
<ARTICLE AUTHOR="在家一点都不无聊" DATE="2020-2-28">
<HEADLINE>NEWSPAPER</HEADLINE>
<BYLINE>PUBLISHER</BYLINE>
<LEAD>COPYRIGHT</LEAD>
<BODY>LLA</BODY>
<NOTES>LALA</NOTES>
</ARTICLE>
</NEWSPAPER>
未完。。。。