第四章 将对象映射到 XML - 异常

文章目录

  • 第四章 将对象映射到 XML - 例外
  • 例外
  • 默认映射总结
  • `XML` 映射示例
    • 支持 `XML` 的类示例
    • `XML` 文档示例
    • 示例架构

第四章 将对象映射到 XML - 例外

例外

如果给定属性未映射为 XML,则无需为其引用的类启用 XML。以下属性不会映射到 XML

  • 私有属性
  • 多维属性
  • XMLPROJECTION 参数指定为NONE的属性

如果将 XMLPROJECTION 属性参数设置为“ELEMENT”或其他适当的值,则可以映射私有属性和多维属性。请注意,对于多维属性,只有顶部节点可以包含在映射中。

默认映射总结

默认的 XML 映射如下:

  • 一个对象实例对应于一个顶级 XML 元素。

  • 仅映射属性。没有其他类成员被映射。

    此外,私有属性和多维属性也会被忽略。

  • 属性按它们在Studio中出现的相同顺序投影到XML

  • 任何没有指定类型的属性都被假定为字符串。

  • 每个对象值属性都对应于封闭的顶级 XML 元素中的一个 XML 元素。

    它的属性嵌套在该元素内。

  • 关系的处理方式与列表属性相同。

    XML 映射仅包含关系的一侧;如果尝试映射两侧,则会发生错误。

  • 字符流被映射为字符串。

  • 二进制流使用采用 Base-64 编码的字符串进行映射。

XML 映射示例

本节显示支持 XML 的类及其 XML 映射。

支持 XML 的类示例

下面显示了一个支持 XML 的类,其中包括主要的结构属性变体:

Class Basics.BasicDemo Extends (%RegisteredObject, %XML.Adaptor)
{

Parameter XMLTYPENAMESPACE = "mytypes";

Property SimpleProp As %String;

Property ObjProp As SimpleObject;

Property Collection1 As list Of %String;

Property Collection2 As list Of SimpleObject;

Property MultiDimProp As %String [ MultiDimensional ];

Property PrivateProp As %String [ Private ];

}

XMLTYPENAMESPACE 参数指定此类中定义的类型的目标命名空间。

SimpleObject 类也支持 XML

Class Basics.SimpleObject Extends (%RegisteredObject, %XML.Adaptor)
{

Parameter XMLTYPENAMESPACE = "mytypes";

Property MyProp As %String;

Property AnotherProp As %String;

}

XML 文档示例

下面显示了从 BasicDemo 类的实例生成的 XML 文档:


<BasicDemo>
  <SimpleProp>abcSimpleProp>
  <ObjProp>
    <MyProp>12345MyProp>
    <AnotherProp>67890AnotherProp>
  ObjProp>
  <Collection1>
    <Collection1Item>list item 1Collection1Item>
    <Collection1Item>list item 2Collection1Item>
  Collection1>
  <Collection2>
    <SimpleObject>
      <MyProp>12345MyProp>
      <AnotherProp>67890AnotherProp>
    SimpleObject>
    <SimpleObject>
      <MyProp>12345MyProp>
      <AnotherProp>67890AnotherProp>
    SimpleObject>
  Collection2>
BasicDemo>

示例架构

下面显示了两个示例类中使用的 XML 类型命名空间的架构:


<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:s="http://www.w3.org/2001/XMLSchema" 
        elementFormDefault="qualified" targetNamespace="mytypes">
  <complexType name="BasicDemo">
    <sequence>
      <element minOccurs="0" name="SimpleProp" type="s:string"/>
      <element minOccurs="0" name="ObjProp" type="s01:SimpleObject" xmlns:s01="mytypes"/>
      <element minOccurs="0" name="Collection1" type="s02:ArrayOfCollection1ItemString" xmlns:s02="mytypes"/>
      <element minOccurs="0" name="Collection2" type="s03:ArrayOfSimpleObjectSimpleObject" xmlns:s03="mytypes"/>
    sequence>
  complexType>
  <complexType name="SimpleObject">
    <sequence>
      <element minOccurs="0" name="MyProp" type="s:string"/>
      <element minOccurs="0" name="AnotherProp" type="s:string"/>
    sequence>
  complexType>
  <complexType name="ArrayOfCollection1ItemString">
    <sequence>
      <element maxOccurs="unbounded" minOccurs="0" name="Collection1Item" nillable="true" type="s:string"/>
    sequence>
  complexType>
  <complexType name="ArrayOfSimpleObjectSimpleObject">
    <sequence>
      <element maxOccurs="unbounded" minOccurs="0" name="SimpleObject" 
               nillable="true" type="s04:SimpleObject" xmlns:s04="mytypes"/>
    sequence>
  complexType>
schema>

你可能感兴趣的:(XML,映射,xml,开发语言,IRIS,Cache,M)