第三十四章 XML 模式的高级选项

2023-12-13  本文已影响0人  Cache技术分享

第三十四章 XML 模式的高级选项

类和属性参数

自动创建子类的类型

当为一个类定义 XML 投影时,它的所有子类都会自动映射到单独的类型,所有这些类型都使用超类作为基类型。这意味着无论何时使用超类型,都可以使用其中一种子类型。还可以使用子类型在 XML 模式中定义选择列表或替换组。

请注意,可以为抽象类定义 XML 映射;该类在任何派生类模式中都显示为基类型,尽管它是抽象的,无法实例化。

考虑一个例子。我们从一个简单的 Person 类开始:

Class UsingSubclasses.Person Extends (%Persistent, %XML.Adaptor)
{
Property Name As %String [Required];
Property DOB As %Date(FORMAT = 5, MAXVAL = "+$h") [Required];
}

假设我们有两个直接基于 Person 类的类。首先是 Patient 类:

Class UsingSubclasses.Patient Extends UsingSubclasses.Person
{
Property PatientID As %String [Required];
}

接下来是 Employee 类:

Class UsingSubclasses.Employee Extends UsingSubclasses.Person
{
Property EmployeeID As %String [Required];
}

最后,考虑一个使用 Person 作为属性的类:

Class UsingSubclasses.Example1 Extends (%Persistent, %XML.Adaptor)
{
Property Person As UsingSubclasses.Person;
}

当生成 Example1 类的架构时,结果如下:

<s:complexType name="Example1">
    <s:sequence>
        <s:element name="Person" type="Person" minOccurs="0" />
    </s:sequence>
</s:complexType>
<s:complexType name="Employee">
    <s:complexContent>
        <s:extension base="Person">
            <s:sequence>
                <s:element name="EmployeeID" type="s:string" />
            </s:sequence>
        </s:extension>
    </s:complexContent>
</s:complexType>
<s:complexType name="Person">
    <s:sequence>
        <s:element name="Name" type="s:string" />
        <s:element name="DOB" type="s:date" />
    </s:sequence>
</s:complexType>
<s:complexType name="Patient">
    <s:complexContent>
        <s:extension base="Person">
            <s:sequence>
                <s:element name="PatientID" type="s:string" />
            </s:sequence>
        </s:extension>
    </s:complexContent>
</s:complexType>

请注意以下事项:

上一篇 下一篇

猜你喜欢

热点阅读