2017-02-20 42 views
0

Я использую ниже фрагментах, чтобы сделать объект схемы внутри статического блока:Импорт XSD автоматически загружается при загрузке ресурсов?

URL url = getClass().getClassLoader().getResource("test.xsd"); 

и test.xsd импортирует три других XSD-файл,

Мой вопрос будет импорт будет доступен, если ссылки на них (например, при проверке), или мне нужно импортировать импорт специально, создав объект URL.

ответ

0

Нет, вам придется загружать импортированные XSD явно, потому что getResource() не знает семантики XSD - он работает на уровне ресурсов/файлов, а не на уровне XSD.

+0

не совсем строгий. 1. 'getResource()' ничего не загружает. Он дает только URL-адрес ресурсу. 'getResourceAsStream()' делает. Но ... для любых XSD-процессоров (то есть валидатор) любой загруженный ресурсами загрузчика классов не имеет смысла. Он попытается загрузить «импорт», открыв местоположение схемы, определенное в XSD. – Vadim

+0

. Я полагаю, вы правы, что мой ответ был бы более подходящим для 'getResourceAsStream()'. – kjhughes

+0

Да. Я всегда общаюсь с ними. :-) 'getResource()' не является логическим именем, чтобы получить только URL. Во-первых, это то, что он дает ресурс самостоятельно ... – Vadim

0

Потому что, когда вы используете getClass().getClassLoader().getResource("test.xsd");, вы фактически не загружаете test.xsd, но получаете только URL-адрес, вам не нужно ничего делать.

XSD import имеет значение только для соответствующих инструментов. Как пример валидатора.

Итак, когда вы передаете местоположение схемы в валидатор, это может быть абсолютный путь, относительный путь к текущему рабочему каталогу или URL-адресу.

Затем, когда валидатор процессы XSD он пытается получить imports точно так же - абсолютный путь, по отношению к местоположению test.xsd схемы или URL, как это определено в test.xsd.

 Смежные вопросы

  • Нет связанных вопросов^_^