您的位置:首页 > 其它

XML课程学习笔记-day02

2020-06-25 04:47 246 查看

一  XML约束

在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束。

 

需要XML约束的原因

xml由于是可扩展的标记语言,所以在xml文件中的编写太过于自由,这样在很多种情况下并不合适。

 

常用的约束技术

XML DTD

DTD文件的后缀名为 .dtd

DTD文件有自己独立的语法规范

XML Schema

Schema文件的后缀名为 .xsd

Schema文件符合xml语法规范

 

二  DTD Document Type Define

DTD的定义:描述元素、属性和其他杂项在xml文档中的使用规则的说明

 

DTD的分类:外部的DTD 内部的DTD 混合的DTD

1).内部的DTD:DTD和xml文档在同一个文件中

例如:

student1.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/student2.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/student3.xml文件

<?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+)>

 

 

外部的DTD

引用外部dtd的时候又分为俩种:

SYSTEM表示引用的dtd文件在本地

例如:

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

 

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

格式:注意里面是可以加回车换行的

<!DOCTYPE 根元素 PUBLIC "" "">

例如:

<!DOCTYPE hibernate-configuration PUBLIC

          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

 

在后面的"如何在Eclipse中给xml文件添加标签自动提示功能"的部分再做说明

 

 

DTD的目的:

验证该xml文档是否是有效的xml文档

如果一个良构的xml文档满足了DTD的声明就是一个有效的xml文档。

注意:良构 不一定  有效,但是有效一定良构

 

 

DTD对xml文件中元素的约束:

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

内容模式:

1).EMPTY:元素不能包含子元素和文本(空元素)

例如:

dtd文件:

<!ELEMENT students (stu)>

<!ELEMENT stu EMPTY>

xml文件:

<students>

<!--这个stu元素中的内容必须为空-->

<stu></stu>

</students>

 

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

例如:

dtd文件:

<!ELEMENT students (stu)>

<!ELEMENT stu (#PCDATA)>

xml文件:

<students>

<stu>tom</stu>

</students>

 

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

例如:

dtd文件:

<!ELEMENT students (stu)>

<!ELEMENT stu ANY>

xml文件:

<students>

<stu>tom</stu>

</students>

或者

<students>

<stu>

<name>tom</name>

</stu>

</students>

 

 

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

() 来给元素分用组

 

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

例如:

dtd文件:

<!ELEMENT students (stu|student)>

xml文件:

<students>

<!--这里只能出现stu元素或者student元素-->

<!--俩个元素任选其一,不能同时出现-->

</students>

 

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

例如:

dtd文件:

<!ELEMENT students (stu+)>

xml文件:

<students>

<stu></stu>

<stu></stu>

<stu></stu>

</students>

 

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

例如:

dtd文件:

<!ELEMENT students (stu*)>

xml文件:

<students>

<!--stu出现0次到n次-->

<stu></stu>

<stu></stu>

<stu></stu>

</students>

 

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

例如:

dtd文件:

<!ELEMENT students (stu?)>

xml文件:

<students>

<!--stu出现0次到1次-->

<stu></stu>

</students>

 

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

例如:

dtd文件:

<!ELEMENT students (stu*)>

<!ELEMENT stu (id,name,age)>

xml文件:

<students>

<stu>

<id></id>

<name></name>

<age></age>

</stu>

</students>

 

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

例如:

dtd文件:

<!ELEMENT students (stu)>

xml文件:

<students>

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

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

<stu></stu>

</students>

 

 

5).混合元素 子元素是任意类型 出现任意次数 并且没有出现顺序要求

例如:

dtd文件:

<!ELEMENT students (stu*)>

