XML Schema中的命名空间前缀限定包括对元素(Element)或属性(Attribute)的限定,即常见的如 “<ns0:root>...</ns0:root>”之类的格式。一般情况下在BizTalk Schema编辑器中设置架构的属性

elementFormDefault /AttributeFormDefault

在该 schema 的目标命名空间中声明的元素的形式。该值必须是下列字符串之一: "qualified" 或 "unqualified"。 默认值为 "unqualified"。
"unqualified" 指示无须通过命名空间前缀限定目标命名空间的元素/属性。
"qualified" 指示必须通过命名空间前缀限定目标命名空间的元素属性。

另外可以直接在记录、元素、属性的属性窗口设置Form的值.

Form

如果该值是 “unqualified”,则无须通过命名空间前缀限定该元素。
如果该值是 “qualified”,则必须通过命名空间前缀限定该元素。

Schema中对于声明是可以继承的,但也是可以重写声明的。即如果在架构中声明了ElementFormDefault属性(全局声明)而子元素没有声
明Form(局部声明)的话则该元素则继承ElemnetFormDefault属性。如果子元素重新声明了Form属性则该声明在该元素上优先于全局的
声明。

通过以上的设置通常就可以实现对架构,元素或属性的命名空间前缀限定。但在有些情况下虽然设置了Element
FromDefault(Attribute一般为属性部声明)的值为UnQualified。但是使用生成实例生成的XML元素或记录还是会带命名空间
前缀(如下XML),这种情况一般发生在使用Schema生成向导生成的Schema,从XDR(BizTalk
2002以前使用的Schema格式)转到XSD(BizTalk 2004以后使用的Schema 格式)。


<ns0:Root DATE="DATE_0" xmlns:ns0="http://schemasample.test"> 

<ns0:Record> 

<ns0:SubRecord NUM="NUM_0"> 

<ns0:TestField>TestField_0</ns0:TestField> 

</ns0:SubRecord> 

</ns0:Record> 

</ns0:Root> 

经过测试发现Schema的设置不能应用到子记录或元素的原因是记录的类型为引用类型,并且引用了全局的元素。


<?xml version="1.0" encoding="utf-16"?> 

<xs:schema xmlns:b="http://schemas.microsoft.com/BizTalk/2003" xmlns="http://orchtest.schema1/" elementFormDefault="unqualified" targetNamespace="http://orchtest.schema1/" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

<xs:annotation> 

<xs:appinfo> 

<b:schemaInfo standard="XML" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" root_reference="Root" displayroot_reference="Root" /> 

</xs:appinfo> 

</xs:annotation> 

<xs:element name="Root"> 

<xs:complexType> 

<xs:sequence> 

<xs:element name="Record1"> 

<xs:complexType /> 

</xs:element> 

<xs:element name="Field1" type="xs:string" /> 

<xs:element name="Field2" type="xs:string" /> 

<xs:element name="Record2" type="Record2" /> 

<xs:element minOccurs="1" maxOccurs="1" ref="ExtRecord" /> 

</xs:sequence> 

</xs:complexType> 

</xs:element> 

<xs:element name="ExtRecord"> 

<xs:complexType> 

<xs:choice minOccurs="0"> 

<xs:element name="TestField"> 

<xs:simpleType> 

<xs:restriction base="xs:string" /> 

</xs:simpleType> 

</xs:element> 

</xs:choice> 

<xs:attribute name="NUM" type="xs:string" /> 

</xs:complexType> 

</xs:element> 

<xs:complexType name="Record2"> 

<xs:annotation> 
<xs:appinfo> 
<b:fieldInfo xmlns:b="http://schemas.microsoft.com/BizTalk/2003" />
</xs:appinfo> 
</xs:annotation> 
<xs:attribute name="Field" type="xs:string" /> 
</xs:complexType> 

请注意上图的几个背景部分:

