java_web初学笔记之<xml基础及约束>

XML:可扩展标记语言(EXtensible Markup Languague)

XML与HTML的区别:XML设计宗旨是为了传输数据,焦点在于数据的内容;HTML设计宗旨是为了显示数据,焦点在于数据的外观。

XML的几个用途:

①存储有关系的数据。

②用作软件配置文件。(最常用的)

③用作小型数据库。


XML基础

XML文档组成:

①文档声明

②元素 Element

③属性 Attribute

④注释 Comment <!--  注释内容  -->

⑤CDATA  <![CDATA[ ... ]]>

⑥处理指令PI

①文档声明:

由于XML是纯文本文件,首先要告诉它与其他文件诸如txt文件之间的区别,通知读取它的程序它为一个XML文件,因此需要文档声明。

文档声明中有(1)使用的XML版本,一般为version="1.0"     (2)编码方式  encoding="UTF-8" (3)是否为独立XML文件(判断是否独立依据看是否有DTD文件约束)standalone="yes"   无DTD约束   (standalone="no"有约束时)  一般不写standalone属性。

例:<?xml  version="1.0"   encoding="UTF-8" ?>      其中<?xml    ?>为固定格式,也是最简单的声明。


②元素(Element):

元素是开始标签、结束标签以及两者之间的所有内容,包括属性、注释、文本和子元素。

注意其与标签之间的区别:标签是一对尖括号和两者之间的内容,包括元素名和所有属性。

例如:<font color="red">是一个标签,</font>也是一个标签;而<font color="red">xml学习</font>是一个元素。

元素名放在开始标签中

例:<font></font>  font是元素名。

注:根元素的开始和结束标记用于包围 XML 文档的内容,所有的元素都是它的子元素。一个文件必须有且只能有一个根元素

元素命名规范:①元素名中不能出现空格。②名称只能以英文字母开始,不能是数字或符号。(在第一个字母之后就可以使用字母、数字或规定的符号,或它们的混合)。③对大小写没有限制,但前后要保持一致,以免造成混乱。

③属性(Attribute):

一个元素中可以有0个或多个属性,属性放在元素开始标签内,紧跟元素名之后,多个属性名以空格隔开。

形式:<元素名  属性名1="属性值1" 属性名2=“属性值2” >元素内容 </元素名>   属性值需要用单引号或者双引号引起来,对于原本即为字符串的要加上单引号。

例:<书桌 长=“30” 宽=“20”>我的书桌</书桌>

注:元素属性可以使用子元素代替,用子元素可以方便扩展和改变值。一般属性是随着元素不变的值,绑定在一起的。比如<人 身份证号=“34128...”/>,人与身份证号绑定的。

而<人><身高>180</身高></人>   人这个元素使用子元素<身高>180</身高>子元素,该子元素的内容可变即可扩展。

④注释(Comment):

注释格式:<!--注释内容   -->

注:①XML声明之前不能有注释 ②注释不能嵌套

⑤CDATA区:

CDATA内数据不让解析器解析,当作原始数据进行处理(故里面可以有<>"")

格式: <![CDATA[内容]]>

特殊字符:(1)转义字符:

字符:& 替代符号:&amp

字符:< 替代符号:&lt; (little than注意分号)

字符:>替代符号:&gt; (great than)

字符:‘(单引号) 替代符号:&apos

字符:“(双引号) 替代符号:&quot

(2)自定义字符:

&#x00A5 对应的符号为 ¥ (x表示16进制) 通过字符映射表来获取每个字符的编码

⑥处理指令(PI processing instruction)

处理指令用来指挥XML解析引擎如何解析XML文档内容

例如,在XML文档中可以使用xml-stylesheet指令,通知XML解析引擎,应用css文件显示xml文档内容。

格式:

<?xml-stylesheet type="text/css" href="path.css"?> type属性指的是使用什么类型的文件进行解析 href属性指明css文件的路径

</pre><pre name="code" class="html">属性是元素的属性,内容是元素的内容,子元素是元素的子元素。元素的内容还可以是子元素,所以删除元素要从其父元素删除其子元素,获得某一元素需要先获得父元素    。

XML部分基础可参看http://www.ibm.com/developerworks/cn/xml/x-newxml/ 进行学习,里面讲的还是挺好的。




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

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




XML约束

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

常用的约束技术:①DTD(Document Type Definition)  易学功能有限 ②Schema  难学功能强大


为何需要约束?

原因:①不同结构的XML需要用不同的解析方法进行解析,这就需要设计多种解析方法,不合理。②独立的XML太灵活,差不多是什么都可以写。但有些情况必须得有限制,如一本书不可能有两个售价,因此要约束书元素不能有两个售价元素,否则不合逻辑。③④...原因很多。


约束都会约束什么?

答:

1)约束模式定义了XML文档中允许出现的元素名(element)元素中的属性(attribute)元素中的内容类型(PCDATA,CDATA)元素之间的嵌套关系出现顺序以及子元素的个数(+ ? *)等。 

        2)如果没有为一个XML文档指定约束模式,那么该文档中可以包含任何类型的标记;如果为一个XML文档指定了约束模式,那么它必须满足约束模式所规定的结构、数据类型和数据关联等内容。

DTD学习:

