当前位置:网站首页>添加命名空间声明
添加命名空间声明
2022-07-04 17:48:00 【用户7741497】
添加命名空间声明
默认行为
在%XML.Writer
会自动插入命名空间声明,生成命名空间前缀,并在适当的地方应用前缀。例如,以下类定义:
Class Sample.Person Extends (%Persistent, %Populate, %XML.Adaptor)
{
Parameter NAMESPACE = "http://www.yaoxin.com";
}
如果导出此类的多个对象,则会看到类似以下内容:
DHC-APP> w ##class(Demo.XmlDemo).Obj2Xml(1)
<?xml version="1.0" encoding="UTF-8"?>
<Person xmlns="http://www.yaoxin.com">
<Name>yaoxin</Name>
<SSN>111-11-1117</SSN>
<DOB>1990-04-25</DOB>
<s01:Home xmlns="" xmlns:s01="http://www.yaoxin.com">
<Street>889 Clinton Drive</Street>
<City>St Louis</City>
<State>WI</State>
<Zip>78672</Zip>
</s01:Home>
<s01:Office xmlns="" xmlns:s01="http://www.yaoxin.com">
<Street>9619 Ash Avenue</Street>
<City>Ukiah</City>
<State>AL</State>
<Zip>56589</Zip>
</s01:Office>
<Spouse>
<Name>濮氶懌</Name>
<SSN>111-11-1115</SSN>
<FavoriteColors>
<FavoriteColorsItem>Red</FavoriteColorsItem>
<FavoriteColorsItem>Orange</FavoriteColorsItem>
<FavoriteColorsItem>Yellow</FavoriteColorsItem>
<FavoriteColorsItem>Green</FavoriteColorsItem>
</FavoriteColors>
</Spouse>
<FavoriteColors>
<FavoriteColorsItem>Red</FavoriteColorsItem>
<FavoriteColorsItem>Orange</FavoriteColorsItem>
<FavoriteColorsItem>Yellow</FavoriteColorsItem>
</FavoriteColors>
<Age>31</Age>
</Person>
名称空间声明会自动添加到每个<Person>
元素。只将其添加到文档的根目录。
手动添加声明
可以控制何时将命名空间引入XML输出。以下方法都会影响所写入的下一个元素(但不会影响该元素之后的任何元素)。为方便起见,其中几种方法添加了标准的W3
名称空间。
通常使用这些方法将命名空间声明添加到文档的根元素;也就是说,在调用RootObject()
或RootElement()
之前调用其中一个或多个方法。
注意:这些方法都没有将任何元素分配给名称空间,并且这些名称空间永远不会作为默认名称空间添加。在生成特定元素时,需要指明它使用的名称空间,如后面的“编写根元素”和“生成XML元素”中所述。
AddNamespace()
method AddNamespace(namespace As %String,
prefix As %String,
schemaLocation As %String) as %Status
添加指定的命名空间。这里,Namespace
是要添加的名称空间,Prefix
是该名称空间的可选前缀,schemaLocation
是指示相应架构位置的可选URI。
如果未指定前缀,则会自动生成前缀(格式为S01、S02等)。
下面的示例显示了此方法的效果。首先,假设Person
类被分配给一个名称空间(类参数中的NAMESPACE
)。如果在未首先调用AddNamespace()
方法的情况下生成此类实例的输出,则可能会收到如下所示的输出:
<?xml version="1.0" encoding="UTF-8"?>
<Root>
<Person xmlns="http://www.person.org">
<Name>Love,Bart Y.</Name>
...
或者,在编写根元素之前按如下方式调用AddNamespace()
方法:
set status=writer.AddNamespace("http:///www.person.org","p")
如果随后生成根元素,则输出如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<Root xmlns:p="http:///www.person.org">
<Person xmlns="http://www.person.org">
...
或者,假设在调用AddNamespace()
方法时指定了第三个参数,该参数提供了关联架构的位置:
set status=writer.AddNamespace("http:///www.person.org","p","http://www.MyCompany.com/schemas/person.xsd")
在这种情况下,如果随后生成Root元素,则输出如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<Root xmlns:p="http:///www.person.org"
xsi:schemaLocation="http:///www.person.org http://www.MyCompany.com/schemas/person.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Person xmlns="http://www.person.org">
...
AddInstanceNamespace()
method AddInstanceNamespace(prefix As %String) as %Status
添加W3架构实例命名空间。这里的前缀是用于此命名空间的可选前缀。默认前缀为XSI
。
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
...
AddSchemaNamespace()
method AddSchemaNamespace(prefix As %String) as %Status
添加W3
架构命名空间。这里的前缀是用于此命名空间的可选前缀。默认前缀为s
。
<Root xmlns:s="http://www.w3.org/2001/XMLSchema">
...
AddSOAPNamespace()
method AddSOAPNamespace(soapPrefix As %String,
schemaPrefix As %String,
xsiPrefix As %String) as %Status
添加W3 SOAP
编码命名空间、SOAP
架构命名空间和SOAP
架构实例命名空间。此方法有三个可选参数:用于这些命名空间的前缀。默认前缀分别为SOAP-Enc
、s
和XSI
。
<Root xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:s="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
...
AddSOAP12Namespace()
method AddSOAP12Namespace(soapPrefix As %String,
schemaPrefix As %String,
xsiPrefix As %String) as %Status
添加W3 SOAP 1.2
编码命名空间、SOAP
架构命名空间和SOAP
架构实例命名空间。
<?xml version="1.0" encoding="UTF-8"?>
<Root xmlns:SOAP-ENC="http://www.w3.org/2003/05/soap-encoding"
xmlns:s="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
...
可以使用这些方法中的多个方法。如果使用其中的多个命名空间,则受影响的元素将包含所有指定命名空间的声明。
编写根元素
每个XML文档必须恰好包含一个根元素。有两种方法可以创建此元素:
- 根元素可能直接对应于一个启用了InterSystems IRIS XML的对象。
在本例中,使用RootObject()
方法,该方法将指定的启用XML的对象作为根元素写入。输出包括该对象中包含的所有对象引用。根元素获取该对象的结构,不能插入其他元素您可以指定根元素的名称,也可以使用由启用XML的对象定义的默认值。
前面的示例使用了此技术。
- 根元素可能只是一组元素的包装器(可能是一组支持XML的对象)。
在本例中,使用RootElement()
方法,该方法插入具有指定名称的根级元素。如果此文档缩进,此方法还会增加后续操作的缩进级别。
然后调用其他方法为根元素内的一个或多个元素生成输出。在根目录中,可以按照选择的任何顺序或逻辑包含所需的元素。之后,调用EndRootElement()
方法关闭根元素。
在这两种情况下,都可以指定要用于根元素的命名空间,只有在启用了XML
的类没有Namespace
参数值的情况下才会应用该命名空间。
请记住,如果文档包含文档类型声明,则该DTD
的名称必须与根元素的名称相同。
边栏推荐
- ESP32-C3入门教程 问题篇⑫——undefined reference to rom_temp_to_power, in function phy_get_romfunc_addr
- 用实际例子详细探究OpenCV的轮廓绘制函数drawContours()
- Scala基础教程--20--Akka
- 利用策略模式优化if代码【策略模式】
- 2022-07-04: what is the output of the following go language code? A:true; B:false; C: Compilation error. package main import 'fmt' func
- 测试工程师如何“攻城”(下)
- Scala基础教程--17--集合
- BI技巧丨权限轴
- 26. Delete the duplicate item C solution in the ordered array
- Torchdrug tutorial
猜你喜欢
奥迪AUDI EDI INVOIC发票报文详解
Scala basic tutorial -- 18 -- set (2)
Go microservice (II) - detailed introduction to protobuf
Nebula Importer 数据导入实践
Scala基础教程--19--Actor
Rookie post station management system based on C language
千万不要只学 Oracle、MySQL!
2022CoCa: Contrastive Captioners are Image-Text Fountion Models
Scala basic tutorial -- 13 -- advanced function
How is the entered query SQL statement executed?
随机推荐
更安全、更智能、更精致,长安Lumin完虐宏光MINI EV?
Scala basic tutorial -- 13 -- advanced function
Li Chi's work and life summary in June 2022
【机器学习的数学基础】(一)线性代数(Linear Algebra)(上+)
神经网络物联网应用技术就业前景【欢迎补充】
神经网络物联网平台搭建(物联网平台搭建实战教程)
Wireshark packet capturing TLS protocol bar displays version inconsistency
redis分布式锁的8大坑总结梳理
奥迪AUDI EDI INVOIC发票报文详解
The CDC of sqlserver can read the data for the first time, but it can't read the data after adding, deleting and modifying. What's the reason
Scala基础教程--16--泛型
2019年蜀山区第十五届青少年信息学竞赛
Scala basic tutorial -- 20 -- akka
The latest progress of Intel Integrated Optoelectronics Research promotes the progress of CO packaging optics and optical interconnection technology
基于lex和yacc的词法分析器+语法分析器
性能优化之关键渲染路径
26. Delete the duplicate item C solution in the ordered array
从实时应用角度谈通信总线仲裁机制和网络流控
ThreadLocal原理与使用
模板_判断素数_开方 / 六素数法