1.3 类型标记法
类型被形式化的指定,是使用了如下的XML标记法。请注意的是这种XML标记法仅被用来定义
类型,却不用来表示编码过的数据。所有的编码的AMQP数据是如1.2部分中描述的二进制数据。
类型元素形式化地定义了一个语义的类型,用来在线路上交换数据。每个类型的定义有如下的
通用的格式。子元素的表示依赖于类型定义的类别。(原生的,组合的,限制的)
<type class="primitive|composite|restricted" name="..." label="..." provides="...">
...
</type>
一个类型定义的属性规定如下:
名称 类型的名称
标签 类型的简短的描述
类别 一个字符串标识着类型被定义为哪个类别:原生的,组合的,限制的
提供者 一个以逗号分隔的类型的列表(见域元素)
这有三种不同的类型,以类别标识着。
1.3.1 原生的类型的标记法
一个原生的类型定义包括了一个或者是多个编码的元素,它描述着数据在线路上是如何被组织的
原生的类型不包括描述符,域,或者是选择的元素。
<type class="primitive" name="..." label="..." provides="...">
<encoding ... > ... </encoding>
...
<encoding ... > ... </encoding>
</type>
编码的元素定义了一个原生的类型是如何被编码的。这个规范定义了四种编码:包括固定的,
可变的,复合的,和数组。一个特定的编码提供了更多的细节,即数据是如何被格式化的。
<type class="primitive" ... >
...
<encoding name="..." code="0xNN" category="fixed|variable|compound|array" width="N" label="..."/>
...
</type>
名称 编码的名称
标签 编码的短的描述
编码 在线路上的编码的数据的前缀的数值化的值。
类别 编码的类别包括了固定的,可变的,复合的,数组。
宽度 编码的宽度或者是依赖于类别的前缀的大小。
1.3.2 组合的类型的标记法
一个组合的类型的定义规定了一个新的记录类型的类型。一个类型由固定的长度的域它的值
是一个特定的类型的值。一个组合的类型没有一个新的编码,但是在线路上被发送以一个列表
以一个特定的描述符的值作为注解,这个注解标识着它作为一个定义了的组合类型的表示法。
一个组合的类型的定义包括了一个描述符和0个或者是多个域元素。组合类型没有包括编码
或者是选择的元素。一个组合的类型的源属性将总是列表,其它的值被保留作为未来用。
<type class="composite" name="..." label="..." provides="...">
<descriptor name="..." code="..."/>
<field name="..." ... > ... </field>
...
<field name="..." ... > ... </field>
</type>
1.3.3 描述符的标记法
描述元素规定了什么注解被用来标识着编码的值作为一个描述的类型的表示。
<type class="composite|restricted" ...>
...
<!-- domain-id:descriptor-id -->
<descriptor name="domain:name" code="0xNNNNNNNN:0xNNNNNNNN"/>
...
</type>
名称 一个表示的符号性的名称
编码 一个数值化的值
1.3.4 域的标记法
域的元素标识着一个组合的类型中的域。每个域有如下的属性。
<type class="composite" ...>
...
<field name="..." type="..." requires="..." default="..." label="..."
mandatory="true|false"
multiple="true|false" />
...
</type>
名称: 一个名称唯一的标识着类型的域
类型: 域的类型。属性定义了在这个域中允许出现的值的范围。
它可能命名了一个特定的类型。在这个情况下,它的值被限制在那个类型,
或者它可能是特定的字符。任何的类型的值的大小写都被允许 。
在哪种写法,值的范围可能被在未来有限制。
要求 一个以逗号分隔的类型的列表。域的值被限制在特定的类型之一。
默认 如果没有值被编码,域的一个默认的值
必须 如果一个非空的值总是被编码,这个值为真。
多个值 如果域中有多个值,它为真。
1.3.5 限制性的类型的标记法
一个限制的类型规定了一个新的类型,它的值是被限制在另一个类型能表示的值的一个子集中。
源属性标识了一个基本的类型,从这个类型中,限制的类型被推导出来。一个限制的类型能有
一个描述符元素它的大小写被一个描述符指定。一个限制的类型的允许的值能被文档规定,或者是
直接被选择的元素的固定数量的值所限制。
<type class="restricted" name="..." label="..." provides="...">
<descriptor name="..." code="..."/>
<choice name="..." value="..."/>
...
<choice name="..." value="..."/>
</type>
选择的元素标识了一个限制的类型的合法的值。选择的元素有如下的属性。
<type class="restricted" ...>
...
<choice name="..." value="..."/>
...
</type>
名称 值的名称
值 允许的值。