第三十四章 XML 模式的高级选项
2023-12-14 09:34:13
第三十四章 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>
元素。
文章来源:https://blog.csdn.net/yaoxin521123/article/details/134986535
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!