XML文档约束之Schema

        与DTD(http://code727.iteye.com/blog/1882877)相比较,Schema是另一种灵活但复杂的XML约束方式。它主要增加了更多的数据类型和结构模式来改进DTD,并使用XML作为约束格式描述。

       

1.定义Schema约束规则

       下面结合一个实例来说明怎样设计Schema约束。
        例如,在一个XML文档(templet_test.xml)中,其根元素为templet,它包含的元素结构如下:
<?xml version="1.0" encoding="UTF-8"?>

<templet>
		 
	<bean name="user" class="com.daniele.appdemo.test.domain.User">
		<property name="id" type="java:long"/>
		<property name="name" type="java:string" />
		<property name="age" type="java:integer"/>
		<property name="mail" type="java:string" />
		<property name="company" ref="company" />
	</bean>
	
	<bean name="company" class="com.daniele.appdemo.test.domain.Company"></bean>
	
	<description date="2013-06-07">This is a XML Schema example.</description>
	<author name="daniele" />
	<end/> 
	
</templet>
    文档约束规则:
       1)bean元素可以有0或无限多个,它只能包含property子元素,并且有一个必选的class属性和一个可选的name属性;
       2)property元素可以有0或无限多个,不能包含任何的子元素和文本内容,它只能是bean元素的子元素,并且有一个必选的name属性,以及两个可选的type和ref属性;
       3)description元素只能有一个为date类型的属性,它只能包含文本内容,并且只能出现在bean元素的后面;
       4)end元素无任何属性、子元素和文本内容,只起到结束标记,并且只能出现在description元素的后面。
       由于在templet_test.xml文件的根元素<templet>中没有引入相关的约束文档。因此,针对上述的约束规则在此文档中就是无效的。因此,下一步我们需要创建一个以".xsd"为后缀名的约束文档(schame_test.xsd),然后再将此文档引入到xml文件中。
2.设计Schema约束文档              
        Schema提供了一系列的组件供用户来设计相关的Schema约束规范。附件为常用标签说明,更多详情请参考 http://www.w3school.com.cn/schema/schema_elements_ref.asp
