XML DTD约束

XML约束(详见w3c)

XML约束要求:大家能够看懂约束内容,根据约束内容写出符合规则的xml文件

引入

   XML语法:规范的xml文件的基本编写规则。(由w3c组织制定的)

   XML约束:规范XML文件数据内容格式的编写规则。(由开发者自行定义)

XML约束技术

   DTD约束(Document Type Definition,全称为文档类型定义。):语法相对简单,功能也相对简单。学习成本也低。

   Schema约束:语法相对复杂,功能也相对强大。学习成本相对高!!!(名称空间)

DTD约束

1)导入dtd方式

   内部导入                                                           

<!DOCTYPE note [

 <!ELEMENT note (to+,from?,heading,body,br*,ren,chy, phone)> 

  <!ELEMENT to      (#PCDATA)>
  <!ELEMENT from    (#PCDATA)>
  <!ELEMENT heading (#PCDATA)>
  <!ELEMENT body    (#PCDATA)>
  <!ELEMENT br        EMPTY>
  <!ELEMENT ren        (hh)>
  <!ATTLIST chy name CDATA #IMPLIED>        
  <!ATTLIST note id ID #REQUIRED>            
  <!ATTLIST to id ID #REQUIRED>            
  <!ATTLIST from age CDATA #FIXED "18">            
  <!ATTLIST br name (br1|br2) #REQUIRED>

]>

 

   外部导入分2种

本地文件系统: 

当引用的文件在本地时,采用如下方式:)                                                            

<!DOCTYPE note SYSTEM "note.dtd">

         公共的外部导入(当引用的文件是一个公共的文件时,采用如下方式:)                                              

<!DOCTYPE 根元素 PUBLIC "http://www.baidu.com/baidu.dtd  ">

        

2)DTD语法

   ①约束标签

   <!ELEMENT 元素名称 类别>  或 <!ELEMENT 元素名称 (元素内容)>

         类别: 如为元素类型,则直接书写

   空标签: EMPTY。 表示元素一定是空元素。

   普通字符串:(#PCDATA)。表示元素的内容一定是普通字符串(不能含有子标签)。

              任何内容: ANY。表示元素的内容可以是任意内容(包括子标签)

 

         (元素内容):    如为元素内容:则需要使用()括起来

                顺序问题:

                 <!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)>:用逗号分隔,表示内容的出现顺序必须与声明时一致。

                          例如:<!ELEMENT note (to,from,heading,body,br,ren,chy, phone)> 

                <!ELEMENT 元素名称 (子元素名称 1|子元素名称 2|....)>:用|分隔,表示任选其一,即多个只能出现一个

                     例如:<!ELEMENT note (to|from)> 


                 次数问题:

                  标签   :  必须且只出现1次。

                  标签+  :至少出现1次

                  标签*   : 0或多次。

                  标签?  : 0 或1次。

                  也可使用圆括号( )批量设置

                        例如:  <!ELEMENT note (to+,from?,heading,body,br*,(ren,chy, phone)*)> 

                       注意:圆括号()里面的标签应该当做一个整体出现,次序应该保持不变。        

 

  ② 约束属性

          <!ATTLIST 元素名称 属性名称 属性值类型 默认值>

           或者

<!ATTLIST 元素名

  属性名1 属性值类型 默认值

  属性名2 属性值类型 默认值

  ……

         >

 

         默认值:

           #REQUIRED 属性值是必需的

           #IMPLIED   属性不是必需的

           #FIXED "value" 属性不是必须的,但属性值value是固定的

           默认值:在 XML 中可以设置该值也可以不设置该属性值。若没设置则使用默认值。  

                例如:<!ATTLIST name attr CDATA "默认属性值">

 
        完整读取xml后,默认属性和属性值被添加进去了。
 

         属性值类型:控制属性值的

               CDATA :表示普通字符串

               (en1|en2|..):表示一定是任选其中的一个值,此值是枚举列表中的一个值

               ID:表示在一个xml文档中该属性值必须唯一。ID 属性的值只能由字母、下划线开始,不能以数字开头,ID属性值中间不能出现空白字符

               ENTITY:值是一个实体。实体用于为一段内容创建一个别名,以后在XML文档中就可以使用别名引用这段内容了。                  

                       引用实体主要在XML文档中被引用, 例如:

<!ENTITY myentity "这是一个实体内容">

<name>&myentity;</name>

     读取xml后,实体内容被添加进去了。
      

note.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!-- 外部引用:公共的外部导入(来自网络),注意PUBLIC需要大写,否则无效
<!DOCTYPE note PUBLIC "http://www.baidu.com/baidu.dtd">
-->
<!-- 外部引用:本地文件系统 ,注意SYSTEM需要大写,否则无效 -->
<!DOCTYPE note SYSTEM "note.dtd"> 
<!--  内部引用     
<!DOCTYPE note [
  <!ELEMENT note (to+,from?,heading,body,br*,ren,chy, phone)> 
  <!ELEMENT to      (#PCDATA)>
  <!ELEMENT from    (#PCDATA)>
  <!ELEMENT heading (#PCDATA)>
  <!ELEMENT body    (#PCDATA)>
  <!ELEMENT br    	EMPTY>
  <!ELEMENT ren    	(hh)>
  <!ATTLIST chy name CDATA #IMPLIED>		
  <!ATTLIST note id ID #REQUIRED>			
  <!ATTLIST to id ID #REQUIRED>			
  <!ATTLIST from age CDATA #FIXED "18">			
  <!ATTLIST br name (br1|br2) #REQUIRED>			
]>
 -->
<note id="id0">
  <to id="id1">George</to>
  <to id="id2">George</to>
  <to id="id3">George</to>
  <to id="id4">George</to>
  <from age="18">John</from>
  <heading>Reminder</heading>
  <body>Don't forget the meeting!</body>
  <br name="br1"/>
  <br name="br2"/>
  <ren><hh>任何内容</hh></ren>
  <chy name=""></chy>
  <phone sex=""></phone>
</note>

note.dtd文件
<!ELEMENT note (to+,from?,heading,body,br*,ren,chy, phone)> 
  <!ELEMENT to      (#PCDATA)>
  <!ELEMENT from    (#PCDATA)>
  <!ELEMENT heading (#PCDATA)>
  <!ELEMENT body    (#PCDATA)>
  <!ELEMENT br    	EMPTY>
  <!ELEMENT ren    	(hh)>
  <!ATTLIST chy name CDATA #IMPLIED>		
  <!ATTLIST note id ID #REQUIRED>			
  <!ATTLIST to id ID #REQUIRED>			
  <!ATTLIST from age CDATA #FIXED "18">			
  <!ATTLIST br name (br1|br2) #REQUIRED>		

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值