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

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

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

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

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

导入Namespace name key

Preferences -> XML -> xml Catalog;

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

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

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

<?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是如下的形式指定的:

xsi:schemaLocation="[namespace] [schemalocation]"

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

Preferences -> XML -> xml Catalog;

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

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

相应的配置文件如下:

<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节点。

<?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”,分为两种情况:

规范的使用命名空间,xml中需要通过属性"xsi:schemaLocation"来指定"[namespace] [schemalocation]";

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

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

实例

你希望为logback创建一个schema。

使用命名空间的schema

schema代码

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

<?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
<?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指定别名:

<?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
<?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。

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

<?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代码

<?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
<?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>
时间: 2024-12-03 14:36:53

eclipse导入本地xsd文件(新手慎入)的相关文章

eclipse 导入的java文件出错

问题描述 eclipse导入的java文件很多都出错了怎么办???求好心人帮忙解决我是把java源文件导入src目录下 解决方案 解决方案二:要整个工程导入,不能错误应该是没有导入相应的包.解决方案三:1.需要导入整个项目.2.查看一下lib下的jar包是否都引入.3.查看是普通Java项目还是其他项目,如JavaWeb.4.重新clean一下.解决方案四:右键工程BuildPath-->ConfigureBuildPath编辑一下JRESystemLibrary就ok了解决方案五:你的图里面说

Eclipse 和 IDEA 导入library库文件【图文步骤】

关于Eclipse 和 IDEA 导入library库文件,我们以PullToRefresh(上拉刷新下拉加载)组件的library为例来具体讲解. PullToRefresh下载地址:https://github.com/chrisbanes/Android-PullToRefresh 我们的目的就是把library文件夹导入到Eclipse或者IDEA中去 一.IDEA 导入library库文件步骤 1.首先我们要有一个项目,没有的就创建一个吧 2.右击项目名称点击Open Module S

eclipse如何把一个java文件部署成服务器并导入本地tomcat,本地tomcat已经运行当中

问题描述 eclipse如何把一个java文件部署成服务器并导入本地tomcat,本地tomcat已经运行当中 eclipse如何把一个java文件部署成服务器并导入本地tomcat,本地tomcat已经运行当中 简单的步骤是如何的,有图就更好啦,谢谢大神解答 解决方案 将java工程导出成一个war包然后放在%tomcat_home%/webapps 下面就可以了 解决方案二: 你是想将javaweb项目部署到tomcat服务器吧. 将javaweb项目部署到tomcat教程 解决方案三: 文

eclipse导入的外部maven项目class文件成了普通文件怎么办

问题描述 eclipse导入的外部maven项目class文件成了普通文件怎么办 eclipse导入的外部maven项目java.class文件成了普通文件怎么办? 解决方案 eclipse 导入.class文件eclipse 导入.class文件eclipse 导入.class文件 解决方案二: http://blog.sina.com.cn/s/blog_4adc4b090102uxgv.html

把工程导入eclipse后,在eclipse中没有html文件,回到原工程中html文件也消失了

问题描述 把工程导入eclipse后,在eclipse中没有html文件,回到原工程中html文件也消失了 把工程导入eclipse后,在eclipse中没有html文件,回到原工程中html文件也消失了,谢谢各位大神 解决方案 http://blog.csdn.net/hongchangfirst/article/details/7722703 解决方案二: 用myeclipse应该就可以了,另外也可以现在里面新建好一个web项目,然后把文件复制进去覆盖即可. 解决方案三: 原来的文件怎么会消

eclipse 导入项目-关于向eclipse里Import动态网页项目无法正常运行的问题

问题描述 关于向eclipse里Import动态网页项目无法正常运行的问题 项目是我从机房做的(可以完美运行),将文件夹拷入自己的笔记本并导入eclipse后,启动第一个html(login.html)页面正常,填完表单点击登录本应调用servlet(LoginServlet.java),此时出现下图的问题,servlet的jar包我也重新导入了,服务器也删除重新建了,小白实在找不到办法,求大神指点 解决方案 jsp代码中有错误. 解决方案二: Eclipse 下tomcat 的主页无法打开问题

为什么在Spring的配置里,最好不要配置xsd文件的版本号

为什么dubbo启动没有问题? 这篇blog源于一个疑问: 我们公司使了阿里的dubbo,但是阿里的开源网站http://code.alibabatech.com,挂掉有好几个月了,为什么我们的应用启动没有问题? 我们的应用的Spring配置文件里有类似的配置: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schem

Eclipse 导入工程失败

问题描述 Eclipse 导入工程失败 解决方案 用eclipse导入一个工程时失败,显示如下: 查找资料,原因是由于将导入的工程放入当前的工作目录下拉,只要把将导入的工程放到其他位置就可以啦.......答案就在这里:eclipse导入工程失败 解决方案二: 我有遇到过 可以将你的这个工程 拷贝到另一个文件夹下 再导入就可以了, 我遇到问题是这样解决的 但是不知道你的能解决不,不过可以试试

Android Studio教程(Eclipse导入工程和区别)

Android Studio教程本文主要介绍了从Eclipse导入工程到Android Studio以及Eclipse工程与Android Studio的区别和一些常用的快捷键. android studio下载 我所有的操作与版本是基于Mac系统,在Windows上的同学基本类似(作为一个技术人员,这些应该都不是问题),下面就分主题开始吧: 一.从Eclipse导入工程到Android Studio 根据官方的介绍,Android Studio可以兼容Eclipse的现有工程,但需要做一些操作