Xml Schema的用途

1. 定义一个Xml文档中都有什么元素

2. 定义一个Xml文档中都会有什么属性

3. 定义某个节点的都有什么样的子节点,可以有多少个子节点,子节点出现的顺序

4. 定义元素或者属性的数据类型

5. 定义元素或者属性的默认值或者固定值

Xml Schema的根元素:

<?xml version="1.0"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 表示数据类型等定义来自w3

targetNamespace="http://www.w3schools.com" 表示文档中要定义的元素来自什么命名空间

xmlns="http://www.w3schools.com"表示此文档的默认命名空间是什么

elementFormDefault="qualified"> 表示要求xml文档的每一个元素都要有命名空间指定

……定义主体部分……

</xs:schema>

如何定义一个简单元素

<xs:element  此处表示要定义一个元素

name=”color” 表示要定义元素的名称

type=”xs:string” 表示要定义元素的数据类型

default=”red” 表示定义元素的默认值

fixed=”red”/> 表示要定义元素的固定值,此元素只可以取“red”值

以上定义了一个简单元素,元素实例:<color>red</color>

如何定义一个属性

<xs:attribute

name=”birthday” 表示要定义属性的名字

type=”xs:date” 表示要定义属性的数据类型

default=”2001-01-11” 表示要定义属性的默认值

fixed=”2001-01-11” 表示要定义属性的固定值

use=”required”/> 表示此属性是否是必须指定的,即如果不指定就不符合Schema,默认没有use=”required”属性表示属性可有可无

如何定义元素或者属性值的限制

1.最大值最小值限制

<xs:element name="age">

<xs:simpleType>

<xs:restriction base="xs:integer">

<xs:minInclusive value="0"/> 大于等于0,<xs: minExclusive>表示最小值但是不包括指定值

<xs:maxInclusive value="120"/> 小于等于120,<xs: maxExclusive>

</xs:restriction>

</xs:simpleType>

</xs:element>

2.枚举限制,指只能在指定的几个值中取值

<xs:element name="car" type="carType"/>

<xs:simpleType name="carType">

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

<xs:enumeration value="Audi"/>

<xs:enumeration value="Golf"/>

<xs:enumeration value="BMW"/>

</xs:restriction>

</xs:simpleType>

3.模式(pattern)限制 ,指字符串的格式必须满足制定的匹配模式

例子

说明

<xs:element name="letter">
<xs:simpleType>
 <xs:restriction base="xs:string">
    <xs:pattern value="[a-z]"/>
 </xs:restriction>
</xs:simpleType>

</xs:element>

表示只能在小写字母中取一个值

<xs:element name="initials">
<xs:simpleType>
 <xs:restriction base="xs:string">
    <xs:pattern value="[A-Z][A-Z][A-Z]"/>
 </xs:restriction>
</xs:simpleType>
</xs:element> 

表示必须是三个大写字母

<xs:element name="initials">
<xs:simpleType>
 <xs:restriction base="xs:string">
    <xs:pattern value="[a-zA-Z][a-zA-Z][a-zA-Z]"/>
 </xs:restriction>
</xs:simpleType>
</xs:element> 

表示必须是三个字母,可以是大写或小写的

<xs:element name="choice">
<xs:simpleType>
 <xs:restriction base="xs:string">
    <xs:pattern value="[xyz]"/>
 </xs:restriction>
</xs:simpleType>

</xs:element>

表示必须是xyz中的一个

<xs:element name="prodid">
<xs:simpleType>
 <xs:restriction base="xs:integer">
    <xs:pattern value="[0-9][0-9][0-9][0-9][0-9]"/>
 </xs:restriction>
</xs:simpleType>
</xs:element> 

表示数字的范围是0-99999

<xs:element name="letter">
<xs:simpleType>
 <xs:restriction base="xs:string">
    <xs:pattern value="([a-z])*"/>
 </xs:restriction>
</xs:simpleType>
</xs:element> 

表示必须是0或者多个小写字符组成的序列

<xs:element name="letter">
<xs:simpleType>
 <xs:restriction base="xs:string">
    <xs:pattern value="([a-z][A-Z])+"/>
 </xs:restriction>
</xs:simpleType>
</xs:element> 

表示必须是多个字母。

<xs:element name="gender">
<xs:simpleType>
 <xs:restriction base="xs:string">
    <xs:pattern value="male|female"/>
 </xs:restriction>
</xs:simpleType>
</xs:element> 

表示是male或者female中的一个

<xs:element name="password">
<xs:simpleType>
 <xs:restriction base="xs:string">
    <xs:pattern value="[a-zA-Z0-9]{8}"/>
 </xs:restriction>
</xs:simpleType>
</xs:element> 

表示必须是8个字母数字字符

4.字符串长度的限制

<xs:element name="password">

<xs:simpleType>

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

<xs:length value="8"/>

</xs:restriction>

</xs:simpleType>

</xs:element>

长度必须是8。

<xs:element name="password">

<xs:simpleType>

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

<xs:minLength value="5"/>

<xs:maxLength value="8"/>

</xs:restriction>

</xs:simpleType>

</xs:element>

