首页 > 代码库 > 【javaweb学习】XML和约束模式

【javaweb学习】XML和约束模式


xml:可扩展标记语言,w3c组织发布的,用于保存有关系的数据,作为配置文件,描述程序模块之间的关系

<?xml version="1.0" encoding="gb2312" standalone="yes" ?>

 encoding 指定文档的字符编码; standalone 说明文档是否独立,如果 yes 则表示XML文件既不需要DTD文件来验证标记是否有效,也不需要XSL、CSS控制外观显示

元素:由一个标记来定义,包括开始和结束标记以及其中的内容, <book>深入体验java web开发内幕</book> (标记可以嵌套;格式良好的xml文档有且仅有一个根标签,其他标签都是根标签的子孙标签;在xml中空行和空格都会被作为原始内容解析)

命名规范:区分大小写,<A></A>和<a></a>是两种不同的标签;不能以数字、下划线或者xml开头;不能包含空格、冒号:

属性:XML解析属性的速度比解析子标记快,属性值必须用双引或单引引起来,属性也可被改为子标签的形式存储

<input name="txt1" /><input>    <name>txt1</name></input>

 

CDATA区:其中的内容不会被xml解析引擎解析,而是作为原始内容显示, <![CDATA[这是是CDATA区的内容]]> 

处理指令:简称PI,用来指挥xml解析引擎如何解析xml,以“<?”开头,以“?>”结尾,例如:文档声明 <?xml version="1.0" ?> ; <?xml-stylesheet type="text/css" href="http://www.mamicode.com/1.css" ?> ,它用来通知xml解析引擎使用css文件控制xml显示外观


XML约束模式:定义了XML文档的标记和结构,类似于数据表结构。XML约束模式的内容也要遵循一定的语法规则,其中主流有2种:XML DTDXML Schema

DTD约束即可以作为一个单独的文件(以.dtd为后缀)编写,也可以在XML文件内编写。其中包括元素之间的关系定义、元素属性定义、实体和符号的定义。

案例1:bookshelf.dtd

<!ELEMENT 书架 (书+)><!ELEMENT 书 (名称,作者,售价)><!ELEMENT 名称 (#PCDATA)><!ELEMENT 作者 (#PCDATA)><!ELEMENT 售价 (#PCDATA)>

在book.xml中

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE 书架 SYSTEM "bookshelf.dtd" ><书架>    <>        <名称>深入体验java web开发内幕</名称>        <作者>张孝祥</作者>        <售价>59元</售价>    </></书架>

在chrome浏览器中的显示如下

技术分享

 

注意:
1. XML只可有一个根节点
2. “书”和括号“()”之间有空格,“名称”和“(#PCDATA)”之间同样也有
3. 若没有“书架”,把“书”作为节点,也会报错

 

XML文档引用外部DTD约束

引用本地dtd文件 <!DOCTYPE 文档根结点 SYSTEM "DTD文件的URL"> 

引用公用dtd文件 <!DOCTYPE 文档根结点 PUBLIC "DTD名称" "DTD文件的URL"> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">


案例2: 在xml文件中编写dtd约束

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE 书架[    <!ELEMENT 书架 (书+)>    <!ELEMENT 书 (名称,作者,售价)>    <!ELEMENT 名称 (#PCDATA)>    <!ELEMENT 作者 (#PCDATA)>    <!ELEMENT 售价 (#PCDATA)>]><书架>    <>        <名称>深入体验java web开发内幕</名称>        <作者>张孝祥</作者>        <售价>59元</售价>    </></书架>

 

DTD约束模式

dtd文件中声明xml元素的格式: <!ELEMENT 元素名称 元素类型> , 元素类型 可以是元素内容或类型,如果是元素内容,要用括号包起来,如果是类型,直接书写

<!ELEMENT 书 (名称,作者,售价)>
<!ELEMENT 书 (书名|作者|价格)>
<!ELEMENT 名称 (#PCDATA)>
<!ELEMENT 书 EMPTY>
<!ELEMENT 书 ANY>

 

元素内容中用加号“+”表示元素出现>=1次,“?”表示出现1或者0次,“*”表示多少次都行。

  • 第1行,元素“书”有三个子元素“名称”“作者”“售价”,且排列顺序必须与声明时一致
  • 第2行,元素“书”只能有“名称”“作者”“售价”三者中的一个作为子元素
  • 第3行,元素类型为 #PCDATA
  • 第4行,元素类型为空,如 <br/>
  • 第5行,元素类型任意


dtd文件中元素属性定义的格式(元素必须已经声明了,才能为其声明属性):

<!ATTLIST 元素名称 属性名1 属性值类型 设置说明属性名2 属性值类型 设置说明...

属性类型有 CDATA 、 ENUMERATED 、 ID ,第一个表示属性值为普通文本字符串 ,第二个表示属性值只能是一组属性值中的一个,如  <!ATTLIST person sex (nan|nv) #IMPLIED> ,第三个表示元素的id,值唯一

设置说明有 #REQUIRED 必须设置该属性, #IMPLIED 可选 , #FIXED 该属性值固定为某个值,在 XML 文件中不能为该属性设置其它值。但需要为该属性提供这个值 ,直接使用默认值:在 XML 中可以设置该值也可以不设置该属性值。若没设置则使用默认值。 

<!ATTLIST person     id ID #REQUIRED    name CDATA #REQUIRED    sex (nan|nv) #IMPLIED nan    age CDATA #IMPLIED 12>

 

schema约束模式

schema比dtd好,已经成为w3c组织的标准,正逐步取代dtd

名称空间:使用名称空间来区分每个约束模式文档,每个名称空间都用一个唯一的URI表示。

名称空间声明:就是在XML中为一个约束模式文档的名称空间指定一个临时的简称,这个简称将作为元素和属性的前缀名。名称空间声明和元素的属性定义非常类似,可以位于任何一个元素的开始标记中,并且一个元素中可以声明多个名称空间;名称空间声明的基本格式为 xmlns:前缀名称="URI" ,其中的前缀名称就是临时的简称。 (xmlns是xml namespace的简写)。默认名称空间 xmlns="URI" ,即省略掉前缀名称。

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

 

使用名称空间引入XML Schema文档

上面的标记只能知道"http://www.w3.org/2001/XMLSchema"是代表某个名称空间的URI,并不能知道名称空间XML Schema文档的访问地址,那就无法对XML文档进行校验。

使用  xs:schemaLocation 来指定名称空间的访问地址,采用 名称空间 地址 ,中间有空格隔开。 xmlns:xs="http://www.w3.org/2001/XMLSchema" 这个名称空间众所周知,所有不用指定它的访问地址。

<书架 xmlns="http://www.xxx.com/bookshelfSchema" xmlns:test="http://www.demo.com/testSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema"         xs:schemaLocation=" http://www.xxx.com/bookshelfSchema   http://www.xxx.com/xsd/bookshelf.xsd                             http://www.demo.com/testSchema        http://www.xxx.com/xsd/test.xsd                                  "
>

 

 

 

 









【javaweb学习】XML和约束模式