XML - 控制关系映射的形式关系以与其他属性相同的方式映射到 XML,具体取决于其中使用的集合的性质:
对于父子关系:
父对象中的关系属性是一个集合属性,特别是对象列表。请参阅控制集合属性的映射。
子对象中的关系属性是对象值属性。
默认情况下,此关系不会映射为 XML。
对于一对多关系:
默认情况下,此关系不会映射为 XML。
在任何给定时间,只能映射关系的一侧,否则就会出现无限循环。要反转完成映射的方式,请使用 XMLPROJECTION 属性参数。
这个原理最好通过例子来解释。

Parent 类是 Child 类的父类。
除了关系属性(Children)之外,Parent 类还有两个属性(ParentPropA 和 ParentPropB)。
同样,除了关系属性 (MyParent) 之外,Child 类还有两个属性(ChildPropA 和 ChildPropB)。
当将这些类映射到 XML 时,默认情况下会得到以下结果:
Parent 的 XML 投影包括三个属性的投影:ParentPropA、ParentPropB 和 Children。 Children 属性的处理方式与任何其他集合一样。也就是说,默认情况下它被投影为一组嵌套元素。<Parent>
<ParentPropA>12345ParentPropA>
<ParentPropB>67890ParentPropB>
<Children>
<Child>
<ChildPropA>abcChildPropA>
<ChildPropB>defChildPropB>
Child>
<Child>
<ChildPropA>ghiChildPropA>
<ChildPropB>jklChildPropB>
Child>
Children>
Parent>
Child 的 XML 投影包括两个属性的投影:ChildPropA 和 ChildPropB。属性 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 时,会得到以下结果:
Parent 的 XML 投影忽略 Children 属性:<Parent>
<ParentPropA>12345ParentPropA>
<ParentPropB>67890ParentPropB>
Parent>
Child 的 XML 映射包括其所有属性的投影:
<Child>
<ChildPropA>abcChildPropA>
<ChildPropB>defChildPropB>
<MyParent>
<ParentPropA>12345ParentPropA>
<ParentPropB>67890ParentPropB>
MyParent>
Child>