1

我的项目中有很多 xml 文件,这些文件用许多 xsd 模式文件进行了描述。XSD 模式使用复杂的命名空间结构,我想配置 IDE (IntelliJ Idea) 以在我的本地文件系统 ( https://www.jetbrains.com/idea/help/xml-catalog.html ) 上解析这些模式的 URI。所以我打开 Idea Settings,选择 Language & Frameworks -> Schemas and DTDs -> XML Catalog 并指向xml-catalog.properties包含以下内容的文件的路径:

catalogs=xml-catalog.xml
relative-catalogs=yes
#verbosity=99

接下来我创建xml-catalog.xml文件(在与文件相同的目录中xml-catalog.properties):

<?xml version="1.0"?>
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="urn:oasis:names:tc:entity:xmlns:xml:catalog http://www.oasis-open.org/committees/entity/release/1.0/catalog.xsd"
         prefer="public">
    <rewriteSystem systemIdStartString="http://www.mycompany.com/schemas" rewritePrefix="file:///c:/Projects/MyProject/schemas"/>
</catalog>

我希望 Idea 会http://www.mycompany.com/schemas在我的本地目录中解析所有带有前缀的模式,c:/Projects/MyProject/schemas并将它们用于验证和代码突出显示。但是编辑器中的所有 URI 仍然是红色的......谷歌搜索和使用路径、URI 和指令xml-catalog.xml对我没有任何结果......

任何人都可以向我展示有助于解析至少一个 URI 或公共/系统的工作 XML 目录设置,或者指向我执行此操作的详细手册吗?

4

1 回答 1

2

根据 OASIS XML 目录规范 [1],您的示例应该如下工作:

http://www.mycompany.com/schemas/foo.xsd

改写为:

file:///c:/Projects/MyProject/schemas/foo.xsd

您是否尝试过使用 'rewriteURI' [2] 而不是 'rewriteSystem' [1] ?

这是我们在 JPL 多年来广泛使用的一个示例。至少,我知道这在 linux 和 macosx 上可靠地工作;但是,我对 Windows 没有任何要求。

<?xml version='1.0'?>
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog"
         prefer="public">

    <rewriteURI 
      rewritePrefix="file:./www.omg.org/" 
      uriStartString="http://www.omg.org/"/>

</catalog>

使用 Apache XML Resolver 1.2 库实现 [3],上面重写了以下 URI:

http://www.omg.org/spec/UML/20110701/UML.xmi

至:

文件:./www.omg.org/spec/UML/20110701/UML.xmi

但是,IntelliJ 14.1.3 说上面的格式不正确;具体来说,IntelliJ 声称不允许使用“uriStartString”属性,并且“rewriteURI”缺少“uriIdStartString”属性。也就是说,IntelliJ 期望这样:

<?xml version='1.0'?>
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog"
         prefer="public">

    <rewriteURI 
      rewritePrefix="file:./www.omg.org/" 
      uriIdStartString="http://www.omg.org/"/>

</catalog>

Apache XML Resolver 1.2 库不处理这种形式。

信任谁:IntelliJ?绿洲?Apache XML 解析器?

OASIS XML 目录规范 1.0 在 [2] 和附录 B(非规范)中使用“uriStartString”,但在附录 A(非规范)中使用“uriIdStartString”并没有帮助。

如果 Norm Welch 可以对此发表评论,那就太好了;毕竟他编写了 OASIS XML Catalog 规范并参与了 Apache XML Resolver 的实现。

[1] https://www.oasis-open.org/committees/entity/spec-2001-08-06.html#s.rewritesystem

[2] https://xerces.apache.org/xml-commons/components/resolver/resolver-article.html

[3] https://www.oasis-open.org/committees/entity/spec-2001-08-06.html#element-rewriteURI

于 2015-06-10T22:42:25.433 回答