惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tenable Blog
S
SegmentFault 最新的问题
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园 - 聂微东
罗磊的独立博客
MongoDB | Blog
MongoDB | Blog
美团技术团队
Recorded Future
Recorded Future
Microsoft Security Blog
Microsoft Security Blog
博客园 - 叶小钗
P
Proofpoint News Feed
aimingoo的专栏
aimingoo的专栏
博客园_首页
宝玉的分享
宝玉的分享
C
Check Point Blog
爱范儿
爱范儿
MyScale Blog
MyScale Blog
Microsoft Azure Blog
Microsoft Azure Blog
The Register - Security
The Register - Security
U
Unit 42
T
Tailwind CSS Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
D
Docker
博客园 - Franky
博客园 - 【当耐特】
腾讯CDC
N
Netflix TechBlog - Medium
Jina AI
Jina AI
博客园 - 司徒正美
Last Week in AI
Last Week in AI
PCI Perspectives
PCI Perspectives
GbyAI
GbyAI
Security Archives - TechRepublic
Security Archives - TechRepublic
J
Java Code Geeks
Cloudbric
Cloudbric
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Y
Y Combinator Blog
F
Full Disclosure
TaoSecurity Blog
TaoSecurity Blog
N
News and Events Feed by Topic
L
LINUX DO - 最新话题
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
小众软件
小众软件
O
OpenAI News
H
Hackread – Cybersecurity News, Data Breaches, AI and More
S
Security Affairs
Recent Announcements
Recent Announcements
Attack and Defense Labs
Attack and Defense Labs
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
S
Secure Thoughts

博客园 - 秋枫

使用BizTalk Server常见问题处理 CodeProject.com上微软BizTalk平台技术文章集锦 BizTalk Server 2006中使用MQSeries适配器问题处理 基于.Net平台应用程序唯一运行实例实现 使用BizTalk Server的Sql适配器出现“新事务不能登记到指定的事务处理器中”异常的处理 谈基于.net平台windows开发中的模式窗体 Visual studio 2005下xml的xsl转换调试 小提国内一些提供RSS服务的网站生成Rss文件问题 Visual studio .net 的“隐蔽性”和容易“忽略”的功能 使用sqlcmd(osql) 实用工具列出本地网内的Sql Server 服务器 《敏捷注册表》1.0使用说明书 《敏捷注册表》1.0概述 使用从BindingManagerBase.PositionChanged 事件的注意点 使用Microsoft SQL Server 2000的XML查询 asp.net中显示DataGrid控件列序号的几种方法 使用.net framewrok 1.1版System.Windows.Forms.TreeView的一个问题 使用.net framewrok 1.1版注册表API的局限和解决 使用SaveFileDialog需要注意的情况 使用.net framework中常用类在2.0版中的新功能
BizTalk Server中简单xml架构使用举例
秋枫 · 2006-08-02 · via 博客园 - 秋枫

郑佐 2006-7-2

BizTalk项目中如果使用业务编排,一般会有一个接收报文和发送报文之间进行架构Mapping的过程。在BizTalk项目中添加xml架构的时候,如果xml报文带有namespace,可能会碰到架构无法验证问题,需要设置属性解决。本文针对初次开发BizTalk项目的开发者。
假设有一个输入订单报文,文件名为POin.xml,报文内容如下,

<Root xmlns="http://Zhengzuo.ContentTransmit.POin">
  <PONumber>1</PONumber>
  <Date>1999-05-31T13:20:00.000-05:00</Date>
</Root>

在项目中添加“新项”,选择“架构文件”添加架构POin.xsd文件。编辑生成的文件架构如下。
<?xml version="1.0" encoding="utf-16" ?>
<xs:schema xmlns:b="http://schemas.microsoft.com/BizTalk/2003" xmlns="http://Zhengzuo.ContentTransmit.POin" targetNamespace="http://Zhengzuo.ContentTransmit.POin" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Root">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="PONumber" type="xs:string" />
            <xs:element name="Date" type="xs:dateTime" />
        </xs:sequence>
    </xs:complexType>
</xs:element>
</xs:schema>

选中POin.xsd文件右键菜单“属性”,在“输入实例名文件”中指定POin.xml,通过右键菜单验证该文件实例,

出错提示:
错误1   元素 命名空间“http://Zhengzuo.ContentTransmit.POin”中的“Root”。 的子元素 命名空间“http://Zhengzuo.ContentTransmit.POin”中的“PONumber”。 无效。应为可能元素的列表: PONumber”。    C:\POin.xml

错误2   对架构 POin.xsd 验证实例文件失败,文件: <file:///C:\POin.xml>E:\vs2005projects\Test Projects\BizTalk Server Test\Zhengzuo.ContentTransmit\POin.xsd

如果把报文中的命名空间“xmlns="http://Zhengzuo.ContentTransmit.POin" ”去掉,验证通过。

分析原因:BizTalkSchema Editor中编辑Schema,默认情况下target namespace属性仅对Root record有效,而常规的XML文件的默认namespace对其所有的fieldrecord都有效,因此在使用对应Schema进行验证时失败。

解决途径:
SchemaElement FormDefault属性由Unqualified 默认值改为 Qualified,使target namespace属性对其所有record field都有效。 

通过以上设置,报文实例验证通过。
编写输出架构文件,文件名为POout.xsd,定义结构如下,

<?xml version="1.0" encoding="utf-16" ?>
<xs:schema xmlns:b="http://schemas.microsoft.com/BizTalk/2003" xmlns="http://Zhengzuo.ContentTransmit.POout" targetNamespace="http://Zhengzuo.ContentTransmit.POout" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Root">
    <xs:complexType>
        <xs:attribute name="PONumber" type="xs:string" />
        <xs:attribute name="Date" type="xs:dateTime" />
    </xs:complexType>
</xs:element>
</xs:schema>

建立架构映射,文件名为POMap.btm

image001.jpg

通过POMap.btm右键菜单“属性”设置“测试验证输入实例”和“测试验证输出实例”,右键点击“测试映射”,提示成功。

输出文件为POout.xml
<ns0:Root PONumber="1" Date="1999-05-31T13:20:00.000-05:00" xmlns:ns0="http://Zhengzuo.ContentTransmit.POout" />
如果设置POout.xsdAttribute FormDefault属性值为Qualified,输出内容变为,

<ns0:Root ns0:PONumber="1" ns0:Date="1999-05-31T13:20:00.000-05:00" xmlns:ns0="http://Zhengzuo.ContentTransmit.POout" />

去掉POout.xsdTarget Namespace属性的值,输出结果变为,
<Root PONumber="1" Date="1999-05-31T13:20:00.000-05:00" />

如果已经有报文样例存在,可以通过BizTalk自带的xml架构生成向导来生成架构文件,就可避免验证出现的问题。
操作步骤如下,
1
.在BizTalk项目中右键点击“添加”“添加生成的项”, 在窗口中选择“生成架构”,点击添加“按钮”。
2
.在Biztalk架构生成器窗口中的文档类型中选择“Well-Formed XML”,输入文件设置为“POin.xml”,点击“确定”完成。
生成的schema文件内容如下,

<?xml version="1.0" encoding="utf-16" ?>
<xs:schema xmlns:b="http://schemas.microsoft.com/BizTalk/2003" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://Zhengzuo.ContentTransmit.POin" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Root">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="PONumber" type="xs:unsignedByte" />
            <xs:element name="Date" type="xs:dateTime" />
        </xs:sequence>
    </xs:complexType>
</xs:element>
</xs:schema>

可见根节点属性中增加了,
attributeFormDefault="unqualified"
elementFormDefault="qualified"
值。