标签: xmlcatalog

从XJC中导入的模式解析类型定义失败

我使用JAXB来使用这个API来方便地使用XJC(XML-to-Java)编译器通过命名引用从XML Schema生成的对象模型.它抽象了JAXB上下文的创建,并通过各种背景魔法和反射找到了ObjectFactory方法.它的基本要点是你总是定义一个通用模式,然后任何数字(也可能是0)模式"扩展"一般模式,每个模式产生自己的数据模型.通用模式带有可重用的定义,扩展它的定义使用它们来组成自己的模型.

我现在遇到了我想为多个项目重用通用模式的情况.一般类型定义应该在项目中保持相同,并且一些代码将针对从这些类生成的抽象类构建.所以我需要先为一些通用模式生成类,然后生成那些扩展并单独使用它们的类.我正在使用Maven进行构建过程.

我遇到的问题是从扩展模式中的通用模式解析类型定义.

假设我的通用模式名为"general.xsd",如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.foobar.com/general"
xmlns:gen="http://www.foobar.com/general"
elementFormDefault="qualified" attributeFormDefault="qualified">

    <!-- Element (will usually be root) -->
    <xs:element name="transmission" type="gen:Transmission" />

    <!-- Definition -->
    <xs:complexType name="Transmission" abstract="true">
        <xs:sequence>
            <!-- Generic parts of a transmission would be in here... -->
        </xs:sequence>
    </xs:complexType>

</xs:schema>
Run Code Online (Sandbox Code Playgroud)

接下来是一个绑定文件来做一些命名自定义并设置输出的包名称:

<?xml version="1.0" encoding="UTF-8"?>
<bindings xmlns="http://java.sun.com/xml/ns/jaxb" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd"
    version="2.1">

    <!-- Bindings for the general schema -->
    <bindings schemaLocation="general.xsd" node="/xs:schema">

        <schemaBindings>
            <package name="com.foobar.models.general"/>
        </schemaBindings>

        <bindings node="//xs:complexType[@name='Transmission']">
            <!-- Some customization of property names here... …
Run Code Online (Sandbox Code Playgroud)

jaxb xjc xmlcatalog maven jaxb-episode

15
推荐指数
1
解决办法
2万
查看次数

使用Eclipse中依赖项导入的模式编辑xsd

我有一个maven项目A,在它的classpath中有/xsd/a.xsd.我还有一个带有/xsd/b.xsd的项目B,它通过商品引用/xsd/a.xsd.商品目录如下所示:

PUBLIC "http://foo.org/a" "maven:org.foo:a:jar::!/xsd/a.xsd"
Run Code Online (Sandbox Code Playgroud)

请注意网址中的maven协议.org.jvnet.jaxb2.maven2:maven-jaxb22-plugin使用该目录生成带有依赖项集的JAXB带注释的Java类.

到目前为止一切都很好.

现在我想在Eclipse中编辑/xsd/b.xsd.Eclipse报告警告:

<xsd:import namespace="http://foo.org/a" />
Run Code Online (Sandbox Code Playgroud)

因为没有schemaLocation属性它找不到/xsd/a.xsd.Eclipse无法识别上面定义的商品.

找到的解决方法是在Eclipse/Window/Preferences/XML/XML Catalog中添加一个目录条目:

PUBLIC "http://foo.org/a" "jar:file:/home/alain/maven/repository/org/foo/a/1.0-SNAPSHOT/a-1.0-SNAPSHOT.jar!/xsd/a.xsd"
Run Code Online (Sandbox Code Playgroud)

请注意对本地存储库的引用(maven是.m2的链接)和依赖项目的特定版本a.

任何人都遇到过这个问题并找到了更好的解决方法?

jaxb xmlcatalog eclipse-wtp m2e-wtp

7
推荐指数
1
解决办法
1498
查看次数

XMLCatalog可以用于模式导入吗?

您可以使用XMLCatalog解析模式导入语句中的xsds吗?如果是这样,首选/最佳做法是什么?我想在一个jar中打包xsds,所以使用相对schemaLocation不起作用.

到目前为止,我正在尝试做类似的事情:

SchemaFactory factory = SchemaFactory
        .newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
XMLCatalogResolver catalogResolver = new XMLCatalogResolver(
        new String[]{"/path/to/catalog.xml"});
factory.setResourceResolver(catalogResolver);

Schema schema = factory.newSchema(new StreamSource(ClassLoader
        .getSystemResourceAsStream("config.xsd")));
Run Code Online (Sandbox Code Playgroud)

没有太多运气.

java xml schema xmlcatalog

3
推荐指数
1
解决办法
872
查看次数

如何使用saxon内置目录功能

我下载了SaxonHE9-4-0-6J并希望在CLI上处理XHTML.然而,Saxon试图从W3C加载DTD,并且每个简单的命令都需要花费太多时间.

我有xml目录,我通过设置env变量指向目录文件成功使用xmllint,但我不知道如何让Saxon使用它.谷歌揭示了使用撒克逊目录的变化(因此混乱)的整个历史,没有一个让我高兴.

我下载了resolver.jar并将其设置在我的CLASSPATH中,但我不能让Saxon使用它.经过各种组合之后,我只使用了目录变量来跟踪http://www.saxonica.com/documentation/sourcedocs/xml-catalogs.xml,例如:

-catalog:path-to-my-catalog

(尝试都URI和常规路径),和不设定-r,-x,-y开关,但撒克逊不会看到它.我收到此错误:

查询处理失败:无法加载Apache目录解析程序库

resolver.jar在我的类路径中设置,我可以从命令行使用它:

C:\temp>java org.apache.xml.resolver.apps.resolver
Usage: resolver [options] keyword

Where:

-c catalogfile  Loads a particular catalog file.
-n name         Sets the name.
-p publicId     Sets the public identifier.
-s systemId     Sets the system identifier.
-a              Makes the system URI absolute before resolution
-u uri          Sets the URI.
-d integer      Set the debug level.
keyword         Identifies the type of resolution to perform:
                doctype, document, entity, notation, public, system,
                or …
Run Code Online (Sandbox Code Playgroud)

xml validation dtd saxon xmlcatalog

2
推荐指数
1
解决办法
2533
查看次数

标签 统计

xmlcatalog ×4

jaxb ×2

xml ×2

dtd ×1

eclipse-wtp ×1

java ×1

jaxb-episode ×1

m2e-wtp ×1

maven ×1

saxon ×1

schema ×1

validation ×1

xjc ×1