gxpt之规范自定义xml配置——xsd显威

简介: 【情景介绍】        高校平台中有很多子系统,而子系统之间或多或少的会进行一些数据的交互,我们采用的是分布式部署,那么如何让子系统进行通信呢?我们选择的是webservice。

【情景介绍】

       高校平台中有很多子系统,而子系统之间或多或少的会进行一些数据的交互,我们采用的是分布式部署,那么如何让子系统进行通信呢?我们选择的是webservice。在这里我们要求每个客户端都自定义了一个名为mgr-beans的xml文件,方便去调用外部接口。


       但是现在问题来了,如果我拿到的接口name和url是正确的,但是xml节点写错了,那就调不到这个接口了。比如把form写成了from,还真不容易发现。别以为这是小问题,bug没有什么大小可言,只要是出错了,就是大问题呀。


       如何避免这个问题呢?看到struts和spring的配置文件了么?在写这些文件的时候总会有智能提示,而且在你写错的时候,还会显示红色波浪线,够人性化吧。而完成这些验证工作的默默工作者就是——dtd和xsd。只要你为xml提供了这两个其中一个,Ecplise就会自动根据dtd或者xsd去检测xml的规范。


【实例演示】

       先晒一下我们的xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans>
	<ejb-beans>
		<ejb-bean id="user-userbean">
			<property name="name" value="UserBeanImpl/remote" />
			<property name="url" value="localhost" />
		</ejb-bean>
	</ejb-beans>

	<webservice-beans>
		<webservice-bean id="user-userservice">
			<property name="name" value="mgr.jc.webservice.fortest.IUserBean" />
			<property name="url" value="http://jialin:8080/gxpt_mgr_jc_service_fortest_impl-0.0.1-SNAPSHOT/UserBeanImpl" />
		</webservice-bean>
	</webservice-beans>

</beans>

       特别简单的xml,很清晰,但是如果写错了,还真一时半会看不出来。所以又改动了一下,修改了根节点:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:noNamespaceSchemaLocation="http://mfxuan.free.800m.net/webservice-v1.0.xsd">

<!--省略其他代码-->


       大家可以看到,我添加了一个xsd,这个xsd的功能主要就是用来规范这个xml的格式的。location是一个地址主要是我把这个xsd放到了网站上。这样大家都可以使用这个文件了。具体内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
	<xsd:element name="beans" >
		<xsd:complexType>
			<xsd:all>
				<xsd:element name="ejb-beans"  maxOccurs="1" minOccurs="1">
					<xsd:complexType>
						<xsd:sequence>
							<xsd:element name="ejb-bean" type="properties"  maxOccurs="unbounded"   minOccurs="1"/>
						</xsd:sequence>
					</xsd:complexType>
				</xsd:element>

				<xsd:element name="webservice-beans" maxOccurs="1" minOccurs="1">
					<xsd:complexType>
						<xsd:sequence>
							<xsd:element name="webservice-bean" type="properties"  maxOccurs="unbounded"  minOccurs="1"/>
						</xsd:sequence>
					</xsd:complexType>
				</xsd:element>
			</xsd:all>
		</xsd:complexType>
	</xsd:element>


	<xsd:complexType name="properties">
		<xsd:sequence>
			<xsd:element name="property" maxOccurs="2" minOccurs="2">
				<xsd:complexType>
					<xsd:attribute name="name" use="required">
					<xsd:annotation>用法如下</xsd:annotation>
			        <xsd:simpleType>
			            <xsd:restriction base="xsd:string">
			                <xsd:enumeration value="name"/>
			                <xsd:enumeration value="url"/>
			            </xsd:restriction>
			        </xsd:simpleType>
					</xsd:attribute>
					<xsd:attribute name="value" type="xsd:string"  use="required"/>
				</xsd:complexType>
			</xsd:element>
		</xsd:sequence>
		<xsd:attribute name="id" type="xsd:string" use="required"/>
	</xsd:complexType>

</xsd:schema> 


       Eclipse也不用做任何操作就可以直接用xsd来验证+智能提示+自动补全。如图所示:





【知识讲解】

       首先介绍一下xsd:xsd是 XML Schema Definition的简写。是用来描述 xml 文档结构的。其实描述 xml 文档结构的还是一种语法,叫做dtd (Document Type Definition)。dtd虽然可以完成大部分的功能,但它却不是规范的 xml 格式,而且支持的数据类型也少。xsd则是基于xml格式的dtd的替代者。如果你足够细心,你会发现struts配置文件用的是dtd的,而spring用的是xsd。


       其实说白了,xsd只包含2类内容——xsd元素 + xsd验证器。而xsd元素既包含element和attribute这些基本的单一元素,也包含如complexType,simpleType等复合元素。xsd验证器则包含类型、长度、出现次数等。具体内容详见:XML Schema 参考手册 。


       现在我解释一下上面的xsd中的一些元素结构。

       这个schema文档是以xsd:schema作为根节点的。xmlns是xml namespace的意思。xmlns:xsd="...",是为命名空间指定一个别名xsd。我们通过别名就可以使用它定义的元素了,比如xsd:element。而这个网址,也就是这个xml的namespace。它对应的则是一个dtd规范,它里面定义了在所有的xml schema中的元素和验证器的名称和使用规范。有兴趣的可以点 这里 进行查看。

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">  

       第3行则是定义了一个元素,以别名xsd:element开头。name值就是节点的名称。

