Schema技术
Schema 技术
Schema 是 DTD 的代替者,名称为 XML Schema,用于描述XML 文档结构,即对XML文档做出规范,比 DTD 更加强大,最主要的特征之一就是XML Schema 支持数据类型。 Schema,提纲;提要
1) Schema 是用 XML 验证 XML 遵循的语法
2) Schema 可以用能处理 XML 文档的工具处理
3) Schema 大大扩充了数据类型,而且还可以自定义数据类型
4) Schema 支持元素的继承
5) Schema 支持属性组
创建验证文件


所有的 Schema 文档使用 schema 作为其根元素
http://www.w3.org/2001/XMLSchema:用于验证当前 Schema文档的命名空间(用于验证Schema本身)同时它还规定了来自
命名空间 http://www.w3.org/2001/XMLSchema 的元素和数据类型应该使用前缀 xs:

xmlns 相当于 java 中的 import, :xs
在使用时要写加“小名”做前缀
(XML 使用 Schema 验证,那 Schema 也是一个 XML,谁来
验证它?DTD)
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- element元素 根元素名字叫做books -->
<xs:element name="books">
<!-- books类型是复杂数据类型,包含其他元素,复杂数据类型用complexType -->
<xs:complexType>
<!-- sequence序列,按照顺序来编写 -->
<xs:sequence>
<!-- alt+/ 补全 第一个元素名字是book maxOccurs为最多可以出现几个 unbounded为不绑定,即不限制出现多少次 -->
<xs:element name="book" maxOccurs="unbounded">
<!-- book包含name author等,也是一个复合类型 -->
<xs:complexType>
<!-- 子标签出现有一定的顺序 -->
<xs:sequence>
<!-- book中的第一个子元素 名字:name 类型:string name中没有其他元素了,是简单类型 -->
<xs:element name="name" type="xs:string"></xs:element>
<xs:element name="author" type="xs:string"></xs:element>
<xs:element name="price" type="xs:double"></xs:element>
</xs:sequence>
<!-- book有一个属性 名字:id 类型:int 属性是否必写:必写-->
<xs:attribute name="id" type="xs:positiveInteger" use="required"></xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
把验证文件引入到xml文件中,验证xml文档是否正确
<?xml version="1.0" encoding="UTF-8"?>
<books xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="{books.xsd}"> <!-- 引入验证文件 -->
<book id="1001">
<name>java程序设计</name>
<author>菜鸟教程</author>
<price>30</price>
</book>
</books>

如何验证:
1) 创建 SchemaFactory 工厂
2) 建立验证文件对象
3) 利用 SchemaFactory 工厂对象,接收验证的文件对象,生成 Schema 对象
4) 产生对此 schema 的验证器
5) 要验证的数据(准备数据源)
6) 开始验证
import java.io.File;
import java.io.IOException; import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator; import org.xml.sax.SAXException; public class Test { public static void main(String[] args) throws SAXException {
//1) 创建 SchemaFactory 工厂
SchemaFactory sch = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
//2) 建立验证文件对象
File schemaFile = new File("books.xsd");
//3) 利用 SchemaFactory 工厂对象,接收验证的文件对象,生成 Schema 对象
Schema schema = sch.newSchema(schemaFile);
//4) 产生对此 schema 的验证器
Validator validator = schema.newValidator();
//5) 要验证的数据(准备数据源)
StreamSource source = new StreamSource("book.xml");
//6) 开始验证
try {
validator.validate(source);
System.out.println("正确");
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
System.out.println("错误");
}
} }
book.xml 和books.xsd文件要放在项目下面

运行

试着改动book.xml,把book标签的属性 id 删除

再次运行会报错

