前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >eclipse导入本地xsd文件(新手慎入)

eclipse导入本地xsd文件(新手慎入)

作者头像
pollyduan
发布于 2019-11-04 06:08:29
发布于 2019-11-04 06:08:29
1.7K08
代码可运行
举报
运行总次数:8
代码可运行

警告:以下内容如果对xml schema不了解可能会感觉不适。

eclipse使用xsd文件可以辅助编辑xml文件。如果我们自定义了schema文件,需要导入到xml catalog才可以生效。

如,自定义了logback配置文件的xsd,名为:logback.xsd

那么导入Eclipse中的方法有两种。

导入Namespace name key

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Preferences -> XML -> xml Catalog;

点击 Add 按钮,分别输入如下内容:

Location:选择项目或文件系统中的xsd文件。
Key type: Namespace name
Key: http://logback.qos.ch/logback.xsd

那么logback.xml文件如下设置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns="http://logback.qos.sh/logback"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
</configuration>

schemaLocation中填写前面指定的"Key"的字符串。

导入Schema Location key

使用命名空间

见多了Spring中的配置文件可能会发现,schemaLocation是如下的形式指定的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
xsi:schemaLocation="[namespace] [schemalocation]"

如果要使用这种方式,需要创建SchemaLocation。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Preferences -> XML -> xml Catalog;

点击 Add 按钮,分别输入如下内容:

Location:选择项目或文件系统中的xsd文件。
Key type: Schema Location
Key: http://logback.qos.ch/logback.xsd

相应的配置文件如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<configuration xmlns="http://logback.qos.ch/logback"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://logback.qos.ch/logback http://logback.qos.ch/logback.xsd">

此处的命名空间是schema中定义的targetNamespace,而不是当前xml文件的xmlns。

不使用命名空间

如果schema定义中没有使用命名空间,那么使用noNamespaceSchemaLocation指定schema的key。

由于xsd中没有使用命名空间,那么xml也不要使用命名空间,即"xmlns"不要设置,否则无法在xmlns中找xsd定义的无命名空间的configuration节点。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>
<configuration
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceschemaLocation="http://logback.qos.ch/logback0.xsd">

注:xsd文件也需要删除targetNameSpace。

如果eclipse提示:white space is required between publicid and systemid 可以在xml第二行添加:<!DOCTYPE configuration>,注意修改根节点名称。

测试发现一个问题,可以进行语法校验,但没有语法提示,或许eclipse的xml editor是根据ns去检索的?。

小结:

使用 "Namespace name",在eclipse增加catalog为Namespace,那么xml中直接使用命名空间就可以使用xsd文件来控制xml。

使用 "Schema location",分为两种情况:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
规范的使用命名空间,xml中需要通过属性"xsi:schemaLocation"来指定"[namespace] [schemalocation]";

不使用命名空间,xml中需要通过属性"xsi:noNamespaceschemaLocation"来指定"Scheme location"。注:xsd和xml均不可使用命名空间。

xsd文件修改以后,需要在xml catalog中reload一下,xml文件也关闭重新打开一下。

实例

你希望为logback创建一个schema。

使用命名空间的schema

schema代码

限于篇幅,只写了appender节点。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
 targetNamespace="http://logback.qos.sh/logback"
 xmlns:xs="http://www.w3.org/2001/XMLSchema"
 xmlns:tns="http://logback.qos.sh/logback" elementFormDefault="qualified" attributeFormDefault="qualified">

    <element name="configuration" type="tns:ConfiurationType"></element>

    <complexType name="ConfiurationType">
    	<sequence>
    		<element name="appender" type="tns:AppenderType"></element>
    	</sequence>
    	<attribute name="debug" type="boolean" default="false"></attribute>
    	<attributeGroup ref="tns:scanConf"></attributeGroup>
    </complexType>
    <attributeGroup name="scanConf">
    	<attribute name="scan" type="boolean" default="false"></attribute>
    	<attribute name="scanPeriod" type="string" default="60 seconds"></attribute>
    </attributeGroup>

    <complexType name="AppenderType">
    	<sequence>
    		<element name="Encoder" type="tns:EncoderType" maxOccurs="1" minOccurs="1"></element>
    	</sequence>
    	<attribute name="name" type="string" use="required"></attribute>
    	<attribute name="class" type="string" use="required"></attribute>
    </complexType>

    <complexType name="EncoderType">
    	<sequence>
    		<element name="pattern" type="string" maxOccurs="1" minOccurs="1"></element>
    	</sequence>
    </complexType>