<!ELEMENT stu (#PCDATA|id|name|age)*>

xml文件:

<students>

<stu></stu>

<stu>

<id></id>

<name></name>

<age></age>

</stu>

<stu>tom</stu>

</students>

注意:

1 根元素students里面可以出现stu子元素0到n次

2 stu元素中可以写文本也可以写id、name、age子元素

3 id、name、age子元素出现的顺序没有要求

4 id、name、age子元素可以都出现也可以都不出现

 

 

注意:浏览器是非验证的解析器,不会验证xml的有效性

      可以使用Eclipse去验证xml的有效性

 

 

DTD对xml文件中属性的约束:

格式:<!ATTLIST 元素名称

属性名称    值类型    属性特点

属性名称    值类型    属性特点

  >

 

属性类型:

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命名规则

例如:

dtd文件:

<!ELEMENT students (stu*)>

<!ELEMENT stu (#PCDATA)>

<!ATTLIST stu

id   ID    #REQUIRED

name CDATA #REQUIRED

>

xml文件:

<students>

<stu id="A1" name="tom"></stu>

<stu id="B1" name="tom"></stu>

</students>

注意:

1. id和name属性必须出现

2. id属性的值必须满足xml名字规范,例如不能数字开头

3. id属性的值不能重复

4. 多个属性的出现是没有顺序要求的

 

3).IDREF/IDREFS

IDREF属性的值指向文档中其它地方声明的ID类型的值。

IDREFS同IDREF,但是可以具有由空格分开的多个引用。

 

例如:

dtd文件:

<!ELEMENT students (stu*)>

<!ELEMENT stu (#PCDATA)>

<!ATTLIST stu

id   ID                        #REQUIRED

pid  IDREFS     #IMPLIED

name CDATA                #REQUIRED

>

xml文件:

<students>

<stu id="A1" name="tom"></stu>

<stu id="B1" name="tom"></stu>

<stu id="C1" name="tom" pid="A1 B1"></stu>

</students>

注意:

1. id和name属性必须出现

2. pid属性出现可以,不出现也可以

3. id属性的值必须满足xml名字规范,例如不能数字开头

4. id属性的值不能重复

5. pid属性的值必须是引用其他stu元素的id值

6. pid属性的值可以是多个,使用空格隔开

7. 多个属性的出现是没有顺序要求的

 

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

例如:

dtd文件:

<!ELEMENT students (stu*)>

<!ELEMENT stu (#PCDATA)>

<!ATTLIST stu

id     ID                    #REQUIRED

name   CDATA                 #REQUIRED

gender (男|女)                 #REQUIRED

>

xml文件:

<students>

<stu id="A1" name="tom" gender="男"></stu>

<stu id="B1" name="tom" gender="女"></stu>

</students>

注意:

1. id/name/gender属性必须出现

2. id属性的值必须满足xml名字规范,例如不能数字开头

3. id属性的值不能重复

4. gender属性的值必须是男或者女

5. 多个属性的出现是没有顺序要求的

 

属性特点:

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

例如:

dtd文件:

<!ELEMENT students (stu*)>

<!ELEMENT stu (#PCDATA)>

<!ATTLIST stu

name   CDATA   #REQUIRED

>

xml文件:

<students>

<stu name=""></stu>

<stu name="tom"></stu>

</students>

注意:

1. name属性必须出现

2. name属性的值可以为空也可以不为空

 

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

例如:

dtd文件:

<!ELEMENT students (stu*)>

<!ELEMENT stu (#PCDATA)>

<!ATTLIST stu

name   CDATA   #IMPLIED

>

xml文件:

<students>

<stu name=""></stu>

<stu name="tom"></stu>

<stu></stu>

</students>

注意:

1. name属性可以出现也可以不出现

2. name属性的值可以为空也可以不为空

 

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

例如:

dtd文件:

<!ELEMENT students (stu*)>

<!ELEMENT stu (#PCDATA)>

<!ATTLIST stu

name   CDATA   "tom"

>

xml文件:

<students>

<stu name="zhangsan"></stu>

<stu></stu>

</students>

注意:

1. name属性可以出现也可以不出现

2. name属性如果不出现则默认值为tom

 

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

例如:

dtd文件:

<!ELEMENT students (stu*)>

<!ELEMENT stu (#PCDATA)>

<!ATTLIST stu

name   CDATA   #IMPLIED

school CDATA   #FIXED "briup"

>

xml文件:

<students>

<stu school="briup"></stu>

<stu></stu>

</students>

注意:

1. name/school属性可以出现也可以不出现

2. school属性如果出现那么值一定要是briup

 

 

DTD文档的一个实例:

dtd文档:

<!ELEMENT students (student+)>

<!ELEMENT student (name,age?,score*)>

<!ATTLIST student id CDATA #REQUIRED>

<!ELEMENT name (#PCDATA)>

<!ATTLIST name firstName CDATA #IMPLIED>

<!ELEMENT age (#PCDATA)>

<!ATTLIST age xuAge CDATA #FIXED "20">

<!ELEMENT score (#PCDATA)>

<!ATTLIST score sel (60|80|100) #REQUIRED>

 

 

利用DTD文件在Eclipse中给xml文件添加标签自动提示功能        

利用schame文件在Eclipse中给xml文件添加标签自动提示功能

 

三 XML的解析

(一)SAX解析

SAX:基于事件处理的机制

sax解析xml文件时,遇到开始标签,结束标签,开始解析文件,文件解析结束,字符内容,空白字符等都会触发各自的方法。

 

优点:

适合解析大文件,对内存要求不高

轻量级的解析数据方式,效率更高 

缺点:

不能随机解析

不能修改XML文件,只能进行查询

 

(二)DOM解析:

采用dom解析,会将xml文档全部载入到内存当中,然后将xml文档

中的所有内容转换为tree上的节点(对象)。

优点:        

可以随机解析

可以修改文件

可以创建xml文件

缺点:

适合解析小文件,对内存要求高

 

-------------------------------------------

 

XML解析分为:dom解析和sax解析

dom:(Document Object Model, 即文档对象模型) 是 W3C 组织推荐的处理 XML 的一种方式。

sax: (Simple API for XML) 不是官方标准,但它是 XML 社区事实上的标准(相当于是一个民间标准),几乎所有的 XML 解析器都支持它。

 

 

dom和sax都是一种模型/标准/理论,是需要其他人使用具体的代码去实现的

 

xml解析器就是用来对dom或者sax解析标准的具体实现

 

XML解析器

sun公司的解析器Crimson

IMB公司的解析器Xerces                已经捐献给apache组织

dom4j组织的解析器Aelfred2

 

 

sun公司根据自己的解析器推出了解析xml的API   Jaxp

Java API for XMLProcessing,意为XML处理的Java API

 

dom4j组织根据自己的解析器推出了解析xml的API dom4j

dom4j是一个Java解析XML的API,

Day2-note

oracle   客户端 服务器端

 

pc   客户端  ----连接 任意的服务端oralce软件  地址 实例名 :XE

pc   客户端/服务器端

pc   服务器端 存储信息

 

cmd : 编写sql

 

plsql工具    : eclipse  编写sql

绿色版 免安装

 

 

  1.java  编程语言   解决数据问题

    xml   标记语言   展示/保存数据

    sql   结构语言   查询保存数据

 

    软件 sqlserver mysql oracle  关系型数据  ---》

   

    软件厂商  oracle

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: