Как я могу ссылаться на XSD из CLASSPATH для проверки моего XML? - PullRequest
4 голосов
/ 28 января 2011

Как часть моего преобразования XML (с использованием XSL) я создаю атрибут для расположения схемы, чтобы можно было проверить результат преобразования.Тем не менее, поскольку я пытаюсь выполнить это как самостоятельный тест, я хочу иметь возможность установить соответствующий атрибут / значение для расположения схемы, чтобы она была отключена от моего CLASSPATH.

После небольшого поиска в Googleпробовал различные атрибуты schemaLocation, последняя попытка:

..
<xsl:attribute name="xsi:external-noNamespaceSchemaLocation">
  <xsl:value-of select="$schemaLocation"/>
</xsl:attribute>
..

, которая после преобразования приводит к:

<?xml version="1.0" encoding="UTF-8"?>
<emrException 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:external-noNamespaceSchemaLocation="emrException_1_0.xsd">
    ..
    <!-- more well-formed XML -->
</emrException>

Я дважды проверил, что мой файл emrException_1_0.xsd явнов CLASSPATH при запуске валидатора.Это валидатор DOM, и я использую Xerces 2.9.1 / Xalan 2.7.1, результат, который я получаю:

Caused by: org.xml.sax.SAXParseException: 
    cvc-elt.1: Cannot find the declaration of element 'emrException'.

Однако, когда я переключаюсь на использование схемы, где читается XSD-файлвне файловой системы или внешнего URL-адреса, тогда валидатор работает весело.

Как я могу получить XSD для считывания с моего CLASSPATH?

1 Ответ

1 голос
/ 28 января 2011

Один из способов - реализовать свои собственные LSResourceResolver и LSInput, чтобы передаваемый системный идентификатор можно было разрешить так, как вы захотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...