Schema技术
2024-09-05 05:17:02
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 删除
再次运行会报错
最新文章
- iPhone开发基础教程_第二章
- X3DOM 1.6.1 发布注记
- 在生产环境使用Docker部署应用
- win7下loadrunner创建mysql数据库参数化问题解决
- 转码:unescape(";%u7B80%u4F53%u4E2D%u6587";)--->;escape(";简体中文";)
- WingIDE注册破解方法
- oracle的分页查询碰到的一个小问题
- sphinx2.8.8的配置文件
- 最短路径算法专题3----Bellman-Ford
- shell 命令合并文本
- 深入理解java虚拟机之——JVM垃圾回收策略总结
- JBOSS EAP 6 系列一 新特性
- python穷举法解数独
- c# 获取端口的连接数,网站的连接数
- go安装依赖包
- 使用perconna xtrabackup备份脚本
- 从零搭建 ES 搜索服务(二)基础搜索
- UVA 815 Flooded!
- RFC-RTSP
- Android 开发 HandlerThread详解 转载