SDO For Java 规范(七)——类型(Type)

类型(Type

类型接口表达了一个数据对象模型或者数据类型的普通视图。

大多数编程语言或者数据建模语言都有数据类型概念; SDO类型与其它数据类型类似。除非该类型为一个简单数据类型,否则一个SDO类型均有一个属性对象集合。

SDO类型到编程语言和数据建模语言类型的映射

Java, C++, UML 或者 EMOF

  • 可以使用 SDO 类型表达类。
  • 类的每一个属性可以表达为一个 SDO 属性。

XML Schema

  • 可以使用 SDO 类型表达复杂或简单类型。
  • 元素和属性可以使用 SDO 属性表达。

C结构体

  • 可以使用 SDO 类型表达 C 结构体。
  • 结构体的每一个域可以使用 SDO 属性表达。

关系数据库

  • 表可以表达为一个SDO类型。
  • 列可以表达为一个SDO属性。

上述领域均共享某些概念,SDO类型和属性接口表达了上述概念的一个小子集。这些接口对于数据对象编程者来说是有用的,因为其需要内省运行期的数据形状和本质。

表达所有特定领域信息的比较完整的元模型API(例如,XML Schema或者EMOF)超出了本规范的范围。

类型内容

一个类型总是有:

  • 名字——同一个 URI 内类型之间的一个唯一的字符串。
  • URI ——一个包的逻辑 URI 或者是一个目标命名空间,这取决于你的观点。
  • 用于指明该类型为开放的、抽象的、顺序的、还是一个数据类型的布尔型域。

一个类型可能拥有:

  • 属性——由该类型定义的属性对象列表。与简单数据类型一致的类型则没有定义属性。
  • 实例类——用来实现 SDO 类型的 java.lang.Class

如果DataType为真,那么一个类型必须拥有一个实例类。例如象java.lang.Integer java.lang.String这样的类。

如果DataType为假,并且使用了由代码生成器生成的代码,那么一个实例类是可选的。例如象PurchaseOrderCustomer这样的类。

  • 别名——包含额外名字的字符串。在同一个 URI 内,别名必须是唯一的。

类型上所有基于名字进行操作的方法也可以使用别名进行操作。例如,一个类型可以被赋予一个该领域的别名:一个名为PurchaseOrderTypeXML Schema,一个JavaPurchaseOrder和一个数据库表名PRCHORDR

名字的唯一性

在一个URI内,类型名字和类型别名都是唯一的。在一个类型和任何一个基础类型内,属性名和属性别名都是唯一的。

SDO数据类型

SDO为其所支持的普通数据类型定义了类型(Type),以便于在定义服务使用的类型和属性时保持一致。详细内容参见“Standard SDO Types” 章节。

多重继承

通过允许多个基础类型,类型(Type)支持多重继承。使用多重继承时,使用getProperties()方法获得的属性顺序可以不同于一个类型和基础类型的顺序。

类型方法

  • getName() 方法返回一个类型名字。
  • getURI 方法返回该类型的 URI
  • getInstanceClass() 方法返回实现 SDO 类型的类。
  • 如果指定的对象是该类型的实例, isInstance(Object object) 方法将返回真。
  • 如果该类型用于描述 DataType ,那么 isDataType() 方法返回真,如果其用于描述 DataObject ,则返回假。
  • 如果该类型描述了顺序型数据对象,那么 isSequenced() 方法返回真,当其为真时,数据对象能够返回一个顺序( Sequence )。
  • 如果该类型允许开放内容,那么 isOpen() 方法返回真。如果返回值为假,那么 dataObject.getInstanceProperties() 返回值必定与该类型的任何一个数据对象的 dataObject.getType().getProperties() 方法返回值相同。
  • 如果类型是抽象的,那么 isAbstract() 方法返回真,并且该类型不能被实例化。抽象类型不能够用在数据对象或数据工厂( DataFactory )的创建方法中。抽象类型常被用作实例化类型的基础类型。
  • getBaseTypes() 方法将返回该类型的基础类型列表。如果没有基础类型,该列表为空。 XSD <extension>, <restriction>Java“extends” 关键字被映射到基础类型列表。
  • getAliasNames() 返回该类型的别名列表。如果没有别名,则该列表为空。
  • getProperties() 方法返回该类型的所有属性,包括那些在基础类型中声明的属性。
  • getDeclaredProperties() 方法用于获取该类型中声明的属性,对基础类型中声明的属性无效。
  • getProperty(String propertyName) 方法返回一个特殊的属性,在没有指定名称的属性时返回 null

类型接口

public interface Type

{

String getName();

String getURI();

Class getInstanceClass();

boolean isInstance(Object object);

boolean isDataType();

boolean isSequenced();

boolean isOpen();

boolean isAbstract();

List /*Type*/ getBaseTypes();

List /*String*/ getAliasNames();

List /*Property*/ getProperties();

List /*Property*/ getDeclaredProperties();

Property getProperty(String propertyName);

}

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值