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. 机器学习:评价分类结果(ROC 曲线)

    一.基础理解 1)定义 ROC(Receiver Operation Characteristic Curve) 定义:描述 TPR 和 FPR 之间的关系: 功能:应用于比较两个模型的优劣: 模型不 ...

  2. java写出进程条代码

    package com.ds; import java.awt.Color; import java.awt.Toolkit; import javax.swing.ImageIcon; import ...

  3. Spring单例Bean和线程安全

    Spring的bean默认都是单例的,这些单例Bean在多线程程序下如何保证线程安全呢?例如对于Web应用来说,Web容器对于每个用户请求都创建一个单独的Sevlet线程来处理请求,引入Spring框 ...

  4. The lesser known pitfalls of allowing file uploads on your website

    These days a lot of websites allow users to upload files, but many don’t know about the unknown pitf ...

  5. Oracle 11g oracle 用户密码过期问题 (ZT)

    http://www.blogjava.net/freeman1984/archive/2013/04/23/398301.html Oracle 11g 之前默认的用户时是没有密码过期的限制的,在O ...

  6. list array解析(总算清楚一点了)

    # -*- coding: utf-8 -*- """ Created on Tue Aug 09 23:04:51 2016 @author: Administrato ...

  7. C#改变LInqToSQL的引用地址,读取config的数据库字符串

    C#改变LInqToSQL的引用地址,读取config的数据库字符串修改Properties 下 Settings.Settings 下 Settings.Designer.cs 下 return ( ...

  8. 用UltraISO把硬盘文件制作成ISO格式

    转自:https://wenku.baidu.com/view/0052c88dcc22bcd126ff0cbf.html 用UltraISO把硬盘文件制作成ISO格式方法: 制作硬盘ISO文件步骤一 ...

  9. 浏览器默认标签样式总结及css初始化程序(转)

    浏览器默认标签样式总结及css初始化程序   html中的大部分的标签都有一些糟糕的样式,有的是标签天然自带的,有的是浏览器默认设置的,我们在写网页时,这些默认的样式就会时不时的跳出来捣一下乱,搞得我 ...

  10. 使用HttpClient进行Post通信

    ---------------siwuxie095                         首先到 Apache官网 下载相关的库文件     Apache官网:http://www.apac ...