`
pengwei.daily
  • 浏览: 23308 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
最近访客 更多访客>>
社区版块
存档分类
最新评论

XML - Namespace

    博客分类:
  • XML
 
阅读更多

Schema定义了一种XML标记语言,用于描述某一特定XML文档;

正如类是Java对象的类型一样,XML标记语言是经XML Schema定义的XML文档的类型。

 

某些情况下,我们可以将两个或将多个XML标记语言结合到一个文档中,

这样一来,不同标记语言的元素就可以使用不同的XML Schema分别加以验证。

 

可以将AddressType定义于自己的Schema中,便于其他场合引用,单独作为一个标记语言:

 

<?xml version="1.0" encoding="UTF-8">
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://www.titan.com/Address">
    <complexType name="AddressType">
        <sequence>
            <element name="street" type="string" />
            <element name="city" type="string" />
            <element name="state" type="string" />
            <element name="zip" type="string" />
        </sequence>
    </conplexType>
</schema>

 

为了能够在同一份XML文档中使用不同的标记语言,必须明确表示每个元素的标记语言。

XML Namespace声明使用如下格式: xmlns:prefix = "URI"

<?xml version="1.0" encoding="UTF-8">
<res:reservation xmlns:res="http://www.titan.com/Reservation">
    <res:customer>
    ...
        <addr:address xmlns="http://www.titan.com/Address">
            <addr:street>3224 West 1st Ave.</addr:street>
            ...
        </addr:address>
    ...
    </res:customer>
    <res:cruise-id>123</res:cruise-id>
    ...
</res:reservation>

所有的地址信息都被冠以addr:前缀;

而所有预定相关的元素则被冠以res:前缀。

有了这些前缀,解释器就可以很容易识别和区分出:

 

  • 那些元素属于Address标记,与地址相关的用Address XSD加以验证
  • 那些元素属于Reservation标记,与预定相关的元素可以通过Reservation XSD加以验证

 

 

前缀可以是任何内容

但是URI(Universal Resource Identifier)必须专门定义;

URI作为一种标示符,是URL(Universal Resource Locator)的一个超集。

声明XML Namespaces所用的URI代表我们使用的标记语言。

它不必指向某个Web页面或XML文档,只需做到所用的标记语言是唯一即可。

例如:

Address标记所用的XML Namespace和Reservation标记所用的URI是不同的。

 

在XML Namespace中的声明的URI应该与XML Schema中声明的目标名字空间(target namespace)保持一致;

targetNamespace属性指明了对应于该标记语言的唯一URI。

它是该XML Schema的永久标识,任何时候只要有其他文档应用了Address XSD中的元素;

该文档就必须声明相应的XML Namespace,以标识出属于Address标记语言的那些元素。

 

在每个XML文档的每个元素前面都加上标识,显得有些繁琐;

因此XML Namespace允许我们为所有不带前缀的元素声明默认的名字空间。

默认名字空间就是一个简单的没有前缀(xmlns=“URI”)的XML Namespace声明。

 

<reservation xmlns="http://www.titan.com/Reservation">
...   
    <customer>
    ...
        <addr:address xmlns="http://www.titan.com/Address">
            <addr:street>3224 West 1st Ave.</addr:street>
            ...
        </addr:address>
    ...
    </customer>
    </cruise-id>123</cruise-id>
...
</reservation>

 

所有预定元素的名称都没有添加前缀。

任何不带前缀的元素都属于默认名字空间。

因为地址元素不属于http://www.titan.com/Reservation名字空间,所以他们都加上了前缀,用以指示所属名字空间。

 

默认名字空间的声明是有作用域的;

换而言之,它会作用于声明该名字空间的元素(如果元素没有前缀),已经内嵌该元素之下的任何不带前缀的子元素。

 

地址空间可以使用自己的默认名字空间覆盖当前的默认名字空间,

通过御用名字空间作用规则,我们可以进一步简化Reservation文档:

<reservation xmlns="http://www.titan.com/Reservation">
...   
    <customer>
    ...
        <address xmlns="http://www.titan.com/Address">
            <street>3224 West 1st Ave.</street>
            ...
        </address>
    ...
    </customer>
    </cruise-id>123</cruise-id>
...
</reservation>

XML文档中所使用的任何属性都应该加上名字空间标识符作为修饰;

这一规则唯一例外是由XML语言自身定义的属性,例如:

用于建立XML Namespace声明的xmlns属性。该属性无须使用前缀进行修饰,因为它是XML语言的固有部分。

 

XML Namespace是一种唯一标识名字空间的URI;

它并不指向某个实际资源。换而言之,通过不会利用XML Namespace的URI来查找资源。

它只是一个标示符而已。

 

可能你希望为关联于某个XML Namespace的XML Schema指向所在的位置:

<?xml version="1.0" encoding="UTF-8">
<reservation xmlns:res="http://www.titan.com/Reservation"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-Instance"
    xsi:schemaLocation="http://www.titan.com/Reservation 
        http://www.titan.com/schemas/reservation.xsd">
...
</reservation>

这样解析器可以将其下载下来以供验证只用:

 

xsi:schemalocation

schemaLocation属性提供了一组Namespace-Location的值对

值对中前一个值是XML Namespace的URI;后一个值则是XML Schema的物理位置URL。

上述schemaLocation声明了:

所有属于Reservation名字空间(http://www.titan.com/Reservation)的元素可以使用位于

“http://www.titan.com/schemas/reservation.xsd”的XML Schema进行验证。

 

schemaLocation属性不是XML语言的一部分,所以我们使用时需要在属性前面加上相应的名字空间。

XML Schema规范定义了一个特殊的名字空间,名叫“http://www.w3.org/2001/XMLSchema-Instance”

可以将其用于schemalocation(以及其他属性)。

为了正确声明schemaLocation属性,你必须为其声明XML Namespace,并将该名字空间的标示符作为属性的前缀。

 

XML Schema也会使用XML Namespace。

所有内建的string类型与int类型的type属性都属于XML Schema名字空间,因此无需添加前缀。

当然如果愿意,也可以添加,使得整个文档更加清晰。

亦即使用xsd:string和xsd:int来代替string和int。

前缀xsd指向XML Schema的名字空间,使得我们能够清楚地标示出定义为XML Schema的内建类型。

<?xml version="1.0" encoding="UTF-8">
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://www.titan.com/Address">
    <complexType name="AddressType">
        <sequence>
            <element name="street" type="xsd:string" />
            <element name="city" type="xsd:string" />
            <element name="state" type="string" />
            <element name="zip" type="string" />
        </sequence>
    </conplexType>
</schema>
 
分享到:
评论

相关推荐

    Laravel开发-laravel-xml-middleware

    在Laravel框架中,开发人员经常需要处理不同的数据格式,如JSON、XML等。本教程将专注于`laravel-xml-middleware`,一个专为Laravel设计的中间件,允许应用接收并处理XML格式的请求。这个中间件是扩展Laravel功能的...

    xml-apis.zip_JAVA XML_java xml_xml_zip

    7. **Namespace支持**:XML中常使用命名空间来避免元素名的冲突,`javax.xml.namespace`包提供了处理命名空间的接口和类。 8. **XPath和XSLT**:XPath是查询XML文档中特定部分的语言,XSLT则用于转换XML文档。虽然...

    javax.xml-1.3.4

    此外,`javax.xml.namespace`子包提供了处理XML命名空间的关键类,如`QName`。`QName`用于表示XML命名空间中的元素和属性名,包含本地名称和命名空间URI两部分。这对于处理具有复杂命名空间的XML文档尤其重要。 ...

    xml实用教程课后答案

    例如,`&lt;xml-namespace:element&gt;`中的`xml-namespace`就是命名空间前缀。 9. 处理指令(Processing Instruction, PI): 处理指令是向XML处理器传递指令的方式,如`&lt;?xml-stylesheet type="text/css" href="style....

    xml-commons-external-1.3.05-bin.zip

    5. **Namespace Support**:XML Commons External库还处理了XML命名空间,这是XML中用于避免命名冲突的重要特性。它提供了处理命名空间的工具和类,使得开发者可以轻松地处理具有命名空间的XML文档。 1.3.05版本...

    xml-commons-external-1.3.04-bin.zip

    5. **Namespace Support**:XML Commons External支持XML命名空间,这是XML中用来区分具有相同标签名但来自不同词汇表的关键特性。 6. **国际化和本地化**:XML Commons External还考虑到了国际化和本地化的需求,...

    xml-ppt.rar_XML ppt_ppt xml

    - 名称空间(Namespace)的概念:为了防止元素名称冲突,XML引入了名称空间,通过前缀和URI来唯一标识元素。 3. DTD(Document Type Definition)与XML Schema: - DTD:DTD是XML文档类型定义,用于定义XML文档的...

    XML-Form1.rar_the code

    6. **命名空间(Namespace)**:在XML中,命名空间用于避免元素名的冲突,通过前缀(如 xmlns:ns="http://example.com/ns")来定义。 7. **注释(Comment)**:XML文档中可以添加注释,以`&lt;!-- 这是注释 --&gt;`的形式...

    xml-niit-ppt

    5. **命名空间(Namespaces)**:允许在XML文档中使用相同的元素名称而不会产生冲突,通过前缀和URI来区分它们,如`xmlns:xml="http://www.w3.org/XML/1998/namespace"`。 6. **处理指令(Processing Instructions,...

    struts-xml-package.zip

    3. `namespace`:Action的命名空间,用于组织Action并提供URL路由。 4. `abstract`:如果设置为true,表示这是一个抽象包,不能直接使用,只能被其他包继承。 在`struts-xml-package` 文件中,我们可以预期找到以下...

    xml-emitter:官方存储库,由Peter Scott接管

    例如,要添加命名空间,可以使用 `xml-emitter:emit-namespace` 函数,并在元素上应用相应的前缀。 此外,XML-emitter 提供了向流(streams)发射 XML 的能力,这在处理大量数据或需要实时生成 XML 的场景中非常...

    XML - DOM4J

    例如,通过`Element`、`Attribute`、`Namespace`等类可以直接操作XML元素、属性和命名空间。 2. **灵活性**:DOM4J支持多种解析器,包括SAX和DOM,可以根据需求选择不同的解析策略。SAX适用于大文件的流式处理,而...

    pugixml-master.zip

    using namespace pugi; int main() { xml_document doc; if (!doc.load_file("example.xml")) { // 处理加载失败 } // 查询文档根元素 xml_node root = doc.root(); std::cout () ; // 遍历子元素 for ...

    java,用jdom操作xml-创建,修改

    `Attribute`代表XML元素的属性,`Namespace`用于处理命名空间。 3. **创建XML文档**:创建XML文档通常从创建`Document`对象开始,然后添加根元素,再添加子元素和属性。例如: ```java DocumentBuilderFactory ...

    aduna-commons-xml-2.6.0.jar.zip

    4. **Namespace处理**:XML中广泛使用命名空间来避免元素名的冲突。Aduna Commons XML提供了方便的命名空间管理工具,使得处理带命名空间的XML文档变得轻松。 5. **XML转换**:库还包括了一些XML转换工具,如将XML...

    javax.xml.rpc相关jar包

    在Java编程环境中,XML(eXtensible Markup Language)是一种重要的数据交换格式,广泛用于不同系统之间的通信。而`javax.xml.rpc`是Java平台标准版(Java SE)的一部分,它提供了一组API来支持Web服务的开发。这个...

    weblogic javax/xml/namespace/QName报错-附件资源

    weblogic javax/xml/namespace/QName报错-附件资源

    ORACLE操作XML函数

    DELETEXML(XMLTYPE_instance, XPath_string[, namespace_string]) ``` - **参数**: - `XMLTYPE_instance`:XML数据类型的字段或变量。 - `XPath_string`:需要删除的节点的路径。 - `namespace_string`:可选...

    XML-Modifications:修改Blade和Soul行为的XML修改的集合

    XML文件的基本结构包括元素(Element)、属性(Attribute)、文本内容(Text Content)以及命名空间(Namespace)。在《剑灵》的XML修改中,元素通常代表游戏中的对象或事件,如角色、技能、怪物等;属性用来描述...

Global site tag (gtag.js) - Google Analytics