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

2023-12-17 17:12

本文主要是介绍第三十七章 XML 模式的高级选项 - 超类如何表示为类型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 第三十七章 XML 模式的高级选项 - 超类如何表示为类型
  • 超类如何表示为类型
  • 基于多个支持 `XML` 的超类的类

第三十七章 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 ...
}

这篇关于第三十七章 XML 模式的高级选项 - 超类如何表示为类型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/505168

相关文章

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

Python中Json和其他类型相互转换的实现示例

《Python中Json和其他类型相互转换的实现示例》本文介绍了在Python中使用json模块实现json数据与dict、object之间的高效转换,包括loads(),load(),dumps()... 项目中经常会用到json格式转为object对象、dict字典格式等。在此做个记录,方便后续用到该方

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手

python中的显式声明类型参数使用方式

《python中的显式声明类型参数使用方式》文章探讨了Python3.10+版本中类型注解的使用,指出FastAPI官方示例强调显式声明参数类型,通过|操作符替代Union/Optional,可提升代... 目录背景python函数显式声明的类型汇总基本类型集合类型Optional and Union(py

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

深度解析Python yfinance的核心功能和高级用法

《深度解析Pythonyfinance的核心功能和高级用法》yfinance是一个功能强大且易于使用的Python库,用于从YahooFinance获取金融数据,本教程将深入探讨yfinance的核... 目录yfinance 深度解析教程 (python)1. 简介与安装1.1 什么是 yfinance?

C#和Unity中的中介者模式使用方式

《C#和Unity中的中介者模式使用方式》中介者模式通过中介者封装对象交互,降低耦合度,集中控制逻辑,适用于复杂系统组件交互场景,C#中可用事件、委托或MediatR实现,提升可维护性与灵活性... 目录C#中的中介者模式详解一、中介者模式的基本概念1. 定义2. 组成要素3. 模式结构二、中介者模式的特点

MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)

《MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)》本文给大家介绍MyBatis的xml中字符串类型判空与非字符串类型判空处理方式,本文给大家介绍的非常详细,对大家的学习或... 目录完整 Hutool 写法版本对比优化为什么status变成Long?为什么 price 没事?怎

MySQL数据类型与表操作全指南( 从基础到高级实践)

《MySQL数据类型与表操作全指南(从基础到高级实践)》本文详解MySQL数据类型分类(数值、日期/时间、字符串)及表操作(创建、修改、维护),涵盖优化技巧如数据类型选择、备份、分区,强调规范设计与... 目录mysql数据类型详解数值类型日期时间类型字符串类型表操作全解析创建表修改表结构添加列修改列删除列