`

Schema学习

阅读更多

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
  • 大小: 17.7 KB
分享到:
评论

相关推荐

    WebService入门教程_Schema学习示例代码

    【WebService入门教程_Schema学习示例代码】 在IT行业中,WebService是一种基于标准的、平台无关的、可互操作的Web应用程序接口(API)设计方法。它允许不同系统间的应用程序通过互联网进行通信,实现数据交换和...

    xml schema 学习笔记

    "XML Schema 学习笔记" XML Schema 是一种基于 XML 的语言,用于定义 XML 文档的结构和约束。它可以描述 XML 文档的格式、元素、属性、数据类型、默认值、固定值等信息。XML Schema 的作用类似于 DTD,但它具有更多...

    XML Schema学习总结_重要.pdf

    ### XML Schema 学习总结 #### 一、概述 XML Schema 是一种用于描述 XML 文档结构的语言,它定义了 XML 文档中所包含的数据类型、元素以及属性等规则。通过 XML Schema,我们可以确保 XML 文件符合预设的标准和...

    xml Schema学习

    压缩包中的“XML Schema学习总结.pdf”很可能是一个详细的教程,包含了XML Schema的各个方面;而“xml.pptx”可能是配合讲解的PPT,可能包含图表、示例和关键点总结。 学习XML Schema对于理解和处理XML文档至关重要...

    schema学习笔记

    ### Schema学习笔记 #### 关键概念与术语 **Schema**是一种用于定义XML文档结构和约束的语言。它通过一组规则来确保XML文档中的数据遵循特定格式和逻辑规则,从而提高数据的一致性和有效性。 #### 命名约定 - **...

    schema学习资料

    **Schema学习资料** Schema在信息技术领域,特别是在数据库管理和Web语义技术中扮演着至关重要的角色。它是一个结构化的定义,用于描述数据的组织方式、格式和规则,使得数据的存储和检索更为有效和准确。本资料...

    XML Schema 学习

    ### XML Schema 学习 #### 一、XML Schema 概述 XML Schema 是 W3C(万维网联盟)制定的一项标准,旨在提供一种描述 XML 文档结构和内容的规范方式。XML Schema 于 2001 年 5 月正式发布,它的出现是对原有 DTD...

    performance schema学习总结1

    在现代的数据库管理中,监控数据库的性能是一个至关重要的任务。为了能够快速定位和解决数据库性能瓶颈,MySQL数据库系统提供了...通过实践学习和掌握Performance Schema的使用,能够使数据库管理变得更加精细和专业。

    XML Schema教程

    一本关于XML Schema的打包教程,深入浅出,系统性强,并附有相应实例。

    w3cschool菜鸟教程离线版chm手册 2016

    w3cschool菜鸟教程离线版目录: ...学习 HTML 学习 HTML5 学习 CSS 学习 CSS3 学习 Bootstrap ...学习 Schema 学习 XSL-FO 学习 SVG Web Services 学习 Web Services 学习 WSDL 学习 SOAP 学习 RSS 学习 RDF

    \"java xml 二\"之Schema总结

    在Java开发中,XML(可扩展标记语言)作为一种数据交换格式,被广泛应用于不同...通过阅读《XML Schema学习总结.pdf》这样的资料,深入理解并掌握Schema的使用,对于提升开发者的技能和解决问题的能力具有显著的帮助。

    JSON Schema 规范(中文版).pdf

    在学习 JSON Schema 时,需要理解什么是模式, JSON Schema 的基本类型,如何使用 JSON Schema 等。 什么是模式? 模式(Schema)可以理解为一种模式或者规则,用于定义 JSON 数据结构的结构和约束。 JSON Schema ...

    XML学习 练习SCHEMA

    通过"XML学习 练习SCHEMA"的教程,你将深入理解这些概念,并通过实际操作掌握如何编写和应用XML SCHEMA。这将有助于你创建和维护结构清晰、符合规范的XML文档,提升数据的可靠性和互操作性。在进行练习时,可能会...

    XMLschema快速入門

    ### XML Schema 快速...通过以上步骤,读者可以了解到如何使用 XML Schema 来定义 XML 数据结构,并通过一个简单的实例学习如何实现 XML 分层的效果。希望这个指南能够帮助初学者更好地理解和应用 XML Schema 技术。

    schema相关知识压缩包

    **Schema相关知识** Schema在信息技术领域中扮演着至关重要的角色,尤其在数据库设计、Web语义化和数据标准制定等方面。...通过不断学习和实践,我们可以更好地利用Schema来优化数据结构和提升服务品质。

    xml学习教程

    学习XML时,阅读“XML Schema学习总结.pdf”和“Schema.pdf”可以深入了解XML Schema的细节和用法,“xml.pptx”可能是一个关于XML的演示文稿,涵盖了XML的基础知识和应用案例。“dtd”文件是DTD的实际示例,而“xml...

Global site tag (gtag.js) - Google Analytics