文章目录
- [第十一章 将对象映射到 XML - 控制流属性的映射形式](#第十一章 将对象映射到 XML - 控制流属性的映射形式)
- 控制流属性的映射形式
- 控制预计属性的可用性
- 禁用映射
- [`%XML.Adapter` 中的方法](#
%XML.Adapter
中的方法)
第十一章 将对象映射到 XML - 控制流属性的映射形式
控制流属性的映射形式
对于流属性,XMLPROJECTIO
N 的选项如下:
XMLPROJECTION
对流属性的影响
Value of XMLPROJECTION | Effect on Stream Properties |
---|---|
"ELEMENT" |
流内容包含在元素中。 |
"WRAPPED" |
与"ELEMENT" 的处理方式相同。 |
"CONTENT" |
流内容的映射如将属性映射为内容中所述。对于所有其他属性,`` 参数必须为"NONE" 。 |
"NONE" |
该属性不会映射为 XML 。 |
"ATTRIBUTE" |
该属性被映射为属性。 |
"XMLATTRIBUTE" |
该属性被映射为带有前缀 xml 的属性。 |
本节展示了如何映射流的示例。
例如,考虑以下类:
java
Class Basics.StreamPropDemo Extends (%Persistent, %XML.Adaptor)
{
Property BinStream As %Library.GlobalBinaryStream;
Property CharStream As %Library.GlobalCharacterStream;
}
下面显示了此类实例的 XML
表示形式的示例:
xml
<StreamPropDemo>
<BinStream>/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8SEhEP
ERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7/2wBDAQUFBQcGBw4ICA4eFBEUHh4eHh4e
...
VcE/wkZ5wGJBH/joP50UVfQkqaS5dbi34EZtpJgPRlUkf1H402Fy9oIWHHlPj2K/Nn9cfhRRSGip
ZHzbmEPnEwZGGePu5/nj8qNJcpcrG4DxSuEkToDnPPtRRUyKGhPsuqlAxbypAhJ43A/y44q5HbNM
vmx3U9vuJDLG+ASCQW+pxRRSKP/Z</BinStream>
<CharStream><![CDATA[This is a sample file.
This is line 2.
This is line 3.
This is line 4.]]></CharStream>
</StreamPropDemo>
控制预计属性的可用性
可以指定每个映射属性是否由导入、导出或两者使用。为此,需要设置 XMLIO
参数,该参数控制 %XML.Writer
和 %XML.Reader
的导出和导入方法如何处理属性。该参数可以采用以下值之一(不区分大小写):
"INOUT"
--- 此属性可供导出和导入使用。这是映射属性的默认值。"IN"
--- 此属性由导入使用,但由导出忽略。"OUT"
--- 此属性供导出使用,但在导入时会导致错误。如果在 XML 文档中找到与此属性对应的XML
元素,则导入将返回错误。"CALC"
--- 该属性由导出使用,但由导入忽略。如果在XML
文档中找到与此属性对应的XML
元素,则导入会忽略它。通常,这用于计算属性(其值基于其他属性的值),以便可以导出包含所有值的文档并在导入时忽略计算值。
此参数对未映射到 XML
的属性没有影响。
禁用映射
如果某个类支持 XML
,并且希望阻止该类被映射(可能在测试期间由于某种原因),可以将类参数 XMLENABLED
设置为 0
。默认值为 1
。
如果使用 XMLENABLED
来阻止映射某个类,则任何映射到 XML
的类都不能将该类用作属性。将 XMLENABLED
设置为 0
与从超类列表中在删除 %XML.Adaptor
相同。
%XML.Adapter
中的方法
%XML.Adaptor
中的方法已弃用,并且大多没有记录。应该使用更强大的类 %XML.Writer
和 %XML.SchemaO
,它们为命名空间提供更好的支持。