Java Web程序设计------XML、约束

2.1XML基础

在实际开发中,不通语言项目之间数据的传输的格式 有可能不兼容,为解决此问题w3c推出一种新的数据交换标准——XML,它是一种通用的数据交换格式,轻松使数据在各种程序之间交换。

2.1.2 XML概述

1.什么是XML

现实中各种事物之间存在一定关联关系,例如中国有很多省份,每个省份又有很多城市,这种关系可以构成树状图来描述,而对于程序来说解析图片有点困难,所以可以用XML来描述这种树状层次结构。

XML是extensible marking language的缩写,类似于HTML的标记语言,成为可扩展标记语言,所谓可扩展就是——用户可以按XML标准自定义标记。

<?xml version="1.0" encoding="UFT-8"?>
<中国>
    <山西>
        <城市>太原</城市>
        <城市>大同</城市>
    </山西>
    <河北>
        <城市>石家庄</城市>
        <城市>张家口</城市>
    </河北>
</中国>

2.XML与HTML的比较

都是标记语言,在结构上大体上相同,但有本质区别。

(1)HTML用来格式化显示数据,XML用来传输和存储数据。

(2)HTML不区分大小写,XML严格区分大小写。

(3)HTML可以有多个根元素,良好格式的XML只能有一个根元素。

(4)HTML中空格自动过滤,XML中空格不会自动删除。

(5)HTML中的标记都是预定义的,XML中标记可以自定义并可扩展。

总之XML不是HTML的升级,也不是替代品。XHTML——XML应用被重新定义的HTML。

2.1.2XML的语法

1.文档声明

XML文档中必须有一个声明,且在第一行。

<?xml version="xml版本" encoding="编码方式" standalone="是否为独立文档yes/no"?>

2.元素自定义

主题都是有元素构成,元素由开始标记、属性、元素内容、结束标记构成。

若一个元素没有被其他元素套嵌则为根元素,若一个元素没有 套嵌任何元素则为空元素,这时不需要使用结束标签,在开始标签后加/。

3.属性定义

XML文档中可以为元素自定义属性,属性是对元素的进一步描述和说明。

<售价 单位="元">68</售价>

4.注释信息

<!-- 注释内容  -->

2.1.3 DTD约束

1.什么是约束

在书写XML文档时,内容必须满足一些条件的限制,如 <书>标签中不能出现两个<价格>标签,这样就很难区分哪个是普通价格和会员价格。在对XML文档进行约束时,同样需要遵守一系列的语法规则,这种语法就形成的XML约束语言。最常见的两种约束语言DTD约束和Schema约束。

2.DTD约束

book.dtd文件:

