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

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

类和属性参数

  • XMLTYPECONSTRAINT

  • XMLINCLUDEINLIST

  • XMLINHERITANCE

自动创建子类的类型

当为一个类定义 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>

请注意以下事项:

  • Example1 的类型是 Person
  • Employee类型和Patient类型均已定义;这是默认设置。 (作为参考,这对应于将 XMLTYPECONSTRAINT 属性参数设置为等于“EXPLICIT”。)
  • 根据 XML 架构规范,前面的架构意味着无论何时包含 <Person> 元素,都可以包含 <Employee> 元素或 <Patient> 元素。

相关推荐

  1. XML 模式高级选项

    2023-12-17 13:58:04       33 阅读
  2. 控制到 XML 模式映射 - Array of Classname

    2023-12-17 13:58:04       31 阅读
  3. 控制到 XML 模式映射 - %ListOfDataTypes

    2023-12-17 13:58:04       24 阅读
  4. 控制到 XML 模式映射 - %ListOfObjects

    2023-12-17 13:58:04       30 阅读
  5. 第二 控制到 XML 模式映射

    2023-12-17 13:58:04       27 阅读
  6. Apache 替代选项 (Windows)

    2023-12-17 13:58:04       13 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-17 13:58:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-17 13:58:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-17 13:58:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-17 13:58:04       20 阅读

热门阅读

  1. 算法工程师-机器学习面试题总结(8)

    2023-12-17 13:58:04       23 阅读
  2. 汇编语言学习(1)

    2023-12-17 13:58:04       44 阅读
  3. SQL规约

    2023-12-17 13:58:04       32 阅读
  4. FFmpeg项目的组成

    2023-12-17 13:58:04       37 阅读
  5. YUV转RGB的Python实现

    2023-12-17 13:58:04       40 阅读
  6. uniapp websocket 消息队列 例子

    2023-12-17 13:58:04       40 阅读
  7. [蓝桥杯 2014 省 A] 波动数列

    2023-12-17 13:58:04       51 阅读
  8. React 列表和键

    2023-12-17 13:58:04       36 阅读
  9. 条款27:尽量少做转型动作

    2023-12-17 13:58:04       29 阅读
  10. Golang Code Review

    2023-12-17 13:58:04       33 阅读
  11. conda的使用教程

    2023-12-17 13:58:04       33 阅读
  12. C 语言 xml 库的使用

    2023-12-17 13:58:04       37 阅读
  13. How to compress audio with FFmpeg

    2023-12-17 13:58:04       34 阅读
  14. 微信小程序(二) ——模版语法1

    2023-12-17 13:58:04       28 阅读