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框架中,开发人员经常需要处理不同的数据格式,如JSON、XML等。本教程将专注于`laravel-xml-middleware`,一个专为Laravel设计的中间件,允许应用接收并处理XML格式的请求。这个中间件是扩展Laravel功能的...
7. **Namespace支持**:XML中常使用命名空间来避免元素名的冲突,`javax.xml.namespace`包提供了处理命名空间的接口和类。 8. **XPath和XSLT**:XPath是查询XML文档中特定部分的语言,XSLT则用于转换XML文档。虽然...
此外,`javax.xml.namespace`子包提供了处理XML命名空间的关键类,如`QName`。`QName`用于表示XML命名空间中的元素和属性名,包含本地名称和命名空间URI两部分。这对于处理具有复杂命名空间的XML文档尤其重要。 ...
例如,`<xml-namespace:element>`中的`xml-namespace`就是命名空间前缀。 9. 处理指令(Processing Instruction, PI): 处理指令是向XML处理器传递指令的方式,如`<?xml-stylesheet type="text/css" href="style....
5. **Namespace Support**:XML Commons External库还处理了XML命名空间,这是XML中用于避免命名冲突的重要特性。它提供了处理命名空间的工具和类,使得开发者可以轻松地处理具有命名空间的XML文档。 1.3.05版本...
5. **Namespace Support**:XML Commons External支持XML命名空间,这是XML中用来区分具有相同标签名但来自不同词汇表的关键特性。 6. **国际化和本地化**:XML Commons External还考虑到了国际化和本地化的需求,...
- 名称空间(Namespace)的概念:为了防止元素名称冲突,XML引入了名称空间,通过前缀和URI来唯一标识元素。 3. DTD(Document Type Definition)与XML Schema: - DTD:DTD是XML文档类型定义,用于定义XML文档的...
6. **命名空间(Namespace)**:在XML中,命名空间用于避免元素名的冲突,通过前缀(如 xmlns:ns="http://example.com/ns")来定义。 7. **注释(Comment)**:XML文档中可以添加注释,以`<!-- 这是注释 -->`的形式...
5. **命名空间(Namespaces)**:允许在XML文档中使用相同的元素名称而不会产生冲突,通过前缀和URI来区分它们,如`xmlns:xml="http://www.w3.org/XML/1998/namespace"`。 6. **处理指令(Processing Instructions,...
3. `namespace`:Action的命名空间,用于组织Action并提供URL路由。 4. `abstract`:如果设置为true,表示这是一个抽象包,不能直接使用,只能被其他包继承。 在`struts-xml-package` 文件中,我们可以预期找到以下...
例如,要添加命名空间,可以使用 `xml-emitter:emit-namespace` 函数,并在元素上应用相应的前缀。 此外,XML-emitter 提供了向流(streams)发射 XML 的能力,这在处理大量数据或需要实时生成 XML 的场景中非常...
例如,通过`Element`、`Attribute`、`Namespace`等类可以直接操作XML元素、属性和命名空间。 2. **灵活性**:DOM4J支持多种解析器,包括SAX和DOM,可以根据需求选择不同的解析策略。SAX适用于大文件的流式处理,而...
using namespace pugi; int main() { xml_document doc; if (!doc.load_file("example.xml")) { // 处理加载失败 } // 查询文档根元素 xml_node root = doc.root(); std::cout () ; // 遍历子元素 for ...
`Attribute`代表XML元素的属性,`Namespace`用于处理命名空间。 3. **创建XML文档**:创建XML文档通常从创建`Document`对象开始,然后添加根元素,再添加子元素和属性。例如: ```java DocumentBuilderFactory ...
4. **Namespace处理**:XML中广泛使用命名空间来避免元素名的冲突。Aduna Commons XML提供了方便的命名空间管理工具,使得处理带命名空间的XML文档变得轻松。 5. **XML转换**:库还包括了一些XML转换工具,如将XML...
在Java编程环境中,XML(eXtensible Markup Language)是一种重要的数据交换格式,广泛用于不同系统之间的通信。而`javax.xml.rpc`是Java平台标准版(Java SE)的一部分,它提供了一组API来支持Web服务的开发。这个...
weblogic javax/xml/namespace/QName报错-附件资源
DELETEXML(XMLTYPE_instance, XPath_string[, namespace_string]) ``` - **参数**: - `XMLTYPE_instance`:XML数据类型的字段或变量。 - `XPath_string`:需要删除的节点的路径。 - `namespace_string`:可选...
XML文件的基本结构包括元素(Element)、属性(Attribute)、文本内容(Text Content)以及命名空间(Namespace)。在《剑灵》的XML修改中,元素通常代表游戏中的对象或事件,如角色、技能、怪物等;属性用来描述...