第三十六章 XML 模式的高级选项 - 创建子类型的替换组

文章目录

第三十六章 XML 模式的高级选项 - 创建子类型的替换组

创建子类型的替换组

XML 模式规范还允许定义替换组,这可以是创建选择的替代方法。语法有些不同。无需制作明确的集中类型列表,而是注释可能的替代项,如下所示:

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

为了创建这个模式,我们使用以下类:

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

将子类限制在替换组中

对于给定属性,如果将 XMLTYPECONSTRAINT 属性参数设置为等于"SUBSTITUTIONGROUP",则该组将自动包含该属性类型的所有子类,如前面的示例所示。可以使用 XMLINCLUDEINGROUP 参数来标记给定的子类,以便它不包含在替换组中。例如,假设我们添加 Person 类的另一个子类:

java 复制代码
Class UsingSubclasses.Other Extends UsingSubclasses.Person
{

Parameter XMLINCLUDEINGROUP = 0;

Property OtherID As %String [ Required ];
}

在这种情况下,该类不包含在替换组中。并且因为已经以这种方式显式标记了此类,所以它根本不包含在架构中。

相关推荐
dishugj几秒前
【Oracle】 Flashback(闪回)技术实操指南
数据库·oracle·flashback
袁袁袁袁满几秒前
Python使用uuid生成唯一密钥uid详细教程
开发语言·python·uuid·唯一密钥uid
Logan Lie1 分钟前
Go 反射(Reflection)详解:从入门到实践
开发语言·后端·golang
爱装代码的小瓶子2 分钟前
【c++进阶】c++11下类的新变化以及Lambda函数和封装器
java·开发语言·c++
白山云北诗3 分钟前
中小企业如何做好企业官网的网络安全
网络·数据库·web安全·ddos·cc·企业网络安全
m0_748250038 分钟前
C++ 标准库概述
开发语言·c++
FAFU_kyp8 分钟前
Rust 所有权(Ownership)学习
开发语言·学习·rust
superman超哥14 分钟前
Rust 异步性能的黑盒与透视:Tokio 监控与调优实战
开发语言·后端·rust·编程语言·rust异步性能·rust黑盒与透视·tokio监控与调优
lkbhua莱克瓦2418 分钟前
进阶-存储对象2-存储过程上
java·开发语言·数据库·sql·mysql
码农胖虎-java24 分钟前
【AI】向量数据库选型实战:pgvector vs Milvus vs Qdrant
数据库·milvus·pg