类型(Type)
类型接口表达了一个数据对象模型或者数据类型的普通视图。
大多数编程语言或者数据建模语言都有数据类型概念; SDO类型与其它数据类型类似。除非该类型为一个简单数据类型,否则一个SDO类型均有一个属性对象集合。
SDO类型到编程语言和数据建模语言类型的映射
Java, C++, UML 或者 EMOF 类
XML Schema
C结构体
关系数据库
上述领域均共享某些概念,SDO类型和属性接口表达了上述概念的一个小子集。这些接口对于数据对象编程者来说是有用的,因为其需要内省运行期的数据形状和本质。
表达所有特定领域信息的比较完整的元模型API(例如,XML Schema或者EMOF)超出了本规范的范围。
类型内容
一个类型总是有:
-
名字——同一个 URI 内类型之间的一个唯一的字符串。
-
URI ——一个包的逻辑 URI 或者是一个目标命名空间,这取决于你的观点。
-
用于指明该类型为开放的、抽象的、顺序的、还是一个数据类型的布尔型域。
一个类型可能拥有:
-
属性——由该类型定义的属性对象列表。与简单数据类型一致的类型则没有定义属性。
-
实例类——用来实现 SDO 类型的 java.lang.Class 。
如果DataType为真,那么一个类型必须拥有一个实例类。例如象java.lang.Integer和 java.lang.String这样的类。
如果DataType为假,并且使用了由代码生成器生成的代码,那么一个实例类是可选的。例如象PurchaseOrder和Customer这样的类。
-
别名——包含额外名字的字符串。在同一个 URI 内,别名必须是唯一的。
类型上所有基于名字进行操作的方法也可以使用别名进行操作。例如,一个类型可以被赋予一个该领域的别名:一个名为PurchaseOrderType的XML Schema,一个Java名PurchaseOrder和一个数据库表名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);
}