没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
1. FAST 1.1 规范中文版全文参考
FAST
sm
规范
版本 1.x.1
2006-12-20
第 2 页 共 37 页
1) 导言
本文定义了 FAST的结构和语法。 FAST是一种面向消息数据流的二进制编码方法。
FAST是FIX Adapted for Streaming.的缩写(适流 FIX )。虽然 FAST提出的初衷是为了对
FIX 消息进行优化,但本文中定义的编码方式已经被推广应用到更广泛的协议集。
FAST编码方法在两个层面上降低数据流的大小。 首先,通过 “域操作符 ”的概念使得
可以利用流中数据的相关性,消除冗余数据。其次,在二进制编码对余下数据的串行化
中利用了可自描述的域长度以及指示域是否存在的位图。
编码依据称为 “模版 ”的控制结构来进行。 模版通过规定域的顺序和结构、 域操作符,
及其使用的二进制编码表示方法来控制对流的一部分的编码。
本规范对模版定义 (Template Definition, TD) 结构的具体语法 (concrete syntax)进行了
定义。具体语法的引入是为了能提供一个人机可读、正规化、和全真的格式,它被作为
默认格式,用来制作、存储和交换 FAST模版。
但是,本规范的具体语法不是为了用于在 FAST会话的两端间在线交换模版定义结
构。对于在线传送, FAST会话控制协议 [ SCP]提供了对本文所定义的模版结构的 FAST
串行化方法。
本文使用模式 (schema)语言将具体语法正式定义为一个 XML 的结构。
处理器( processor)(编码器或解码器)并不要求必须使用上述的具体语法。例如,
处理器可以使用 SCP协议读取编码为 FAST消息的模版定义, 或者也可将它们硬编码在程
序中。
处理器通常需要对一个模版集合进行管理。 尽管具体语法提供了在一个 XML 文档中
定义单个或多个模版的方法, 但本规范并不对一般情况下如何构建或维护模版集合或模
版数据库作出规定。对于特定处理器所使用的特定模版,甚至可以同时使用多个源(譬
如XML 文档及 SCP)来进行定义。
下面的 XML 片段是采用具体语法格式的一个模版定义的例子。
< templates xmlns=" http://www.FIXprotocol.org/ns/template-definition "
templateNs=" http://www.FIXprotocol.org/ns/templates/sample "
ns=" http://www.FIXprotocol.org/ns/FIX ">
< template name=" MDRefreshSample ">
< typeRef name=" MarketDataIncrementalRefresh "/>
< string name=" BeginString " id= “ 8” > <constant value=" FIX4.4 "/> </ string >
< string name=" MessageType " id= “ 35” > <constant value=" X"/> </ string >
< string name=" SenderCompID " id= “ 49” > <copy /> </ string >
< uInt32 name=" MsgSeqNum " id= “ 34” > <increment /> </ uInt32 >
< sequence name=" MDEntries ">
< length name=" NoMDEntries " id= “ 268” />
< uInt32 name=" MDUpdateAction " id= “ 279 ” > <copy /> </ uInt32 >
< string name=" MDEntryType " id= “ 269 ” > <copy /> </ string >
< string name=" Symbol " id= “ 55” > <copy /> </ string >
< string name=" SecurityType " id= “ 167 ” > <copy /> </ string >
< decimal name=" MDEntryPx " id= “ 270 ” > <delta /> </ decimal >
< decimal name=" MDEntrySize " id= “ 271” > <delta /> </ decimal >
< Int32 name=" NumberOfOrders " id= “ 346” > <delta /> </ Int32 >
< string name=" QuoteCondition " id= “ 276” > <copy /> </ string >
< string name=" TradeCondition " id= “ 277 ” > <copy /> </ string >
</ sequence >
</ template >
第 3 页 共 37 页
</ templates >
附录 3包含更多的具体语法及其相应域的编码的范例。
2) 术语
术语编码 (encode)是指将一个应用类型的实例串行化 (serialize)为FAST流的过程。
术语解码 (decode)是指将 FAST流的一部分的反串行化 (deserialize)为一个应用类型实
例的过程。鉴于在对编码操进行定义后,解码已较简单,因此,本文并不一定对一个解
码操作再作明确地描述。
本文根据是否属于处理模型的内容来定义 FAST流的编解码。但该处理模型被看作
是一个抽象的模型,只要能获得与使用本模型一样的结果, 可以采用任意的方法来具体
实现 FAST编解码。
3) 标记法
本文使用 RELAX NG 模式语言 [RNC]的紧凑语法来正式定义用于模板定义的 XML 结
构,在模式的片段中穿插了相应的描述性文字。附录 1给出了完整的、可扩展的模式。
文字中的模式片段并没有包含与可扩展性相关的部分。附录 2给出了 W3C XML 模式
[XSD] 的对应版本。
错误由带方框的错误标识符来标记。
参考文献由带方框的、“参考文献”小节中的对应标识符来标记。
3 .1) XML 命名空间
模板定义结构命名空间 (namespace)的URI 为
“ http://www.FIXprotocol.org/ns/FAST/td/1.1 ” . 本文中使用前缀 td:对该命名空间中的元
素进行引用 .
default Namespace = "http://www.FIXprotocol.org/ns/FAST/td/1.1"
4) 错误处理
对模板定义进行检验所发现的错误称为静态错误 (static error)。编码器和解码器必须
对静态错误进行捕获,并将发生该类错误的模板丢弃。
当从 XML 文档中读取模板定义时,若该文档出现以下情况则为一个静态错误 [ERR
S1]:
z
不是正确的 XML 定义格式,
z
不符合 XML 命名空间 [XMLNS] 中的约束,
z
不符合附录 1中规定的模式。
对FAST流进行编码或解码时检测到的错误分为两种,一种为动态错误 (dynamic
error),一种为可报告错误 (reportable error)。编码器和解码器必须对动态错误进行捕获。
虽然对可报告错误的捕获是可选的,但也建议对可报告错误进行捕获。通常来说,不对
可报告错误进行捕获的一个原因, 是希望能获得更好的性能。 但是,为了保证互操作性,
建议在开发及对实现的测试阶段对所有的错误都进行捕获。
第 4 页 共 37 页
5) 应用类型
应用类型 (application type)表示使用 FAST协议的应用层的分组或消息的类型。 本文并
不规定应用类型的结构, 并将其看成是抽象的实体, 但是认为它们能被映射为以下的模
型:
z
分组(group)是包含一个无序的域的集合的命名类型。
z
域(field)具有名称和类型。其名称在一个分组内唯一。其类型可以为元类型、序
列类型、或者分组类型中的一种。
z
序列(sequence)包括长度及一个元素的有序集合。 其中,每一元素均为分组类型。
本规范并不要求其所有元素的分组类型均相同。这可能会造成在应用层面上异构的
序列。但在 FAST的一个特定应用中可以就此进行约束,要求所有的元素都具有相同
的类型。
z
元类型 (primitive type)为ASCII 码字符串, Unicode字符串, 32位无符号整数
(UInt32), 32位整数 (int32), 64位无符号整数 (UInt64), 64位整数 (int64), 十进制数和字节
向量,其值域分别与本文中定义的相对应的类型相同。
z
流的顶层所出现的分组也被称为消息 (message)。
6) 模版
模板 (template)规定了如何对应用类型的一个实例 (也即字节流的一部分) 进行编码。
模板用名称来进行标识,其中名称用于对另一模板或外部上下文所定义的模板进行引
用。
模板本身不构成类型,但通过引用与应用类型关联。一个应用类型可对应一个或多
个模板
1
。也可创建一个可用于一个或多个应用类型的模板。
在具体语法中,模板由 “<td:template> ”元素定义。一个模板定义的 XML文档可
以包含单个的模板或多个模板的集合。模板集合必须封装在
<td:templates>
元素中,
该元素可包含应用于整个封装的模板集合的命名空间参数。
模板包含一个指令 (instruction)的序列。其中,指令的顺序很重要,应与数据在流中
的位置相对应。指令分为以下两大类:域指令和模板引用指令 (template reference
instruction)。域指令规定了如何将域的实例编码成为流。模板引用指令则提供了通过引
用其他模板来定义模板的一个部分的方法。
start = templates | template
templates = element templates { nsAttr?, templateNsAttr?, dictionaryAttr?, template* }
template = element template { templateNsName, nsAttr?, dictionaryAttr?, typeRef?, instruction* }
instruction = field | templateRef
6 .1) 指令上下文
编解码在指令的上下文 (Instruction Context)中进行,其中包括:
z
模板的集合
z
当前模板 (current template)
z 应用类型的集合
1
让同一应用类型对应多个模板,使得可针对该类型的不同使用情况进行优化。例如,许多 FIX 消息都包含了大量各类的域,
但只有少数是被组合使用的。与使用一个带有大量可选成分的模板相比,对每一主要的域的组合选择使用不同的模板是一种更
为简炼的方法。
第 5 页 共 37 页
z 当前应用类型 (current application type)
z
字典(dictionary)的集合
z
可选的初值 (initial value)
当前应用类型在初始时为特殊的类型 —“任意 (any) ”。当处理器碰到包含
“<td:typeRef> ”的元素时 当前类型改变。新类型适用于该元素所包含的指令。
“
<td:typeRef>
”
可在
“
<td:template>
”、“
<td:group>
” 和“
<td:sequence>
” 元素中
出现
。
typeRef = element typeRef { nameAttr, nsAttr?}
当前模板指正被处理的模板, 在流中遇到一个模板标识符时当前模版被更新。 如“模
板引用指令”小节中所述的,一个静态模板引用也可改变当前模板。
字典集合和初值在后文的“操作符”小节中进行描述。
6 .2) 域指令
每一域指令 (Field Instruction)均具有名称和类型。 名称标识了当前应用类型中对应的
域。类型则规定了域的基本编码方法。 如果指令的类型不能转换为相应的应用域的类型 ,
或解码时不能由相应的应用域的类型转换而得到,则产生动态错误 [ERR D1] 。
可选的 “存在 (presence) ”参数指示域是一个必要 (mandatory)域,还是一个可选 (optional)
域。如果该参数未被指定,则域为必要的。
基本域,也即除了分组或序列之外的域,可具有一个域操作符,该操作符规定了对
域的某个优化操作。
field = integerField | decimalField | asciiStringField | unicodeStringField | byteVectorField | sequence
| group
fieldInstrContent = nsName, presenceAttr?, fieldOp?
presenceAttr = attribute presence { "mandatory" | "optional" }
6 .2.1) 整数域指令
整数 (Integer)在传送编码中的大小不受限。但在通常情况下,应用层会采用固定长
度的整数。整数域指令因此必须对整数的边界进行指定。元素名称中的数字则指示了整
数域指令的位元大小。值的编码和解码方法不受整数大小的影响。
前缀 “int ”表示域是带符号的, “uInt ”则表示域是无符号的。
integerField =
element int32 { fieldInstrContent }
| element uInt32 { fieldInstrContent }
| element int64 { fieldInstrContent }
| element uInt64 { fieldInstrContent }
如果流中的整数大于特定类型的最大值,或小于指定类型的最小值,则动态错误
[ERR D2]发生。下表列出了各整数类型的最大和最小值。
类型 最小值 最大值
int32 -2147483648 2147483647
uInt32 0 4294967295
int64 -9223372036854775808 9223372036854775807
uInt64 0 18446744073709551615
6 .2.2) 十进制数域指令
剩余36页未读,继续阅读
资源评论
- liu442352023-08-04排版和代码显示有些乱,尤其代码没有颜色区分,整体内容完整,可使用。
庶予
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 7.win10下的页表基址.mp4
- 8.通过页表基址修改页属性.mp4
- 若依WebSocket集成
- 2336100053_盛资涵_中国互联网络发展状况统计报告数据.pdf
- 得利捷固定式相机调试软件dl.code-1.9.2
- feagregraeharhrthtrjuyl7l87l78
- AM信号产生及检波电路(高频电子线路仿真作业)
- ISC全覆盖算法有障碍物情况
- Java毕设项目:基于spring+mybatis+maven+mysql实现的网上点餐系统分前后台【含源码+数据库+毕业论文】
- 3568开发资料用户手册
- asdgaggrgaeaaavrg
- vision-results.zip
- Spring Boot框架下的权限管理与工作流开发平台系统实现
- 基于卷积神经网络的MNIST手写数字识别
- 前端分析-2023071100789
- 软件开发汇报-中国海洋大学22届学生陈宇杰
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功