绿色部分 为在架构中声明全局属性即元素不需要命名空间前缀限定
灰色部分 为在Schema编辑器中自定义的Complex Type.
黄色部分 为转换向导生成的类型
粉色部分 为在Root节点引用ExtRecord元素的类型。
特别注意红色部分,如果没有加上红色部分的声明的话在BizTalk编辑器会显示所有元素。即会出现两个ExtRecord节点。

使用Schema生成实例生成的XML数据如下:


<ns0:Root xmlns:ns0="http://OrchTest.Schema1"> 

<Record1 /> 

<Field1>Field1_0</Field1> 

<Field2>Field2_0</Field2> 

<Record2 Field="Field_0" /> 

<ns0:ExtRecord NUM="NUM_0"> 

<TestField>TestField_0</TestField> 

</ns0:ExtRecord> 

</ns0:Root> 

我们再来改变一下Schema(注意,此修改是在XML编辑器进行,而不是在BizTalk的Schema编辑器。右击Schema文件,选择打开方式,在对话框中选择XML编辑器)

更改之后的XML如下:


<?xml version="1.0" encoding="utf-16"?> 

<xs:schema xmlns:b="http://schemas.microsoft.com/BizTalk/2003" xmlns="http://orchtest.schema1/" elementFormDefault="unqualified" targetNamespace="http://orchtest.schema1/" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

<xs:annotation> 

<xs:appinfo> 

<b:schemaInfo standard="XML" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" root_reference="Root" /> 

</xs:appinfo> 

</xs:annotation> 

<xs:element name="Root"> 

<xs:complexType> 

<xs:sequence> 

<xs:element name="Record1"> 

<xs:complexType /> 

</xs:element> 

<xs:element name="Field1" type="xs:string" /> 

<xs:element name="Field2" type="xs:string" /> 

<xs:element name="Record2" type="Record2" /> 

<xs:element name="ExtRecord"> 

<xs:complexType> 

<xs:choice minOccurs="0"> 

<xs:element name="TestField"> 

<xs:simpleType> 

<xs:restriction base="xs:string" /> 

</xs:simpleType> 

</xs:element> 

</xs:choice> 

<xs:attribute name="NUM" type="xs:string" /> 

</xs:complexType> 

</xs:element> 

</xs:sequence> 

</xs:complexType> 

</xs:element> 

<xs:complexType name="Record2"> 

<xs:annotation> 

<xs:appinfo> 

<b:fieldInfo xmlns:b="http://schemas.microsoft.com/BizTalk/2003" />

</xs:appinfo> 
</xs:annotation> 
<xs:attribute name="Field" type="xs:string" /> 
</xs:complexType> 
</xs:schema>

保存Schema。生成实例如下:


<ns0:Root xmlns:ns0="http://OrchTest.Schema1"> 

<Record1 /> 

<Field1>Field1_0</Field1> 

<Field2>Field2_0</Field2> 

<Record2 Field="Field_0" /> 

<ExtRecord NUM="NUM_0"> 

<TestField>TestField_0</TestField> 

</ExtRecord> 

</ns0:Root> 

经查证。XML Schema中的全局声明必须是唯一的,而全局模式中的每一个声明都自动进入目标名称空间。因此ElementFormDefault的设置不能作用于该元素。

