|
 |
[Semantic Web](连载)语义网之路--XML文档(3) |
Lee 发表于 2007/1/25 20:40:23 |
2 逻辑结构
在逻辑上,XML文档由XML声明、元素、注释、字符引用和处理指示构成。它们都拥有显式的标记,并且要求嵌套正确。XML声明、注释、字符引用和处理指示在XML中都是可选的,因此XML文档在逻辑上主要由元素构成。每个元素都有一个类型,并用元素名称作为标识,有时也称为普通标识符(generic identifier)。例如标元素“<网址>www.baidu.com</网址>”中的文本“网址”,即为该元素的元素类型。
每一个XML文档都包含一个或多个元素,并通过起始标签、结束标签或空元素标签定义其边界范围。起始标签、结束标签和空元素标签都是标记(markup)。此外,XML中的标记还包括实体引用、字符引用、注释、CDATA分隔符、文档类型声明(Document Type Declaration)、处理指示、XML声明、文本声明以及处于文档实体顶端的任意空白符。标记和字符数据的混合称为文本。
XML的标记和HTML的标记在形式上大体相同,除了注释和CDATA部分外,所有包含在符号“<”和“>”之间的内容都称为标记。其一般形式为:
<标记名 (属性名="属性值")*>
与HTML不同,XML对标记有着严格的要求:
l 标记都必须正确地配对。每一个标记都要有一个正确的结束标记与之相对应,结束标记除了名称要与起始标记相同外,还需要在名称前加上字符“/”,表明这是一个结束标记。
l 标记区分大小写。起始与结束标记的名称在大小写上必须完全相同,而且拼写相同,但大小不同的两个标记将被作为不同的标记看待。
l 标记名称要合法。标记名应以字母、下划线“_”或冒号“:”开头,后面跟字母、数字、句号“.”、冒号、下划线或连字符“-”,中间不能留有空格,而且任何标记都不能以“xml”开头。
标记中的“(属性名="属性值")*”表示属性说明,为可选项。属性说明中可以包含任意多个属性(用*表示)。属性包括名称和取值两部分,并以“名称=取值”的形式出现。属性名称不能重复,名称与取值之间用等号“=”分隔,取值要用引号引起来。例如:
<搜索引擎 名称="百度" 网址="www.baidu.com">
属性名称的命名规范与标记名称大体相同,但在必要的时候,属性中可以包含空白符,标点和实体引用。需要注意的是,属性的所有赋值都被看作是字符串对待。
在微观上,元素构成了XML文档的主要内容;而在宏观角度上,所有元素的排列次序、嵌套结构、语法说明等则形成了XML文档的逻辑结构。在XML中,这些都是通过DTD定义的。
3 物理结构
从物理结构上讲,XML文档由实体(Entity)构成。XML文档都以“根实体”或文档实体作为开始。该实体是由XML本身给出,无须显式定义就可使用,它指的其实就是整个文件的内容。
简单地讲,实体类似于我们经常使用的别名或编程语言中的变量,可以使用实体名称代表任意的文本或字符串,并在需要出现这些文本或字符串的地方使用实体引用来代替。例如,BBS上某些用户的个性化签名,它会在用户每次发言时自动附加在内容的后面,对于比较长的个性化签名就可以使用实体来代替。如下面的个性化签名:
床前明月光
疑是地上霜
举头望明月
我是……
如果将此个性化签名定义为实体signature,则在需要出现此个性化签名的地方就可以用实体引用&signature代替即可。
实体包括两种类型:普通实体(General Entites)和参数实体(Parameter Entites)。普通实体的一般形式为:
<!ENTITY 实体名 "实体内容">
上述个性化签名就是一个普通实体,其实体定义为:
<!ENTITY signature
"床前明月光
疑是地上霜
举头望明月
我是……">
参数实体的格式与普通实体类似,只不过中间要加上符号“%”:
<!ENTITY % 实体名 "实体内容">
与普通实体不同,参数实体只用在DTD中。
实体在使用之前必须进行定义,称为实体声明。根据实体所声明的内容的存储位置可以将实体分为内部实体和外部实体。如果实体在声明时,其内容直接给出并与XML文档处于同一个文件之中,则该实体为内部实体,否则为外部实体。例如上面给出的关于个性化签名的普通实体定义就是一个内部实体。外部实体将实体的内容放在一个外部文件中,这时需要用到SYSTEM或PUBLIC关键字,如:
<!ENTITY signature SYSTEM http://www.example.com/signature.xml>
实体声明应该放在DOCTYPE中。DOCTYPE一般放在XML声明和DTD之后、XML元素之前。这样一来,XML文档就变为如下形式:
<?xml version="1.0" ?>
<!DOCTYPE 文档根元素名称 [
实体声明部分
]>
<文档根元素名称>
具体数据内容
</文档根元素名称>
实体在声明之后就可以通过实体引用使用该实体了,实体引用的形式很简单,对于普通实体而言,其形式为:
&实体名称;
在使用实体引用时需要注意以下几点:
l 在使用实体引用之前,必须在XML中对此实体进行声明。
l 在符号“&”、实体名称和分号之间不能出现空格。
l 实体引用不能在DOCTYPE中出现。
l 虽然在实体中可以引用其它其它实体,但不能循环引用。例如实体A引用了实体B,而B又引用了实体A。
l 实体引用的内容必须是形式良好的XML。
参数实体的引用与普通实体的引用类似,只是要把实体名称前面的符号“&”换为“%”就可以了:
%实体名称;
下面看一个完整的实体声明和实体引用的例子。
代码清单3-4
<?xml version="1.0" encoding="GB2312" ?>
<!DOCTYPE 搜索引擎列表[
<!ENTITY 百度简介 “百度公司……”>
<!ENTITY 谷歌简介 “谷歌公司……”>
<!ENTITY 雅虎简介 “雅虎公司……”>
]>
<搜索引擎列表>
<搜索引擎>
<名称>百度</名称>
<网址>www.baidu.com </网址>
<简介>&百度简介;</简介>
</搜索引擎>
<搜索引擎>
<名称>谷歌</名称>
<网址>www.google.com </网址>
<简介>&谷歌简介;</简介>
</搜索引擎>
<搜索引擎>
<名称>雅虎</名称>
<网址>www.yahoo.com</网址>
<简介>&雅虎简介;</简介>
</搜索引擎>
</搜索引擎列表>
(完)
|
|
| |
 | |
|
Blog 信 息 |
blog名称:风落沙 日志总数:348 评论数量:550 留言数量:52 访问次数:1589653 建立时间:2005年1月28日 |
|
友 情 连 接 |

|
|
|

| |
|