`
zhouyangchenrui
  • 浏览: 81860 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

浅谈schema

阅读更多
XML Schema定义(XML Schema Definition,XSD)是一套W3C标准,用于基于XML的称为XML Schema的类型系统。用于定义的语言是一种称为XML模式定义语言(XML Schema Definition Language)的XML语法。下面从xsd文件语法、eclipse下根据xsd文件生成xml文件、xsd文件验证xml文件格式简单介绍。
1、xsd语法
   xsd语法包括定义根元素、定义元素、属性、元素和属性的限制、复杂类型、指示器等,其具体的介绍可参考w3school的教程http://www.w3school.com.cn/schema/,和http://marshzg.iteye.com/blog/394416文件。
2、eclipse下根据xsd文件生成xml文件
    以note.xsd为例,内容如下:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns="http://www.w3school.com.cn"
           elementFormDefault="qualified">
    <xs:element name="note">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="to" type="xs:string"/>
                <xs:element name="from" type="xs:string"/>
                <xs:element name="heading">
                	 <xs:complexType>
			            <xs:sequence>
			            	<!-- maxOccurs="unbounded" 表示元素可以出现多次-->
			                <xs:element name="zzz" maxOccurs="unbounded" type="xs:string"/>
			            </xs:sequence>
			        </xs:complexType>
                </xs:element>
                <xs:element name="body">
			        <xs:complexType>
			            <xs:sequence>
                             <!-- default="AAAA" 表示默认值为AAAA -->
			                <xs:element name="aaa" type="xs:string" default="AAAA"/>
			                <xs:element name="bbb" type="xs:string"/>
			                <xs:element name="ccc" type="xs:date"></xs:element>
			            </xs:sequence>
			            <!-- attribute setter -->
			            <!-- use="optional" 表示该属性可选 -->
			            <xs:attribute name="haha" type="xs:string" use="optional"></xs:attribute>
			        </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

在eclipse的工程包下新建-->xml(Basic Templates)-->命名为note.xsd-->选择根据schema文件创建xml-->选择上面的note.xsd文件-->勾选需要创建的内容格式,删除prefix前缀。完成后生成的xml文件为
<?xml version="1.0" encoding="UTF-8"?>
<note xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="note.xsd">
  <to>to</to>
  <from>from</from>
  <heading>
    <zzz>zzz</zzz>
  </heading>
  <body haha="">
    <aaa>AAAA</aaa>
    <bbb>bbb</bbb>
    <ccc>2001-01-01</ccc>
  </body>
</note>

3、xsd文件验证xml格式(参考网友文章)
   验证的类文件
import org.dom4j.Document;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.SAXValidator;
import org.dom4j.io.XMLWriter;
import org.dom4j.util.XMLErrorHandler;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import java.io.File;

/**
* Java XML校验测试
*/
public class ValidataXMLTest {
    public static void main(String[] args) {
        validateXMLByXSD();

    }

    /**
     * 通过XSD(XML Schema)校验XML
     */
    public static void validateXMLByXSD() {
        String xmlFileName = "src/main/test/schema/note.xml";
        String xsdFileName = "src/main/test/schema/note.xsd";
        try {
            //创建默认的XML错误处理器
            XMLErrorHandler errorHandler = new XMLErrorHandler();
            //获取基于 SAX 的解析器的实例
            SAXParserFactory factory = SAXParserFactory.newInstance();
            //解析器在解析时验证 XML 内容。
            factory.setValidating(true);
            //指定由此代码生成的解析器将提供对 XML 名称空间的支持。
            factory.setNamespaceAware(true);
            //使用当前配置的工厂参数创建 SAXParser 的一个新实例。
            SAXParser parser = factory.newSAXParser();
            //创建一个读取工具
            SAXReader xmlReader = new SAXReader();
            //获取要校验xml文档实例
            Document xmlDocument = (Document) xmlReader.read(new File(xmlFileName));
            //设置 XMLReader 的基础实现中的特定属性。核心功能和属性列表可以在 [url]http://sax.sourceforge.net/?selected=get-set[/url] 中找到。
            parser.setProperty(
                    "http://java.sun.com/xml/jaxp/properties/schemaLanguage",
                    "http://www.w3.org/2001/XMLSchema");
            parser.setProperty(
                    "http://java.sun.com/xml/jaxp/properties/schemaSource",
                    "file:" + xsdFileName);
            //创建一个SAXValidator校验工具,并设置校验工具的属性
            SAXValidator validator = new SAXValidator(parser.getXMLReader());
            //设置校验工具的错误处理器,当发生错误时,可以从处理器对象中得到错误信息。
            validator.setErrorHandler(errorHandler);
            //校验
            validator.validate(xmlDocument);

            XMLWriter writer = new XMLWriter(OutputFormat.createPrettyPrint());
            //如果错误信息不为空,说明校验失败,打印错误信息
            if (errorHandler.getErrors().hasContent()) {
                System.out.println("XML文件通过XSD文件校验失败!");
                writer.write(errorHandler.getErrors());
            } else {
                System.out.println("Good! XML文件通过XSD文件校验成功!");
            }
        } catch (Exception ex) {
            System.out.println("XML文件: " + xmlFileName + " 通过XSD文件:" + xsdFileName + "检验失败。\n原因: " + ex.getMessage());
            ex.printStackTrace();
        }
    }
}

验证通过会有成功提示信息,不通过则报告错误在哪里。
  
分享到:
评论

相关推荐

    浅谈XML Schema中的elementFormDefault属性

    XML Schema是一种用于定义XML文档结构、内容和数据类型的模式语言,它允许开发者对XML文档的元素和属性进行严格的规定。在XML Schema中,elementFormDefault是一个非常重要的属性,它与元素是否需要使用限定名(即带...

    浅谈MS-SQL锁机制

    5. **架构锁** (Schema Locks):包括架构修改锁(Sch-M)和架构稳定性锁(Sch-S)。Sch-M用于阻止任何其他事务访问表结构,而Sch-S则只阻止修改表结构,允许读取。 6. **批量更新锁** (Bulk Update Lock, BU):这种锁...

    浅谈SQL Server2005中的架构.pdf

    在探讨SQL Server 2005中的架构之前,首先应当了解数据库架构(Schema)是数据库中重要的组织结构,它定义了数据库对象的命名空间。SQL Server 2005引入了架构的概念,与先前版本中的用户概念有了明显的区分。在SQL ...

    浅谈django框架集成swagger以及自定义参数问题

    然后,设置`DEFAULT_SCHEMA_CLASS`为`'rest_framework.schemas.AutoSchema'`,这是为了避免后续可能出现的错误。 为了自定义参数并在Swagger界面上显示,我们需要创建一个名为`schema_view.py`的文件。在这个文件中...

    浅谈寿险公司Oracle数据库运维监控体系.pdf

    首先,数据库监控是运维监控体系的基础,它涉及实例监控、schema监控和告警三个部分。实例监控关注数据库实例的参数配置、组件状态(如redo、undo、controlfile)、表空间和会话信息,以及执行效率高的TOPSQL和系统...

    浅谈SpringBoot启动那些事儿.pdf

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"&gt; &lt;groupId&gt;org.springframework.boot ...

    浅谈xml配置spring profiles的几个注意点

    浅谈xml配置spring profiles的几个注意点 Spring Profiles是Spring框架中的一种功能,它允许开发者根据不同的环境配置不同的Bean。在xml配置文件中,我们可以使用`&lt;beans&gt;`元素的`profile`属性来指定不同的配置...

    浅谈 JDBC 元数据

    浅谈 JDBC 元数据 JDBC 元数据是 Java 语言中获取数据库管理系统信息的方式,通过获取元数据,可以了解数据库中的各种信息,例如数据库中的表、列、数据类型、触发器、存储过程等。获取这些信息的方法都是在 ...

    浅谈Spring中@Transactional事务回滚及示例(附源码)

    浅谈Spring中@Transactional事务回滚及示例 @Transactional是Spring Framework中的一种事务管理机制,用于管理数据库事务。它可以使得数据库操作更加安全和可靠。本文将详细介绍@Transactional的使用场景、checked...

    浅谈SpringBoot之开启数据库迁移的FlyWay使用

    浅谈SpringBoot之开启数据库迁移的FlyWay使用 SpringBoot是一种流行的Java框架,用于构建web应用程序。随着项目的发展,数据库迁移变得越来越重要。Flyway是一个流行的数据库迁移库,提供了一种简单、灵活的方式来...

    浅谈XML代码编写的编码与验证问题

    DTD用来定义XML文档的合法元素和属性,而XML Schema则更加复杂和强大,它提供了一种定义XML文档结构的方法,包括元素类型、属性类型以及它们之间的关系。如果文档符合这些定义的规则,那么它就可以被认定为有效的XML...

    浅谈springboot多模块(modules)开发

    浅谈 Spring Boot 多模块(Modules)开发 在现代软件开发中,模块化开发(Modular Development)是非常重要的一种开发方式。通过将一个大型项目分解成多个小型模块,每个模块负责特定的功能,可以更好地管理项目,...

    浅谈Spring装配Bean之组件扫描和自动装配

    &lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"&gt; ``` 在上面的代码中...

    浅谈Ruby on Rails下的rake与数据库数据迁移操作

    一般认为db/migrate文件夹里的内容是关于你数据库Schema的演变过程,每个新的开发或线上环境都要通过这些Migration来构建可用的数据库。但如果这里装入了,负责细节的业务代码,比如一些历史遗留数据的迁移代码之类...

    浅谈PHP调用Webservice思路及源码分享

    &lt;SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi=...

    浅谈java里的EL表达式在JSP中不能解析的问题

    对于EL表达式的解析而言,需要web.xml中的web-app元素的schemaLocation指向的XML Schema支持EL表达式。如果使用的XML Schema版本过旧,可能不支持EL表达式,从而导致解析失败。在文章中提到了web-app_2_2.xsd至web-...

    mycat 读写分离 优化

    #### 二、MySQL引擎浅谈 在深入讨论MyCAT读写分离之前,有必要简要介绍MySQL的两种主流存储引擎——InnoDB和MyISAM。这两种引擎各有优缺点,适用于不同的场景。 ##### 2.1 InnoDB引擎 - **事务支持**:InnoDB是...

Global site tag (gtag.js) - Google Analytics