zoukankan      html  css  js  c++  java
  • XML约束

    前言;在xml技术里,可以编写一个文档来约束xml文档的书写规范,这称之为xml约束。为什么我们需要编写xml约束呢,因为xml是可扩展的标记语言,这导致xml的编写

    太过于自由了,这样的话再很多情况下是不行的

    一、DTD的定义

    1.1DTD的定义

    DTD是一种常用的约束技术,dtd文件的后缀名为.dtd,DTD文件有自己独立的语法规范。描述元素、属性和其他杂项在xml文档中的使用规则说明

    1.2DTD的作用

    验证xml文档是不是一个有效的xml文档。

    有效:如果有个良构的xml文档满足的dtd的声明,那么这个文档是一个有效的xml文档

    有效一定良构,但是良构不一定有效

    1.3DTD的分类

    dtd分为三类,外部dtd和内部dtd还有混合的dtd。

    1)内部的DTD:DTD和xml文档在一个文件中,例如:

    <?xml version="1.0" encoding="UTF-8"?>
    		<!DOCTYPE students[
    			<!ELEMENT students (stu+)>
    			<!ELEMENT stu (id,name,age)>
    			<!ELEMENT id   (#PCDATA)>
    			<!ELEMENT name (#PCDATA)>
    			<!ELEMENT age  (#PCDATA)>
    		]>
    <students>
    	<stu>
    		<id>1</id>
    		<name>tom</name>
    		<age>20</age>
    	</stu>
    </students>
    

    2)外部的DTD:DTD和xml文档不在同一个文件中。例如:

    <?xml version="1.0" encoding="UTF-8"?>
    		<!DOCTYPE students SYSTEM "../dtd/student.dtd">
    		<students>
    			<stu>
    				<id>1</id>
    				<name>tom</name>
    				<age>20</age>
    			</stu>
    		</students>
    		dtd/student.dtd文件:
    		<!ELEMENT students (stu+)>
    		<!ELEMENT stu (id,name,age)>
    		<!ELEMENT id   (#PCDATA)>
    		<!ELEMENT name (#PCDATA)>
    		<!ELEMENT age  (#PCDATA)>
    

    3)混合的DTD:既有外部DTD,又有内部DTD。例如:

    <?xml version="1.0" encoding="UTF-8"?>
    		<!DOCTYPE students SYSTEM "../dtd/student.dtd"[
    			<!ELEMENT stu (id,name,age)>
    			<!ELEMENT id   (#PCDATA)>
    			<!ELEMENT name (#PCDATA)>
    			<!ELEMENT age  (#PCDATA)>
    		]>
    		<students>
    			<stu>
    				<id>1</id>
    				<name>tom</name>
    				<age>20</age>
    			</stu>
    		</students>
    
    		dtd/student.dtd文件:
    		<!ELEMENT students (stu+)>
    

    1.4外部DTD

    引用外部dtd时分为两种;一种在本地和在一个公共的文件里

    SYSTEM表示引用的dtd文件在本地,例如:

    <!DOCTYPE students SYSTEM".../dtd/student.dtd">

    public表示引用的dtd文件是一个公共的文件,

    <!DOCTYPE 根元素 public" dtd文件的描述信息" "dtd文件的url">

    例如:<!DOCTYPE hibernate-configuration PUBLIC
              "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
              "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

    二、DTD文件对xml文档中元素的约束

    2.1元素约束

    格式:<!ELEMENT 元素名(内容模式)>

    内容模式:1)EMPTY:元素不能包含子元素和文本(空元素)

    2)#PCDATA:可以包含任何字符数据,但是不能在其中包含任何子元素

    3)ANY:元素内容为任意的,主要是使用在元素内容不确定的情况下

    4)修饰符:| + * ?,默认修饰符

    |在列出的元素中选择一个

    +该元素最少出现一次,可以出现很多次(1次或n次)

    *表示该元素允许出现零次到任意多次(0次到n次)

    ?该元素可以出现,但只能出现一次(0次到一次)

    ,对象必须按指定的顺序出现

    默认修饰符:就是什么修饰符都没有加

    例如:<!ELEMENT students(stu)>

    <students>

      <!-- 这里只能出现stu元素一次-->

         <!--- stu元素不出现也验证不同过-->

      <stu></stu>

    <students>

    2.2混合元素

    子元素是任意类型,出现任意次数,并且没有出现顺序要求,元素中即可有文本数据也可以有子元素,例如

    <!ELEMENT name(#PCDATE|a|b)*>

    注:优先写#PCDATE,如(#PCDATE|a)*正确,(a|#PCDATE)错误。

    三、属性约束

    3.1格式要求

    <!ATTLIST 元素名称

          属性名称   值类型  属性特点

          属性名称  值类型  属性特点

    >

    3.2属性类型

    1)CDATA:属性值可以是任何字符(可包括数字和中文),例如:

    dtd文件:
    				<!ELEMENT students (stu*)>
    				<!ELEMENT stu (#PCDATA)>
    					<!ATTLIST stu 
    						id   CDATA #REQUIRED
    						name CDATA #REQUIRED
    					>
    				xml文件:
    				<students>
    					<stu id="1" name="tom"></stu>
    				</students>
    

    2)ID:属性值必须唯一,属性值必须满足xml命名规则

    3)enumerated:(枚举值1|枚举值2|枚举值3....),属性值必须在枚举值中

    3.3属性特点

    1)#REQUIRED:元素的所有实例都必须有该属性

    2)#IMPLIED:属性可以不出现

    3)default-value:属性可以不出现,并且当它不出现的时候是有默认值的

    4)#FIXED:属性可以不出现,但是如果出现的话就一定是指定的属性值

  • 相关阅读:
    Effective Java 第三版——72. 赞成使用标准异常
    Effective Java 第三版——71. 避免不必要地使用检查异常
    Effective Java 第三版——70. 对可恢复条件使用检查异常,对编程错误使用运行时异常
    Effective Java 第三版——69. 仅在发生异常的条件下使用异常
    Effective Java 第三版——68. 遵守普遍接受的命名约定
    Effective Java 第三版——67. 明智谨慎地进行优化
    Effective Java 第三版——66. 明智谨慎地使用本地方法
    Effective Java 第三版——65. 接口优于反射
    Effective Java 第三版——64. 通过对象的接口引用对象
    Effective Java 第三版——63. 注意字符串连接的性能
  • 原文地址:https://www.cnblogs.com/yfstudy/p/9183264.html
Copyright © 2011-2022 走看看