一个xsd文件格式
<xs:schema elementFormDefault="qualified"
xmlns="cbp:camt.029:std:urn:swift:saa:xsd:saa.2.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:ct="cbp:std:urn:iso:std:iso:20022:tech:xsd:camt.029.001.09"
xmlns:hd="cbp:camt.029:std:urn:iso:std:iso:20022:tech:xsd:head.001.001.02"
targetNamespace="cbp:camt.029:std:urn:swift:saa:xsd:saa.2.0" version="2.0.11">
<xs:import namespace="cbp:std:urn:iso:std:iso:20022:tech:xsd:camt.029.001.09"
schemaLocation="ResolutionOfInvestigation_CBPR.xsd"/>
<xs:import namespace="cbp:camt.029:std:urn:iso:std:iso:20022:tech:xsd:head.001.001.02"
schemaLocation="bah_CBPRPlus_ResolutionOfInvestigation.xsd"/>
<xs:complexType name="BodyMsg">
<xs:sequence>
<xs:element name="AppHdr" type="hd:BusinessApplicationHeaderV02"/>
<xs:element name="Document" type="ct:Document"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
xs : 命名空间
schema:根节点名
elementFormDefault:值可设置为qualified或unqualified
xmlns:XML Namespaces的缩写,引入一个约束,值是一个xsd文件的namespace
targetNamespace:指定schema文件的namespace的值
version:版本号
xmlns
xmlns="cbp:camt.029:std:urn:swift:saa:xsd:saa.2.0" 表示当前xsd文件的默认命名空间。
xmlns:xs="http://www.w3.org/2001/XMLSchema" 规定了所有以 xs: 标记的元素,必须是http://www.w3.org/2001/XMLSchema中定义的元素。
同理,xmlns:ct="cbp:std:urn:iso:std:iso:20022:tech:xsd:camt.029.001.09" 表示 ct:标记的元素必须是这个命名空间下的定义的元素。hd同理。
不同的是,xs使用url来找到相应的xsd文件,而ct和hd是用<import>元素来找到本地的xsd文件,schemaLocation属性就是xsd文件的物理地址,这里查找同目录。
所以<xs:element name="Document" type="ct:Document"/>就是引入ResolutionOfInvestigation_CBPR.xsd文件中的Document元素。
elementFormDefault
在xml中,所有引用xsd的全局的元素都必须加上命名空间的前缀,也就是 xs:
对于局部元素而言:
qualified 时必须添加命名空间的前缀。
unqualified 时不必添加前缀。
attributeFormDefault
qualified 表示来自目标命名空间下的属性必须要用命名空间前缀修饰
unqualified 不需要
import和include
<include id=”ID” schemaLocation=”filename”/>
<import id=”ID” namespace=”namespace” schemaLocation=”filename”/>
都是引入外部的一个明确的模式,不同的是import能引入不同命名空间的xsd文件,可以自己指定namespace,而include不行。
complexType的一些属性
<xs:complexType name="SwAny" mixed="true">
</xs:complexType>
mixed="true"
表示混合内容,即与子元素混合的字符数据,比如可能出现如下的数据结构
<user>
xxx<name>李四</name>
</user>
ANY元素
<any> 元素利用模式未指定的元素扩展 XML 文档。<any/> 标记允许复杂类型为其设置一个全局元素。<any> 元素生成可扩展文档并且允许文档包含主 XML 模式中未声明的其他元素。
processContents="skip":XML 处理器不尝试验证来自指定命名空间的所有元素
<xs:complexType name="SwAny" mixed="true">
<xs:sequence>
<xs:any namespace="##any" processContents="skip" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>