XML学习之Schema学习案例

2023-10-28

一、Schema 约束xml文件

 1、xml样式

<?xml version="1.0" encoding="utf-8"?>
<orders> <!-- 所有订单信息 -->
	<order> <!-- 订单,至少包含1个订单 -->
		<orderDate>2018-5-20</orderDate><!--orderDate为日期型 -->
		<shipTo country="CN"><!-- 配送信息,country属性必须出现 -->
			<name>张三峰</name> <!-- 收件人,长度小于50 -->
			<street>市中区滨河路778号5+3大酒店</street> <!-- 县/区及街道地址 -->
			<city>乐山市</city> <!-- 市/区,长度小于50 -->
			<state>四川省</state> <!-- 省/自治区/直辖市,长度小于50 -->
			<phone>13999999999</phone> <!-- 联系电话,要求必须是1开头,后面第2位数字3-9,再后面是9个数字 -->
		</shipTo>
		<items> <!-- 商品列表,item应至少出现1次 -->
			<item partNum="872-AA"> <!-- 商品编号属性,必须有 -->
				<productName>香辣鸡翅</productName><!-- 商品名称,长度小于50 -->
				<quantity>1</quantity> <!-- 购买数量,至少是1 -->
				<price>18.95</price> <!-- 单价为浮点数,大于0.0 -->
				<shipDate>2018-05-21</shipDate> <!-- 配送日期 -->
			</item>
			<item partNum="926-AA">
				<productName>烧烤五花肉</productName>
				<quantity>20</quantity>
				<price>39.98</price>
				<shipDate>2018-05-20</shipDate>
			</item>
		</items>
	</order>
</orders>

2、xsd命名空间

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" >

3、约束复杂类型数据

<xsd:element name="orders">
	<xsd:complexType>
		<xsd:sequence>
			<xsd:element ref="order" minOccurs="1" maxOccurs="unbounded" />
		</xsd:sequence>
	</xsd:complexType>	
</xsd:element>
<xsd:element name="order"> //对order定义
	<xsd:complexType>
	<xsd:sequence>
		<xsd:element ref="orderDate" /> 
		<xsd:element ref="shipTo" /> 
		<xsd:element ref="items"/>
	</xsd:sequence>
	</xsd:complexType>
</xsd:element>
<xsd:element name="orderDate" type="xsd:string"/>  //对orderDate 定义
<xsd:element name="shipTo" >   //对shipto定义
	<xsd:complexType>
	<xsd:sequence>
		<xsd:element ref="name"/>
		<xsd:element ref="street"/>
		<xsd:element ref="city"/>
		<xsd:element ref="state"/>
		<xsd:element ref="phone"/>
	</xsd:sequence>
	<xsd:attribute name="country" use="required"/>  // shioto中的country属性
	</xsd:complexType>
</xsd:element>
<xsd:element name="name" type="define_str"/>  //下面为自定义数据类型约束
<xsd:element name="street" type="xsd:string"/>
<xsd:element name="city" type="define_str"/>
<xsd:element name="state" type="define_str"/>
<xsd:element name="phone" type="define_phone"/>
<xsd:simpleType name="define_str">    
<xsd:restriction base="xsd:string">
<xsd:maxLength value="50"></xsd:maxLength>   //最大长度不超过50
</xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="define_phone">
<xsd:restriction base="xsd:integer">
	<xsd:pattern value="[1][3-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]"></xsd:pattern>  //第一位只能取1第二位在3到9中任取,后面跟着9个数从0到9中任取
</xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="define_price">
<xsd:restriction base="xsd:float">
	<xsd:minExclusive value="0.0"></xsd:minExclusive>  //浮点数,最小值大于0.0
</xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="define_quantity">
<xsd:restriction base="xsd:integer">
	<xsd:minInclusive value="1"></xsd:minInclusive>  //正整数大于等于1
</xsd:restriction>
</xsd:simpleType>

2、完整代码

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" >
<xsd:element name="orders">
	<xsd:complexType>
		<xsd:sequence>
			<xsd:element ref="order" minOccurs="1" maxOccurs="unbounded" />
		</xsd:sequence>
	</xsd:complexType>	
</xsd:element>
<xsd:element name="order">
	<xsd:complexType>
	<xsd:sequence>
		<xsd:element ref="orderDate" /> 
		<xsd:element ref="shipTo" /> 
		<xsd:element ref="items"/>
	</xsd:sequence>
	</xsd:complexType>
