Каков наилучший способ проверки нескольких файлов XML на XSD? - PullRequest
0 голосов
/ 29 апреля 2018

Я работаю над проектом, который требует проверки многих файлов XML на соответствие их XSD, но проблема в том, что многие файлы XSD зависят от других XSD , что делает обычный вид проверки хлопотно, есть ли элегантный способ решить эту проблему?

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

Просто чтобы заметить, что я работаю с языком Java.

1 Ответ

0 голосов
/ 29 апреля 2018

Предполагая, что вы работаете с JAXP, вы можете setSchema() на SAXParserFactory или `DocumentBuilderFactory.

Одним из решений, частью которого я был, было чтение всех источников XSD в агрегированный Schema объект с использованием SchemaFactory.newSchema(Source[] schemas). Затем эта агрегированная схема смогла проверить любой документ XML, который ссылается на любую «верхнюю» схему; все imported схемы должны были быть частью агрегированной схемы. Насколько я помню, необходимо было упорядочить исходный массив по зависимости, чтобы, если схема A импортировала схему B, схема B должна была появиться до схемы A в массиве.

Также, насколько я помню, <include> не очень хорошо работал с этим механизмом.

Другим решением было бы установить LSResourceResolver на ShemaFactory. Вы должны будете реализовать свой собственный LSResourceresolver, который обслуживает байтовые или символьные потоки на основе ввода в распознаватель. Я лично не использовал и не исследовал это решение.

Первое решение, конечно, имеет то преимущество, что разбор и обработку схемы можно выполнить один раз и повторно использовать для всех последующих проверок; что-то, что, вероятно, будет трудно достичь со вторым вариантом.

Еще одна вещь, которую нужно иметь в виду (в зависимости от вашего контекста): Это хороший выбор дизайна, чтобы контролировать весь процесс «разрешения» (т.е. контролировать, как парсеры получают доступ к внешним ресурсам), как с точки зрения производительности, так и перспектива безопасности.

...