第三十五章 XML 模式的高级选项 - 创建子类型的选择列表

文章目录

  • [第三十五章 XML 模式的高级选项 - 创建子类型的选择列表](#第三十五章 XML 模式的高级选项 - 创建子类型的选择列表)
  • 创建子类型的选择列表
    • [`XMLINCLUDEINGROUP=0` 的选择列表示例](#XMLINCLUDEINGROUP=0 的选择列表示例)

第三十五章 XML 模式的高级选项 - 创建子类型的选择列表

创建子类型的选择列表

根据 XML Schema 规范,复杂类型可以由类型(特别是相关类型)的选择列表组成。假设我们希望架构允许使用 <Person>, <Patient>, or <Employee> 元素,而不是 <Person> 元素。要定义这样的架构,我们会将 Person 属性的 XMLTYPECONSTRAINT 属性参数设置为等于"CHOICE",如下所示:

java 复制代码
Class UsingSubclasses.Example2 Extends (%Persistent, %XML.Adaptor)
{
Property Person As UsingSubclasses.Person(XMLTYPECONSTRAINT = "CHOICE");
}

默认情况下,选择列表由 Person 类的所有子类组成。示例 2 的架构如下:

xml 复制代码
<s:complexType name="Example2">
    <s:sequence>
        <s:choice minOccurs="0">
            <s:element name="Employee" type="Employee" />
            <s:element name="Patient" type="Patient" />
            <s:element name="Person" type="Person" />
        </s:choice>
    </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>

与前面的示例相反,Example2 的类型是一个由 PersonPatientEmployee 组成的选择列表。后三种类型的定义方式与前面的示例相同。

XMLINCLUDEINGROUP=0 的选择列表示例

假设我们添加 Person 类的另一个子类,并通过将 XMLINCLUDEINGROUP 设置为 0 来限制它:

java 复制代码
Class UsingSubclasses.Other Extends UsingSubclasses.Person
{
Parameter XMLINCLUDEINGROUP = 0;
}

在这种情况下,此类不包含在选择列表中,也不包含在架构中。

相关推荐
quantdash_cc6 小时前
量化数据源怎么选:稳定性、实时性和数据完整性到底该如何权衡?
开发语言·python·数据分析·量化交易·股票数据·quantdash
郭邯6 小时前
从零到一:我用 AI 写了个复利计算器,顺便治好了我的"公式恐惧症"
前端
萧瑟余晖6 小时前
Java深入解析篇五十四之对象模型详解
java·开发语言
Pointer Pursuit6 小时前
C++11特性(二)
前端·c++·算法
天道kabuto6 小时前
Vue3 升级踩坑:子组件 click 事件为什么会触发两次?
前端
Nayana6 小时前
《Web 到 HarmonyOS》-- Ability、Stage、模块化与路由导航
前端
张文是假的啊6 小时前
Java | record | Controller逻辑
java·开发语言
不甘先生6 小时前
Go 中 type、方法与指针接收者:从 str_name.Name() 看懂 Go 的类型系统
开发语言·后端·golang
ShineWinsu6 小时前
对于 Vue 3:从为什么学 Vue,到声明式渲染与数据响应式的解析
前端·javascript·vue.js
粥里有勺糖7 小时前
视野修炼-技术周刊第132期 | 一些有趣的组件
前端·github·aigc