3.3 资源属性
一个属性描述了资源所暴露的一个方面或概念,包括与该资源相关的元信息。一个属性应该有一个名称(即属性名)和一个值(即属性值)。属性是以键值对的形式存在,“键”就是属性名,“值”就是属性值,键值对就类似于<属性名>=<属性值>。例如,如果“温度”属性有一个属性名“temp”和一个属性值“30F”,则该属性就表达为“temp=30F”。属性的特定形式是由编码模式决定的。例如,在JSON中,属性表示为“键”:值(如“temp”:30)。除此之外,属性的定义包括以下内容。
(1)值类型:定义了属性值可能采用的值。值类型可以是一个简单数据类型(如string、boolean等),如上文所定义,也可以是一个用特定模式定义的复杂数据类型。值类型可以定义值规则,即定义一些规则,属性值会采用这些规则,并将其用于属性值中。这些规则可以定义值的范围、最大、最小值、公式、枚举值集合、阵列、条件值,甚至是对其他属性值的依赖关系。这些规则可以用于验证属性值中的特定值,并且标记错误。
(2)强制性:指明对于一个给定的资源类型,该属性是否是强制的。
(3)访问模式:指明该属性是否可以被读写。更新等同于写入。“r”表示读,“w”表示写,二者都是可以被指定的;同时,写操作并不会意味着就会自动进行读操作。
一个属性的定义可能包括下列附加信息,这些项可以提供有用的信息。
(1)属性名:指明一个属性人性化的名称,通常不会在线发送。
(2)描述:一个描述性的文本,定义该属性的目的和预期的使用。
一个属性可能被用在一个URI的查询部分,作为选择一个特定资源的标准。该过程可以通过将属性声明为查询的一个字段来完成(即<属性名>=<想要的属性值>)。在OIC 1.1版本的规范中,查询过滤器中只允许ASCII字符串,不允许NUL字符串。这意味着,只有使用ASCII字符的属性值,才可以在查询过滤器中被匹配。当查询中声明的属性与目标资源的完整表示中对应的属性相匹配时,该资源就被选择。完整表示目标所有资源类型的属性集合,是这个集合的快照。如果在查询的“过滤”字段声明了一个属性,那么,声明的属性就会与接口定义表示相匹配,以隔离表示的特定部分。
通常来说,一个属性只有在与其相关的资源内才是有意义的。然而,有一些属性可能被所有的资源支持,称为公共属性,这些属性在资源之间保持资源完整性,即它们的“键=值”对在所有的资源中的含义都相同。下面介绍公共属性的字段。
公共属性可以在所有资源中定义。以下几种属性被定义为公共属性:资源类型、资源接口、名称和资源标识。
一个公共属性的名称应该是唯一的,不应该被其他属性使用。当定义一个新的资源类型时,如果是非公共属性,则不应该使用已经存在的公共属性名称(如“rt”“if”“p”和“id”)。如果定义一个新的公共属性,应该确定其名称不应该被其他属性所使用。一个新公共属性名称的唯一性,可以通过检查所有已存在、OCF所定义的资源类型属性来核实。然而,随着资源类型的增长,这可能越来越难以处理。为了阻止未来出现这样的名称冲突,OCF为公共属性保留了一个特定的名称空间。
潜在的方法有:①可能会分配一个特定的前缀(例如“oic”),接在该前缀后面的名称前(如“oic.psize”)仅用于公共属性;②包含一个或两个字母的名称被保留用于公共属性,其他属性名称的长度都要大于两个字母;③公共属性可能嵌套在特定的对象下,以与它们自身区分。
所有资源属性总结如下。
(1)资源类型(“rt”):该属性用于声明资源类型。由于一个资源可以被定义多个资源类型,因此,资源类型属性值可以用于声明多个资源类型。例如,“rt”:[“oic.wk.d”,“oic.d.airConditioner”]表明,包含该属性的资源被定义为“oic.wk.d”或“oic.d.airConditioner”资源类型。
(2)接口(“if”):该属性声明了资源支持的接口。接口属性值可以有多个,列出资源支持的所有接口。
(3)名称(“n”):该属性声明了分配给资源“人类可读”的名称。
(4)资源标识符(“id”):对于一个资源的特定实例,该属性值是唯一的实例标识符(在整个主机服务器的范围内唯一),该标识符的编码依赖于具体设备。
在OCF规范中使用的属性名称和属性值如下。
(1)属性名称:“键值对”中的“键”。属性名称是区分大小写的,并且其数据类型是字符串类型,但是只允许ASCII字符串,不允许嵌入NUL字符。
(2)属性值:“键值对”中的“值”。当数据类型是字符串时,属性值是区分大小写的。枚举类型的值只能是ASCII字符。
名称是资源的人性化名称,即一个特定的资源实例名称(如MyLivingRoomLight),名称属性在表3-1中进行了定义。
表3-1 名称属性的定义
对于一个资源的特定实例来说,资源标识符属性应该是唯一的实例标识符(在整个主机服务器端的范围内)。该标识符的编码是依赖于设备和实现的,资源标识符属性的定义如表3-2所示。
表3-2 资源标识符属性的定义