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

Другие вопросы по тегам