表示长度在5-8之间

6. 对于空白字符的限制

示例

说明

<xs:element name="address">
<xs:simpleType>
 <xs:restriction base="xs:string">
    <xs:whiteSpace value="preserve"/>
 </xs:restriction>
</xs:simpleType>

</xs:element>

保留原样,表示xml处理器不会移除或者替换任何空白字符

<xs:element name="address">
<xs:simpleType>
 <xs:restriction base="xs:string">
    <xs:whiteSpace value="replace"/>
 </xs:restriction>
</xs:simpleType>
</xs:element> 

指回车,换行,Tab都会被替换成空格处理

<xs:element name="address">
<xs:simpleType>
 <xs:restriction base="xs:string">
    <xs:whiteSpace value="collapse"/>
 </xs:restriction>
</xs:simpleType>
</xs:element> 

去掉多于一个空格,和html中处理方式相同

如何定义复杂类型

复杂类型是指定义元素中包含属性或者子元素的类型

1. 定义只包含子元素的复杂类型

<xs:element name="person">

<xs:complexType>

<xs:sequence>

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

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

</xs:sequence>

</xs:complexType>

</xs:element>

2. 定义只包含属性的复杂类型

<xs:element name="product" type="prodtype"/>

<xs:complexType name="prodtype">

<xs:attribute name="prodid" type="xs:positiveInteger"/>

</xs:complexType>

3. 定义只包含内容的复杂类型

<xs:element name="shoesize" type="shoetype"/>

<xs:complexType name="shoetype">

<xs:simpleContent>

<xs:extension base="xs:integer">

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

</xs:extension>

</xs:simpleContent>

</xs:complexType>

4. 定义包含内容和子元素混合的复杂类型

<xs:element name="letter">

<xs:complexType mixed="true">

<xs:sequence>

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

<xs:element name="orderid" type="xs:positiveInteger"/>

<xs:element name="shipdate" type="xs:date"/>

</xs:sequence>

</xs:complexType>

</xs:element>

以上定义对应的Xml

<letter>

Dear Mr.<name>John Smith</name>.

Your order <orderid>1032</orderid>

will be shipped on <shipdate>2001-07-13</shipdate>.

</letter>

5. 定义包含属性和子元素的复杂类型

使用指示器

在Xsd中的指示器包括

1. 顺序指示器

1) All

指示子元素可以以任何顺序出现,并且每一个元素都必须出现一次

<xs:element name="person">

<xs:complexType>

<xs:all>

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

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

</xs:all>

</xs:complexType>

</xs:element>

2) Choice

指示子元素中可以出现一个或者另一个

<xs:element name="person">

<xs:complexType>

<xs:choice>

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

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

</xs:choice>

</xs:complexType>

</xs:element>

3) Sequence

指示子元素必须按照顺序出现

<xs:element name="person">

<xs:complexType>

<xs:sequence>

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

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

</xs:sequence>

</xs:complexType>

</xs:element>

2. 出现次数指示器minOccurs,maxOccurs

<xs:element name="person">

<xs:complexType>

<xs:sequence>

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

<xs:element name="child_name" type="xs:string"

maxOccurs="10" minOccurs="0"/>

</xs:sequence>

</xs:complexType>

</xs:element>

3. 组指示器(group Indicators)

用来定义相关的一组元素

<xs:group name="persongroup">

<xs:sequence>

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

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

<xs:element name="birthday" type="xs:date"/>

</xs:sequence>

</xs:group>

<xs:element name="person" type="personinfo"/>

<xs:complexType name="personinfo">

<xs:sequence>

<xs:group ref="persongroup"/>

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

</xs:sequence>

</xs:complexType>

用来定义一组相关的属性

<xs:attributeGroup name="personattrgroup">

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

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

<xs:attribute name="birthday" type="xs:date"/>

</xs:attributeGroup>

<xs:element name="person">

<xs:complexType>

<xs:attributeGroup ref="personattrgroup"/>

</xs:complexType>

</xs:element>

Any关键字

表示可以有任意元素

<xs:element name="person">

<xs:complexType>

<xs:sequence>

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

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

<xs:any minOccurs="0"/>

</xs:sequence>

</xs:complexType>

</xs:element>

anyAttribute关键字

<xs:element name="person">

<xs:complexType>

<xs:sequence>

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

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

</xs:sequence>

<xs:anyAttribute/>

</xs:complexType>

</xs:element>

substitutionGroup关键字

表示某一个元素和另一个替代元素定义相同

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

<xs:element name="navn" substitutionGroup="name"/>

<xs:complexType name="custinfo">

<xs:sequence>

<xs:element ref="name"/>

</xs:sequence>

</xs:complexType><xs:element name="customer" type="custinfo"/>

<xs:element name="kunde" substitutionGroup="customer"/>

文中的例子都来自w3school.

