zoukankan      html  css  js  c++  java
  • 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)

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
     3     <!-- element元素  根元素名字叫做books -->
     4     <xs:element name="books">
     5         <!-- books类型是复杂数据类型,包含其他元素,复杂数据类型用complexType -->
     6         <xs:complexType>
     7             <!-- sequence序列,按照顺序来编写 -->
     8             <xs:sequence>
     9                 <!-- alt+/ 补全   第一个元素名字是book maxOccurs为最多可以出现几个 unbounded为不绑定,即不限制出现多少次 -->
    10                 <xs:element name="book" maxOccurs="unbounded">
    11                     <!-- book包含name author等,也是一个复合类型 -->
    12                     <xs:complexType>
    13                         <!-- 子标签出现有一定的顺序 -->
    14                         <xs:sequence>
    15                             <!-- book中的第一个子元素 名字:name 类型:string  name中没有其他元素了,是简单类型 -->
    16                             <xs:element name="name" type="xs:string"></xs:element>
    17                             <xs:element name="author" type="xs:string"></xs:element>
    18                             <xs:element name="price" type="xs:double"></xs:element>
    19                         </xs:sequence>
    20                         <!-- book有一个属性  名字:id 类型:int 属性是否必写:必写-->
    21                         <xs:attribute name="id" type="xs:positiveInteger" use="required"></xs:attribute>
    22                     </xs:complexType>
    23                 </xs:element>
    24             </xs:sequence>
    25         </xs:complexType>
    26     </xs:element>
    27 </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) 开始验证

     1 import java.io.File;
     2 import java.io.IOException;
     3 
     4 import javax.xml.transform.stream.StreamSource;
     5 import javax.xml.validation.Schema;
     6 import javax.xml.validation.SchemaFactory;
     7 import javax.xml.validation.Validator;
     8 
     9 import org.xml.sax.SAXException;
    10 
    11 public class Test {
    12 
    13     public static void main(String[] args) throws SAXException {
    14         //1) 创建 SchemaFactory 工厂
    15         SchemaFactory sch = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
    16         //2) 建立验证文件对象
    17         File schemaFile = new File("books.xsd");
    18         //3) 利用 SchemaFactory 工厂对象,接收验证的文件对象,生成 Schema 对象
    19         Schema schema = sch.newSchema(schemaFile);
    20         //4) 产生对此 schema 的验证器
    21         Validator validator = schema.newValidator();
    22         //5) 要验证的数据(准备数据源)
    23         StreamSource source = new StreamSource("book.xml");
    24         //6) 开始验证
    25         try {
    26             validator.validate(source);
    27             System.out.println("正确");
    28         } catch (IOException e) {
    29             // TODO 自动生成的 catch 块
    30             e.printStackTrace();
    31             System.out.println("错误");
    32         }
    33     }
    34 
    35 }

    book.xml  和books.xsd文件要放在项目下面

     运行

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

    再次运行会报错

  • 相关阅读:
    crontab 移动日志-超越昨天的自己系列(12)
    java进程性能分析步骤-超越昨天的自己系列(11)
    Linux 使用 you-get 指令下载网页视频
    Git git rm和git rm --cached
    Git .gitignore中已添加文件路径,但仍未被忽略
    Android 系统添加SELinux权限
    git 删除目录及子目录下的同名文件
    Android 查看和修改网络mtu
    git 设置git用户名和邮箱,并生成秘钥
    RK3288 添加普通串口uart1和uart3
  • 原文地址:https://www.cnblogs.com/bfcs/p/10796011.html
Copyright © 2011-2022 走看看