</schema>

为xsd指定的目标命名空间为:http://logback.qos.sh/logback

xml catalog中配置Namespace name
xml catalog配置项

Location:选择这个xsd文件 Key type: Namespace name Key: http://logback.qos.sh/ns

注,这里的key没有强制要求必须是xsd中定义的targetNamespace,或者说这里可以覆盖缺省的targetNamespace。

xml引用Namespace name
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns="http://logback.qos.sh/ns"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
</configuration>

xml中缺省命名空间,即xmlns与配置的Key相同,即可生效。

另外一种配置方式,我的xml中配置了自己的缺省命名空间,那么可以为schema指定别名:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>
<logback:configuration xmlns="http://www.example.com/myapp" xmlns:logback="http://logback.qos.sh/ns">
</logback:configuration>

这是xml规范的基本知识,更多参考xml规范文档。

xml catalog中配置schema location
xml catalog配置项

Location:选择这个xsd文件 Key type: Schema location Key: http://logback.qos.sh/logback.xsd

注,这里的key没有强制要求必须是xsd文件的物理uri,但是,为了便于你的用户深入了解细节,应该提供物理存在的uri。

xml引用Schema location
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns="http://logback.qos.sh/logback"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://logback.qos.sh/logback http://logback.qos.ch/logback.xsd">
</configuration>

注:这里xmlns为schema文件中的targetNamespace。

同样有另一种别名的方式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>
<logback:configuration xmlns="http://www.example.com/myapp" xmlns:logback="http://logback.qos.sh/logback"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://logback.qos.sh/logback http://logback.qos.ch/logback.xsd">
</logback:configuration>

注:这里 xmlns:logback 为schema文件中的targetNamespace。

不使用命名空间的schema

schema代码
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
 xmlns:tns="http://logback.qos.sh/logback" elementFormDefault="qualified">

    <xs:element name="configuration" type="ConfiurationType"></xs:element>

    <xs:complexType name="ConfiurationType">
    	<xs:sequence>
    		<xs:element name="appender" type="AppenderType"></xs:element>
    	</xs:sequence>
    	<xs:attribute name="debug" type="xs:boolean" default="false"></xs:attribute>
    	<xs:attributeGroup ref="scanConf"></xs:attributeGroup>
    </xs:complexType>
    <xs:attributeGroup name="scanConf">
    	<xs:attribute name="scan" type="xs:boolean" default="false"></xs:attribute>
    	<xs:attribute name="scanPeriod" type="xs:string" default="60 seconds"></xs:attribute>
    </xs:attributeGroup>

    <xs:complexType name="AppenderType">
    	<xs:sequence>
    		<xs:element name="Encoder" type="EncoderType" maxOccurs="1" minOccurs="1"></xs:element>
    	</xs:sequence>
    	<xs:attribute name="name" type="xs:string" use="required"></xs:attribute>
    	<xs:attribute name="class" type="xs:string" use="required"></xs:attribute>
    </xs:complexType>

    <xs:complexType name="EncoderType">
    	<xs:sequence>
    		<xs:element name="pattern" type="xs:string" maxOccurs="1" minOccurs="1"></xs:element>
    	</xs:sequence>
    </xs:complexType>
</xs:schema>

与前面的比较就是删除了targetNamespace,同时将类型引用中的tns:前缀删除。

xml catalog中配置schema location
xml catalog配置项

Location:选择这个xsd文件 Key type: Schema location Key: http://logback.qos.sh/logback_nons.xsd

注,这里的key没有强制要求必须是xsd文件的物理uri,但是,为了便于你的用户深入了解细节,应该提供物理存在的uri。

xml引用Schema location
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration>
<configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:noNamespaceSchemaLocation="http://logback.qos.sh/logback_nons.xsd">
<appender name="d" class="c">
	<Encoder>
		<pattern>a</pattern>
	</Encoder>
