第3章XML文件的设计
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
命名空间
一般命名空间在根元素处声明; 命名空间作用于它所在的元素及该元素内 部所有子元素。 如果子元素又声明了新命名空间,且使用 与原命名空间相同的前缀但URI不同时, 新命名空间将覆盖原来的命名空间。 默认的命名空间不作用于属性(非默认的 命名空间作用之);默认的命名空间如果 遇到空值,下级命名空间将被取消。
如:xmlns=”/”
xmlns
=
“
URI
”
(1)
(3)
(4)
(5)
(4)
命名空间
引用此名空间中的元素、属性的方法:
前缀名:元素名 或 前缀名:属性名 声明时若前缀名省略,则声明的是缺省 的空间,引用缺省名空间中的元素、属 性时可不加前缀名;默认的命名空间的声
使用命名空间:
一、XML文档在table元素中携带了信息: <h:table xmlns:h=“/TR/html4/”> <h:tr> <h:td>Apples</h:td> <h:td>Bananas</h:td> </h:tr> </h:table> 二、XML文档携带了家具table的信息: <f:table xmlns:f="/furnitu re"> <f:name>African Coffee Table</f:name> <f:width>80</f:width> <f:length>120</f:length> </f:table>
3.2 命名空间
3.2.1 命名空间的概念 命名空间是W3C推荐标准提供的 一种统一命名XML文档中的元素和 属性的机制。使用命名空间可以明 确标识和组合XML文档中来自来自 不同标记词汇表的元素和属性,避 免了名称之间冲突而带来的问题。
1、 XML 文档在table元素中携带了水果的信息: <table> <g> Apples</g> <g> Bananas</g> </table> 2、 XML 文档在table元素中携带了桌子的信息 (家具,不能吃的哦): <table> <name>African Coffee Table</name> <width>80</width> <length>120</length> </table>
第3章XML文件的设计
3.1 XML文档与其结构的匹配 3.2 命名空间 3.3 XML文档的有效性验证
3.1 XML文档与其结构的匹配 XML:文档的生成 第一步:确定各种元素 第二步:根据各元素之间的关系生成结 构树 第三步:根据结构树生成XML Schema 第四步:XML文档的生成
DTD适用的情形
如:xmlns:river=”/”
xmlns:
name
=
“
URI
”
(1)
(2)
(3) (4)
(5)
(4)
<xmlns:xsd=“/2001/XMLS chema”> <xsd:element name=“name”>
在名称空间的声明中,相对URI已被弃用。
<?xml version="1.0" encoding="gb2312"?> <nsElement xmlns="" xmlns:aa=""> 此元素的命名空间是: <myelement xmlns:aa=""> <aa:element1>覆盖原来的命名空间</aa:element1> </myelement> <youelement xmlns:bb="" id="a1" xmlns=""> <element2>此元素不属于任何命名空间</element2> 此元素不属于 </youelement> 任何命名空间 此属性不属于 <bb:element3>此元素超出了命名空间作用域 任何命名空间 </bb:element3> </nsElement> 此元素超出了命名
3.2.2 如何声明命名空间 通常使用一个简短的代号来代替 URI,这个简短的代号称为命名空间 前缀,由编写XML文档的人员自由决 定。前缀只能包含XML标准中规定允 许用作元素和属性名的字符组成,这 包括了英文字母和所有收录在 Unicode中的汉字。,命名空间声明 的一般形式如图3.5所示。
第一部分是一个关键字xmlns:,第二部分是 命名空间的前缀,第三部分是一个等号,第 四部分是双引号,将第五部分的名空间标识 URI包括起来。需要注意一点,命名空间的前 缀不能叫“xml”,因为在XML中这个字符串是 保留作特殊用途的,如xml:space。
命名空间
XML命名空间是XML解决元素多义性和名字冲突问题 的方案。 W3C组织的推荐用书对XML命名空间的解释是: “XML命名空间是命名的汇集,它由URI(统一资源 标识)确定,在XML文件中作为元素标识和属性名使 用”。 命名空间是名称上相关的一组名称的汇集,在同一空 间中每一个名称都必须唯一。例如,可以将某个班的 学生姓名作为一个命名空间,也可以将某企业的产品 名称作为一个命名空间。 命名空间表示了名称的来源和使用范围。通过命名空 间可以区分来自不同的XML应用但具有相同名称的标 识,可以把来自某种XML应用的相关元素和属性集合 在一起,以方便软件识别和处理。
命名空间限制整个XML文档
<?xml version=“1.0”?> <member xmlns=“.au/schema/club.xsd”>
命名空间限制XML文档的一部分
<?xml version=“1.0”?> <member> <family_name xmlns=“.au/schema/club.xsd”>
元素与子元素不在同一个命名空间
<?xml version=“1.0”?> <member xmlns=“.au/schema/club.xsd”> > <family_name xmlns:newclub=“.au/schema/newclub.xsd”> <newclub:member-no>12345</member-no>
文件是叙述性的,并有混合内容。 需要约束元素之间的关系,特别是子元 素的顺序关系,而不是元素本身的文本 内容。 需要使用实体。 XML文件的使用者对使用的DTD要达成 一致。
XML Schema适用的情形
需要定义数据类型,以便约束元素的文 本内容及内部结构。 元素下面的子元素顺序并不重要,重要 的是数量。 标记约束不限于父子关系,需要考虑子 孙关系。 跨越多个文件,名称空间前缀不一致。
声明名称空间
<hr xmlns:hr=“/hr”> <hr:element> 名称空间前缀是不包含冒号的任何合法的 XML名称。 在声明名称空间时,不能使用xml和xmlns。 URI建议使用绝对URI,尽量不使用相对 URI。
3.2.3 如何使用命名空间
namespaces通过给标识名称加一个网址(URL)定位的 方法来区别这些名称相同的标识。 命名空间一般用属性xmlns来声明,声明的语法如下: <元素名 xmlns:前缀名=‘URL’> – xmlns:命名空间属性名,是声明命名空间必需的 属性。 – prefix:命名空间的前缀,它的值不能为XML。在引 用此命名空间中的名称时,需要在名称前加“prefix: ”。 – URI:统一资源标示符(Uniform Resource Identifier),是一个标识网络资源的字符串。最普通 的URI应该是统一资源定位符(Uniform Resource Locator ,URL),URL用于标识网络主机的地址。 另一个不常用的URI是通用资源名字(Universal Resource Name ,URN),这是一个相对固定的地 址。
3.2.3.2 在XML Schema中使用 命名空间
Schema中的全局成分
<xsd:schema xmlns:xsd=/2001/XMLSchema target=“/ns/end”>
Schema非全局成分
<xsd:schema xmlns:xsd=/2001/XMLSchema target=/ns/end element form default=“qualified”>
空间作用域
名称空间在元素和属性中的运用
3.3 XML文档的有效性验证
格式良好的XML文档:
文档包含一个或多个元素 它只有一个包含所有其它元素的元素(只有一 个根元素) 其元素相互间的嵌套要正确 用在开始和结束标识符中的元素名要精确匹配 属性名不能在同一元素开始标识符中出现多次
属性值必须括在单引号和双引号中 属性值不能直接或者间接地引用外部实 体 属性值中引用的任何实体的替换文本中 不能含有字符“<”(但可含字符串<) 实体在使用前要进行声明 任何实体引用不能含有不可解析实体的 名字 逻辑和物理结构的嵌套要正确
命名空间
在根元素处定 义名空间属性
<?xml version="1.0"?> <nsElement xmlns="" xmlns:ss1="/Style" xmlns:qinghua=""> <myelement> 使用缺省名空间 <default-element> this is element use default namespace prefix </default-element> 使用指定名空间 <ss1:aa> this is element use ss1 namespace prefix </ss1:aa> <qinghua:aa> this is element use qinghua namespaceprefix </nqinghua:aa> </myelement> </nsElement>
3.2.3.1 在XML文档中使用命名空间 在XML中,命名空间的使用涉及到一个范畴的 概念,范畴即命名空间的覆盖范围,它指的是哪 些元素和属性在该命名空间里,哪些又不在。命 名空间既可以是式: <元素名 xmlns:名称空间前缀=“名称空间URI”> 例:<张山 xmlns:p=“xiao zhang”> 1980年出生,大学毕业</张山>
明语法格式为: <元素名xmlns="URI">
<元素名 xmlns=“/2001/XMLSchema”> 例: <hr xmlns=“/2001/XMLSchema”> 表示声明了一个缺省的名称空间,hr元素及其内容 中所有没有前缀的元素都属于 /2001/XMLSchema所标识的名 称空间,除非被其它的缺省空间所覆盖。
声明有前缀的名称空间
对于有前缀名的命名空间,如果两 个名称空间的名字不相同,即使前 缀名相同,也是不同的名称空间。 例:xmlns:a=“xiao zhang” xmlns:a=“Xiao zhang” xmlns:b=“xiao zhang”
还可以隐式声明命名空间,即省略掉 冒号和命名空间前缀。如图3-6所示。
文档包含一个或多个元素文档包含一个或多个元素它只有一个包含所有其它元素的元素只有一它只有一个包含所有其它元素的元素只有一个根元素个根元素其元素相互间的嵌套要正确其元素相互间的嵌套要正确用在开始和结束标识符中的元素名要精确匹配用在开始和结束标识符中的元素名要精确匹配属性名不能在同一元素开始标识符中出现多次属性名不能在同一元素开始标识符中出现多次属性值必须括在单引号和双引号中属性值必须括在单引号和双引号中属性值不能直接或者间接地引用外部实属性值不能直接或者间接地引用外部实属性值中引用的任何实体的替换文本中属性值中引用的任何实体的替换文本中不能含有字符不能含有字符但可含字符串但可含字符串实体在使用前要进行声明实体在使用前要进行声明任何实体引用不能含有不可解析实体的任何实体引用不能含有不可解析实体的名字名字逻辑和物理结构的嵌套要正确逻辑和物理结构的嵌套要正确xmlxml首先要验证首先要验证xmlxml文档是否格式良好