①编写方式    ②DTD约束语法细节(元素定义、属性定义、实体定义)

①编写方式:

(1)作为单独的文件编写,XML进行引用

引用方式:

a.当引用的文件在本地时,采用如下方式:<!DOCTYPE 根元素名 SYSTEM "DTD文件的URL">

  例如: <!DOCTYPE 书架 SYSTEM “book.dtd”>。

b.当引用的文件是一个公共的文件时,采用如下方式: 

  <!DOCTYPE 文档根结点 PUBLIC "DTD名称" "DTD文件的URL"

例如:<!DOCTYPE web-app PUBLIC   "-//Sun Microsystems, Inc.//DTD WebApplication 2.3//EN"  "http://java.sun.com/dtd/web-app_2_3.dtd">


(2)XML内部编写。

在声明之后编写   <!DOCTYPE 根元素名   [ ]>

②DTD约束语法

元素定义(element):

DTD文档中使用ELEMENT声明一个XML元素。XML中出现的所有元素都必须在DTD中有声明。

语法格式如下所示:

   <!ELEMENT 元素名称 元素类型> 

其中元素类型可以是元素内容或类型。元素内容指的是该元素会含有什么内容(内容要么是文本,要么是子元素),内容如果是文本内容,则用#PCDATA;内容如果是子元素,则写出子元素名字。类型指的是元素是空还是元素内容为任意内容。

1.如为元素内容:则需要使用()括起来,如

<!ELEMENT 书架   (书名,作者,售价)>

<!ELEMENT 书名   (#PCDATA)>

内容:文本或子元素、组合关系、元素出现次数。

描述内容的组合关系有三种方式

①元素内容使用空白符间隔表示出现的顺序没有要求:<!ELEMENT 书架 (书 作者)> 书和作者元素没有顺序要求。

②元素内容使用逗号分隔表示出现的顺序有要求,要求和声明的顺序一致:<!ELEMENT 书架 (书,作者)> 书元素要在作者元素之前

③元素内容使用|分隔表示任选其一:<!ELEMENT 人 (真名|别名)> 真名元素和别名元素只能选写一个

描述内容中元素出现的次数四种方式:

① +: 一次或多次 (书+)

  ② ?: 0次或一次 (书?)

    ③ *: 0次或多次  (书*) 

④不加+?*: (书) 有且只有一次

2.如为元素类型,则直接书写,DTD规范定义了如下几种类型:
EMPTY:用于定义空元素,例如<br/> <hr/>
ANY:表示元素内容为任意类型。(建议少用)

属性定义(attribute):

xml文档中的元素属性需通过 ATTLIST为其设置属性
语法格式:

  <!ATTLIST 元素名

  属性名1 属性值类型 设置说明

  属性名2 属性值类型 设置说明

  ……

  >

ATTLIST:Attribute List 因为属性是元素的属性,所以在属性名之前要有元素名。
常用属性值类型
①CDATA:表示属性值为普通文本字符串。(最常用)
②ENUMERATED
③ID:表示属性的设置值为一个唯一值。
ID 属性的值 只能由字母,下划线开始,不能出现空白字符。
④ENTITY(实体)
设置说明
①#REQUIRED:必须设置该属性
②#IMPLIED:可以设置也可以不设置
③#FIXED:说明该属性的取值固定为一个值,在 XML 文件中不能为该属性设置其它值。 但需要为该属性提供这个值
④直接使用默认值:在XML 中 可以设置该值也可以不设置该属性值。若没设置则使用默认值。   注意与#FIXED的不同

 例:
<!ATTLIST 商品
类别 CDATA #REQURIED
颜色 CDATA #IMPLIED
>
<!ATTLIST 页面作者
  姓名 CDATA #IMPLIED
年龄 CDATA #IMPLIED
联系信息 CDATA #REQUIRED
     网站职务 CDATA #FIXED "页面作者“
个人爱好 CDATA "上网”

实体定义

实体用于为一段内容创建一个别名,以后在XML文档中就可以使用别名引用这段内容了。

在DTD定义中,一条<!ENTITY …>语句用于定义一个实体。

(1)引用实体

引用实体主要在 XML 文档中被应用

语法格式:
<!ENTITY 实体名称 “实体内容” >:直接转变成实体内容
引用方式:

&实体名称;  (注意分号;)

举例:

  <!ENTITY copyright   “I am a programmer">

    ……

    <copy>&copyright; </copy>   等效于<copy> I am a programmer</copy>


(2)参数实体

参数实体被 DTD 文件自身使用

语法格式:

<!ENTITY % 实体名称"实体内容">(注意这里有%,%后面有空格,与实体名称不连着。而引用实体声明里没有&)

引用方式:

%实体名称;需要使用外部实体

举例1

<!ENTITY%TAG_NAMES"姓名|EMAIL |电话|地址">

<!ELEMENT 个人信息 (%TAG_NAMES;|生日)> 等效为<!ELEMENT个人信息(姓名|EMAIL |电话| 地址|生日)>

    <!ELEMENT 客户信息 (%TAG_NAMES;| 公司名)>     等效为<!ELEMENT 客户信息 (姓名|EMAIL |电话|地址| 公司名)>

由于两者共用了姓名 |EMAIL | 电话 | 地址,写两次太复杂,所以可以使用参数实体。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值