</xsd:element>
<xsd:element name="orderDate" type="xsd:string"/>
<xsd:element name="shipTo" >
	<xsd:complexType>
	<xsd:sequence>
		<xsd:element ref="name"/>
		<xsd:element ref="street"/>
		<xsd:element ref="city"/>
		<xsd:element ref="state"/>
		<xsd:element ref="phone"/>
	</xsd:sequence>
	<xsd:attribute name="country" use="required"/>
	</xsd:complexType>
</xsd:element>
<xsd:element name="name" type="define_str"/>
<xsd:element name="street" type="xsd:string"/>
<xsd:element name="city" type="define_str"/>
<xsd:element name="state" type="define_str"/>
<xsd:element name="phone" type="define_phone"/>

<xsd:element name="items">
	<xsd:complexType>
	<xsd:sequence>
		<xsd:element ref="item" minOccurs="1" maxOccurs="unbounded"/>
	</xsd:sequence>
	</xsd:complexType>
</xsd:element>
<xsd:element name="item">
	<xsd:complexType>
	<xsd:sequence>
		<xsd:element ref="productName"/>
		<xsd:element ref="quantity" minOccurs="1"/>
		<xsd:element ref="price"/>
		<xsd:element ref="shipDate"/>
	</xsd:sequence>
	<xsd:attribute name="partNum" use="required"/>
	</xsd:complexType>
</xsd:element>
<xsd:element name="productName" type="define_str"/>
<xsd:element name="quantity" type="define_quantity" />
<xsd:element name="price" type="define_price" />
<xsd:element name="shipDate" type="xsd:date" />

<xsd:simpleType name="define_str">
<xsd:restriction base="xsd:string">
<xsd:maxLength value="50"></xsd:maxLength>
</xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="define_phone">
<xsd:restriction base="xsd:integer">
	<xsd:pattern value="[1][3-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]"></xsd:pattern>
</xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="define_price">
<xsd:restriction base="xsd:float">
	<xsd:minExclusive value="0.0"></xsd:minExclusive>
</xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="define_quantity">
<xsd:restriction base="xsd:integer">
	<xsd:minInclusive value="1"></xsd:minInclusive>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>		

二、

对值的限定

下面的例子定义了带有一个限定且名为 "age" 的元素。age 的值不能低于 0 或者高于 120:

<xs:element name="age">

<xs:simpleType>
  <xs:restriction base="xs:integer">
    <xs:minInclusive value="0"/>
    <xs:maxInclusive value="120"/>
  </xs:restriction>
</xs:simpleType>

</xs:element> 

对一组值的限定

如需把 XML 元素的内容限制为一组可接受的值,我们要使用枚举约束(enumeration constraint)。

下面的例子定义了带有一个限定的名为 "car" 的元素。可接受的值只有:Audi, Golf, BMW:

 
<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>

注释:在这种情况下,类型 "carType" 可被其他元素使用,因为它不是 "car" 元素的组成部分。

对一系列值的限定

如需把 XML 元素的内容限制定义为一系列可使用的数字或字母,我们要使用模式约束(pattern constraint)。

下面的例子定义了带有一个限定的名为 "letter" 的元素。可接受的值只有小写字母 a - z 其中的一个:

<xs:element name="letter">

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

</xs:element> 

下一个例子也定义了带有一个限定的名为 "initials" 的元素。可接受的值是大写或小写字母 a - z 其中的三个:

<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> 

下一个例子定义了带有一个限定的名为 "choice 的元素。可接受的值是字母 x, y 或 z 中的一个:

<xs:element name="choice">

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

</xs:element> 

下一个例子定义了带有一个限定的名为 "prodid" 的元素。可接受的值是五个阿拉伯数字的一个序列,且每个数字的范围是 0-9:

<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> 

下面的例子定义了带有一个限定的名为 "gender" 的元素。可接受的值是 male 或者 female:

<xs:element name="gender">

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

</xs:element> 

下面的例子定义了带有一个限定的名为 "password" 的元素。可接受的值是由 8 个字符组成的一行字符,这些字符必须是大写或小写字母 a - z 亦或数字 0 - 9:

<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> 

对空白字符的限定

如需规定对空白字符(whitespace characters)的处理方式,我们需要使用 whiteSpace 限定。