C#操作Xml:如何定义Xsd文件的更多相关文章

  1. Tomcat web.xml中定义了文件扩展名到MIME类型的对应关系

    Tomcat在返回静态资源时,会根据资源文件的扩展名产生对应的content-type头(也即MIME类型)添加到response header中. 在Tomcat的web.xml规定了扩展名及相应M ...

  2. XML概念定义以及如何定义xml文件编写约束条件java解析xml DTD XML Schema JAXP java xml解析 dom4j 解析 xpath dom sax

    本文主要涉及:xml概念描述,xml的约束文件,dtd,xsd文件的定义使用,如何在xml中引用xsd文件,如何使用java解析xml,解析xml方式dom sax,dom4j解析xml文件 XML来 ...

  3. 在XML里的XSD和DTD以及standalone的使用2----具体使用详解

    如何定义XSD并在XML中使用XSD 同时XSD可以对XML中的格式进行约束,当约束失败时给出提示. 下面以下使用VS2010为平台进行演示. 1.新建一个项目,然后在项目中添加xml架构文件(.xs ...

  4. 用dom4j操作xml文件

    XML的全称是eXtensible Markup Language,即“可扩展标记语言”.XML文件的作用主要是数据存储,文件配置,数据传输. html与xml的区别是:①html语法松散,xml语法 ...

  5. XSD(XML Schema Definition)用法实例介绍以及C#使用xsd文件验证XML格式

    XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD),作用是定义 XML 文档的合法构建模块,类似 DTD,但更加强大. 作用有: ①定义 ...

  6. 7.数据本地化CCString,CCArray,CCDictionary,tinyxml2,写入UserDefault.xml文件,操作xml,解析xml

     数据本地化 A CCUserDefault 系统会在默认路径cocos2d-x-2.2.3\projects\Hello\proj.win32\Debug.win32下生成一个名为UserDef ...

  7. 使用visual studio把xsd文件转成xml格式文件

    使用visual studio把xsd文件转成xml格式文件 最近一段时间都在做Amazon的mws api的对接工作,mws api的描述文件都是使用的xsd文件来进行的,之前确实也没有接触过,也花 ...

  8. WebAPI调用笔记 ASP.NET CORE 学习之自定义异常处理 MySQL数据库查询优化建议 .NET操作XML文件之泛型集合的序列化与反序列化 Asp.Net Core 轻松学-多线程之Task快速上手 Asp.Net Core 轻松学-多线程之Task(补充)

    WebAPI调用笔记   前言 即时通信项目中初次调用OA接口遇到了一些问题,因为本人从业后几乎一直做CS端项目,一个简单的WebAPI调用居然浪费了不少时间,特此记录. 接口描述 首先说明一下,基于 ...

  9. .net操作xml文件(新增.修改,删除,读取) 转

    今天有个需求需要操作xml节点.突然见遗忘了许多.上网看了些资料.才整出来.脑袋真不够用.在这里把我找到的资料共享一下.方便以后使用.本文属于网摘/ 1 一.简单介绍2 using System.Xm ...

随机推荐

  1. BZOJ 2007 NOI2010 海拔高度 最小减产计划

    标题效果:YT城市是一个精心规划的城市.这个城市是东西向和南北向干道成n×n地区性.简单.可以YT作为一个城市广场,每个区域也可被视为一个正方形.因此,.YT市中含有(n+1)×(n+1)交叉口和2n ...

  2. TabHost+RadioGroup搭建基础布局

    xml的形势如下: <tabhost> <linearlayout vertival> <framlayout weight=1/> <tabwidget g ...

  3. leetcode第一刷_Maximum Depth of Binary Tree

    这道题预计是ac率最高的一道了.你当然能够用层序遍历,我佩服你的耐心和勇气.由于看到别人的三行代码,会不会流眼泪呢.. class Solution { public: int maxDepth(Tr ...

  4. 【C语言探索之旅】 第一部分第十课:练习题+习作

    内容简介 1.课程大纲 2.第一部分第十课: 练习题+习作 3.第二部分第一课预告: 模块化编程 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三 ...

  5. Alamofire网络库进阶教程

    本章节由CocoaChina翻译组成员星夜暮晨(博客)翻译自raywenderlich:Intermediate Alamofire Tutorial,敬请勘误. 欢迎回到我们的 Alamofire ...

  6. 【Android基础】单元测试的配置

    1.在AndroidManifest清单文件中进行配置 <application android:allowBackup="true" android:debuggable= ...

  7. scrot-0.8

    相关库下载地址:         www.sunfreeware.com/programlistsparc10.html tar -zxvf scrot-0.8.tar.gzcd scrot-0.8. ...

  8. Java程序猿JavaScript学习笔记(4——关闭/getter/setter)

    计划和完成这个例子中,音符的顺序如下: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScr ...

  9. C/C++综合測试题(三)

    又刷了一套题 这些题都是百度.阿里巴巴.腾讯.网易.新浪等公司的面试原题,有一定的难度.只是确实相当有水平,能够通过做题来查漏补缺. 1.补充以下函数代码: 假设两段内存重叠,用memcpy函数可能会 ...

  10. 为什么在Python3.4.1里输入print 10000L或10000L失败

    打开Python的命令行交互窗体,而且在里面进行以下的输入: Python 3.4.1 (v3.4.1:c0e311e010fc, May 18 2014, 10:38:22) [MSC v.1600 ...