<?xml version="1.0" encoding="UTF-8"?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
	xmlns:tns="http://www.appdemo.daniele.com/schema/templet" 
	targetNamespace="http://www.appdemo.daniele.com/schema/templet">
	
	<!-- 定义XML根元素temple,其内有0个或多个bean元素 -->
	<xsd:element name="templet">
		<!-- 
			complexType元素表示templet是一个复合类型,
			属性为false,表示它只能包含元素。
			否则,为true(默认)表示同时还可包含文本。
		-->
		<xsd:complexType mixed="false">
			
			<!-- 
				定义子元素组必须按照其sequence内部定义时的顺序出现一次(默认为有且只出现一次) 
				次数可通过minOccurs和maxOccurs这两个属性来控制。
			-->
			<xsd:sequence>
				<!-- 
					通过ref属性值,引用其他元素作为当前元素的子元素。
					如果在schema中定义了目标名称空间,则ref值为"名称空间前缀:子元素名",
					否则直接关联子元素名(对应另一个element元素的name属性值)即可。
				 -->
				<xsd:element ref="tns:bean" minOccurs="0" maxOccurs="unbounded"/>
				<xsd:element ref="tns:description" minOccurs="0" maxOccurs="1"/>
				<xsd:element ref="tns:author" minOccurs="0" maxOccurs="1"/>
				<xsd:element ref="tns:end" minOccurs="0" maxOccurs="1"/>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>
	
	<xsd:element name="bean">
		<xsd:complexType>
			<!-- 按顺序出现0次(minOccurs="0")或多次(maxOccurs="unbounded")其内部引用的元素 -->
			<xsd:sequence minOccurs="0" maxOccurs="unbounded">
				<xsd:element ref="tns:property" />
			</xsd:sequence>
			<!-- 
				定义当前元素具备的属性。
					1)name:属性名
					2)type:属性值类型
					3)use:可选性。
					      required:必须,optional:可选(默认),prohibited:禁用
					                当为可选时,可以不用设置该属性。
			-->
			<xsd:attribute name="class" type="xsd:string" use="required" />
			<xsd:attribute name="name" type="xsd:string" />
		</xsd:complexType>
	</xsd:element> 
	
	<xsd:element name="property">
		<xsd:complexType mixed="false">
			<xsd:attribute name="name" type="xsd:string" use="required" />
			<!-- 
				如果某个属性值具有备选值,则利用<xsd:simpleType>
				和<xsd:restriction>这两个元素来替代type属性
			-->
			<xsd:attribute name="type" default="java:string">
				<!-- 表示当前属性的值为简单类型 -->
				<xsd:simpleType>
					<!--表示当前属性备选值限定的类型 -->
					<xsd:restriction base="xsd:string">
						<!-- 备选值定义 -->
						<xsd:enumeration value="java:boolean" />
						<xsd:enumeration value="java:byte " />
						<xsd:enumeration value="java:char" />
						<xsd:enumeration value="java:double" />
						<xsd:enumeration value="java:float" />
						<xsd:enumeration value="java:long" />
						<xsd:enumeration value="java:integer" />
						<xsd:enumeration value="java:short" />
						<xsd:enumeration value="java:string" />
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:attribute>
			<xsd:attribute name="ref" type="xsd:string" />
		</xsd:complexType>
	</xsd:element>
	
	<!-- description元素只包含文本和属性date -->
	<xsd:element name="description">
		<xsd:complexType>
			<xsd:simpleContent>
				<!-- 文本类型为任意字符 -->
				<xsd:extension base="xsd:string">
					<!-- 
						定义description元素的可选的date属性,其值必须符合日期时间类型 
						如果不在extension中定义任何attribute,则表示当前元素只能包含文本内容
					-->
					<xsd:attribute name="date" type="xsd:date"/>
				</xsd:extension>
			</xsd:simpleContent>
		</xsd:complexType>
	</xsd:element>
	
	<!-- 定义只有一个必选name属性的author元素,不能有子元素和文本内容 -->
	<xsd:element name="author">
		<xsd:complexType mixed="true">
			<xsd:attribute name="name" use="required"/>
		</xsd:complexType>
	</xsd:element>
	
	<!-- 定义为空的end元素,即不能任何有子元素、文本内容和属性 -->
	<xsd:element name="end">
		<xsd:complexType />
	</xsd:element>
	
</xsd:schema>
       在.xsd约束文档中,都是以 <schema>来作为根元素的。其中,有两个关键属性需要在设计时设置。
       1) xmlns:规定在此 schema 中使用的一个或多个命名空间的 URI 引用。为避免冲突,可为它分配一个前缀,例如xmlns :xsd="http://www.w3.org/2001/XMLSchema"。一旦分配了前缀,则在引入schema组件定义约束时,需在这些组件的标签中加上前缀,例如<xsd:element></xsd:element>。
       2) targetNamespace:schema命名空间的URI引用。一般指定为Schema文件所在目录位置的URI即可,例如:http://www.springframework.org/schema/aop。一旦定义了命名空间,则XML实例文件就必须通过命名空间的方式引入它;如果没有定义命名空间,则XML实例文件就只能用无命名空间的方式引入它。
       3)xmlns:tns:目标命名空间,不是必须的。当进行Schema组件和类型关联引用时需要用到。
       另外还有一些可选属性在设计时可能会使用到。
       1) elementFormDefault
       默认值为 "unqualified"。当为默认值 或 无此属性时,则表示在XML文件中使用schema组件时,其标签名称无需加上前缀来进行限定。而属性值为"qualified"时,则需要加上前缀。
       2) attributeFormDefault
       默认值为 "unqualified"。当为默认值 或 无此属性时 ,则表示在XML文件中使用schema组件时,其属性名称无需加上前缀来进行限定。而属性值为"qualified"时,则需要加上前缀。
       3) version
       规定 schema 的版本。
