IntelliJ Idea: схемы и DTD / настройка каталога XML
У меня есть много xml-файлов в моем проекте, которые описаны со многими xsd-файлами схемы. Схемы XSD используют сложную структуру пространства имен, и я хочу настроить IDE (IntelliJ Idea) для разрешения URI этих схем в моей локальной файловой системе ( https://www.jetbrains.com/idea/help/xml-catalog.html). Поэтому я открываю "Настройки идей", выбираю "Язык и рамки" -> "Схемы и 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>
Я ожидаю, что идея разрешит все схемы с префиксом http://www.mycompany.com/schemas
в моем локальном каталоге c:/Projects/MyProject/schemas
и использует их для проверки и выделения кода. Но все URI в редакторе остаются красными... Поиск в Google и игра с путями, URI и директивами в xml-catalog.xml
не дал результатов для меня...
Может кто-нибудь показать мне рабочие настройки каталога XML, которые помогают разрешить хотя бы один URI или public/system, или указать мне подробное руководство по выполнению этого?..
1 ответ
Согласно спецификации OASIS XML Catalog [1] ваш пример должен работать следующим образом:
http://www.mycompany.com/schemas/foo.xsd
переписывает на:
Файл:/// 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 Resolver?
Не помогает то, что в спецификации 1.0 Каталога OASIS XML используется "uriStartString" в [2] и Приложении B (ненормативный раздел), но "uriIdStartString" в Приложении A (ненормативный раздел).
Было бы здорово, если бы Норм Уэлч мог это прокомментировать; В конце концов он написал спецификацию OASIS XML Catalog и был вовлечен в реализацию Apache XML Resolver.
[1] https://www.oasis-open.org/committees/entity/spec-2001-08-06.html
[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