首页 > 代码库 > BizTalk开发系列(十二) Schema设计之Group与Order
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内容。
<SequenceRecord>
<First>First_0</First>
<Second>Second_0</Second>
<Third>Third_0</Third>
</SequenceRecord>
</ns0:Root>
验证Schema实例可以输出窗口看到成功通过验证的消息。这时更改节点的位置.将Third节点移到First节点之前,保存文件。再次验证Schema实例。可以在输出窗口看到如下消息:
Choice Group
在Root节点中新建一个Record(记录)节点,名为ChoiceRecord。在该节点下新建Choice Group. 在Group下创建两个Element(元素)。如下图所示
生成Schema的XML实例.打开源码可得到如下XML内容(节选)
<Female>Female_0</Female>
</ChoiceRecord>
验证Schema实例可以输出窗口看到成功通过验证的消息。这时在ChoiceRecord节点下添加如下内容:
保存文件,再次验证Schema实例。在输出窗口得到如下内容:
这时可去掉Female节点,再次验证。在输出窗口亦可看到验证成功的消息。
Attriubte Group
在Root节点中新建一个Record(记录)节点,名为AttributeGroup。在该节点下新建Attribute Group. 在Group下创建两个Attribute(属性)。如下图所示
设计器只允许在Attribute Group下面创建Attribute字段。
生成Schema的XML实例可得到如下内容(节选)
总结
通过以上的Sample了解了BizTalk Group的类别及作用。Sequence,Choice,All类型是W3C中定义的Order指示器(Order 指示器用于定义元素的顺序),但不知为何ALl Group一直是灰色的。所以本实例就没有对All类型进行测试。 另外还可能通过直接定义Record的Group Order Type属性直接指定整个记录的排序类别(如下图所示)。
BizTalk开发系列(十二) Schema设计之Group与Order