3.引入Schema约束文档
       当约束文档设计无误后,就可以按照如下两种方式之一,将相关约束引入到我们的XML实例文档中:
       1)名称空间引入
       通过这种方式,需要在我们的XML文档根元素中增加如下两个关键属性来实现:
       xmlns:命名空间,该属性值应与约束文档中targetNamespace属性值保持一致;
       xsi:schemaLocation:约束文档所在的路径。取值为“ 命名空间 文档名”,注意命名空间与文档名之间应保持有一个空格或换行符。
       2)无名称空间引入
       这种方式只能引入没有目标命名空间的约束文档(即被引用的约束文档中没有定义 targetNamespace属性)。通过如下关键的属性来实现:
       xsi:noNamespaceSchemaLocation:即约束文档相对于当前XML实例文档的路径。因此,这种方式只适用于本地引入的需求。
       如上两种方式都还需要一个关键属性来支持,即 xmlns:xsi,这是Schema解析器所需要的,其值通常为“ http://www.w3.org/2001/XMLSchema-instance”,表示遵循W3C的Schema约束规范。
       引入约束后的XML文档(templet_test.xml)的内容如下:
<?xml version="1.0" encoding="UTF-8"?>

<!-- 无命名空间引入 -->
<!-- <templet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		 xsi:noNamespaceSchemaLocation="schame_test.xsd"> -->

<!-- 命名空间引入 -->
<templet xmlns="http://www.appdemo.daniele.com/schema/templet"
		 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		 xsi:schemaLocation="http://www.appdemo.daniele.com/schema/templet schame_test.xsd">

	<bean name="user" class="com.daniele.appdemo.test.domain.User">
		<property name="id" type="java:long"/>
		<property name="name" type="java:string" />
		<property name="age" type="java:integer"/>
		<property name="mail" type="java:string" />
		<property name="company" ref="company" />
	</bean>
	
	<bean name="company" class="com.daniele.appdemo.test.domain.Company"></bean>
	
	<description date="2013-06-07">This is a XML Schema example.</description>
	<author name="daniele" />
	<end/> 
	
</templet>
       在Eclipse环境中,当我们键入"Alt + /"的组合键后,将会在弹出的提示框中显示备选的元素和属性等。
银河麒麟V10ARM架构服务器离线安装docker\nacos【附安装包】 本文分享了在银河麒麟ARM64操作系统上安装Docker和Nacos的完整过程。首先提供了Docker的自动化安装脚本,包含服务配置、存储路径设置等关键步骤,并给出了常用维护命令。接着详细介绍了通过Docker-compose部署Nacos的方法,包括镜像导入、配置文件修改、鉴权设置等注意事项,特别强调了密钥长度必须超过32个字符的要求。文章还提供了Nacos初次登录的注意事项,并预告了后续可能推出的Redis、Nginx等安装教程。所有配置文件和脚本均可直接下载使用,适合内网环境下国产操作系统的部署 阅读详情

相关推荐

labview的TDMS文件读写

本文先介绍TDMS概念和文件结构,然后介绍VI如何使用,最后分析一个labview的自带范例

观则明的博客 1万+

XML期末练习题及答案

文档已删除,学弟学妹们期末考加油!

十九万里的博客 15万+

习题6-3 使用函数输出指定范围内的完数

其中函数factorsum须返回int number的因子和;函数PrintPN要逐行输出给定范围[mn]内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数 = 因子1 + 因子2 + ... + 因子k”,其中完数和因子均按递增顺序给出。如果给定区间内没有完数,则输出一行“No perfect number”。

cutto的博客 863

XML 从入门到精通(三)Schema教程

Schema定义 XML 文档的合法构建模块,类似 DTD。 XSD可针对需求扩展、更完善,功能更强大、基于 XML 编写、支持数据类型 、支持命名空间

chestnut 3153

