• 第四章 将对象映射到 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 ];
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

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

    SimpleObject 类也支持 XML

    Class Basics.SimpleObject Extends (%RegisteredObject, %XML.Adaptor)
    {
    
    Parameter XMLTYPENAMESPACE = "mytypes";
    
    Property MyProp As %String;
    
    Property AnotherProp As %String;
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    示例架构

    下面显示了两个示例类中使用的 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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
  • 相关阅读:
    [React 进阶系列] React Context 案例学习:使用 TS 及 HOC 封装 Context
    音视频包的pts,dts,duration的由来.
    科普:String hashCode 方法为什么选择数字 31 作为乘子
    监控 5 分钟抓拍一次人脸,不够 89 次算旷工,居家办公员工:不敢去厕所
    从头开始——重新布置渗透测试环境的过程记录(From Windows To Mac)
    进阶JAVA篇- Collection 类的常用的API与 Collection 集合的遍历方式
    [免费专栏] Android安全之利用ADT获取内存中的敏感信息
    绝对值和hashCode神奇的化学反应
    冷热电气多能互补的微能源网鲁棒优化调度(Matlab代码实现)
    【操作系统】第一章:概述
  • 原文地址:https://blog.csdn.net/yaoxin521123/article/details/134390209