xml文件之DTD约束
1.什么是DTD?
DTD全称为,Document Type Definition,中文翻译为文档类型定义,是一套为了进行程序间的数据交换而建立的关于标记符的语法规则。
2.什么是框架?
就是由多种设计模式配合形成的
特定的框架处理特定问题
底层是通过Java的反射机制来完成
3.关于XML
1.什么是XML?
XML 指可扩展标记语言(EXtensible Markup Language)
2.XML的作用?
做配置(几乎百分之九十九的框架都有配置文件,也就是XML文件)
做数据传输
3.XML和HTML的区别?
- 约束的差异性
- html是超文本
- xml是可拓展标记语言
- xml能够通过字符串表示对象的结构
4.什么是格式良好XML?
1.1 有且只有一个根元素
1.2 XML标签大小写正确区分
1.3 正确使用结束标签
1.4 正确嵌套标签
1.5 使用了合法的标签名
1.6 定义有效的属性
例如:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE persons [
<!ELEMENT persons (person*)>
<!ELEMENT person (name,age,contact,br?)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT contact (phone|email)>
<!ELEMENT phone (#PCDATA)>
<!ELEMENT br EMPTY>
<!ELEMENT email (#PCDATA)>
]>
<persons>
<person >
<name>老国王</name>
<age>100</age>
<contact>
<phone>123456789</phone>
</contact>
<br/>
</person>
<person>
<name>国王</name>
<age>35</age>
<contact>
<email>1234567851@qq.com</email>
</contact>
</person>
</persons>
5.XML中的特殊符号
&(逻辑与) &
<(小于) <
>(大于) >
"(双引号) "
'(单引号) '
4.关于DTD
4.1 DTD的写法:
<!ELEMENT 元素名 (元素描述)>
4.2 关于元素的定义方法也有不同
<!ELEMENT element-name EMPTY>//空元素
<!ELEMENT element-name (#PCDATA)>//文本元素
<!ELEMENT element-name (e1,e2)>//混合元素
4.3 关于元素的限定
, 代表并且
| 代表或者
次数:
+, 代表1~n
*, 代表0~n
?, 代表0或1
没有,代表空
例如:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE persons [
<!ELEMENT persons (person*)><!-- 定义根标签,内容为0-N个person -->
<!ELEMENT person (name,age,contact,br?)><!-- 定义元素person,内容为包含name,age,contact,br一个或者没有 -->
<!ELEMENT name (#PCDATA)><!-- 定义元素name,内容为文本元素 -->
<!ELEMENT age (#PCDATA)><!-- 定义元素age,内容为文本元素 -->
<!ELEMENT contact (phone|email)><!-- 定义元素contact,内容为包含phone元素或者包含email元素 -->
<!ELEMENT phone (#PCDATA)><!-- 定义元素phone,内容为文本元素 -->
<!ELEMENT br EMPTY><!-- 定义元素br,内容为空 -->
<!ELEMENT email (#PCDATA)><!-- 定义元素email,内容为文本元素 -->
]>
4.4 DTD元素还可以定义属性
<!ATTLIST element-name
att_name type
>
type类型如下:
attribute
ID
(男|女)
CDATA
IDREF
reference
#REQUIRED/#IMPLIED
例如
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE persons [
<!ELEMENT persons (person*)>
<!ELEMENT person (name,age,contact,br?)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT contact (phone|email)>
<!ELEMENT phone (#PCDATA)>
<!ELEMENT br EMPTY>
<!ELEMENT email (#PCDATA)>
<!ATTLIST person
pid ID #REQUIRED
sex (男|女) '男'
qq CDATA #IMPLIED
parent IDREF #IMPLIED
>
]>
<persons>
<person pid="p1" sex="男" qq="aaa" parent="p2">
<name>老国王</name>
<age>100</age>
<contact>
<phone>123456789</phone>
</contact>
<br/>
</person>
<person pid="p2">
<name>国王</name>
<age>35</age>
<contact>
<email>1234567851@qq.com</email>
</contact>
</person>
</persons>
5.Config案例:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE config [
<!ELEMENT config (action*)><!-- 定义根元素,内容是可以包含0-N个action标签 -->
<!ELEMENT action (forward*)><!-- 定义根元素,内容是可以包含0-N个foward标签 -->
<!ATTLIST action
path CDATA #REQUIRED
type CDATA #REQUIRED
>
<!ATTLIST forward
name CDATA #REQUIRED
path CDATA #REQUIRED
redirect (true|false) 'false'
>
<!--
path:以/开头的字符串,并且值必须唯一 非空 ,子控制器对应的路径
type:字符串,非空,子控制器的完整类名
-->
]>
<config>
<action path="/registerAction" type="test.action.RegisterAction">
<forward name="success" path="/index.jsp" redirect="true" />
<forward name="failed" path="/register.jsp" redirect="false" />
</action>
<action path="/loginAction" type="test.action.LoginAction">
<forward name="a" path="/index.jsp" redirect="false" />
<forward name="b" path="/welcome.jsp" redirect="true" />
</action>
</config>