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技术的更多相关文章

  1. XML约束——Schema约束

    XML Schema 也是一种用于定义和描述 XML 文档结构与内容的模式语言,其出现是为了克服 DTD 的局限性 XML Schema VS DTD: •XML Schema符合XML语法结构. • ...

  2. 【风马一族_xml】Schema--- xml的约束技术

    Schema 是xml的约束技术,出现的目的是为了替代dtd 本身也是一个xml,非常方便使用xml的解析引擎进行解析 对名称空间有非常好的支持 支持更多的数据类型,并且支持用户自定义数据类型 可以进 ...

  3. XML Dtd Schema

    在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束. 整体比较: XML Schema符合XML语法结构. DOM.SAX等XML API很容易解析出XML Schem ...

  4. JavaEE:Eclipse开发工具的相关使用和XML技术

    Eclipse开发工具的知识点1.工程的属性(properties)1)Text file encoding  工程编码(在导入其他工程时,注意编码类型一致)2)Java build path设置cl ...

  5. XML【介绍、用途、了解XML技术架构、语法】

    什么是XML? XML:extensiable markup language 被称作可扩展标记语言 XML简单的历史介绍: gml->sgml->html->xml gml(通用标 ...

  6. 一文读懂四种常见的XML解析技术

    之前的文章我们讲解了<XML系列教程之Schema技术_上海尚学堂java培训技术干货><XML的概念.特点与作用.XML申明_上海Java培训技术干货>,大家可以点击回顾一下 ...

  7. XML——Schema

    body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...

  8. dtd和schema的区别

    在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束. 常用的约束技术XML DTD :XML Schema.XML Schema 也是一种用于定义和描述 XML 文档结 ...

  9. Xml语言

    一.XML是什么?作用是什么? l  XML ( eXtensible Markup Language )语言是一种可扩展的标记语言.其中的可扩展是相对HTML来说的.因为XML标签没有被预定义,需要 ...

随机推荐

  1. explain之三:MYSQL EXPLAIN语句的extended 选项学习体会,分析诊断工具之二

    MySQL 的explain命令有一个extended选项,我想可以很多人都没有注意,因为它对命令的输出结果没有任何改变,只是增加了一个warning.这个 warning中显示了MySQL对SQL的 ...

  2. top命令 Linux查看CPU和内存使用情况,cpu监控之一

    一.top命令 top命令是一个功能十分强大的监控系统的工具,对于系统管理员而言尤其重要.但是,它的缺点是会消耗很多系统资源. 在系统维护的过程中,随时可能有需要查看 CPU 使用率,并根据相应信息分 ...

  3. Eclipse: “The import java.io cannot be resolved”

    检查一下选项: 重点看jdk的绑定 43down voteaccepted Check your Eclipse preferences: Java -> Installed JREs. The ...

  4. leetcode423

    public class Solution { public string OriginalDigits(string s) { ]; ; i < s.Length; i++) { char c ...

  5. 部署和调优 3.3 dns安装配置-3

    只有一台DNS服务器是不保险的,现在给他配置个从服务器. 在另外一台虚拟机上安装配置DNS服务器.先查看虚拟机ip为:192.168.1.111 ifconfig 给从安装bind和dig命令 yum ...

  6. MPEG-PS封装格式

    据传输媒体的质量不同,MPEG-2中定义了两种复合信息流:传送流(TS:TransportStream)和节目流(PS:ProgramStream) PS文件分为3层:ps层(Program Stre ...

  7. 第6章 使用springboot整合netty搭建后台

    我们不会去使用自增长的id,在现阶段的互联网开发过程中,自增长的id是已经不适用了.在未来随着系统版本的迭代,用户数量的递增,肯定会做分库分表,去做一些相应的切分.在这个时候我们就需要有一个唯一的id ...

  8. day70-oracle 13-数据字典

    实际上数据字典它就是表.这种表比较特殊,给它取个名字叫做数据字典.既然是表的话,它就是要存数据的.它存的是这些数据:用户有哪些权限,用户创建了哪些表,用户能够访问哪些表,这种信息跟员工表.部门表没有关 ...

  9. 我们为什么要在C++中使用虚函数

    类中的成员函数分为静态成员函数和非静态成员函数,而非静态成员函数又分为普通函数和虚函数. 至于为什么虚函数必须是非静态成员函数,可以看一下:http://blog.csdn.net/leiming32 ...

  10. IFC数据模型在三维引擎中模拟