IntelliJ Idea:模式和DTD /配置XML目录

时间:2014-12-12 17:05:54

标签: intellij-idea xsd resolver xmlcatalog

我的项目中有很多xml文件,用许多xsd模式文件描述。 XSD架构使用复杂的命名空间结构,我想配置IDE(IntelliJ Idea)来解析我本地文件系统(https://www.jetbrains.com/idea/help/xml-catalog.html)上这些架构的URI。 所以我打开Idea Settings,选择Language&框架 - >模式和DTD - > XML目录并指向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都保持红色...... 谷歌搜索和使用xml-catalog.xml中的路径,URI和指令对我没有任何结果......

有没有人可以向我展示有助于解析至少一个URI或公共/系统的XML目录设置,或者指出我这样做的详细手册?...

1 个答案:

答案 0 :(得分:2)

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

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

重写为:

文件:/// C:/Projects/MyProject/schemas/foo.xsd

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

以下是我们在JPL多年来广泛使用的一个例子。至少,我知道这在linux和Linux上可靠地工作。 MacOSX的;但是,我对窗户没有任何主张。

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

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