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:属性可以不出现,但是如果出现的话就一定是指定的属性值

  • 相关阅读:
    Path文件操作实例
    Cache缓存对象缓存对象
    Session对象实例
    移动端适配问题
    webpack4 优化性能
    webpack源码分析
    wepack源码解析1
    webpack面试题
    asnyc await
    node 知识
  • 原文地址:https://www.cnblogs.com/yfstudy/p/9183264.html
Copyright © 2011-2022 走看看