Schema技术的更多相关文章
- XML约束——Schema约束
XML Schema 也是一种用于定义和描述 XML 文档结构与内容的模式语言,其出现是为了克服 DTD 的局限性 XML Schema VS DTD: •XML Schema符合XML语法结构. • ...
- 【风马一族_xml】Schema--- xml的约束技术
Schema 是xml的约束技术,出现的目的是为了替代dtd 本身也是一个xml,非常方便使用xml的解析引擎进行解析 对名称空间有非常好的支持 支持更多的数据类型,并且支持用户自定义数据类型 可以进 ...
- XML Dtd Schema
在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束. 整体比较: XML Schema符合XML语法结构. DOM.SAX等XML API很容易解析出XML Schem ...
- JavaEE:Eclipse开发工具的相关使用和XML技术
Eclipse开发工具的知识点1.工程的属性(properties)1)Text file encoding 工程编码(在导入其他工程时,注意编码类型一致)2)Java build path设置cl ...
- XML【介绍、用途、了解XML技术架构、语法】
什么是XML? XML:extensiable markup language 被称作可扩展标记语言 XML简单的历史介绍: gml->sgml->html->xml gml(通用标 ...
- 一文读懂四种常见的XML解析技术
之前的文章我们讲解了<XML系列教程之Schema技术_上海尚学堂java培训技术干货><XML的概念.特点与作用.XML申明_上海Java培训技术干货>,大家可以点击回顾一下 ...
- XML——Schema
body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...
- dtd和schema的区别
在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束. 常用的约束技术XML DTD :XML Schema.XML Schema 也是一种用于定义和描述 XML 文档结 ...
- Xml语言
一.XML是什么?作用是什么? l XML ( eXtensible Markup Language )语言是一种可扩展的标记语言.其中的可扩展是相对HTML来说的.因为XML标签没有被预定义,需要 ...
随机推荐
- EMIPLIB简介
EMIPLIB(http://research.edm.uhasselt.be/emiplib)的全称是'EDM Media over IP libray' .EDM是Hasselt Universi ...
- minidump-DMP文件的生成和使用
转载地址点击打开链接 1.生成dmp的程序 #include <dbghelp.h> #pragma comment(lib, "dbghelp.lib") //设 ...
- java代码随机数100个,10个一输出显示======
总结:空格???懂否?如何显示 for(int i=0;i<100;i++){ if(i%10==0){ System.out.println(); } System.out.print(n[i ...
- Hybrid App混合模式移动应用开发(AngularJS+Cordova+Ionic)
以前公司开发了某手机APP是通过jquerymobile来实现的,发现它对手机上的原生设备无能为力.于是在下一个项目到来之际,通过筛选最终决定使用cordova+Ionic.看起来简单,但是因为他们各 ...
- Cassandra 学习三 数据模型
Cassandra如何存储数据的概述. 集群(Cluster) ·Cassandra数据库分布在几个一起操作的机器上.最外层容器被称为集群.对于故障处理,每个节点包含一个副本,如果发生故障,副本 ...
- 数据库:sql语句分别按日,按周,按月,按季统计金额
如: 表:consume_record 字段:consume (money类型) date (datetime类型) 请问怎么写四条sql语句分别按日,按周,按月,按季统计消费总量. 如:1月 120 ...
- javascript——对象的概念——内建对象
包括内建对象的所有对象都是Object对象的子对象. 1.Array():构建数组的内建构造器函数 例:创建数组方式有两种: 2.Boolean:是对象,与基本数据类型 布尔值 不相同 例:创建Boo ...
- 部署和调优 3.2 dns安装配置-2
配置一个自定义的域,随便定义的,不实际存在. 在配置文件里,增加一个域 vim /etc/named.conf zone "123.com" IN { type master; f ...
- Linux 压缩文件 和解压文件
.zip 解压:unzip FileName.zip 压缩:zip FileName.zip DirName .rar 解压:rar -x FileName.zip 压缩:rar -a FileNam ...
- ava的打包jar、war、ear包的作用、区别、打包方式
编为大家介绍,基于Java的打包jar.war.ear包的作用与区别详解.需要的朋友参考下以最终客户的角度来看,JAR文件就是一种封装,他们不需要知道jar文件中有多少个.class文件,每个文件中的 ...