Есть ли способ указать альтернативный источник xsd для одного пространства имен

#xml #xsd #xml-namespaces #xsd-validation #xml-validation

Вопрос:

У меня есть несколько XML-файлов, использующих пространство имен экземпляра схемы (xsi) в качестве определения схемы. Я хотел бы проверить их на [почти] общедоступных машинах по онлайн-схеме (являющейся общедоступным стандартом ISO20022) и по копии этой схемы на локальном сервере, который находится в DMZ.

Как я могу указать альтернативный источник расположения для того же пространства имен ?

Это правильная попытка ?

 <Document xmlns="urn:iso:std:iso:20022:tech:xsd:pacs.003.001.02"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pacs.003.001.02 file:///dir/on/local/server/in/DMZ/pacs.003.001.02.xsd
      urn:iso:std:iso:20022:tech:xsd:pacs.003.001.02 https://cdn.rawgit.com/deeppay/deeppay-sepa/master/xsd/pacs.003.001.02.xsd">
 

Комментарии:

1. Обычно вы настраиваете каталог или распознаватель для сопоставления URI HTTP с URI локальных файлов.

2. Это зависит от используемого вами валидатора схемы. У большинства из них будет какой-то механизм для этого, например, API проверки JAXP позволяет указать решатель схем. Пожалуйста, укажите, как вы вызываете проверку.

Ответ №1:

Вы спрашиваете «это правильная попытка», указывая, что вы готовы изменить атрибут xsi:schemaLocation, чтобы указать другое местоположение. Это, безусловно, выполнимый и простой способ сделать это, хотя это может быть неудобно, если вы проверяете много документов.

Большинство валидаторов схем будут иметь какой-то механизм для перенаправления на локальную копию схемы, например, API проверки JAXP позволяет указать решатель схем, и вы можете использовать этот механизм с каталогом, который определяет локальные местоположения.

В качестве альтернативы API часто позволяет вам явно указывать схему, которую вы хотите проверить, xsi:schemaLocation полностью игнорируя ее. (В конце концов, если вы не верите, что документ действителен, почему вы должны доверять ему, чтобы он подсказал вам, где найти правильную схему для проверки?)

Пожалуйста, укажите, как вы вызываете проверку.