<xsd:element name="beans" >
       第4行则说明beans是一个复合元素,它包含有属性元素或者其他element元素等。

 <xsd:complexType> 
       第5行,则是一种xsd的复合类型指示器。复合类型指示器:all表示子元素无顺序,指示器
有七种指示器:Order 指示器:(All,Choice,Sequence)、Occurrence 指示器:(maxOccurs,minOccurs)、Group 指示器:(Group name,attributeGroup name)。具体说明请参考:XSD 复合类型指示器

<xsd:all> 
       第9行中的maxOccurs和minOccurs则是说这个element出现的最大和最少次数。可以用unbounded表示任意次数。而type则表示它的类型被定义成了properties。这主要是为了多种元素的类型一样时,可以直接引用这种类型,不再重复定义。

 <xsd:element name="ejb-bean" type="properties"  maxOccurs="unbounded"   minOccurs="1"/> 

       第30行中的use="required" 表示element必须包含名为name的属性。

 <xsd:attribute name="name" use="required">

       第32-37行则是一个属性值的限定,只能选择name或者url。

<xsd:simpleType>
    <xsd:restriction base="xsd:string">
        <xsd:enumeration value="name"/>
        <xsd:enumeration value="url"/>
    </xsd:restriction>
</xsd:simpleType>


       通过上面的讲解,应该可以读懂这个xsd了,再分享给你一个网址: http://www.w3school.com.cn/schema/schema_example.asp。 你可以在这里对xsd做更多的了解。怎么样,想不想自己来试一试。


       这是我第一次写xsd,在写之前还是有点小忧虑的,怕写不出来,又是查w3school,又对照着spring的xsd去比较。还好最终的效果还是出来了,虽然没有对属性值进行过多的约束,不过节点已经都规定好了,在一定的程度上可以将认为错误减少很多了。


       

目录
相关文章
|
15天前
|
XML Java 数据格式
使用idea中的Live Templates自定义自动生成Spring所需的XML配置文件格式
本文介绍了在使用Spring框架时,如何通过创建`applicationContext.xml`配置文件来管理对象。首先,在resources目录下新建XML配置文件,并通过IDEA自动生成部分配置。为完善配置,特别是添加AOP支持,可以通过IDEA的Live Templates功能自定义XML模板。具体步骤包括:连续按两次Shift搜索Live Templates,配置模板内容,输入特定前缀(如spring)并按Tab键即可快速生成完整的Spring配置文件。这样可以大大提高开发效率,减少重复工作。
使用idea中的Live Templates自定义自动生成Spring所需的XML配置文件格式
|
19天前
|
XML Java 数据格式
Spring容器Bean之XML配置方式
通过对以上内容的掌握,开发人员可以灵活地使用Spring的XML配置方式来管理应用程序的Bean,提高代码的模块化和可维护性。
56 6
|
4月前
|
XML Java 数据格式
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
Spring 第二节内容补充 关于Bean配置的更多内容和细节 万字详解!
300 18
|
4月前
|
XML Java 应用服务中间件
springMVC01,springMVC的执行流程【第一个springMVC例子(XML配置版本):HelloWorld】
通过一个HelloWorld实例,介绍了SpringMVC的基本概念、执行流程,并详细讲解了如何创建和配置第一个SpringMVC项目(基于XML)。
springMVC01,springMVC的执行流程【第一个springMVC例子(XML配置版本):HelloWorld】
|
3月前
|
XML 分布式计算 资源调度
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(一)
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(一)
209 5
|
3月前
|
XML 资源调度 网络协议
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(二)
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(二)
183 4
|
3月前
|
分布式计算 资源调度 Hadoop
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
104 4
|
3月前
|
XML Java 数据格式
手动开发-简单的Spring基于XML配置的程序--源码解析
手动开发-简单的Spring基于XML配置的程序--源码解析
89 0
|
4月前
|
SQL XML Java
mybatis :sqlmapconfig.xml配置 ++++Mapper XML 文件(sql/insert/delete/update/select)(增删改查)用法
当然,这些仅是MyBatis功能的初步介绍。MyBatis还提供了高级特性,如动态SQL、类型处理器、插件等,可以进一步提供对数据库交互的强大支持和灵活性。希望上述内容对您理解MyBatis的基本操作有所帮助。在实际使用中,您可能还需要根据具体的业务要求调整和优化SQL语句和配置。
76 1
|
5月前
|
XML Android开发 UED
"掌握安卓开发新境界:深度解析AndroidManifest.xml中的Intent-filter配置,让你的App轻松响应scheme_url,开启无限交互可能!"
【8月更文挑战第2天】在安卓开发中,scheme_url 通过在`AndroidManifest.xml`中配置`Intent-filter`,使应用能响应特定URL启动或执行操作。基本配置下,应用可通过定义特定URL模式的`Intent-filter`响应相应链接。
129 12