BizTalk开发系列(十三) Schema设计之值约束
XML Schema 的作用是定义 XML 文档的合法构建模块。在开发过程中有时需要对XML文档做精确的约束。以保证XMl数据的准确性。
今天我们以一个班级Sample来讲探讨一下如何在开发BizTalk Schema过程中对XML数据做精确的约束。这个Schema定义了一个班级,班级下面有成员,成员下面有Name属性,Mobile,City,Result,Comment等字段。
![]()
依据以上场景我们对不同的属性或无素做如下需求分析:
| 字段 | 类型 | 作用 | 基类 | 约束 |
| Name | 属性 | 名称 | string | 2-4个字符 |
| Mobile | 元素 | 手机号 | string | 11个数字字符 |
| City | 元素 | 城市 | string | 列表:Beijing, Chengdu, Shenzhen |
| Result | 元素 | 成绩 | int | 数字列表,以空格隔开各成绩值。 |
| Comment | 元素 | 评论 | int/string | 数字或字符串型 |
如上图所示,创建相应的Schema文件。依据需求分析设置相应的字段的属性值。但在这之前我们先来了解一下相应的概念。在Schema约束是使用派生类来指定相应的字段从哪个或哪些基类派生出来的值类型。对于字段或属性的派生类型有以下四种选项:
1. Default 不从任何类型中派生。
2. Restriction 从简单类型中派生出新的受限制的数据类型
3. List 单个简单类型的集合(可理解为数组)
4. Union 多个简单类型的集合
看了以上的概念大概了解一下这几种设置的区别,现面我们来看一下为相应的字段设置属性值。首先我们打开Name属性字段的属性窗口。如下图所示。在 Advanced类别的Derived By值下拉框里有四个选项。由于Name属性字段的约束为2-4个字符。因此设置值为Restriction(限制).并在Restriction(限 制)类别中分别设置Maximum Length和Minimum Length的值为4和2。
![]()
由于Mobile为数字型的字符串而且有长度的限制。如果单单像Name属性那样设置不能达到约束目的。W3C的Schema规范中提供了模式约束 (pattern constraint)。在Mobile字段的属性窗口设置Derived By属性值为 Restriction 在Restriction(限制)类别下的Pattern属性则是可以输入约束语句(支持正则表达式)。我们可以在打开的编辑窗口中输入: [0-9]{11} 正则表达式语句限制字符串由11个0-9数字组成。
City的值是要由列表限制的。Schema规范也提供了枚举约束(enumeration constraint)模式。在City字段的属性窗口设置Derived By属性值为 Restriction。在Restriction(限制)类别下的Enumeration属性编辑窗口输入如下图所示的值。
![]()
Result其实是一个数值类型的数组。如下图所示设置Derived By属性值为List。设置Item Type值为xs:int。
![]()
Comment 评论字段由于不确定得到的值是字符串类型的还是数值类型的(有可能得到一段评语也有可能得到一个分值)。因此是一个复合型的字段。
![]()
通过以上的设置已经完成了Schema的定义过程。会在Schema Soruce窗口得到如下代码:
<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns:b="http://schemas.microsoft.com/BizTalk/2003" xmlns="http://schemasample.limit"/ targetNamespace="http://schemasample.limit"/ xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Class">
<xs:complexType>
<xs:sequence>
<xs:element name="Member">
<xs:complexType>
<xs:sequence>
<xs:element name="Mobile">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="11" />
<xs:pattern value="[0-9]{11}" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="City">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Beijng" />
<xs:enumeration value="Chengdu" />
<xs:enumeration value="Shenzhen" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Result">
<xs:simpleType>
<xs:list itemType="xs:int" />
</xs:simpleType>
</xs:element>
<xs:element name="Comment">
<xs:simpleType>
<xs:union memberTypes="xs:int xs:string" />
</xs:simpleType>
</xs:element>
</xs:sequence>
<xs:attribute name="Name" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="2" />
<xs:maxLength value="4" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
测试
测试Scheam可能在Shema文件的属性中直接设置同一个输出与输入文件路径方便测试。有一点需要注意的是设置了相关约束之后通过Schema的生成
实例选项生成出来的XML文件并不一定是符合约束条件的,特别是对于模式约束(pattern
constraint。这一点在BizTalk的帮助文件里已经提到了这是一个已经的问题。
但不管怎么样直接生成实例是最简单的方式。通过直接生成实例我们得到了以下的XML数据:
<ns0:Class xmlns:ns0="http://schemasample.limit"/> <Member Name="Nam"> <Mobile>MobileMobil</Mobile> <City>Beijng</City> <Result>10</Result> <Comment>10</Comment> </Member> </ns0:Class>
直接验证实例不能成功。提示Mobile不符合规范。我们修改XML数据如下:
<ns0:Class xmlns:ns0="http://schemasample.limit"/> <Member Name="Nam"> <Mobile>13800138000</Mobile> <City>Beijng</City> <Result>90 95 97 99</Result> <Comment>Good!</Comment> </Member> </ns0:Class>
再次验证实例可以通过验证。虽然通过了测试不过请对比上下两个XML数据,以理解不同模式的区别。红色加粗部分为整数型的成绩字段数组。在Schema声
明的时候使用List模式。该模式是使用空格分隔不同值,因些需注意在List模式下使用string类型的时候要注意内容是否有空格。
粉色加粗部分是复合类型。上一个XML数据使用了整合类型通过验证。下一个使用字符串类型也同样通过验证。
BizTalk开发系列(十三) Schema设计之值约束的更多相关文章
- BizTalk开发系列(三十三)BizTalk之Excel终极解决方案
Excel作为优秀的客户端数据处理程序得到了广泛的应用. 由于其简单又强大的功能在很多公司或个人的数据处理中占用非常重要的位置. 而BizTalk作为微软的SOA主打产品虽然免费提供了很多Adapte ...
- BizTalk开发系列(十八) 使用信封拆分数据库消息
之前写了一篇的<BizTalk开发系列(十七) 信封架构(Envelop)> 是关于信封架构及其拆装原理的,都是理论性的内容.信封在BizTalk开发过程中最常用的应该是在读取SQL Se ...
- BizTalk开发系列(二十八) MSMQ 适配器
MSMQ(MicroSoft Message Queue,微软消息队列)是在多个不同的应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台机器上,也可以分布于相连的网络空间 中的任一 ...
- BizTalk开发系列(二十二) 开发自定义Map Functoid
尽管 BizTalk Server 提供许多Functoid以支持一系列不同的操作,但仍可能会遇到需要其他方法的情况.<BizTalk开发系列 Map扩展开发>介绍了通过使用自定义 XSL ...
- BizTalk 开发系列(四十一) BizTalk 2010 BAM 安装手记
使用64位系统可以支持更大的内存,现在服务器基本上都使用64位系统.微软从Windows Server 2008 R2开始服务器版的操作系统也只支持64位了,不过对于像BizTalk这种“繁杂的东西” ...
- 【Qt编程】基于Qt的词典开发系列<十三>音频播放
在上一篇文章中,我是在Qt4平台上调用本地发音的,后来由于用到JSON解析,就将平台转到了Qt5,因为Qt5自带解析JSON的类.然后发现上一篇文章的方法无法运行,当然网上可以找到解决方法,我在这里直 ...
- BizTalk开发系列(十二) Schema设计之Group与Order
开发BizTalk项目的时候会先约定各系统之间往来的消息格式. 由于BizTalk内部唯一使用XML文档.因此消息的格式为XML Schema(XML Schema 用于描述 XML 文档的结构).虽 ...
- BizTalk开发系列(二十五) SQL Adapter
SQL Server 是.NET开发的首选数据库.当然开发BizTalk应用程序很多也离不了SQL Server.针对SQL Server的数据操作BizTalk 提供了SQL Adapter作为与数 ...
- BizTalk开发系列(七) Hello World2
之前根据BizTalk的订阅原理,使用BizTalk管理控制台创建了第一个应用程序 Hello World.但是由于控制台的开发功能有限,绝大多数的BizTalk程序都是在集成开发环境Visual S ...
随机推荐
- DSP using MATLAB 示例 Example3.13
上代码: w = [0:1:500]*pi/500; % freqency between 0 and +pi, [0,pi] axis divided into 501 points. H = ex ...
- 什么是智能扫描开单打印进销存POS?安卓工业手持PDA设备上的POS销售开单,现场打印打票,用扫描枪太方便了
安卓PDA版POS销售开单如果和扫描枪配合使用,和超市的POS销售一样的操作 什么是智能扫描开单打印进销存POS? 互联网特性,让它在数据统计分析.客户关系管理等方面表现出众.智能POS,不仅是一个收 ...
- 后缀数组 SPOJ 694 Distinct Substrings
题目链接 题意:给定一个字符串,求不相同的子串的个数 分析:我们能知道后缀之间相同的前缀的长度,如果所有的后缀按照 suffix(sa[0]), suffix(sa[1]), suffix(sa[2] ...
- CSS font 复合属性的顺序
CSS 参考手册 实例 在一个声明中设置所有字体属性: p.ex1 { font:italic arial,sans-serif; } p.ex2 { font:italic bold 12px/20 ...
- ccc prefab
MonsterPrefab.js var Helpers = require('Helpers'); cc.Class({ extends: cc.Component, properties: { s ...
- 【BZOJ1827】[Usaco2010 Mar]gather 奶牛大集会 树形DP
[BZOJ][Usaco2010 Mar]gather 奶牛大集会 Description Bessie正在计划一年一度的奶牛大集会,来自全国各地的奶牛将来参加这一次集会.当然,她会选择最方便的地点来 ...
- topcoder SRM 619 DIV2 GoodCompanyDivTwo
注意题目给的最后一句话,如果部门任何employee都做不同类型的工作,则这个部门是一个diverse,题目是计算department的diverse数 读起来感觉有点别扭,英语没学好的原因 int ...
- Zepto Code Rush 2014 B - Om Nom and Spiders
注意题目给的是一个nxm的park,设元素为aij,元素aij 有4种可能U(上移),D(下移),L(左移),R(右移) 假设第i行第j列元素aij(注意元素的索引是从0开始的) 当aij为D时,此时 ...
- 基于jquery的图片懒加载js
function lazyload(option){ var settings={ defObj:null, defHeight: }; settings=$.extend(settings,opti ...
- 4分钟apache自带ab压力测试工具使用: 2015.10.4
2015.10.44分钟apache自带ab压力测试工具使用:win8.1 wampserver2.5 -Apache-2.4.9-Mysql-5.6.17-php5.5.12-64b 可以参考一下部 ...