下面的例子定义了带有一个限定的名为 "address" 的元素。这个 whiteSpace 限定被设置为 "preserve",这意味着 XML 处理器不会移除任何空白字符:

<xs:element name="address">

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

</xs:element> 

这个例子也定义了带有一个限定的名为 "address" 的元素。这个 whiteSpace 限定被设置为 "replace",这意味着 XML 处理器将移除所有空白字符(换行、回车、空格以及制表符):

<xs:element name="address">

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

</xs:element> 

对长度的限定

如需限制元素中值的长度,我们需要使用 length、maxLength 以及 minLength 限定。

本例定义了带有一个限定且名为 "password" 的元素。其值必须精确到 8 个字符:

<xs:element name="password">

<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:length value="8"/>
  </xs:restriction>
</xs:simpleType>

</xs:element> 

这个例子也定义了带有一个限定的名为 "password" 的元素。其值最小为 5 个字符,最大为 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> 



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

XML学习之Schema学习案例 的相关文章

  • 改变架构生成器中的列长度?

    我有两个字段需要增加字符限制 我通读了文档 令我惊讶的是我没有找到它的选项 可以做吗 如果不是 我应该如何解决这个问题 我可以删除该列并使用正确的属性重新创建它 但我不想丢失数据库中的任何数据 对于 Laravel 4 DB update
  • 需要授予哪些权限才能访问 sys.dba_systems

    我正在开发适用于 Oracle 的应用程序 对于某种逻辑 我需要从给定的数据库用户获取具有指定模式的表列表 就我而言 我有一个已授予给定模式访问权限的用户 因此 当我的代码使用给定的凭据创建连接并尝试从以下查询中获取表时 它返回表列表 SE
  • XML 属性与元素[重复]

    这个问题在这里已经有答案了 什么时候应该使用 XML 属性以及什么时候应该使用 XML 元素 e g
  • Oracle:是否可以为模式创建同义词?

    Firstly 我是一个oracle新手 并且我没有当地的oracle大师来帮助我 这是我的问题 问题 我有一些 SQL 脚本必须发布到多个 Oracle 实例 这些脚本创建存储过程 创建存储过程的架构与包含存储过程从中读取的表的架构不同
  • 在 Python 中验证字典

    我正在寻找工具或示例来 如何在 python 中验证字典 例如 我有字典 test foo bar nested foo1 bar1 foo2 bar2 现在我必须验证它 可以说 键值foo必须是布尔值False或非空字符串 接下来 如果关
  • 如何检查 PostgreSQL 公共模式是否存在?

    运行以下查询 SELECT exists SELECT schema name FROM information schema schemata WHERE schema name public AS schema exists 我总是越来
  • 如何在Java中从sql模式生成orm映射类

    我有一个现有的 db sql 模式文件 是否可以在需要时生成并重新生成 DAO 实体以及访问它所需的所有其他帮助程序 客户端类 我不介意它会是什么 hibernate 其他 jpa 或其他东西 假设您 其他人仍在寻找解决方案 我刚刚遇到了同
  • 核心数据:-deleteObject:崩溃,删除规则是原因吗?

    我有以下模型 如图所示 替代文本http img521 imageshack us img521 9741 schermata20100224a12251 png http img521 imageshack us img521 9741
  • 编写依赖于其他键的更复杂的 json 模式

    我一直在编写简单的 JSON 模式 但遇到了一个稍微复杂一点的 API 输入调用 我有一条宁静的最终路线 可以采用 3 种截然不同类型的 JSON 本地主机 foo 可以采取 类型 冰淇淋 锥体 华夫饼 or 类型 热狗 小圆面包 小麦 如
  • 如何在 clojure 中定义用户定义的数据类型?

    我想使用用户定义的正则表达式模式来定义 edn 文件中的日期 以便使用 malli 进行验证 我如何在 core clojure 中定义此模式 以便我可以在 edn 文件中使用它 这就是我之前的 edn 文件的样子 def reading
  • SQL 表只有一行? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Spring & JPA:按需创建数据库模式和表

    JPA Spring 是否有可能在运行时创建 删除具有自定义名称和相应表 由 Entity 注释给出 的数据库模式 例如当用户按下按钮时 我只知道关于javax persistence schema generation属性 它们在我的应用
  • 根据用户输入在 Laravel 中创建新表?

    我正在尝试根据 Laravel 框架中的用户输入创建新的 mysql 表 用户提交一个在控制器中处理的表单 保存表单数据 然后根据用户的输入创建一个新表 以便稍后接收数据 在 Laravel 中 可以使用 schema create 创建表
  • GraphQL - 根据参数返回计算类型

    Overview 简化 在我的 NodeJS 服务器中 我实现了以下 GraphQL 架构 type Item name String value Float type Query items names String Item 然后 客户
  • 用于存储用户位置历史记录的 MongoDB 架构

    我想使用 MongoDB 来存储我的用户位置历史记录 当然要征得他们的同意 我看到以下三个选项 为所有用户创建一个位置集合 每个文档都有一个 userId 字段和一个时间字段 这两个字段都将被索引 该集合中的行数可能会增长到超过 1 亿行
  • http://axschema.org 和 http://schemas.openid.net 的可用属性列表

    我已经进行了高 低 远 广的搜索 但在互联网上找不到任何列出这些模式的可用属性的内容 有谁知道这些的文档在哪里 到目前为止我所知道的 http axschema org namePerson first http axschema org
  • 如何在 MS Access 中填充字段描述

    当通过 ODBC 尤其是 AS 400 链接到外部数据源时 我经常会在另一端遇到神秘的字段名称 而数据字典不可用 在极少数情况下 我能够从其他数据库获取字段描述 我希望能够一次导入它们 而不是一次将每个描述复制 粘贴到表设计表单中 我无法在
  • Firebird数据库模式/数据差异工具

    RedGate http www red gate com为 Microsoft SQL Server 制作一个工具 允许您捕获两个数据库之间的差异 它生成更新数据库模式所需的脚本 同时保留数据 我需要为 Firebird 数据库找到这样的
  • 枚举类型的 JAXB 元素

    所以我知道如何创建枚举类型 但是当我为其设置元素类型时 元素字段将只是字符串类型 而不是枚举类型 如何在我的模式中创建枚举并让 JAXB 将其生成为 java 枚举类型 这就是我创建枚举类型和元素的方式
  • 向 cassandra 表添加列会立即完成吗?

    我们计划在现有的 cassandra 表中添加一列 list 类型的列 该表的数据文件大小约为 350 GB 在应用架构更改时 我们可以暂时停止所有读 写几分钟 我们的理解是 cassandra 在应用架构更改时不会锁定表 但要确保我们的

