XML-DTD约束
什么是框架
- 就是由多种设计模式配合形成的特定的框架处理特定问题底层是通过Java的反射机制来完成
了解xml
- XML 指可扩展标记语言(EXtensible Markup Language)。
- XML 的设计宗旨是传输数据,而不是显示数据。
- XML 标签没有被预定义。您需要自行定义标签。
- XML 被设计为具有自我描述性。
- XML 是 W3C 的推荐标准。
Html与xml区别?
- XML 被设计用来传输和存储数据,其焦点是数据的内容。(xml 用途)
- HTML 被设计用来显示数据,其焦点是数据的外观。
Html 是超文本
Xml是可扩展标记语言
xml能够通过字符串表示对象的结构
什么是格式良好XML
- 有且只有一个根元素
- XML标签大小写正确区分
- 正确使用结束标签
- 正确嵌套标签
- 使用了合法的标签名
- 定义有效的属性
DTD 介绍
-
文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。
-
是xml配置文件的约束技术中的一种,另外一种是 schema – xsd文件
DTD元素
在 DTD 中,XML 元素通过元素声明来进行声明
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE element-name [
<!ELEMENT element-name (type)>
<!-- 有n个 element-name 就要声明 n 个 ELEMENT -->
<!-- 注:根标签也要定义!!! -->
]>
元素的限制
, 并且,要满足所有
| 或者,满足其中一个就行
次数: +, 1~n
*, 0~n
?, 0或1
没有
实例
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE persons [
<!--混合标签 在persons元素下的标签只能为person 后面的加代表次数 1~n 次 -->
<!ELEMENT persons (person+)>
<!--混合标签 person元素可包含"name、"age"、"contact", "br(0次/1次)" -->
<!ELEMENT person (name,age,contact,br?)>
<!--文本元素 -->
<!ELEMENT name (#PCDATA)>
<!--文本元素 -->
<!ELEMENT age (#PCDATA)>
<!--混合标签 至少要有(phone|email)其中一个标签 -->
<!ELEMENT contact (phone|email)>
<!--文本元素 -->
<!ELEMENT phone (#PCDATA)>
<!--空元素 -->
<!ELEMENT br EMPTY>
<!--文本元素 -->
<!ELEMENT email (#PCDATA)>
]>
<persons>
<person>
<name>张小明</name>
<age>10</age>
<contact>
<phone>1234567</phone>
</contact>
<br/>
</person>
<person>
<name>张大明</name>
<age>35</age>
<contact>
<email>123@qq.com</email>
</contact>
</person>
</persons>
DTD - 属性
声明属性
<!ATTLIST element-name
att_name type
>
<!--ATT是attribute缩写-->
以下是 属性类型的选项:
默认值(在下面的代码中 如果b标签的 value 没有值会默认为 100;)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE a[
<!ELEMENT a (b+)>
<!ATTLIST b
value CDATA "100"
>
] >
<a>
<b value="1"></b>
</a>
#REQUIRED(下面代码,如果b 标签没有 value 会出现编译错误)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE a[
<!ELEMENT a (b+)>
<!ATTLIST b
value CDATA #REQUIRED
>
] >
<a>
<b value="1"></b>
</a>
#IMPLIED(下面代码,如果b 标签 value 可有可没有)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE a[
<!ELEMENT a (b+)>
<!ATTLIST b
value CDATA #IMPLIED
>
] >
<a>
<b></b>
</a>
#FIXED(下面代码,b 标签 中的 value 只能为 1000,不然就会编译错误)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE a[
<!ELEMENT a (b+)>
<!ATTLIST b
value CDATA #FIXED "1000"
>
] >
<a>
<b value="1000"></b>
</a>
完整元素-属性代码演示:
<?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 br EMPTY>
<!ELEMENT phone (#PCDATA)>
<!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>10</age>
<contact>
<phone>1234567</phone>
</contact>
<br />
</person>
<person pid="p2">
<name>张大明</name>
<age>35</age>
<contact>
<email>123@qq.com</email>
</contact>
</person>
</persons>
一个DTD限制config.xml 案例
<?xml version="1.0" encoding="UTF-8"?>
<!--
config标签:可以包含0~N个action标签
-->
<!DOCTYPE config[
<!ELEMENT config (action*)>
<!ELEMENT action (forward*)>
<!ELEMENT forward EMPTY>
<!ATTLIST action
path CDATA #REQUIRED
type CDATA #REQUIRED
>
<!ATTLIST forward
name CDATA #IMPLIED
path CDATA #REQUIRED
redirect (true|false) 'true'
>
]>
<config>
<!--
action标签:可以饱含0~N个forward标签
path:以/开头的字符串,并且值必须唯一 非空 ,子控制器对应的路径
type:字符串,非空,子控制器的完整类名
-->
<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>