第二十一章 指定元素和属性的命名空间

第二十一章 指定元素和属性的命名空间

XML 元素和属性可以属于不同的命名空间,并且 XML 模式规范提供了多种控制和表示命名空间分配的方法。类中的 %XML.AdaptorXML 文档提供相应的支持。

类和属性参数

  • NAMESPACE

  • ELEMENTQUALIFIED

  • ATTRIBUTEQUALIFIED

  • XMLREF

  • REFNAMESPACE

  • XSDTYPE

  • XMLPREFIX

概述

本节回顾了 XML 命名空间,并概述了如何将 IRIS 对象分配给 XML 命名空间。

命名空间复习

本文档的一般假设是读者熟悉 XML。然而,回顾一下如何确定 XML 文档中元素或属性所分配的命名空间(如果有)可能是值得的。

首先,除非XML 文档包含默认命名空间或它所包含的每个元素和属性的命名空间前缀,否则有必要查看相应的 XML 模式。除了任何导入的元素或属性之外,任何元素或属性都是以下之一:

  • Qualified,这意味着元素或属性位于架构的目标命名空间中。
  • Unqualified,对于元素和属性有不同的含义。不合格的元素不在命名空间中。非限定属性位于其包含元素的默认命名空间(如果有)中。

对于它定义的每个元素和属性,模式指示该项目是合格的还是不合格的。该架构通过以下几部分的组合来实现此目的:

  • <schema> 元素可以指定 elementFormDefaultattributeFormDefault 属性。这控制模式中任何元素和属性的默认命名空间分配。可能的值为qualified" and "unqualified"

这些属性是可选的。两者的默认值都是"unqualified"。也就是说,默认情况下,如果使用的元素或属性没有前缀,则它不在命名空间中。

  • 其次,元素或属性的定义可以指定表单属性,该属性指示如何将该项目分配给命名空间。可能的值为"qualified" and "unqualified"。

考虑以下 XML 文档:

<?xml version="1.0" encoding="UTF-8"?>
<ClassA xmlns="mynamespace" xmlns:s01="mynamespace" s01:String1="abcdef">
  <s01:ClassB xmlns="">
    <String3>qrstuv</String3>
    <String4>wxyz</String4>
  </s01:ClassB>
  <String2>ghijkl</String2>
</ClassA>

为简单起见,我们假设相应的架构文档使用 elementFormDefaultattributeFormDefault 的默认值,并且不为其定义的任何项目指定表单属性。那么本文档中的项目位于命名空间中,如下所示:

  • <ClassA> 元素位于 mynamespace 中,因为以下两项:

    • 这是由该元素及其直接子元素的默认命名空间声明给出的命名空间 (xmlns="mynamespace")
    • <ClassA> 元素没有指示其他命名空间的命名空间前缀。
  • String1 属性位于 mynamespace 中,因为该属性使用 s01 前缀,并且 xmlns:s01 命名空间声明表明 s01 引用 mynamespace 命名空间。

    由于架构使用 attributeFormDefault 的默认值(“非限定”),因此即使不使用命名空间前缀,String1 属性也将位于 mynamespace 中。

  • <ClassB> 元素位于 mynamespace 中,因为该属性使用 s01 前缀。

  • <String3> and <String4> 元素不在任何命名空间中,因为以下两点:

    • 父元素的命名空间声明表明此处的默认命名空间为 null (xmlns="")
    • 这些元素没有指示其他命名空间的命名空间前缀。
  • 元素 <String2> 是命名空间 mynamespace,因为这是在其父元素中指定的默认命名空间。

XML 命名空间和类

IRIS XML 支持中,可以逐类指定命名空间。可以使用 NAMESPACE 类参数来指定该类的实例及其直接子对象的命名空间。此外,还可以使用 ELEMENTQUALIFIEDATTRIBUTEQUALIFIED 参数来指定其对象值属性的属性是全局的(并且与父级属于同一命名空间)还是本地的。

注意:如果文档中未讨论的异常情况需要,还可以将 ELEMENTQUALIFIED 指定为属性参数。

命名空间和上下文

特别是对于命名空间,重要的是要记住,支持 XML 的对象会根据上下文进行不同的处理。例如,如果在顶层导出一个 Address 对象,那么它就是一个Global元素。如果导出包含对 Address 对象的引用的 Person 对象,则 Address 是本地元素(Person 的所有其他属性也是如此)。Global元素和局部元素以不同的方式分配给命名空间。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,546评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,224评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,911评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,737评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,753评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,598评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,338评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,249评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,696评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,888评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,013评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,731评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,348评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,929评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,048评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,203评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,960评论 2 355

推荐阅读更多精彩内容