BizTalk开发系列(十五) Schema设计之Qualified 与Unqualified的更多相关文章

  1. BizTalk开发系列(十二) Schema设计之Group与Order

    开发BizTalk项目的时候会先约定各系统之间往来的消息格式. 由于BizTalk内部唯一使用XML文档.因此消息的格式为XML Schema(XML Schema 用于描述 XML 文档的结构).虽 ...

  2. BizTalk开发系列(十八) 使用信封拆分数据库消息

    之前写了一篇的<BizTalk开发系列(十七) 信封架构(Envelop)> 是关于信封架构及其拆装原理的,都是理论性的内容.信封在BizTalk开发过程中最常用的应该是在读取SQL Se ...

  3. 【Qt编程】基于Qt的词典开发系列<十五>html特殊字符及正则表达式

    1.html特殊字符的显示 我们知道html语言和C语言一样也有一些特殊字符,它们是不能正常显示的,必须经过转义,在网上可以查到如何显示这些字符,如下图所示: 上图给了最常用的特殊字符的显示,下面我们 ...

  4. BizTalk开发系列(十九) BizTalk命名规范

    目前BizTalk项目的开发人员比较少,但是在开发过程中还是需要命名规范的约束.根据以往BizTalk项目的经验,整理了BizTalk命 名规范.包括:BizTalk Application, Sch ...

  5. BizTalk开发系列(十六) XML命名空间

    BizTalk开发过程中如果有对XML进行开发操作,比如在自定义代码里操作XML消息或者在Mapping的时候使用Xpath对XML进行操 作.则有机会遇到XML命名空间的问题.常见的是使用Xpath ...

  6. BizTalk开发系列(十四) XML空白字符(WhiteSpace)

    最近在做一个BizTalk项目,对XML文件的处理很复杂.本来是想找有没有方法可以一次性去除XML文件中节点和属性的值的空格.但是找了很久没有看到相关的方法.如果有知道该方法的麻烦跟我讲一下:cbcy ...

  7. BizTalk开发系列(十) ESB Guidance安装笔记

    ESB指导工具包(ESB Guidance)是一个运行于BizTalk Server 2006 R2之上的一个框架.详细信息访问ESB指导工具包社区网站 .源码下载 ESB Guidance的安装过程 ...

  8. arcgis api for js入门开发系列十五台风轨迹

    上一篇实现了demo的地图最近设施点路径分析,本篇新增台风轨迹,截图如下: 下面简单介绍相关知识点: 警戒线 警戒线坐标集合: var lineArr24=[[127,34],[127,21],[11 ...

  9. arcgis api 3.x for js 入门开发系列十五台风轨迹

    前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...

随机推荐

  1. 微软开放WP开发者回复用户应用评论功能

    1   4月18日,据The NextWeb网站报道,微软今天公布了一项新的开发者试点项目:回复Windows Phone应用评论.该公司表示,它们将在本周推出这项功能,不过目前仅对部分开发者开放. ...

  2. JSP 中 pageEncoding 和 charset 区别以及中文乱码解决方案

    一.JSP 中 pageEndcodeing 和 charset 的作用 <%@ page contentType="text/html;charset=GB2312"%&g ...

  3. apr 内存管理

    //============================================================================ // Name : mytest.cpp ...

  4. UVa 10806 & 费用流+意识流...

    题意: 一张无向图,求两条没有重复的从S到T的路径. SOL: 网络流为什么屌呢..因为网络流的容量,流量,费用能对许许多多的问题进行相应的转化,然后它就非常的屌. 对于这道题呢,不是要没有重复吗?不 ...

  5. 【POJ】2296 Map Labeler

    http://poj.org/problem?id=2296 题意:题意:给你n个点,每个点上都放一个正方形,点只能在正方形的上边或下边的中点上,所有正方形大小一样,不能有面积重叠,求最大的正方形.( ...

  6. JS中关于比较运算符的问题(a===b)

    之前也会碰到a===b和a==b的表达式,但都没有仔细的看资料,今天看canvas有关的书中提到了,就mark一下: a == b    说明:a与b相等: a ===b  说明:a与b相同,并且类型 ...

  7. TC SRM 593 DIV1 250

    我只能说的亏没做,要不就挂0了.. 本来想四色定理,肯定4就可以的...然后准备爆,发现3的时候不好爆,又想了老一会,嗯,数据范围不小,应该不是暴力,直接找规律,貌似最大就是3,有一个3连块,输出3, ...

  8. Selenium_获取相对坐标

    <html> <head> <title>位置</title> <style> .test { background: url(" ...

  9. 20145330第十周《Java学习笔记》

    20145330第十周<Java学习笔记> 网络编程 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就是把数据发送到指定的位置,或者接收到指定的数据,这个就 ...

  10. Linux 下安装mysql 链接库

    1.mysql 客户端 开发 链接库 1.1)CentOS yum install mysql-devel