第三十五章 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;
}

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

相关推荐
weixin_4316004413 小时前
前端数据埋点(1):一次点击如何变成一条埋点
前端·js·数据埋点
IT_陈寒13 小时前
Python线程池吞了异常还不告诉我,这谁顶得住啊
前端·人工智能·后端
计算机魔术师14 小时前
同样是AI辅助建造,为什么有的游戏三个月就烂尾了?
前端
用户9210802628614 小时前
0. 做 Agent 产品,前端 AI 组件框架怎么选?
前端
库玛西14 小时前
现代 C++ 智能指针全景指南:从 RAII 思想到工业级实践
c语言·开发语言·c++·笔记·面试
liulilittle14 小时前
无锁并发容器的设计与实现原理
开发语言·c++·set·map·并发·无锁·lock-free
朋克洛德的码农15 小时前
Go并发-sync包四剑客:Mutex、RWMutex、WaitGroup、Once-从入门到原理
开发语言·后端·golang
拾年27515 小时前
React Hooks 进阶篇:useMemo / useCallback / useReducer / useImperativeHandle,用「算账 +
前端·javascript·react.js
Jackson__15 小时前
面试官:如何在老项目中使用新框架,并实现通信?
前端·javascript·面试
拾年27515 小时前
React Hooks 保姆级教程:把组件想象成失忆的打工人,4 个 Hook 带你原地起飞
前端·javascript·react.js