随机推荐

  • 以神龙出行小程序为例,说一些网站技术

    注册和登录功能 用户注册和登录可以使用手机号验证 第三方登录等方式来实现 这需要与后台服务器进行数据交互 并进行身份验证 数据存储和管理 用户的个人信息和常用地址需要进行存储和管理 这可以通过数据库来实现 如关系型数据库或NoSQL数据库
  • 前端设计模式和设计原则之设计模式

    作为前端开发 在code时 或多或少地都会践行设计模式 但是你清楚自己用到的是何种设计模式吗 为什么前端开发一定要懂设计模式呢 code时不遵从设计模式 又能怎样呢 上面的问题可以留作思考 这里首先介绍一下前端开发经常遇到的一些设计模式和设
  • linux云计算(linux系统)

    什么是linux linux是一种操作系统 曾经被Microsoft视为最大的威胁 而今是互联网领域的幕后老大 Unix Linux发展史 unix系统发展在这里插入代码片 unix诞生 1969年底 Ken Thompson Dennis
  • java抽象类理解

    在java中抽象类不一定要有抽象方法 可以将所有方法都实现一遍 但class类声明为抽象类 这样做和不声明抽象类相比 差别只是抽象类不能实例化 继承的关键字仍然是extends 而且继承过后可以不覆盖方法 只是使用继承而来的方法 1 在js
  • 进入nodejs 利用http模块搭建一个简单的服务器并配合fs模块网客户端传输文件

    node js简单了解 node js是一个软件 它是js的代码运行环境 可以运行js代码然后实现服务器的功能 node js的开发是模块化开发的思想 在下载配置好node js后 我们直接就可编写js文件代码在终端中运行 注意要进入文件所
  • Django练习——基于Mysql的登录注册功能界面(django模型、模板、表单简单应用)

    目录 1 创建 2 配置Mysql 1 连接数据库驱动 2 创建表格 3 创建迁移文件并同步到数据库 3 admin后台 1 创建超级用户 2 注册模型login msg 4 路由与视图 4 1先搭框架 4 2编写视图处理函数 5 运行结果
  • 斯坦福NLP笔记75 —— Introducing Ranked Retrieval

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 基本是一些tdidf的基本概念 先跳过 转载于 https my oschina net silverhammer blog 294134
  • SpringBoot接口 - 如何提供多个版本接口

    在以SpringBoot开发Restful接口时 由于模块 系统等业务的变化 需要对同一接口提供不同版本的参数实现 老的接口还有模块或者系统在用 不能直接改 所以需要不同版本 如何更加优雅的实现多版本接口呢 SpringBoot接口 如何提
  • Error[Li005]: no definition for “assert_failed“ 的解决办法

    开发环境 IAR 单片机型号 stm8 具体报错 Error Li005 no definition for assert failed referenced from lt 工程路径 名称 gt Debug Obj stm810x gpi
  • keil5 调试出现“EVALUATION MODE Running with Code Size Limit:2K“解决办法

    楼主在keil5上安装51芯片包后 使用中出现 EVALUATION MODE Running with Code Size Limit 2K 提示 但不影响正常使用 原因是keil5的51包未正常安装 使用生成ID code解决 最终获得
  • L1-6 整除光棍 (20分)

    这里所谓的 光棍 并不是指单身汪啦 说的是全部由1组成的数字 比如1 11 111 1111等 传说任何一个光棍都能被一个不以5结尾的奇数整除 比如 111111就可以被13整除 现在 你的程序要读入一个整数x 这个整数一定是奇数并且不以5
  • 【云原生之kubernetes】kubernetes集群高级资源对象statefulesets

    云原生之kubernetes kubernetes集群高级资源对象statefulesets 一 statefulesets介绍 1 statefulesets简介 2 statefulesets特点 二 检查本地kubernetes集群状
  • STM32简介

    文章目录 STM32简介 STM32选型 STM32F1片上资源 外设 STM32系列芯片命名规则 STM32系统结构 引脚定义 启动配置 最小系统电路 STM32简介 这一节只用大概混个眼熟 不要深究 STM32选型 STM32可分为Hi
  • 一文读懂XPath基本语法_XPath语法详解_XPath教程

    因为最近在学习与整理有关python爬虫的文章 连带遇到XPath的使用 就顺便一起整理出来 XPath与自动化的关系 XPath是一门在XML文档中查找信息的语言 可用来在XML文档中对元素和属性进行遍历 XPath是用来选择 节点 的一
  • MCAL介绍及Module Plugin开发流程总结

    Mcal 微控制器抽象层位于AUTOSAR分层模型中BSW最底层 包含内部驱动 可以直接访问微控制器和片内外设 MCAL又可以分为微控制器驱动 存储器驱动 通信驱动和I O驱动四个部分 各部分又由具体的与微控制器硬件相对应的驱动模块组成 如
  • MSI cache一致性协议

    按照高速缓存的写策略的不同 有写直达和写回WB两种高速缓存 1 写直达高速缓存 一旦高速缓存中的一个字被修改 则在主存中要立即修改 2 写回高速缓存 并不是立即写回 而是当被修改的字从高速缓存中被替换或清除时 才真正修改主存 在侦听协议的设
  • Kettle——转换步骤信息统计两种实现

    Kettle 步骤数据处理数量记录获取 Kettle获取数据处理条数记录日志信息 以前的途径是配置转换的日志信息来保存到数据库中 这种方式不是很灵活 有没有一种类似步骤方式来进行获取呢 Kettle在5 0版本中提供了一个步骤 在 统计 转
  • 3d查看器无法加载三维模型_这几款倾斜实景三维裸眼3D采集软件你了解吗?

    文章转载于众智绘云 部分软件介绍由GIS前沿添加和修改 版权归原作者所有 作为国际测绘领域一项高新技术 倾斜摄影测量 ObliquePhotogrammetry 因其能快速 高效获取地面高分辨率 高重叠度及全视角的影像数据信息 近年来测绘领
  • VC++控制音量

    Visual C 开发技术大全 第26章声音与动画编程 本章讲述在VC 6 0环境下 如何使用Win32 GDI GDI DirectShow等开发接口实现声音与动画的处理 本小节为大家介绍控制音量 26 1 3 控制音量 Windows
  • XML学习之Schema学习案例

    一 Schema 约束xml文件 1 xml样式