</appender>
</configuration>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
分布式服务Dubbo从入门到"精通"之自定义Schema
相信,大多数小伙伴们仔细阅读了上篇文章并翻阅了Dubbo的部分代码,一定会对其有一个大体的了解吧。 当然,不了解也没问题,反正不是我不想让你不了解。好了,言归正传,今天呢,与大家分享的主题如题目所述《
小柒2012
2018/04/16
8250
分布式服务Dubbo从入门到"精通"之自定义Schema
[Java拾遗一] XML的书写规范与解析.
前言 今天天气大好, 起了个大早开始总结一些常用的基础知识. XML一直来说都很陌生, 使用大多是用于配置文件, 之前并没有细究过其中的约束规范, 今天刚好没事来学习并总结下.  ---- 1,XML基础介绍   XML 指可扩展标记语言(EXtensible Markup Language),也是一种标记语言,很类似 HTML.它的设计宗旨是传输数据,而非显示数据它;标签没有被预定义,需要自行定义标签。   xml的作用:     XML 是各种应用程序之间进行数据传输的最常用的工具,并且在信息存储和描
一枝花算不算浪漫
2018/05/18
1.6K0
XML Schema(XSD)详解:定义 XML 文档结构合法性的完整指南
在 XML 世界中,每天都在使用数百种标准化的 XML 格式。其中许多 XML 标准是由 XML Schema 定义的。XML Schema 是 DTD 的基于 XML 的(更强大的)替代品。
小万哥
2024/05/09
1.2K0
XML Schema(XSD)详解:定义 XML 文档结构合法性的完整指南
Java之XML的使用「建议收藏」
一.xml的定义和优势: (1).定义: 在描述一些有结构性的数据时应当使用XML来描述,例如:用户信息/省市结构等 XML(eXtensible Markup Language),是一种可扩展的标记语言,类似HTML。 XML技术是W3C组织(World Wide Web Consortium万维网联盟)发布的,目前遵循的是W3C组织于1998年发布的XML1.0规范。 HTML: 显示页面,网页. 学习里面自带的标签 XML: 传输数据,而非显示数据/少量数据存储。 XML标签没有被预定义,需要用户自行定义标签。
全栈程序员站长
2022/09/08
5620
Java之XML的使用「建议收藏」
XML Schema <第三篇>
  验证XML文档是否符合议定的XML结构有两种方法,分别是DTD模式与XML Schema。本文主要介绍XML Schema。
