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是一种用于定义XML文档结构、内容和数据类型的模式语言,它允许开发者对XML文档的元素和属性进行严格的规定。在XML Schema中,elementFormDefault是一个非常重要的属性,它与元素是否需要使用限定名(即带...
5. **架构锁** (Schema Locks):包括架构修改锁(Sch-M)和架构稳定性锁(Sch-S)。Sch-M用于阻止任何其他事务访问表结构,而Sch-S则只阻止修改表结构,允许读取。 6. **批量更新锁** (Bulk Update Lock, BU):这种锁...
在探讨SQL Server 2005中的架构之前,首先应当了解数据库架构(Schema)是数据库中重要的组织结构,它定义了数据库对象的命名空间。SQL Server 2005引入了架构的概念,与先前版本中的用户概念有了明显的区分。在SQL ...
然后,设置`DEFAULT_SCHEMA_CLASS`为`'rest_framework.schemas.AutoSchema'`,这是为了避免后续可能出现的错误。 为了自定义参数并在Swagger界面上显示,我们需要创建一个名为`schema_view.py`的文件。在这个文件中...
首先,数据库监控是运维监控体系的基础,它涉及实例监控、schema监控和告警三个部分。实例监控关注数据库实例的参数配置、组件状态(如redo、undo、controlfile)、表空间和会话信息,以及执行效率高的TOPSQL和系统...
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"> <groupId>org.springframework.boot ...
浅谈xml配置spring profiles的几个注意点 Spring Profiles是Spring框架中的一种功能,它允许开发者根据不同的环境配置不同的Bean。在xml配置文件中,我们可以使用`<beans>`元素的`profile`属性来指定不同的配置...
浅谈 JDBC 元数据 JDBC 元数据是 Java 语言中获取数据库管理系统信息的方式,通过获取元数据,可以了解数据库中的各种信息,例如数据库中的表、列、数据类型、触发器、存储过程等。获取这些信息的方法都是在 ...
浅谈Spring中@Transactional事务回滚及示例 @Transactional是Spring Framework中的一种事务管理机制,用于管理数据库事务。它可以使得数据库操作更加安全和可靠。本文将详细介绍@Transactional的使用场景、checked...
浅谈SpringBoot之开启数据库迁移的FlyWay使用 SpringBoot是一种流行的Java框架,用于构建web应用程序。随着项目的发展,数据库迁移变得越来越重要。Flyway是一个流行的数据库迁移库,提供了一种简单、灵活的方式来...
DTD用来定义XML文档的合法元素和属性,而XML Schema则更加复杂和强大,它提供了一种定义XML文档结构的方法,包括元素类型、属性类型以及它们之间的关系。如果文档符合这些定义的规则,那么它就可以被认定为有效的XML...
浅谈 Spring Boot 多模块(Modules)开发 在现代软件开发中,模块化开发(Modular Development)是非常重要的一种开发方式。通过将一个大型项目分解成多个小型模块,每个模块负责特定的功能,可以更好地管理项目,...
<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"> ``` 在上面的代码中...
一般认为db/migrate文件夹里的内容是关于你数据库Schema的演变过程,每个新的开发或线上环境都要通过这些Migration来构建可用的数据库。但如果这里装入了,负责细节的业务代码,比如一些历史遗留数据的迁移代码之类...
<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=...
对于EL表达式的解析而言,需要web.xml中的web-app元素的schemaLocation指向的XML Schema支持EL表达式。如果使用的XML Schema版本过旧,可能不支持EL表达式,从而导致解析失败。在文章中提到了web-app_2_2.xsd至web-...
#### 二、MySQL引擎浅谈 在深入讨论MyCAT读写分离之前,有必要简要介绍MySQL的两种主流存储引擎——InnoDB和MyISAM。这两种引擎各有优缺点,适用于不同的场景。 ##### 2.1 InnoDB引擎 - **事务支持**:InnoDB是...