想在瑞芯微RK3588上跑视频分类模型?避开3D卷积这个坑,试试这几种NPU友好的方案

本文探讨了在瑞芯微RK3588上部署视频分类模型时如何避开3D卷积的性能陷阱,提供了三种NPU友好的替代方案:MobileNetV2+GRU组合、Temporal Shift Module(TSM)和帧级池化。这些方案在保持较高准确率的同时,充分利用RKNPU的硬件加速能力,显著提升推理效率。文章还分享了从模型转换到部署优化的完整流程和实战经验。

weixin_28724319的博客 418

别再只看成交量了!用通达信这个VOL监测公式,一眼识别主力吸筹与出货信号

本文详细介绍了通达信VOL监测公式的实战应用,通过彩色量柱和换手率分层技术,帮助投资者识别主力吸筹与出货信号。该公式结合动态量能标准化和多周期均线组合,提供可视化主力行为图谱,提升交易决策的准确性。

weixin_28693447的博客 662

XML详细讲解(在java需掌握的程度)<一>:如何写XML文件——DTD约束&Schema约束

一天掌握xml!!!肝肝肝!!!

m0_62135731的博客 3315

使用Typora时LaTeX内联公式简单汇总

0、前言 在使用Typora写笔记时,有时候需要添加上LaTeX排版的公式。以下是整理出的一份简单笔记,方便记忆不清楚时查阅。笔记暂时不够完善,之后再补充。 注:有些公式语法KateX不能解析,但在Typora中可以使用(不用在意) 1、一些基本内联公式 位置关系 展示 LaTeX 说明 x2x^{2}x2 x^{2} 右上标 x2x_{2}x2​ x_{2} 右下标 2x{}^{2}x2x {}^{2}x 左上标 2x{}_{2}x2​x {}_{2}x 左下标

白白旧维的博客 4440

XML------XML文档类型定义(Schema结构)

XML Schema结构                                                                                                                                  5.1 Schema概述 XML Schema是2001年5月正式发布的W3C的推荐标准,经过数年的大规模讨

Me丿以卿之名 8495

超详细 VMware Horizon 虚拟桌面VDI安装步骤

主要的目的是模拟生产环境中的共享存储。自动桌面相当于共享电脑,大家使用同一个虚拟机,对虚拟机的修改都放在用户的配置文件中,RDS桌面池相当于共享的服务器,可以多人同时连接到服务器上。1:之前已经建立好了NFS的存储,这部分配置好后,以后的虚拟机可以安装到NFS的存储中。2: 使用Composer发布系统可以解决SID,机器名冲突的问题,更重要的可以节约磁盘空间,发布的所有系统可以访问一块磁盘。26: 域选择我们之前建立的域,用户名我输入的是管理员,可以在AD域新建用户点击查找,我这里用的是管理员。

vv12345的博客 1万+

NCCL 核心集体通信操作深度解析:从原理到优化实践

操作逻辑:若 N 个 GPU 各持有一段数据(大小为 S),通信后每个 GPU 会持有所有 N 段数据(总大小为 N×S)。典型场景:多卡推理结果聚合、模型并行中间结果同步。操作逻辑:N 个 GPU 各持有数据,通过归约(求和、取平均等)运算后,所有 GPU 获得相同结果。典型场景:数据并行训练的梯度聚合(如 SGD 优化器)。操作逻辑:N 个 GPU 各持有 N 份数据分片,通信后每个 GPU 获得所有 GPU 的对应分片。典型场景。

jundao1997的专栏 679

xml文档的DTD约束和Schema约束

在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束。XML的约束模式有两种,一种是DTD,还有一种就是Schema。 一、DTD约束(语法简单,功能简单) 二、Schema约束(语法复杂,功能强大) 一、DTD约束 文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合b法的元素来定义文档的结构。 文档类型定义可被成行地声明于标准通用标记语言

我是沈君哦! 1505

量子化学仿真软件:VASP_(7).表面与界面性质模拟

