[ONVIF概要]中定义了NotificationMessage消息元素,定义呈列如下(请注意,这里包含的结构描述仅供参考。[ONVIF Schema]包含标准结构描述定义。):
<xs:element name="Message" type="Message">
<xs:element name="Message">
<xs:complexType>
<xs:sequence>
<xs:element name="Source" type="tt:ItemList" minOccurs="0"/>
<xs:element name="Key" type="tt:ItemList" minOccurs="0"/>
<xs:element name="Data" type="tt:ItemList" minOccurs="0"/>
...
</xs:sequence>
<xs:attribute name="UtcTime" type="xs:dateTime" use="required"/>
<xs:attribute name="PropertyOperation" type="tt:PropertyOperationType"/>
</xs:complexType>
</xs:element>
<xs:complexType name="ItemList">
<xs:sequence>
<xs:element name="SimpleItem" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="Name" type="xs:string" use="required"/>
<xs:attribute name="Value" type="xs:anySimpleType" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="ElementItem" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:any namespace="##any"/>
</xs:sequence>
<xs:attribute name="Name" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="PropertyOperationType">
<xs:restriction base="xs:string">
<xs:enumeration value="Initialized"/>
<xs:enumeration value="Deleted"/>
<xs:enumeration value="Changed"/>
</xs:restriction>
</xs:simpleType>
Message元素内的项分为三类:Source、Key和Data。不相关的属性通知不得使用key分组。各组内可以放置多个简单元素项。每个项都有一个名称和值。在ElementItem的情况下,该值表示一个XML元素内ElementItem元素。在SimpleItem的情况下,该值应指定属性的值。在此消息的任何一组内包含的所有项的名称应该是唯一的。
Vendor特定扩展应为qname表达SimpleItem和ElementItem名称属性。这就避免了潜在的Vendor特定扩展和未来ONVIF的扩展名称之间的冲突。
它推荐无论何时都使用SimpleItems替代ElementItems,因为SimpleItems易于Messages集成到一个通用的客户端。
从TopicSet中可以提取Simple和ElementItems的确切类型信息(请参阅9.7节),其中每个Topic可以增强消息有效负载的描述。
当通知涉及到属性时,PropertyOperation应该存在。“Initialized”操作模式应当用来通知客户端创建一个属性。当一个同步点已请求时,“Initialized”操作模式应当被使用。