Обычно я просто включаю пространство имен и ожидаю, что если кто-то обрабатывает, он захочет проверить его, тогда он получит схему и настроит свою среду обработки, чтобы она могла найти XSD. У меня был ограниченный успех с xsi:schemaLocation
и такими атрибутами. Большинство проблем обычно связаны с поиском самого файла XSD. Некоторые процессоры хотят, чтобы этот путь был включен, что очень интересно, если XSD находится в файловой системе вместо веб-сервера.
Кажется, что каждый процессор реализует поиск немного по-своему. Некоторые используют отдельные объекты каталога схем, другие требуют, чтобы вы загружали и прикрепляли схемы отдельно. Если вы не предоставляете код для обработки документов, вам лучше не включать xsi:schemaLocation
или xsi:noNamespaceSchemaLocation
IMHO. Единственное, что может сделать их включение - это помешать тому, кто обрабатывает ваш документ, либо поместить схему в то же место, либо найти способ заставить выбранный процессор игнорировать или обойти спецификацию расположения.
Как примечание, самая большая проблема, с которой я столкнулся, была на самом деле с DTD, которые были определены с помощью объявления SYSTEM
, которое ссылалось на "c:\somepath\doc.dtd"
. Проблема заключалась в том, что я обрабатывал документы на коробке FreeBSD. В итоге я написал свой собственный распознаватель для сопоставления путей в стиле Windows с локальной файловой системой, поскольку не мог изменить сами документы и был обязан их проверять.