全栈程序员站长
2021/12/23
1.5K0
XML Schema <第三篇>
Spring Web Services 框架入门研究–发布服务
关于Spring Web Services框架 Spring web services(以下简称:Spring WS)框架是springframework东家SpringSource公司旗下的一个子项目。目前的版本是1.5M1,最新版本可以从spirngframework网站下载,项目地址是:http://www.springframework.org/node/567 由于怀着对spring框架的热爱,于是打算学习下这个框架。
全栈程序员站长
2022/07/05
1.1K0
利用spring-ws 现实soap webservice服务
背景:有的系统还用soap协议来做webservice.特别要和他们对接的时候。我们需要实现一套。 今天说说,利用spring-ws来(部署,调用)webservcie,能很好的和主流架构(spring-mvc)结合。 参考资料,官方文档https://docs.spring.io/spring-ws/docs/3.0.0.RELEASE/reference/ spring-ws像spring-mvc一样,在集成到web项目时,前端有个servlet分发请求消息的概念。 这个servlet接受soap
技术蓝海
2018/04/26
6K0
利用spring-ws 现实soap webservice服务
Modifying namespace in XML document programmatically
Modifying namespace in XML document programmatically static XElement stripNS(XElement root) { re
阿新
2018/04/12
1.4K0
Modifying namespace in XML document programmatically
spring-namespace实现自己的自定义标签类
5、编写spring.handlers和spring.schemas供spring读取
Java架构师必看
2021/05/14
4880
spring-namespace实现自己的自定义标签类
Java知识点——xml概述
XML 1. XML概述 Extensible Markup Language 可拓展标记语言 用途: 1. 数据存储,小型数据库,存在一定的CRUD操作可行性 2. 网络端数据的传输 3. JavaWEB框架项目配置文件 Spring Druid .... w3c万维网联盟指定的规范 2. 基本语法 1. XML文件后缀名是.xml 2. XML第一行是对于当前文件的定义声明 3. XML文件中有且只有一个根标签 4. 属性值必须使用引号包含,这里推荐使用双引号 5. 标签必须正确匹配,正确
用户7073689
2020/03/18
4370
源码分析ElasticJob前置篇之自定义Spring命名空间
本文将通过<reg:zookeeper/>来讲解如何在Spring中自定义标签,其中更是包含了ElasticJob的启动入口。
丁威
2019/06/10
1K0
源码分析ElasticJob前置篇之自定义Spring命名空间
XML快速入门学习笔记
问:什么是 XML? 答:XML 指可扩展标记语言(EXtensible Markup Language);且是一种很像HTML的标记语言;设计宗旨是传输数据,而不是显示数据。 XML 标签没有被预定义,您需要自行定义标签,它设计为具有自我描述性。 目前,XML 在 Web 中起到的作用不会亚于一直作为 Web 基石的 HTML;XML 是各种应用程序之间进行数据传输的最常用的工具。
全栈工程师修炼指南
2020/10/23
8.9K0
XML快速入门学习笔记
WebService入门初使用(二)调用WebService服务
上一节记录完WebService的创建,鉴于篇幅所致,将调用部分单独拿到本节,所调用WebService服务基于上一章节内容。
WindCoder
2018/09/20
1.7K0
WebService入门初使用(二)调用WebService服务
谈谈WCF中的Data Contract (1):Data Contract Overview
Contract in SO:Contract是对操作和数据的抽象 在我们看来,Service Orientation提供了一种对业务、功能进行分解的方式。针对SO,我们把一个具体的业务流程或者一个复杂的功能分解成一个个独立完成某项任务的子单元,这些子单元通过一个个Service来承载。对于Service本身来讲,他们应该是自治的,独自完成自己的功能、不依赖于其他的Service。但是Service的价值体现在它被潜在的消费者使用的程度。这实际上包含两方面的内容,作为Service本身,它如何将自己暴露出来
蒋金楠
2018/02/07
6520
面试题:怎样把所有的组件的lazy-init值都设置为默认true?
作为面试者,我很乐意解答把所有组件的lazy-init值都设置为默认true这个问题。
GeekLiHua
2025/01/21
410
第70节:Java中xml和tomcat
eXtendsible markup language 可扩展性语言,用来保存数据,用来配置文件,数据传输载体. 客户端->访问->服务器
达达前端
2019/07/03
1.5K0
第70节:Java中xml和tomcat
【Java 进阶篇】Java XML约束:确保数据一致性和有效性
XML(可扩展标记语言)是一种常用的数据交换格式,用于存储和交换数据。然而,为了确保数据的一致性和有效性,通常需要定义XML约束。XML约束是一种规则集,定义了XML文档的结构、元素、属性和数据类型。本篇博客将详细介绍Java中如何使用XML约束,以及如何创建、验证和应用XML约束。
繁依Fanyi
2023/10/25
4410
【Java 进阶篇】Java XML约束:确保数据一致性和有效性
Xml基础01
可扩展的标记语言,是以简单文本格式存储数据的方式。可用于序列化反序列化(序列化是通过将对象转换为字节流,从而存储对象或将对象传输到内存,数据库或文件的过程。主要用途是保存对象的状态,包括对象的数据,以便能够在需要是重建对象。反向过程称为 反序列化。)
Echo_Wish
2023/11/30
1990
谈谈WCF中的Data Contract(3):WCF Data Contract对Collection & Dictionary的支持
在本篇文章上一部分Order Processing的例子中,我们看到原本已Collection形式定义的DetailList属性(public IList<TDetail> DetailList),在Data Contract中却以Array的方式体现(public OrderDetail[] DetailList)。我们现在就来详细地讨论一下基于Collection & Dictionary 的Data Contract。 Data Contract for Collection 我们照例用例子来说
蒋金楠
2018/01/16
7050
谈谈WCF中的Data Contract(3):WCF Data Contract对Collection & Dictionary的支持
[亲测可用]springBoot调用对方webService接口的几种方法示例
平常我们开发调用接口一般会用到几种数据格式,比如有restful的,这个是目前最流行的,也是最简单开发的,还有一种就是webservice数据格式,这个应该是很久以前的一些项目是用的这种
小小鱼儿小小林
2020/06/29
14.1K0
推荐阅读
相关推荐
分布式服务Dubbo从入门到"精通"之自定义Schema
更多 >
LV.1
这个人很懒,什么都没有留下~
作者相关精选
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验