BizTalk开发系列(十二) Schema设计之Group与Order
开发BizTalk项目的时候会先约定各系统之间往来的消息格式. 由于BizTalk内部唯一使用XML文档。因此消息的格式为XML Schema(XML Schema 用于描述 XML 文档的结构)。虽然BizTalk提供了对于XML消息的验证功能。但是往往在BizTalk Schema设计器设计Schema的时候对于Group的用途不是很在意。今天我们来了解一下它的作用,希望对于设计灵活的Schema有点帮助。
首先,我们来了解一下Group的概念,在W3C的定义中. Group是用于定义在复杂类型定义中使用的元素组。BizTalk 定义的Schema当然也是符合W3C规范的.但是Group概念跟W3C规定的稍微有点区别的:除了Attriubte Group(元素组)之外通过BizTalk Schema设计的Group不会真正创建组,即在Schema文件中不会出现Group Name。而是通过相应的Order指示器定义一个复杂类型。我们以下讲的Group都是通过BizTalk Schema设计器定义的Group.
从Schema设计器中可以得到以下几种类型的Group:
1. Sequence 规定子元素必须按照特定的顺序出现
2. Choice 指示器规定可出现某个子元素或者可出现另外一个子元素(可理解为单选)
3. All 子元素能够以任意顺序出现,每个子元素可出现零次或一次。
4. Attriubte 属性组
![]()
Group 示例
打开VisualStudio创建一个BizTalk项目并且新建一个Schema文件。在Schema文件上右击属性在输入输出属性中输入同一个文件的路径。在接下来的测试中可以直接通过右击Schema选择生成实例和验证实例这两项目来测试效果。
Sequence Group
在Root节点中新建一个Record(记录)节点,名为SequenceRecord。在该节点新建Sequence Group. 在Group下创建三个Element(元素)。如下图所示
![]()
生成Schema的XML实例,打开源码可得到如下的XML内容。
<ns0:Root xmlns:ns0="http://schemasample.schema1"/> <SequenceRecord> <First>First_0</First> <Second>Second_0</Second> <Third>Third_0</Third> </SequenceRecord> </ns0:Root>
验证Schema实例可以输出窗口看到成功通过验证的消息。这时更改节点的位置.将Third节点移到First节点之前,保存文件。再次验证Schema实例。可以在输出窗口看到如下消息:
E:\Projects\SchemaSample\Msgs\Schema1.xml: error BEC2004: The element 'SequenceRecord' has invalid child element 'Third'. List of possible elements expected: 'First'.
Choice Group
在Root节点中新建一个Record(记录)节点,名为ChoiceRecord。在该节点下新建Choice Group. 在Group下创建两个Element(元素)。如下图所示
![]()
生成Schema的XML实例.打开源码可得到如下XML内容(节选)
<ChoiceRecord> <Female>Female_0</Female> </ChoiceRecord>
验证Schema实例可以输出窗口看到成功通过验证的消息。这时在ChoiceRecord节点下添加如下内容:
<Male>Male_0</Male>
保存文件,再次验证Schema实例。在输出窗口得到如下内容:
E:\Projects\SchemaSample\Msgs\Schema1.xml: error BEC2004: The element 'ChoiceRecord' has invalid child element 'Male'.
这时可去掉Female节点,再次验证。在输出窗口亦可看到验证成功的消息。
Attriubte Group
在Root节点中新建一个Record(记录)节点,名为AttributeGroup。在该节点下新建Attribute Group. 在Group下创建两个Attribute(属性)。如下图所示
![]()
设计器只允许在Attribute Group下面创建Attribute字段。
![]()
生成Schema的XML实例可得到如下内容(节选)
<AttributeRecord Attribute_1="Attribute_1_0" Attribute_2="Attribute_2_1" />
总结
通过以上的Sample了解了BizTalk
Group的类别及作用。Sequence,Choice,All类型是W3C中定义的Order指示器(Order
指示器用于定义元素的顺序),但不知为何ALl Group一直是灰色的。所以本实例就没有对All类型进行测试。
另外还可能通过直接定义Record的Group Order Type属性直接指定整个记录的排序类别(如下图所示)。
![]()
BizTalk开发系列(十二) Schema设计之Group与Order的更多相关文章
- BizTalk开发系列(十五) Schema设计之Qualified 与Unqualified
XML Schema中的命名空间前缀限定包括对元素(Element)或属性(Attribute)的限定,即常见的如 “<ns0:root>...</ns0:root>”之类的格 ...
- BizTalk开发系列(十八) 使用信封拆分数据库消息
之前写了一篇的<BizTalk开发系列(十七) 信封架构(Envelop)> 是关于信封架构及其拆装原理的,都是理论性的内容.信封在BizTalk开发过程中最常用的应该是在读取SQL Se ...
- 【Qt编程】基于Qt的词典开发系列<十二>调用讲述人
我们知道,win7系统自带有讲述人,即可以机器读出当前内容,具体可以将电脑锁定,然后点击左下角的按钮即可.之前在用Matlab写扫雷游戏的时候,也曾经调用过讲述人来进行游戏的语音提示.具体的Matla ...
- BizTalk开发系列(十九) BizTalk命名规范
目前BizTalk项目的开发人员比较少,但是在开发过程中还是需要命名规范的约束.根据以往BizTalk项目的经验,整理了BizTalk命 名规范.包括:BizTalk Application, Sch ...
- BizTalk开发系列(十六) XML命名空间
BizTalk开发过程中如果有对XML进行开发操作,比如在自定义代码里操作XML消息或者在Mapping的时候使用Xpath对XML进行操 作.则有机会遇到XML命名空间的问题.常见的是使用Xpath ...
- BizTalk开发系列(十四) XML空白字符(WhiteSpace)
最近在做一个BizTalk项目,对XML文件的处理很复杂.本来是想找有没有方法可以一次性去除XML文件中节点和属性的值的空格.但是找了很久没有看到相关的方法.如果有知道该方法的麻烦跟我讲一下:cbcy ...
- MySQL系列(十二)--如何设计一个关系型数据库(基本思路)
设计一个关系型数据库,也就是设计RDBMS(Relational Database Management System),这个问题考验的是对RDBMS各个模块的划分, 以及对数据库结构的了解.只要讲述 ...
- BizTalk开发系列(十) ESB Guidance安装笔记
ESB指导工具包(ESB Guidance)是一个运行于BizTalk Server 2006 R2之上的一个框架.详细信息访问ESB指导工具包社区网站 .源码下载 ESB Guidance的安装过程 ...
- BizTalk开发系列(二十八) MSMQ 适配器
MSMQ(MicroSoft Message Queue,微软消息队列)是在多个不同的应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台机器上,也可以分布于相连的网络空间 中的任一 ...
随机推荐
- 去掉开始菜单中新装程序的红色标记【Windows】
右键开始,属性,开始菜单,自定义,去掉突出新程序.完成.
- Swift3.0语言教程删除字符与处理字符编码
Swift3.0语言教程删除字符与处理字符编码 Swift3.0语言教程删除字符 Swift3.0语言教程删除字符与处理字符编码,在字符串中,如果开发者有不需要使用的字符,就可以将这些字符删除.在NS ...
- PDA手持移动POS销售开单软件(网络版)、PDA手持设备小票机
背景描述: 一家大中型批发及门店销售企业,经销多种冻食品,业务范围覆盖周边众多区域和城市.成立以来,随着业务量的扩大,产品销售分两大渠道:多门店销售和仓库批发,各门店每天都有大量的零散客户和老客户进行 ...
- 20145223《Java程序程序设计》第8周学习总结
20145223 <Java程序设计>第8周学习总结 教材学习内容总结 第十四章 NIO与NIO2 ·NIO使用频道(Channel)来衔接数据节点,在处理数据时,NIO可以让你设定缓冲区 ...
- codeforces 519E A and B and Lecture Rooms LCA倍增
Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Submit Status Prac ...
- 【BZOJ】2879: [Noi2012]美食节
题意 \(m\)个厨师,\(n\)种菜,每种菜需要做\(p_i\)份,每个厨师做第\(i\)种菜用时\(t_{i, j}\).一个厨师做完一道菜才能做下一道.每份菜的时间是这个厨师做完这道菜的用时加上 ...
- 【noiOJ】p8208
03:切分矩形组 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 给定若干个平行于坐标轴的互不重叠的矩形,矩形的顶点都是整点.要求画一根平行于y轴的直线x=k ...
- BZOJ1110: [POI2007]砝码Odw
Description 在byteotian公司搬家的时候,他们发现他们的大量的精密砝码的搬运是一件恼人的工作.公司有一些固定容量的容器可以装这些砝码.他们想装尽量多的砝码以便搬运,并且丢弃剩下的砝码 ...
- iOS9 tableVIewCell的分割线不显示,只有在滑动的时候才显示?
1.如果用6plus模拟器的话,电脑分辨率达不到那么高,因此就看不到分割线. 2.把模拟器换成6s 或 5s,就没问题了.
- 实现UITableView循环利用
tableViewUITableView循环利用 前言 大家都知道UITableView,最经典在于循环利用,这里我自己模仿UITableView循环利用,写了一套自己的TableView实现方案,希 ...