xml的约束方法 xml的约束

一、DTD约束xml1、约束介绍    由于xml的标签由用户自己定义,因此在开发的时候,每个人都可以根据自己的需求来定义xml标签,这样导致项目中的xml难以维护,因此需要使用一定的规范机制来约束xml文件中的标签书写 。
2、DTD约束快速入门 第一步:先自己定义一个xml文件
<?xml version="1.0" encoding="UTF-8"?><users><user><name>zhangsan</name><age>23</age><addr>shanghai</addr></user><user><name>lisi</name><age>24</age><addr>beijing</addr></user></users> 第二步:书写DTD文件来约束xml文件
DTD文件在定义的时候,扩展名就是dtd 。
在xml文件中有多少个标签,就在dtd中书写多少个ELEMENT标签
<?xml version="1.0" encoding="UTF-8" ?><!ELEMENT users (user+) ><!ELEMENT user (name,age,addr) ><!ELEMENT name (#PCDATA) ><!ELEMENT age (#PCDATA)><!ELEMENT addr (#PCDATA)>3、DTD引入方式DTD主要用来约束xml文件,DTD可以单独写在文件中,也可以直接定义在xml中,可以在xml中引入第三方的公共DTD 。外部DTD的引入方式:外部DTD主要指的一个独立的DTD文件 。首先要书写DTD文件,然后在要被约束的xml文件中引入 。<!DOCTYPE 文档根结点 SYSTEM "DTD文件的URL">文档根结点 指的是当前xml中的根标签 。SYSTEM引入的系统中存在文件"DTD文件的URL" DTD存放的位置引入公共的DTD:<!DOCTYPE 文档根结点 PUBLIC "DTD名称" "DTD文件的URL">文档根结点 指的是当前xml中的根标签 。PUBLIC表示当前引入的DTD是公共的DTD在xml中直接书写DTD<!DOCTYPE根标签名 [具体的标签的约束]><?xml version="1.0" encoding="UTF-8"?><!DOCTYPE users[<!ELEMENT users (user+) ><!ELEMENT user (name,age,addr) ><!ELEMENT name (#PCDATA) ><!ELEMENT age (#PCDATA) ><!ELEMENT addr (#PCDATA) >]><users><user><name>zhangsan</name><age>23</age><addr>shanghai</addr></user><user><name>lisi</name><age>24</age><addr>beijing</addr></user></users>4、DTD的语法介绍元素当定义DTD约束xml时候,这时需要在DTD中使用ELEMENT来定义当前xml中可以出现的标签名称 。格式:<!ELEMENT 标签名 约束>约束来限定当前标签中可以有的子标签,或者当前标签中可以书写的内容在定义标签名的时候,约束中可以使用一些符号标签具体出现次数?零次或者一次*零次或者多次+一次或者多次users (user+)表示当前的users标签下可以有一个或者多个user标签,用来限定当前的子标签出现的顺序user (name,age,addr)user标签下只能有name age addr 子标签,并且必须按照nameageaddr的顺序书写|user (name|age,addr) user下可以name或者age ,但必须有addr,并且addr必须name或age后面#PCDATA表明该元素可包含任何字符数据,但不能在其中包含任何子元素 。只有 PCDATA 的元素通过圆括号中的 #PCDATA 进行声明EMPTY表明该元素不能有任何子元素或文本,仅可以使用属性 。ANY表该元素中可以包含任何DTD中定义的元素内容 如:<!ELEMENT note ANY><!ELEMENT age EMPTY >当前的age标签是个空标签,它不能有文本内容 。属性属性的类型:CDATA属性的value值可以是文本数据(值1 | 值2 | 值3....)表示当前的属性的value值只能是当前括号中的值ID 表示唯一 。对当前标签上的id属性进行限定,并且同一个xml中id不能重复 类型描述CDATA值为字符数据 (character data)(en1|en2|..)此值是枚举列表中的一个值ID值为唯一的 idIDREF值为另外一个元素的 idIDREFS值为其他 id 的列表NMTOKEN值为合法的 XML 名称NMTOKENS值为合法的 XML 名称的列表ENTITY值是一个实体ENTITIES值是一个实体列表NOTATION此值是符号的名称xml:值是一个预定义的 XML 值属性的类型和约束的组合:CDATAREQUIREDCDATAImpliedCDATAfixedCDATA“值” (值1 | 值2 | 值3....)REQUIREDIDREQUIRED实体实体用于为一段内容创建一个别名,以后在XML文档中就可以使用别名引用这段内容了 。在DTD定义中,一条<!ENTITY …>语句用于定义一个实体 。实体可以理解成Java中预先定义好的一个常量,然后xml文件中就可以引入当前这个定义的实体 。
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE users[<!ELEMENT users (user+) ><!ELEMENT user (name,age,addr) ><!ELEMENT name (#PCDATA) ><!ELEMENT age EMPTY ><!ELEMENT addr (#PCDATA) ><!ATTLIST user id ID #REQUIRED ><!ENTITYabc "上海传智播客123123">]><users><user id="u001"><name>zhangsan</name><age></age><addr>&abc;</addr></user><user id="u002"><name>lisi</name><age/><addr>&abc;</addr></user></users>二、Schema约束xml1、xml Schema介绍Schema它也来约束xml文件的,DTD在约束xml的时候一个xml中只能引入一个DTD,同时DTD它无法对属性以及标签中的数据做数据类型的限定 。Schema它是用来代替DTD来约束xml 。Schema文件本身就是使用xml文件书写的,同时它对需要约束的xml中的数据有严格的限定 。学习Schema主要来学习W3C组织定义的如何在Schema中去约束xml的标签以及属性,还有属性的数据类型,以及标签中子标签的顺序 。要定义一个Schema文件,这时它的扩展名必须是.xsd 。在这个文件中根元素必须是schema 。使用Schema来约束xml,Schema在书写的时候,只需要使用W3C组织提前定义的限定标签的,以及限定的属性的那个标签即可 。2、Schema快速入门第一步:书写xml文件
<?xml version="1.0" encoding="UTF-8"?><books><book><name>JavaWEB</name><author>老毕</author><price>182</price></book><book><name>SSH</name><author>老于</author><price>152</price></book></books>第二步:定义schema文件
在定义Schema文件的时候,由于这个Schema文件本身就是xml,它也要受到别的约束 。而这个约束是W3C组织提前定义好的,在Schema文件中需要提前引入进来在根标签中使用属性进行进入:<schemaxmlns="http://www.w3.org/2001/XMLSchema"引入W3C定义的schema书写的规范targetNamespace="http://www.itcast.org/book" 给当前的Schema文件起名字(命名空间)作用是当哪个xml要引入这个schema约束的时候,必须通过当前targetNamespace 后面书写的uri地址来引入<?xml version="1.0" encoding="UTF-8"?><schema xmlns="http://www.w3.org/2001/XMLSchema"targetNamespace="http://www.itcast.org/book"elementFormDefault="qualified"><element name="books"><complexType><sequence><element name="book"><complexType><sequence><element name="name"></element><element name="author"></element><element name="price"></element></sequence></complexType></element></sequence></complexType></element></schema>第三步:在xml文件中引入当前的这个Schema
<books xmlns="http://www.itcast.org/book"它是schema文件中的targetNamespace 属性后面的值xsi:schemaLocation="http://www.itcast.org/book book.xsd"这个是在引入当前的schema文件的真实路径xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"说明当前的xml是schema一个实例文档>3、Schema的名称空间在定义Schema文件的时候,需要在<schema>根标签中使用targetNamespace属性定义当前schema定义名称(只是一个分配的名字,根本没有指向任何文件),在被约束的xml文件中先根据这个名称引入当前的schema文件,然后在使用xsi:schemaLocation=””引入具体的schema文件 。(因为targetNamespace属性定义的schema名称,只是一个名称而已,所以在xml文件中需要通过schemaLocation来声明指定所遵循的Schema文件的具体位置)(xsi:schemaLocation 使用它引入某个schema时,先要使用名称空间,空格 ,文件名)名称空间主要功能是用于来elementFormDefault="qualified|unqualified"在schema中书写qualified ,在限定xml中的定义的标签名必须使用定义的名称空间 。unqualified 要求根元素必须使用名称空间,而子元素不能使用名称空间 。4、Schema中的标签解释<?xml version="1.0" encoding="UTF-8"?><schema xmlns="http://www.w3.org/2001/XMLSchema"targetNamespace="http://www.itcast2.org/book"elementFormDefault="qualified"><element name="books"><!--name代表当前的xml中可以书写标签名称type数据类型--><complexType ><!-- complexType 当前的element声明的标签是复杂标签时 ,需要使用complexType来声明子标签--><sequence><!-- 复杂标签是指有属性,或者有子标签,或者有属性有子标签的标签简单标签是指只有文本内容的标签<name>zhangsan</name>简单标签<name id="u001"></name>复杂标签sequence 代表当前子标签的顺序--><element name="book" maxOccurs="unbounded"><complexType mixed="true"><!—mixed属性值为true,book元素间就可以出现字符文本数据了--><sequence><element name="name"></element><element name="author"></element><element name="price" type="integer"></element><any></any></sequence></complexType></element></sequence></complexType></element></schema>Name.xsd
<schema xmlns="http://www.w3.org/2001/XMLSchema"targetNamespace="http://www.example.org/name"elementFormDefault="qualified"><element name="name"></element></schema>Book2.xml
<?xml version="1.0" encoding="UTF-8"?><aa:books xmlns:aa="http://www.itcast2.org/book"xmlns:bb="http://www.example.org/name"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.itcast2.org/book book2.xsdhttp://www.example.org/name name.xsd"><aa:book>aa:sjdlkfjlkdsjflk<aa:name >JavaWEB</aa:name><aa:author >老毕</aa:author><aa:price>182</aa:price><bb:name>sdgs</bb:name></aa:book></aa:books>【xml的约束方法 xml的约束】此文转载于https://www.cnblogs.com/cb0327/ 详细请看https://www.cnblogs.com/cb0327/p/4967782.html#_label2_0
人生永远无法回头,就连这平淡不惊的一幕,终有一日也会碎落满地