<!ELEMENT 书架 (书+)>           <!--表示书在书架元素中出现1次或多次-->
<!ELEMENT 书 (书名,作者,售价) >  <!--表示书元素有三个子元素,且要按照顺序出现-->
<!ELEMENT 书名 (#PCDATA)>       <!--表示书名元素套嵌的内容是普通的文本字符-->
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>

3.DTD的引入方式

(1)引用本地的的dtd文件  可以为一个绝对值地址和相对地址  此时standalone属性不能设为yes

<!DOCTYPE 根元素名称 SYSTEM ".dtd文件的url">

(2)引用公共的dtd文件   地址为Internet上的一个绝对url地址

<!DOCTYPE 根元素名称 PUBLIC "DTD名称" ".dtd文件的url">

(3)内嵌方式  standalone可以为yes

<!DOCTYPE 根元素名称[
    <!ELEMENT 书架 (书+)>        
    <!ELEMENT 书 (书名,作者,售价) > 
    <!ELEMENT 书名 (#PCDATA)>       
    <!ELEMENT 作者 (#PCDATA)>
    <!ELEMENT 售价 (#PCDATA)>
]>

多个XML文档可共享一个DTD文件

4.DTD语法

(1)元素定义<!ELEMENT>用于定义一个元素。

<!ELEMENT 元素名称 元素内容>

元素内容有5中内容:

  • <!ELEMENT 书名 (#PCDATA)>    表示书名为普通的文本字符串
  • <!ELEMENT  书(作者,单价,书名)> 表示套嵌的子元素
  • <!ELEMENT  书(#PCDATA|书名)*> 表示前两种的混合
  • <!ELEMENT br EMPTY>  表示br为没有内容的空元素
  • <!ELEMENT ANY>  表示可以包含任何元素,避免使用

符号:?1次或0次   *0次或多次   +1次或多次   | 列出的对象选一个  ,必须按顺序出现   ()给元素分组

(2)属性定义

<!ATTLIST 元素名
    属性名1 属性类型 属性说明
    属性名2 属性类型 属性说明
>

1)属性说明中有四种设置:

  • #REQUIREN 表示元素的该属性是必须的
  • #IMPLIED 表示元素可以包含该属性
  • #FIXED 表示一个属性的默认值,不能将元素设为其他值  需要提供一个默认值当不包含该属性时自动设置为dtd中的默认值
  • 默认值 如果不包含该属性自动设为默认值  与#FIXED不同的是该默认值可以被改变

2)属性类型:

有10中属性类型,常见的有

  • CDATA  表示属性类型为字符类型,与元素内容中的#PCDATA是一样的,属性值设置中的特殊字符也需要使用转义字符来表示,&amp表示&,&it表示<。
  • Enumerated  枚举类型 
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE 购物篮[
    <!ELEMENT 购物篮 ANY>
    <!ELEMENT 肉 EMPTY>
    <!ATTLIST 肉 品种(鸡肉|牛肉|猪肉) "鸡肉">

]>
<购物篮>
        <肉 品种="鸡肉"/>
        <肉 品种="猪肉"/>
</购物篮>

品种为Enumerated类型,其值只能为列出来的值,默认值为鸡肉

  • ID一个id类型的属性用来唯一标示xml文档中的一个元素,id必须设置为#IMPLIED或#REQUIRED,因为对id设置默认值无意义。
<?xml versiong"1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE 联系人列表[
    <!ELEMENT 联系人列表ANY>
    <!ELEMENT 联系人 (姓名, EMAIL)>
    <!ELEMENT 姓名 (#PCDATA) >
    <!ELEMENT EMAIL (#PCDATA) >
    <!ATtlist 联系人 编号 ID #REQUIRED>
]>

<联系人列者>
    <联系人 编号="id1">
        <姓名>张三</姓名>
        <EMAIL>zhang@itcast. cn</ EMAIL>
    </联系人>
    <联系人 编号="id2">
        <姓名>李四<7姓名>
        <EMAIL>[email protected]</ EMAIL>
    </联系人> 
</联系人列表>
  • IDREF   表示不同id之间的联系  在两个元素之间建立一对一的关系
<?xml version="1.0" encoding= "UTF-8”  standalone="yes"?>
<!DOCTYPE联系人列表[ 
    <!ELEMENT 联系人列表 ANY>
    <!ELEMENT 联系人(姓名, EMAIL)>
    <!ELEMENT 姓名(#PCDATA)>
    <!ELEMENT EMAIL (#PCDATA) >
    <!ATTLIST联系人
                编号 ID #REQUIRED
                上司 IDREF #IMPLIED>
]>
<联系人列表>
    <联系人 编号="id1">
        <姓名>张三</姓名>
        <EMAIL> zhang@itcast .org</EMAIL>
    </联系人>
    <联系八 编号= "id2"上司="id1">
        <姓名>李四</姓名>
        <EMAIL>li@itcast .org</EMAIL>
    </联系人>
</联系人列表>
  • IDREFS  建立一对多的关系
<!ATTLIST person borrowed REFS # REQUIRED>

<books>
    <book bookid="b0101">
        <title>Java就业培训教材</title>
    </book>
    <book bookid="b0102">
        <title>Java Web 开发内幕</title>
    </book>
    <book bookid="b0103">
        <title>Java开发宝典</title>
    </book>
</books>
<records>
    <item>
        <data>2013-03-13</data>
        <person name="张三”borrowed="b0101 b0103" />
    </item>
    <item>
        <data>2013-05-23</data>
        <person name="李四”borrowed="b0101 b0102 b0103" />
    </item>
</records>

2.1.4Schema约束

1. Schema约束

是DTD约束的升级,他的出现克服了dtd的局限性。

  • Schema本身采用XML语法格式,本身也是一种XML文档,更好理解。DTD采用非XML语法格式。
  • Schema采用与XML文档相同的合法性检验机制,与DTD的解释器不同。
  • Schema对命名空间的支持非常好,DTD就不支持。
  • Schema比DTD支持的数据类型更多,包括自定义数据类型。
  • Schema约束能力更强大、细致。

2.命名空间

可以近似的看作对象调用该类的属性。

使用命名空间前应先声明。声明命名空间就是在XML实例文档中为某个模式文档的命名空间指定一个临时的简写名称。以xmlns或xmlns:作为前缀。

3.引入Schema文档

(1)使用命名空间引入XML Schema文档

<?xml version="1.0" encoding="UTF-8"?>
<书架 xmlns="http://www.it315.org/xmlbook/schema"   <!--规定默认空间-->
      xmlns: xsi="http://www.w3.org/2001/XMLSchema-instance"  <!---->
      xsi:schemaLocation="http://www. it315.org/xmlbook/schema   <!--命名空间-->
                          http://www. it315.org/xmlbook.xsd" >    <!--Schema文件的url-->
 
<书>
    <书名>JavaScript网页开发</书名>
    <作者>张孝祥</作者>
    <售价>28.00元</售价>
</书>
</书架>

xsi:schemaLocation属性在标准命名空间"http://www. w3.org/2001/XMLSchema-instance"中定义的,

(2)不使用命名空间来引入XML Schema文档

还可以通过xsi:noNamespaceSchemalocation属性引属性直接指定,noNamespaceSchemalocation属性也是在标准名称空间"http://www. w3.org/2001/XMLSchema-instance"的,它用于定义指定文档的位置。

<?xml version="1.0" encoding="UTF-8"?>
<书架 xmlns:xsi="http:/ /www. w3. org/2001/XMLSchema- instance"
      xsi :noNamespaceSchemaLocation=" xmlbook.xsd">
<书>
    <书名>JavaScript网页开发</书名>
    <作者>张孝祥</作者>
    <售价>28.00元</售价>
</书>
</书架>

4.Schema语法

(1)元素定义

声明一个元素

<xs:element name="xxx" type="xxx">

type指元素类型:

  • xs:string 字符串
  • xs:decimal 小数
  • xs:integer 整数
  • xs:boolean 布尔类型
  • xs:date 日期类型
  • xs:time 时间类型
<lastname> Smith</lastname>
<age>28</age>
<dateborn>1980-03-27</dateborn>
<xs:element name="lastname" type="xs:string"/>
<xs:element name="age" type="xs: integer"/>
<xs:element name="dateborn" type="xs :date"/>

(2)属性的定义

<xs:attribute name="xxx" type="xxx">
<lastname lang="En"> Smith</lastname>

<xs: attribute name="lang" type="xs:string">

(3)简单类型

1 ) xs:minInclusive和xs:maxInclusive元素对值的限定

<xs:element name="age">
    <xs:simpleType>
        <xs:restriction base="xs :integer">
            <xs:minInclusive value="18" />
            <xs:maxInclusive value="58" />
       </xs:restriction>
    </xs:simpleType>
</xs:element>

2) xs.enumeration元素对组值的限定(枚举列出取值范围)

<xs:element name="car">
    <xs:simpleType>
        <xs:restriction base="xs:string">
            <xs:enumeration value="Audi"/>
            <xs:enumeration value="Golf"/>
            <xs:enumeration value="BMW"/>
        </xs:restriction>
    </xs:simpleType>
</xs:element>

3) XS:pattern元素对一系列值的限定

<xs:element name="letter">
    <xs:simpleType>
        <xs:restriction base="xs:string">
            <xs:pattern value="[a-z]"/>
        </xs:restriction>
    </xs:simpleType>
</xs:element>

4) xstestriction元素对空白字符的限定

在XML文档中,空白字符比较特殊,如果需要对空白字符(Witepaice Caraces)进行处理,可以使用WhiteSpace元素。whiteSpace 元素有3个属性值可以设定,分别是preserve、replace和collapse。其中,preserve 表示不对元素中的任何空白字符进行处理,replace 表示移除所有的空白字符, collapse表示将所有的空白字符缩减为一个单一字符。

<xs:element name="address">
    <xs:simpleType>
        <xs:restriction base= "xs:string">
            <xs:whiteSpace value="preserve"/>
        </xs:restriction>
    </xssimpleType>
</xs:element>

(4)复杂类型

<xs:complexType></xs:complexType>

1)空元素<xs:complexType></xs:complexType>

2)包含其他元素的元素<xs:complexType><sequence></sequence></xs:complexType>

3)仅包含文本的元素

4)包含元素和文本的元素<xs:complexType mixed="ture"><sequence></sequence></xs:complexType>

猜你喜欢

转载自blog.csdn.net/Qmilumilu/article/details/85156225