XML-DTD约束

XML-DTD约束

什么是框架

  • 就是由多种设计模式配合形成的特定的框架处理特定问题底层是通过Java的反射机制来完成

了解xml

  • XML 指可扩展标记语言(EXtensible Markup Language)。
  • XML 的设计宗旨是传输数据,而不是显示数据。
  • XML 标签没有被预定义。您需要自行定义标签。
  • XML 被设计为具有自我描述性。
  • XML 是 W3C 的推荐标准。

Html与xml区别?

  • XML 被设计用来传输和存储数据,其焦点是数据的内容。(xml 用途)
  • HTML 被设计用来显示数据,其焦点是数据的外观。
    Html 是超文本
    Xml是可扩展标记语言
    xml能够通过字符串表示对象的结构

什么是格式良好XML

  1. 有且只有一个根元素
  2. XML标签大小写正确区分
  3. 正确使用结束标签
  4. 正确嵌套标签
  5. 使用了合法的标签名
  6. 定义有效的属性

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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值