1.Schema介绍
XML Schema 是基于 XML 的 DTD 替代者。可描述 XML 文档的结构。
XML Schema 语言也可作为 XSD(XML Schema Definition)来引用。
XML Schema 本身也是一种XML构造,它用来描述[哪个元素,在什么时候出现],[该元素具有什么样的属性]等等,也就是说,XML Schema是对XML的树形构造加以描述说明的一种语言。
原本,使用DTD对XML的树形构造加以描述说明,但DTD存在严重的局限性,DTD不能定义数据的类型,语法也与XML语言完全不一样,在使用的便利性,数据结构表达的严谨性上存在问题。
2.什么是Schema
XML Schema是用一套预先规定的XML元素和属性创建的,这些元素和属性定义了XML文档结构和内容模式。
XML Schema规定XML文档实例的结构和每个元素/属性的数据类型。
3.初始Schema
<?xml version="1.0" encoding="utf-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="hello" type="xsd:string"> </xs:schema>讲解:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
其中xs是命名空间,schema是根节点名。
注意xs:schema与xmlns:xs中的xs要完全一样(名称可以任意,只要一样就可以)。
<xs:element name="hello" type="xs:string">
name是用来定义它所描述的XML文档中的节点名。
type是表示该节点的值的类型。
4.Schema的数据类型
简单数据类型:
1)内置的数据类型:基本数据类型和扩展数据类型
2)用户自定义的数据类型(通过dataType定义)
复杂数据类型:
常用数据类型:xs:string 、xs:decimal 、xs:integer 、xs:boolean 、xs:date 、xs:time
5.元素介绍
-
schema元素
-
element元素
-
attribute元素
-
group元素
-
attributeGroup元素
-
simpleType元素
-
simpleContent元素
-
complexType元素
-
choice元素
-
list元素
-
union元素
-
sequence元素
-
restriction元素
这些元素的具体说明请参考附件《Schema读书笔记》或查看http://www.w3school.com.cn/schema/
6.基于Spring可扩展Schema提供自定义配置
扩展XML配置大致需要一下几个步骤:
- 创建一个需要扩展的组件
- 定义一个xsd文件描述组件内容
- 实现BeanDefinitionParser接口,用来解析xsd文件中的定义和组件定义
- 扩展自NamespaceHandlerSupport,目的是将组件注册到Spring容器
- 编写spring.handlers和spring.schemas文件
6.1创建一个需要扩展的组件
创建一个需要扩展的组件,在这里只是一个简单的bean,而且这个bean有id和age俩个属性。
public class TagOne { private String id; private String age; //set和get方法,此处略去 }
6.2定义一个xsd文件
<?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns="http://www.mysite.org/schema/mytag" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.mysite.org/schema/mytag"> <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/> <xsd:element name="tagOne" type="identifiedType"/> <xsd:complexType name="identifiedType"> <xsd:attribute name="id" type="xsd:string"/> <xsd:attribute name="age" type="xsd:string"/> </xsd:complexType> </xsd:schema>
6.3实现BeanDefinitionParser接口
public class MyBeanDefinitionParser implements BeanDefinitionParser{ public BeanDefinition parse(Element arg0, ParserContext arg1) { RootBeanDefinition def = new RootBeanDefinition(); //设置Bean Class def.setBeanClass(TagOne.class); //注册ID属性 String id = arg0.getAttribute("id"); BeanDefinitionHolder idHolder= new BeanDefinitionHolder(def,id); BeanDefinitionReaderUtils.registerBeanDefinition(idHolder, arg1.getRegistry()); //注册age属性 String age = arg0.getAttribute("age"); BeanDefinitionHolder ageHolder= new BeanDefinitionHolder(def,age); BeanDefinitionReaderUtils.registerBeanDefinition(ageHolder, arg1.getRegistry()); def.getPropertyValues().addPropertyValue("age", age); return def; } }给bean的属性赋值,这个是不可缺少的,否则在使用标签定义时将无法获取bean属性的值。
6.4扩展自NamespaceHandlerSupport
public class MyNameSpaceHandler extends NamespaceHandlerSupport { public void init() { registerBeanDefinitionParser("tagOne",new MyBeanDefinitionParser()); } }
6.5编写spring.handlers和spring.schemas文件
由于spring无法找到我们在什么地方定义了哪些标签,所以需要在spring.handlers和spring.schemas进行配置并存放在META-INF目录中。
在Spring.jar的META-INF目录中也有同名的文件,它们的文件内容基本上是相似的,而Spring在执行过程中,如果发现其他jar文件的META-INF文件夹中包含有这两个文件,Spring将会合并它们。
spring.schemas http\://www.mysite.org/schema/mytag.xsd=com/mysite/tag/mytag.xsd spring.handlers http\://www.mysite.org/schema/mytag=com.mysite.tag.MyNameSpaceHandler
7.测试运行
1、将整个项目打包成jar文件(别忘记META-INF内的两个文件)
2、新建一个项目,引用刚才打包的jar文件,并引用Spring相关文件
3、测试运行
spring配置文件:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tag="http://www.mysite.org/schema/mytag" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.mysite.org/schema/mytag http://www.mysite.org/schema/mytag.xsd"> <tag:tagOne id="oneBean" age="99"/> </beans>测试类:
public class Main { public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext("application.xml"); TagOne tag = (TagOne) ctx.getBean("oneBean"); System.out.println("oneBean age is "+tag.getAge()); } }输出结果:
oneBean age is 99
ps:我ide用的是Intellij IDEA,介绍个博文,是Intellij IDEA中生成jar包的操作。
http://blog.csdn.net/eastgrand/article/details/11945309
相关推荐
【WebService入门教程_Schema学习示例代码】 在IT行业中,WebService是一种基于标准的、平台无关的、可互操作的Web应用程序接口(API)设计方法。它允许不同系统间的应用程序通过互联网进行通信,实现数据交换和...
"XML Schema 学习笔记" XML Schema 是一种基于 XML 的语言,用于定义 XML 文档的结构和约束。它可以描述 XML 文档的格式、元素、属性、数据类型、默认值、固定值等信息。XML Schema 的作用类似于 DTD,但它具有更多...
### XML Schema 学习总结 #### 一、概述 XML Schema 是一种用于描述 XML 文档结构的语言,它定义了 XML 文档中所包含的数据类型、元素以及属性等规则。通过 XML Schema,我们可以确保 XML 文件符合预设的标准和...
压缩包中的“XML Schema学习总结.pdf”很可能是一个详细的教程,包含了XML Schema的各个方面;而“xml.pptx”可能是配合讲解的PPT,可能包含图表、示例和关键点总结。 学习XML Schema对于理解和处理XML文档至关重要...
### Schema学习笔记 #### 关键概念与术语 **Schema**是一种用于定义XML文档结构和约束的语言。它通过一组规则来确保XML文档中的数据遵循特定格式和逻辑规则,从而提高数据的一致性和有效性。 #### 命名约定 - **...
**Schema学习资料** Schema在信息技术领域,特别是在数据库管理和Web语义技术中扮演着至关重要的角色。它是一个结构化的定义,用于描述数据的组织方式、格式和规则,使得数据的存储和检索更为有效和准确。本资料...
### XML Schema 学习 #### 一、XML Schema 概述 XML Schema 是 W3C(万维网联盟)制定的一项标准,旨在提供一种描述 XML 文档结构和内容的规范方式。XML Schema 于 2001 年 5 月正式发布,它的出现是对原有 DTD...
在现代的数据库管理中,监控数据库的性能是一个至关重要的任务。为了能够快速定位和解决数据库性能瓶颈,MySQL数据库系统提供了...通过实践学习和掌握Performance Schema的使用,能够使数据库管理变得更加精细和专业。
一本关于XML Schema的打包教程,深入浅出,系统性强,并附有相应实例。
w3cschool菜鸟教程离线版目录: ...学习 HTML 学习 HTML5 学习 CSS 学习 CSS3 学习 Bootstrap ...学习 Schema 学习 XSL-FO 学习 SVG Web Services 学习 Web Services 学习 WSDL 学习 SOAP 学习 RSS 学习 RDF
在Java开发中,XML(可扩展标记语言)作为一种数据交换格式,被广泛应用于不同...通过阅读《XML Schema学习总结.pdf》这样的资料,深入理解并掌握Schema的使用,对于提升开发者的技能和解决问题的能力具有显著的帮助。
在学习 JSON Schema 时,需要理解什么是模式, JSON Schema 的基本类型,如何使用 JSON Schema 等。 什么是模式? 模式(Schema)可以理解为一种模式或者规则,用于定义 JSON 数据结构的结构和约束。 JSON Schema ...
通过"XML学习 练习SCHEMA"的教程,你将深入理解这些概念,并通过实际操作掌握如何编写和应用XML SCHEMA。这将有助于你创建和维护结构清晰、符合规范的XML文档,提升数据的可靠性和互操作性。在进行练习时,可能会...
### XML Schema 快速...通过以上步骤,读者可以了解到如何使用 XML Schema 来定义 XML 数据结构,并通过一个简单的实例学习如何实现 XML 分层的效果。希望这个指南能够帮助初学者更好地理解和应用 XML Schema 技术。
**Schema相关知识** Schema在信息技术领域中扮演着至关重要的角色,尤其在数据库设计、Web语义化和数据标准制定等方面。...通过不断学习和实践,我们可以更好地利用Schema来优化数据结构和提升服务品质。
学习XML时,阅读“XML Schema学习总结.pdf”和“Schema.pdf”可以深入了解XML Schema的细节和用法,“xml.pptx”可能是一个关于XML的演示文稿,涵盖了XML的基础知识和应用案例。“dtd”文件是DTD的实际示例,而“xml...