第三十八章 其他特殊主题
2023-12-17 本文已影响0人
Cache技术分享
第三十八章 其他特殊主题
类和属性参数
XMLNAME
XMLSEQUENCE
XMLUNSWIZZLE
XMLPREFIX
XMLIGNOREINVALIDTAG
XMLIGNOREINVALIDATTRIBUTE
控制元素的关闭
在 XML
中,仅包含属性的元素可以用以下任一方式表示:
<tag attribute="value" attribute="value" attribute="value"></tag>
<tag attribute="value" attribute="value" attribute="value"/>
IRIS
认为这些形式是等效的。当使用 %XML.Writer
导出对象时,可以控制关闭形式,但不能通过修改 XML
投影本身来控制。
处理具有多个同名标签的文档
XML
中的给定元素可以包含多个具有相同名称的元素;这些元素通过它们的顺序彼此区分。例如,以下是一个合法的 XML
文档:
<?xml version="1.0" encoding="UTF-8"?>
<Root>
<Person>
<Name>Able, Andrew</Name>
<DOB>1977-10-06</DOB>
<Address>
<Street>6218 Clinton Drive</Street>
<City>Reston</City>
<State>TN</State>
<Zip>87639</Zip>
</Address>
<Address>
<Street>110 High Street</Street>
<City>Zanesville</City>
<State>OR</State>
<Zip>80719</Zip>
</Address>
</Person>
</Root>
将这样的文档映射到 IRIS
类有点棘手,因为每个类属性都必须有唯一的名称。
要将此类文档映射到 IRIS
类,请执行以下操作:
- 根据需要设置
XMLNAME
属性参数,以将不同的类属性映射到相同的XML
名称。 - 将
XMLSEQUENCE
类参数设置为1
。作为预防措施,这可确保映射遵循类定义中列出的属性顺序。 - 确保类定义中列出的属性的顺序与
XML
文档中的顺序相同。
例如,考虑以下类定义:
Class GXML.TestSequence.Person Extends (%Persistent, %XML.Adaptor)
{
Property Name As %Name [ Required ];
Property DOB As %Date(FORMAT = 5, MAXVAL = "+$h") [ Required ];
Property HomeAddress As GXML.TestSequence.Address(XMLNAME = "Address");
Property WorkAddress As GXML.TestSequence.Address(XMLNAME = "Address");
/// If the XMLSEQUENCE = 1, then the order of the XML elements must match the
/// order of the class properties. This allows us to deal with XML where the
/// same field appears multiple times and is distinguished by the order.
Parameter XMLSEQUENCE = 1;
}
该类定义映射到前面显示的 XML
文档。
注意:如果 XMLSEQUENCE
为 1
,则忽略 XMLIGNOREINVALIDTAG
参数。
导出后控制 Unswizzling
当使用 IRIS XML
工具导出支持 XML
的持久对象时,系统会像往常一样自动将所有需要的信息混合到内存中;此信息包括对象值属性。导出对象后,IRIS
会取消混合任何对象列表,但不会(默认情况下)取消混合单个对象引用。对于大型对象,这可能会导致 <STORE>
错误。
要使任何单个对象引用在这种情况下不被混淆,请在支持 XML
的类中设置 XMLUNSWIZZLE
参数,如下所示:
Parameter XMLUNSWIZZLE = 1;
该参数的默认值为 0
。