我的项目中有很多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目录设置,或者指出我这样做的详细手册?...
答案 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