J2EE 快速入门之第四章 XML_DTD定义讲解

  一:XML约束概述

          在XML技术中,可以编写一个文档约束一个XML文档的书写规范,这称之为XML约束。

二:常见的XML约束

  1. DTD约束:
    DTD文件的后缀名为 .dtd
    DTD文件有自己独立的语法规范
  2. Scheam约束
    Scheam文件的后缀名是 .xsd
    Scheam 文件符合XML语法规范
  • xml 有良构性和有效性两个特性:

1.良构性:良构的xml文件,表示这个xml文件的内容,完全按照xml语言要求的语法进 行的编写符合语法,符合基本的规范要求,那么就是良构的xml
2.有效性:在良构的基础之上,那么这个xml同时还要满足DTD或者Schame文件的约束,那么这个xml文件就是有效的

注意:良构的xml文件不一定有效,有效的xml文件一定良构

三:如何在xml文件中引入约束


①:外部引入

              可以将dtd的约束内容写在外置的dtd文件中,这个文件后缀必须为.dtd,而文件保存时必须用utf-8编码保存,再在xml文件中使用:

    ①<!DOCTYPE 根元素名称  SYSTEM 文件的位置>

    如果写的是SYSTEM表明当前引入的dtd在当前文件系统中,后面制定的文件位置是当前硬盘中的位置
 

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE books SYSTEM "book.dtd">
<books>
    <book>
        <name>map集合</name>
        <price>15</price>
    </book>
    <book>
        <name>set集合</name>
        <price>18</price>
        <author>阿虎</author>
    </book>
</books>
文件:book.dtd

       <!ELEMENT books (book+)>

       <!ELEMENT nook (name,price,author?)>

       <!ELEMENT name (#PCDATA)>

       <!ELEMENT price (#PCDATA)>

       <!ELEMENT author (#PCDATA)>

②<!DOCTYPE 文档根节点 PUBLIC "DTD名称" "DTD文件的URL">

              如果写的是PUBLIC表明当前引入的dtd在网络公共位置中,后面要指明dtd的名字和dtd所在网络位置URL地址,如:

<!DOCTYPE web-app PUBLIC

         "-//Microsystems, Inc.//DTD Web Application 2.3//EN"

         "http://java.com/dtd/web-app_2.dtd">

②:内部引入

                直接在xml中书写dtd约束   

      <!DOCTYPE 根元素名称[

        dtd约束....

      ]>
Jo
  • 案例:Student.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE students [
	<!ELEMENT students (student*)>
	<!ELEMENT student (name,age,concat,br?)>
	<!ELEMENT name (#PCDATA)>
	<!ELEMENT age (#PCDATA)>
	<!ELEMENT concat (email|phone)>
	<!ELEMENT br EMPTY>
	<!ELEMENT email (#PCDATA)>
	<!ELEMENT phone (#PCDATA)>
]>
<students>
	<student>
		<name>小明</name>
		<age>17</age>
		<concat>
			<email>123@qq.com</email>
		</concat>
		<br/>
	</student>
	<student>
		<name>小黑</name>
		<age>17</age>
		<concat>
			<phone>1438438</phone>
		</concat>
	</student>
</students>

四:dtd语法解读

 (一):元素

   <!ELEMENT 元素名称 元素约束>

   a、元素约束:

                存放类型:ANY/EMPTY (存放任意类型/不能存放任何类型)             

b、元素约束:子元素的列表,将可以包含的子元素用小括号括起来

       ①子元素之间可以使用逗号进行分割,表明子元素必须按照顺序出现 :

  • <!ELEMENT student (name,age)>
S
      ②子元素之间可以使用竖线进行分割,表示子元素只出现其中之一:
F二
  •  <!ELEMENT student (name|age)>
       ③#PCDATA 表明包含标签体:
  • <!ELEMENT age (#PCDATA)>

        ④ +   :   一次或多次:

  • <!ELEMENT students (student+)>

      ⑤ ?   :   0次或一次:

  • <!ELEMENT students (student?)>

      ⑥ *   :   0次或多次:

  • <!ELEMENT students (student*)>
Ally

    ⑦也可以使用小括号进行组的操作:

  •   <!ELEMENT MYFILE ((TITLE*, AUTHOR?, EMAIL)* | COMMENT)>
(二):属性
  简述:
(ATTLIST:attribute [ə'trɪbjuːt](属性)list简写)

         <!ATTLIST 元素名

              属性名1 属性类型  属性约束

              属性名2 属性类型  属性约束

.....

         >
<!ATTLIST forward
		name CDATA #IMPLIED
		path CDATA #IMPLIED
		redirect (true|false) 'true'
	>

1:属性类型

      ①CDATA:表示属性的值是一个普通字符串

      ②ENUMERATED : 属性的值是一个枚举列表中的值。属性的类型可以是一组取值的列表,在 XML 文件中设置的属性值只能是这个列表中的某个值(枚举)。

      ③ID: 表明属性的值必须在整个文档中都是唯一的,如果有重复的id则校验不通过,ID 属性的值只能由字母,下划线开始,数字不能打头,不能出现空白字符
 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE config [
	<!ELEMENT config (action*)>
	<!ELEMENT action (forward*)>
	<!ELEMENT forward EMPTY>
	<!ATTLIST action
		path CDATA #IMPLIED
		type CDATA #IMPLIED
	>
	<!ATTLIST forward
		name CDATA #IMPLIED
		path CDATA #IMPLIED
		redirect (true|false) 'true'
	>
]>

	<!--
		config标签:可以包含0~N个action标签
	-->
<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>

2.属性约束

     ①#REQUIRED  --- 表明当前属性是一个必须存在的属性,如果这样的属性不存在则在校验时会报错。

     ②#IMPLIED --- (imply 隐含)表明当前属性是一个可选的属性,可以有也可以没有。

     ③#FIXED '固定值' --- 表明当前属性具有一个固定值,这样的属性不需要进行赋值,自动就会取这个固定值为值。如果这样的属性指定了一个不是固定值的值则校验报错。

     ④'默认值'  ---  表明当前属性具有一个默认值,如果给了其他的值就用其他值,如果没有给值则取这个默认值。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE students [
	<!ELEMENT students (student*)>
	<!ELEMENT student (name,age,concat,br?)>
	<!ELEMENT name (#PCDATA)>
	<!ELEMENT age (#PCDATA)>
	<!ELEMENT concat (email|phone)>
	<!ELEMENT br EMPTY>
	<!ELEMENT email (#PCDATA)>
	<!ELEMENT phone (#PCDATA)>
]>
<students>
	<student>
		<name>小明</name>
		<age>17</age>
		<concat>
			<email>123@qq.com</email>
		</concat>
		<br/>
	</student>
	<student>
		<name>小黑</name>
		<age>17</age>
		<concat>
			<phone>1438438</phone>
		</concat>
	</student>
</students>

Al 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值