第十章 将对象映射到 XML - 控制关系映射的形式

文章目录

  • 第十章 将对象映射到 `XML` - 控制关系映射的形式
  • 控制关系映射的形式
  • 关系的默认映射
  • 相反,映射关系的另一面

第十章 将对象映射到 XML - 控制关系映射的形式

控制关系映射的形式

关系以与其他属性相同的方式映射到 XML,具体取决于其中使用的集合的性质:

  • 对于父子关系:

    • 父对象中的关系属性是一个集合属性,特别是对象列表。请参阅控制集合属性的映射。

    • 子对象中的关系属性是对象值属性。

      默认情况下,此关系不会映射为 XML

  • 对于一对多关系:

    • 单个对象中的关系属性是一个集合属性,特别是对象列表。
    • 另一个对象中的关系属性是对象值属性。

    默认情况下,此关系不会映射为 XML

在任何给定时间,只能映射关系的一侧,否则就会出现无限循环。要反转完成映射的方式,请使用 XMLPROJECTION 属性参数。

这个原理最好通过例子来解释。

关系的默认映射

第十章 将对象映射到 XML - 控制关系映射的形式_第1张图片

Parent 类是 Child 类的父类。

除了关系属性(Children)之外,Parent 类还有两个属性(ParentPropAParentPropB)。

同样,除了关系属性 (MyParent) 之外,Child 类还有两个属性(ChildPropAChildPropB)。

当将这些类映射到 XML 时,默认情况下会得到以下结果:

  • ParentXML 投影包括三个属性的投影:ParentPropAParentPropBChildrenChildren 属性的处理方式与任何其他集合一样。也就是说,默认情况下它被投影为一组嵌套元素。
<Parent>
  <ParentPropA>12345ParentPropA>
  <ParentPropB>67890ParentPropB>
  <Children>
    <Child>
      <ChildPropA>abcChildPropA>
      <ChildPropB>defChildPropB>
    Child>
    <Child>
      <ChildPropA>ghiChildPropA>
      <ChildPropB>jklChildPropB>
    Child>
  Children>
Parent>
  • ChildXML 投影包括两个属性的投影:ChildPropAChildPropB。属性 MyParent 被忽略。
<Child>
  <ChildPropA>abcChildPropA>
  <ChildPropB>defChildPropB>
Child>

对于一对多关系也是如此。具体来说,一侧的对象包括关系属性的映射。多方的对象不包括关系属性的映射。

相反,映射关系的另一面

通过在两个类的关系属性中指定 XMLPROJECTION 参数,可以映射关系的另一端。以下示例是默认示例的变体。

Class Relationships2.Parent Extends (%Persistent, %XML.Adaptor)
{

Property ParentPropA As %String;

Property ParentPropB As %String;

Relationship Children As Child(XMLPROJECTION = "NONE") [ Cardinality = children, Inverse = MyParent ];

}

同样,Child类如下:

Class Relationships2.Child Extends (%Persistent, %XML.Adaptor)
{

Property ChildPropA As %String;

Property ChildPropB As %String;

Relationship MyParent As Parent (XMLPROJECTION="element") [ Cardinality = parent, Inverse = Children ];

}

当将这些类映射到 XML 时,会得到以下结果:

  • ParentXML 投影忽略 Children 属性:
<Parent>
  <ParentPropA>12345ParentPropA>
  <ParentPropB>67890ParentPropB>
Parent>

ChildXML 映射包括其所有属性的投影:

<Child>
  <ChildPropA>abcChildPropA>
  <ChildPropB>defChildPropB>
  <MyParent>
    <ParentPropA>12345ParentPropA>
    <ParentPropB>67890ParentPropB>
  MyParent>
Child>

你可能感兴趣的:(XML,映射,xml,IRIS,M)