OBIX 中的根抽象是Obj,为了简化编码,Object 的名称缩写为Obj,但为了更方便参考,本书使用术语Object 与Obj 同义。OBIX 中的每个Object 类型都是Object 的衍生物,任何对象或其衍生物都可以包含其他对象。OBIX 对象类型通过obj 元素表示,Object 的属性通过元素的XML 属性表示。用于在XML中编码OBIX 的完整规则参考下节的编码规范。本书中使用的术语Obj 通常表示OBIX 对象,而不管它是如何编码的。对象的合同定义由Obj 元素表示为:
该定义的解释描述如下:合同定义提供了默认情况下存在于Object 中的属性,包括合同实现和模式引用,这些属性由扩展此类型的任何Object(以及派生类型)继承。默认情况下不存在的可选属性(如displayName)是不包含在“合同定义”中的。href 是可以引用此合同的URI,因此另一个Object 可以在其is属性中引用此合同。null 属性指定为false,这意味着默认情况下此Object“具有值”。writable 属性指示此Object 是只读的,因此从obj(所有对象)扩展的任何Object 类型都将是readonly,除非它明确覆盖了writable 属性。除非被覆盖,否则对象的状态默认为“ok”。
Object 及派生对象支持的属性主要有name、href、is、null、val、ts 和Facets。
1. name
所有对象都可以具有name 属性。这定义了Object 在其父Object 中的用途,对象的名称遵循驼峰式命名法,有关对象命名的其他注意事项将在5.5 节中进行讨论。
2. href
所有对象都可以具有href 属性。这提供了用于标识Object 的URI 引用,href与名称密切相关。
3 is
所有对象都可以具有is 属性。此属性定义此对象实现的所有合同。该属性的值必须是合同列表。此外,所有对象都来自Obj 类型,因此绝不能等于OBIX Nil 合同来表示空的合同列表。
4. null
所有对象都支持null 属性。null 是缺少值,意味着此Object 没有值,尚未配置或初始化,或者未定义。使用带有布尔值的null 属性指示null。对于枚举,abstime,日期和时间,null 属性的默认值为true,对于所有其他对象,则为false。
5. val
某些对象表示一个值,称为值类型对象。这些对象可以具有val 属性,对象不需要声明val 属性,因为所有Value 类型对象都定义了默认值。允许包含val属性的值类型对象有bool,int,real,str,enum,abstime,reltime,date,time和uri。值的文字表示映射到XML Schema(XML 架构),在以下部分中用“xs:”前缀表示。
6. ts
某些对象可用作标签以提供有关其父对象的元数据。标签通常组合在一起形成标签空间并发布供其他人使用。如果一个Object 是一个Tag,那么它必须在其name 属性中使用Tag 名称,并包含在ts 属性中定义Tag 的标签空间。例如,如果名为“foo”的标签空间声明了名为“bar”的标签,则具有此标签的Object将按以下方式编码:
7. Facets
所有对象都可以使用名为Facets 的预定义属性集进行注释。Facets 提供有关Object 的其他元数据,可用Facets 的集合是:displayName,display,icon,min,max,precision,range,status,tz,unit,writable,of,in 和out。尽管OBIX 预定义了许多Facets,但服务者可以添加其他Facets。
1)displayName
displayName 属性提供存储为xs:string,用于描述便于人们识读的对象名称,例如:
在上述例子中,名称为spaceTemp 的对象,定义了displayName 特性,特性值为Space Temperature,表示该对象是空间温度。通常displayName 特性应该是name 属性的人性化的形式,合同中displayName 的覆盖性没有限制(虽然它应该不常见,因为displayName 只是一个人性化的名称版本)。
2)display
display 属性提供了对象的人性化可读描述,存储为xs:string:
合同中 display 的覆盖性没有限制,display 属性与 Java 或 C#中的Object.toString()具有相同的用途。它提供为所有对象指定字符串表示的通用方法,在值对象(如bool 或int)的情况下,它应该提供val 属性的人性化表示。
3)icon
图标属性提供对图形图标的URI 引用,该图标可在用户代理中代替对象显示:
图标属性的内容必须是图像文件的URI,图像文件应该是16×16(分辨率)PNG 文件,在[PNG]规范中定义,合同中的图标覆盖没有限制。
4)min
min 属性用于定义最小值:
min 属性的内容必须与其关联的val 类型匹配,通常与int,real,abstime,date,time 和reltime 一起使用,以定义值空间的下限。它与str 一起使用以指示字符串的最小Unicode 字符数。它与list 一起使用以指示子对象(已命名或未命名)的最小数量。min Facet 的覆盖可能仅使用更大的值来缩小值空间,min Facet绝不能大于最大Facet(尽管它们可能相等)。
5)max
Max 属性用于定义最大值:
(www.xing528.com)
max 属性的内容必须与其关联的val 类型匹配,通常与int,real,abstime,date,time 和reltime 一起使用,以定义值空间的上限。它与str 一起使用以指示字符串的最大Unicode 字符数。它与列表一起使用以指示子对象(已命名或未命名)的最大数量。max Facet 的覆盖可能仅使用较小的值来缩小值空间。最大Facet 绝不能小于min Facet(尽管它们可能相等)。
6)precision
精度属性用于描述用于实际值的小数位数:
precision 属性的内容必须是xs:int,precision 属性的值等于有意义的小数位数。在上面的示例中,值2 表示两个有意义的小数位:“75.04”。通常,客户端应用程序使用精度,这些应用程序执行自己的实际值格式,精度覆盖没有限制。
7)range
范围Facet 用于定义枚举的值空间,range 属性是对obix:Range Object 的URI 引用,它与bool 和enum 类型一起使用:
范围的覆盖规则是指定的范围必须从Contract 的范围继承,枚举则有所不同,因为枚举的特化通常涉及向范围添加新项。从技术上讲,这会扩大枚举的价值空间,但实际上将项目添加到范围内是所需的行为。
8)status
状态属性用于注释关于信息质量和状态的对象:
status 是一个枚举字符串值,其中包含表5-4 中的以下值之一(按升序优先级)。
表5-4 状态属性取值
9)tz
tz 属性用于使用时区注释abstime,date 或time 对象,tz 属性的值是zoneinfo字符串标识符,如IANA 时区([ZoneInfo DB])数据库中所指定。Timezoneinfo数据库定义每个区域的当前和历史规则,包括其与UTC(世界标准时)的偏移量及计算夏令时的规则。OBIX 没有定义用于建模时区的合同,而是仅使用标准标识符引用zoneinfo 数据库,由OBIX 启用的软件可以将zoneinfo 标识符映射到UTC 偏移和夏令时规则。
以下规则用于计算abstime,date 或time 对象的时区:
(1)如果指定了tz 属性,则将时区设置为tz;
(2)否则,如果合同定义了继承的tz 属性,则将时区设置为继承的tz 属性;
(3)否则,将时区设置为大厅的About.tz 定义的服务器时区。
使用时区时,实现必须在abstime 或time 对象的值中指定时区偏移量,tz属性与时区偏移存在不一致的情况。例如,纽约在标准时间内与UTC 的偏差为-5 h,在夏令时间内偏差为-4 h:
10)unit
单位属性定义了SI Units(国际单位制)中的测量单位,该属性是对obix:Unit 对象的URI 引用,它与int 和real 类型一起使用:
如果在合同中声明,建议不要覆盖单位属性。如果它被覆盖,那么覆盖应该使用与合同具有相同尺寸的单位对象(它必须测量相同的物理量)。
11)writable
可写属性指定客户端是否可以写入此对象,如果为false(默认值),则Object为只读,它适用于除op 和feed 之外的所有类型:
可写Facet 仅描述客户端修改此对象值的能力,而不是客户端添加或删除此对象子项的能力。服务器可以允许添加或删除子对象,而与现有对象的可写性无关。如果服务器不支持通过写入添加或删除Object 子项,则它必须返回适当的错误响应。
12)of
of 属性指定此Object 包含的子对象的类型,该属性的值必须是合同列表。列表中的所有对象必须实现合同列表中的所有合同,因为客户端将期望从列表中检索的对象能够提供合同列表中所有合同的语法和语义行为,此属性通常与list 和ref 类型一起使用。
13)in
in 属性指定此对象使用的输入参数类型,该属性的值必须是合同列表。客户端使用输入参数提供给服务器的对象,必须实现在属性中定义的合同列表中的所有合同。因此,服务器可能依赖于合同列表中每个合同所描述的语法和语义行为,此属性通常与op 和feed 类型一起使用。
14)out
out 属性指定此对象使用的输出参数类型,该属性的值必须是合同列表。由于执行操作,服务器返回给客户端的结果对象必须实现合同列表中的所有合同。因此,客户端可能依赖于合同列表中每个合同所描述的语法和语义行为,此属性通常与op 类型一起使用。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。