美文网首页
第三十七章 XML 模式的高级选项 - 超类如何表示为类型

第三十七章 XML 模式的高级选项 - 超类如何表示为类型

作者: Cache技术分享 | 来源:发表于2023-12-16 09:27 被阅读0次

第三十七章 XML 模式的高级选项 - 超类如何表示为类型

超类如何表示为类型

如果需要 XML 架构来显示特定的类型层次结构,则需要了解映射如何解释 IRIS 类层次结构。

类层次结构代表了有意义的数据组织等。该层次结构尽可能地反映在相应的 XML 类型定义中。

例如,假设有以下类:

  • 名为 Base 的类,定义了三个公共属性(Property1Property2Property3)。
  • 名为 Addition1 的类,它扩展 Baseand 并定义一个附加公共属性 (Addition1)。
  • 名为 Addition2 的类,它扩展 Addition1 并定义一个附加公共属性 (Addition2)。

Addition2 的架构应包含什么?它必须代表所有五个属性。另外,因为这些类都是用户定义的,所以 Addition2 的架构应该显示类层次结构的详细信息;相反,如果 BaseIRIS 类库扩展一个类,而 IRIS 类库又从该库扩展其他类,那么这些细节就不那么有趣了。

相应地,Addition2XML 模式默认如下所示:

<s:complexType name="Addition2">
    <s:complexContent>
        <s:extension base="Addition1">
            <s:sequence>
                <s:element name="Addition2" type="s:decimal" minOccurs="0" />
            </s:sequence>
        </s:extension>
    </s:complexContent>
</s:complexType>
<s:complexType name="Addition1">
    <s:complexContent>
        <s:extension base="Base">
            <s:sequence>
                <s:element name="Addition1" type="s:string" minOccurs="0" />
            </s:sequence>
        </s:extension>
    </s:complexContent>
</s:complexType>
<s:complexType name="Base">
    <s:sequence>
        <s:element name="Property1" type="s:string" minOccurs="0" />
        <s:element name="Property2" type="s:decimal" minOccurs="0" />
        <s:element name="Property3" type="s:date" minOccurs="0" />
    </s:sequence>
</s:complexType>

由于 XML 类型定义不支持多重继承,因此 IRIS XML 支持做出了某些简化假设。对于扩展多个超类的类,假定该类的类型是第一个列出的超类。一个例子如下所示。考虑以下三个类定义。 AddressPart1 包含一个属性:

Class GXML.Writer.ShowMultiple.AddressPart1 Extends %XML.Adaptor
{
Property Street As %String [ Required ];
}

AddressPart2 类包含另一个属性:

Class GXML.Writer.ShowMultiple.AddressPart2 Extends %XML.Adaptor
{
Property City As %String [ Required ];
}

最后,Address 继承了这两个类(AddressPart1 作为第一个超类)并添加了更多属性:

Class GXML.Writer.ShowMultiple.Address Extends 
(GXML.Writers.ShowMultiple.AddressPart1, 
GXML.Writers.ShowMultiple.AddressPart2)
{
Property State As %String(MAXLEN = 2, PATTERN = "2u") [ Required ];
Property Zip As %String(MAXLEN = 10, PATTERN = "5n.1(1""-""4n)") [ Required ];
}

AddressXML 架构如下:

<s:complexType name="Address">
    <s:complexContent>
        <s:extension base="AddressPart1">
            <s:sequence>
                <s:element name="City" type="s:string" />
                <s:element name="State" type="s:string" />
                <s:element name="Zip" type="s:string" />
            </s:sequence>
        </s:extension>
    </s:complexContent>
</s:complexType>
<s:complexType name="AddressPart1">
    <s:sequence>
        <s:element name="Street" type="s:string" />
    </s:sequence>
</s:complexType>

请注意以下事项:

  • 第一个列出的超类 AddressPart1 由相应的 XML 类型表示,其中包含所有预期的详细信息。
  • 除了 AddressPart1 类型包含的属性之外,所有剩余属性都分配给 Address 类型。一旦 AddressPart1 类被映射,这是这些属性的唯一可能的表示。
  • AddressPart1AddressPart2 都是 %XML.Adaptor 的子类,但没有公开 %XML.Adaptor 的结构。重点是自定义类,这是合适的。

以下规则控制当查看给定类的架构时如何处理超类:

  • 如果超类继承自 %XML.Adaptor,则它由 XML 类型表示,该类型表示此类的所有映射属性。短类名被视为属性的 XML 类型。如果该类为 XMLTYPE 参数指定了一个值,则该值将用作类型名称。
  • 如果超类不是从%XML.Adaptor 继承,则它不由 XML 类型表示。如果它有任何属性,它们将被分配给继承类(正在查看其架构的类)。
  • 如果给定的类继承自多个超类,则会为第一个超类创建 XML 类型(如果适用;请参阅前面的规则)。不属于第一个超类的所有属性都将分配给继承类,如前面的示例所示。

基于多个支持 XML 的超类的类

在某些情况下,给定的类可能基于多个支持 XML 的超类。在这种情况下,相应的 XML 模式会考虑这些类的列出顺序。例如,考虑以下类,它继承自两个支持 XML 的超类:

Class Test.Default Extends (Test.Superclass1, Test.Superclass2)
{
///additional class members ...
}

此类的 XML 架构在从 Test.Superclass2 派生的 XML 类型之前列出了从最左侧的类 Test.Superclass1 派生的 XML 类型。当为此类的对象生成 XML 输出时,也会发生相同的顺序。

如果希望从右到左确定 XML 架构(和输出),请将 XMLINHERITANCE 参数指定为“right”。例如:

Class Test.Default Extends (Test.Superclass1, Test.Superclass2)
{
Parameter XMLINHERITANCE = "right";

///additional class members ...
}

相关文章

  • State Pattern模式(状态模式)

    状态模式(State Pattern):用类来表示状态。这种类型的设计模式属于行为型模式。 介绍 意图:用类来表示...

  • 两张图示轻松看懂 UML 类图

    一个类如何表示 第一格为类名 第二格为类中字段属性格式:权限 属性名:类型 [ = 默认值 ]权限:private...

  • 权限设置

    权限设置 (重点) 1、语法:chmod [选项] 权限模式 文档路径 常用选项:-R(当文档类型为文件夹的时候,...

  • 设计模式之工厂模式

    简单工厂模式 根据传入的参数构造不同的子类。方法返回值类型是超类类型。简单工厂模式例子: 工厂方法模式 将fact...

  • dubbox---provider.xml配置文件说明

    provider.xml配置 配置选项: 标签|属性|对应URL参数|类型|...

  • Scala Option容器

    Scala Option(选项)类型用来表示一个值是可选的(有值或无值)。 Option[T] 是一个类型为 T ...

  • CISCO交换机的4种模式

    CISCO交换机有4种模式: 第一种为用户模式,用">"表示 第二种为特权模式,用"#"表示 第三种为配置模式,用...

  • 类的关系

    【重点掌握】:设计模式定义、类关系、抽象封装具体、面向超类型编程 【重点掌握】:策略模式的参与角色、职责分配、协作...

  • Scala编程基础21:Scala选项

    Scala Option(选项)类型用于表示一个值是可选的(有值或者无值)。Option[T]是一个类型为T的可选...

  • iOS中都有什么设计模式?各个设计模式的作用

    大致有23种 都是表示类与类之间的构架关系 也就是表示对象的逻辑关系 设计模式根据使用类型可以分为三种: 1、 创...

网友评论

      本文标题:第三十七章 XML 模式的高级选项 - 超类如何表示为类型

      本文链接:https://www.haomeiwen.com/subject/xozggdtx.html