码迷,mamicode.com
首页 > 编程语言 > 详细

【javaweb学习】XML和约束模式

时间:2016-12-17 11:45:50      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:如何   list   w3c   any   enumerate   值类型   处理   访问   配置文件   


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="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和约束模式

标签:如何   list   w3c   any   enumerate   值类型   处理   访问   配置文件   

原文地址:http://www.cnblogs.com/lhat/p/6189200.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!