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. Azure VMSS ---- PowerShell创建自定义镜像的VMSS集群

    前面一篇文章介绍了如何用PowerShell创建标准镜像的VMSS集群.http://www.cnblogs.com/hengwei/p/7391178.html 本文将介绍,如何用PowerShel ...

  2. ORA-12514: TNS: no listener 解决方案

    服务端:oracle 11g 客户端: pl/sql 问题描述: 用客户端 pl/sql 连接登录的时候,提示 "ORA-12514: TNS: no listener". 在服务 ...

  3. HDU1695(容斥原理)

    GCD Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  4. 第15届浙江省赛 D Sequence Swapping(dp)

    Sequence Swapping Time Limit: 1 Second      Memory Limit: 65536 KB BaoBao has just found a strange s ...

  5. FileStream 常用的属性和方法

    FileStream常用的属性和方法 (转) 对流进行操作时要引用 using System.IO; 命名空间 FileStream常用的属性和方法: 属性: CanRead 判断当前流是否支持读取, ...

  6. 【转】rails 遇到 Could not find a JavaScript runtime execjs错误(ubuntu)

    当我运行 $rails s 遇到下面错误 sudo apt-get install python-software-properties sudo add-apt-repository ppa:chr ...

  7. sass实用知识点

    本文总结sass相关核心知识点 说明:本文的内容是,我在开发实践中总结的实用性比较强的sass知识点,其他未涉及的知识,如果对你有作用请自行查阅 sass知识目录 嵌套 注释 SassScript @ ...

  8. ARRINC424—MORA(GRID)格式

    每一整数经.纬度为一格,每格MORA值3位数字,表示百英尺.无法获知MORA值得网格一UNK表示. 经纬网格起始点坐标,每个网格从左下角开始计数,每经纬度一度切分一个网格.每行数据代表某一维度上往东或 ...

  9. 2015.3.4 VS2005调用MFC dll时报错及解决

    今天在用VS2005调用MFCdll时报错: 正试图在 os 加载程序锁内执行托管代码.不要尝试在 DllMain 或映像初始化函数内运行托管代码... 原因是我在dll的CSpaceApp::CSp ...

  10. DAY18-Django之form表单

    构建一个表单 假设你想在你的网站上创建一个简单的表单,以获得用户的名字.你需要类似这样的模板: <form action="/your-name/" method=" ...