在量子化学仿真软件领域,表面与界面性质的模拟是研究多相催化、表面反应、材料科学等领域的关键工具。VASP(Vienna Ab Initio Simulation Package)作为一种广泛使用的密度泛函理论(DFT)计算软件,提供了强大的功能来模拟表面与界面的性质。本节将详细介绍如何使用VASP进行表面与界面性质的模拟,包括模型构建、输入文件准备、计算设置、结果分析等步骤。

kkchenjj的博客 950

schema约束文档与xml文件详解

schema约束文档与xml文件详解1.前言2.schema约束文档(.xsd文件)2.1 targetNameSpace2.2官方文档与自定义文档的关系2.3 声明名称空间2.4 schema文档中的全局成分与非全局成分2.5 完整的自定义schema文档3.xml文件3.1 声明名称空间3.2 xml中名称空间使用的范畴3.3 schemaLocation3.4 noNamespaceSche...

weixin_43179522的博客 1784

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

XML文档约束Schema的简介和格式代码

什么是Schema Schema是新的XML文档约束; Schema要比DTD约束强大,是DTD替代者 Schema本身也是XML文档,但是Schema文档的扩展名为xsd,而不是xml Schema功能更加强大,数据类型更完善 Schema支持名称空间 Schema重点 与DTD一样,要求可以通过Schema约束文档编辑xml文件。常见框架使用Schema的有 Spring 等 什么是命名空间 如果XML文档中使用多个Schema文件,而且这些Schema

kaszxc的博客 606

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Spring 配置文件xml文档的schema约束

在使用spring框架的时候,对于其配置文件xml,只是知道其使用方法,而不知道为什么。 这里来研究一下下。1.配置文件示例<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.sprin

jeikerxiao 2787

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Spring中xml文档的schema约束

最开始使用Spring框架的时候,对于其配置文件xml,只是网上得知其使用方法,而不明其意。最近想着寻根问底的探究一下。以下是本文主要内容: 1、配置文件示例。 <?xmlversion="1.0"encoding="UTF-8"?> <beansxmlns="http://www.springframework.org/sch...

110

11Java基础加强-4. xml文档约束(dtd,schema)

11Java基础加强-4. xml文档约束(dtd,schema)*

学无止境 466

关于Spring配置文件xml文档的schema约束

最开始使用Spring框架的时候,对于其配置文件xml,只是网上得知其使用方法,而不明其意。最近想着寻根问底的探究一下。以下是本文主要内容: 1、配置文件示例。 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.springframework.org/schema/m

Quartzhao的专栏 2万+

【Java寒假打卡】Java基础-XML文件的文档约束Schema

【Java寒假打卡】Java基础-XML文件的文档约束Schema

qq_44653420的博客 266

20220529_XML文件规范_DTD和Schema文档约束格式

初始XML写法 <?xml version="1.0" encoding="UTF-8" ?> <!-- comment is this format, and it will be displayed by green --> <College> <Teacher> <name> 罗翔 </name> <gender> Female </gender> &

ClarkGable的博客 218

JAVA_web Dom4j修改xml文档、xPth技术、SAX解析、xml约束、DTD约束、Schema约束

1 课程回顾XML基础 1)XML的作用 1.1 作为软件配置文件 1.2 作为小型的“数据库” 2)XML语法(由w3c组织规定的) 标签:   标签名不能以数字开头,中间不能有空格,区分大小写。有且仅有一个根标签。 属性: 可有多个属性,但属性值必须用引号(单引号或双引号)包含,但不能省略,也不能单 双混用。 文档声明: ...

干饭银的足迹——博客 600

引用多个schema约束来创建xml文档

<w3:schema xmlns:w3="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/csdn" elementFormDefault="qualified"> <!-- xmlns:w3="http://www.w3.org/2001/XMLSchema" 引用http:

MartinDong 2840
上一篇: XML文档约束之DTD
下一篇: JAXP和Dom4j通过XPath获取带命名空间的节点
心如止水dy
博客等级 码龄19年 5粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值