OBIX 定义了一些派生自Object 的核心类型,主要有val、list、ref、err、op 和feed。
1. val
某些类型允许具有val 属性,并称为“值”类型,val 类型不是直接使用的(它是“抽象的”)。它只是反映了类型的实例可能包含val 属性,因为它用于表示具有特定值的对象。在面向对象的术语中,基本OBIX val 类型是一个抽象类,其子类型是从该抽象类继承的具体类,表5-5 列出了为OBIX 定义的不同值对象类型。
表5-5 val 属性取值
续表
请注意,任何值类型对象都可以包含子对象。
1)bool
bool 类型表示true 或false 的布尔条件。它的val 属性映射到xs:boolean默认为false,bool 的字面值必须是“true”或“false”(不允许使用文字“1”和“0”)。合同定义是:
上述合同定义了一个可以通过URI“obix:bool”引用的布尔对象,它扩展了obix:obj 类型,其默认值为false,默认情况下其null 属性为false。合同定义中不存在可选属性范围,这意味着默认情况下没有标准值范围附加到obix:bool。下面是一个定义了范围的obix:bool 的例子:
range 属性指定对其myRange 子级的本地片段引用,其中列出了false 和true状态的显示名称。
2)int
int 类型表示整数,它的val 属性映射到xs:long 为64 位整数,默认值为0,合同定义为:
上述定义了一个可以通过URI“obix:int”引用的整数对象,它扩展了obix:obj 类型。默认值为0,默认情况下其null 属性为false。合同定义中不存在可选属性min,max 和unit,这意味着默认情况下没有最小值、最大值或单位附加到obix:int。再看一个例子:
此示例显示了一个obix:int,其值为52,该对象可取最小值0 和最大值100之间的值,没有单位附加到此值。
3)real
实数类型表示浮点数,其val 属性映射到xs:double,为IEEE 64 位浮点数,默认值为0,合同定义为:
上述定义了一个可以通过URI “obix:real”引用的实数对象,它扩展了obix:obj 类型。默认值为0,默认情况下其null 属性为false。合同定义中不存在可选属性min,max 和unit,这意味着没有最小值、最大值或单位附加到该对象。再看一个例子:
此示例为name 和displayName 属性提供了一个值,并指定了要通过unit 属性设置值的单位为摄氏度(celsius)。
4)str
str 类型表示一串Unicode 字符,它的val 属性映射到xs:string,默认为空字符串。合同定义是:
上述定义了一个可以通过URI“obix:str”引用的字符串对象,它扩展了obix:obj 类型。其默认值为空字符串,默认情况下其null 属性为false。合同定义中不存在可选属性min 和max,这意味着默认情况下没有最小值或最大值附加到该对象。min 和max 属性是字符串字符长度的约束,而不是字符串的“值”。
5)enum
枚举类型用于表示必须与有限值集匹配的值,有限值的集合称为范围。枚举的val 属性使用xs:string 类型的字符串,枚举默认为null。使用range 属性通过Facets 声明枚举的范围,合同定义是:
上述定义会覆盖null 属性的值,因此在默认情况下,obix:enum 具有空值。默认情况下,val 属性被指定为空字符串,但不会直接使用此值,来看一个例子:
在此示例中,指定了val 属性,因此null 属性隐含为false。有关null 属性继承的详细信息,会在本章后续内容介绍。
6)abstime
绝对时间类型用于表示绝对时间点。它的val 属性映射到xs:dateTime,但它必须包含时区。根据XML Schema 第2 部分,abstime 的词汇空间是:
Abstimes 默认为null,合同定义是:
obix:abstime 的合同定义也会将null 属性覆盖为true。因此,val 属性的默认值并不重要,来看一个2005 年3 月9 日下午1:30GMT 的一个例子:
在此示例中,指定了val 属性,因此null 属性隐含为false。Val 字符串"2005-03-09T13:30:00Z"中,T 表示时间部分的起始(如果要规定小时、分钟和秒,则此选项为必需)。
时区偏移是必需的,因此abstime 可用于将abstime 与UTC 唯一关联,用后缀Z 表示无偏移。可选的tz 属性用于将时区指定为zoneinfo 标识符,如果可用,这将提供有关时区的其他上下文。如果同时使用,则val 属性的时区偏移量必须与tz Facet 指定的时区的偏移量匹配。
GMT 是Greenwich Mean Time 的简写,表示格林尼治标准时间;UTC 指的是Coordinated Universal Time—— 世界协调时间(又称世界标准时间、世界统一时间),是经过平均太阳时(以格林尼治时间GMT 为准)、地轴运动修正后的新时标及以秒为单位的国际原子时所综合精算而成的时间,计算过程相当严谨精密。因此,若以世界标准时间的角度来说,UTC 比GMT 来得更加精准。
7)reltime(www.xing528.com)
相对时间类型用于表示相对持续时间,其val 属性映射到xs:duration,默认值为0 秒,合同定义是:
上述合同定义设置val 和null 属性的默认值,与obix:abstime 相反,这里将null 属性指定为false。默认值为0 s(秒),根据XML Schema 表示为“PT0S”。
上边是一个reltime 的例子,它被限制在0~60 s,当前值为15 s。
8)date
日期类型用于表示日、月和年组成的日期。它的val 属性映射到xs:date,根据XML Schema 第2 部分,日期的词汇空间是:
OBIX 中的日期值必须省略时区偏移量,并且不得使用后缀“Z”。只能使用tz 属性将日期与时区相关联,日期对象默认为null。其合同定义与obix:abstime类似。
以2007 年11 月26 日为例,可表示为:
在此示例中,指定了val 属性,因此null 属性隐含为false。使用tz 属性可以将时区指定为zoneinfo 标识符。
9)time
时间类型用于表示以小时、分钟和秒为单位的时间,它的val 属性映射到xs:time。根据XML Schema 第2 部分,时间的词法空间是xs:dateTime 的左截断表示:
OBIX 中的时间值必须省略时区偏移量,并且不得使用后缀“Z”。只能使用tz 属性将时间与时区关联起来,时间对象默认为null,合同定义是:
表示唤醒时间的示例必须在7:00~10:00:
在此示例中,指定了val 属性,因此null 属性隐含为false。使用tz 属性可以将时区指定为zoneinfo 标识符。
10)uri
uri 类型用于存储URI 引用,与普通的旧str 不同,URI 具有RFC3986 和XML Schema xs:anyURI 类型定义的受限词法空间。OBIX 服务器必须使用RFC3986 描述的URI 语法来识别资源,OBIX 客户端必须能够识别此URI 语法。大多数URI 也将是一个URL,这意味着它们标识资源及如何检索它(通常通过HTTP),合同定义是:
以OBIX 主页为例:
2. list
列表类型是用于存储其他对象列表的专用对象类型。使用列表与通用Obj的主要优点是列表可以使用of 属性为其内容指定公共合同。如果指定,则属性必须是格式化为合同列表的URI 列表。列表的定义是:
该定义指出obix:list 类型包含本身为OBIX Objects 的元素,属性值为obix:obj。obix:list 类型的实例可以提供不同的值来指示它们包含的对象的类型,以下是一个字符串列表的例子:
列表通常对用于其子元素的URI 具有约束,因此它们使用特殊语义来添加子元素。
3. ref
ref 类型用于创建对另一个OBIX 对象的外部引用,它是HTML 锚标记的OBIX 等价物。合同定义是:
ref 元素必须始终指定href 属性,ref 元素应该使用is 属性指定引用对象的类型。引用列表的ref 元素(is=“obix:list”)应该使用of 属性指定列表中包含的对象的类型。
4. err
错误类型是用于指示错误的特殊对象,它的实际语义依赖于上下文。通常,错误的对象应该通过display 属性包含对问题的可读描述,合同定义是:
5. op
op 类型用于定义操作,所有操作都将一个输入对象作为参数,并返回一个对象作为输出。输入和输出合约通过in 和out 属性定义,合同定义是:
6. feed
feed 类型用于定义feed 事件的主题。feeds 与watches 一起使用以订阅诸如警报之类的事件流。feed 应该通过of 属性指定它触发的事件类型,in 属性可用于在订阅feed(如过滤器)时传递输入参数。
此处feed 引申为用来接收该信息来源更新的接口,是一种给用户持续提供内容的数据形式,由多个内容提供源组成的资源聚合器,由用户主动订阅消息源并且向用户提供内容。也就是说,feed 将用户主动订阅的若干消息源组合在一起形成内容聚合器,帮助用户持续地获取最新的订阅源内容。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。