Как XML Validator узнает, где найти экземпляр схемы, объявленный в документе xml, чтобы проанализировать и использовать xsd? - PullRequest
0 голосов
/ 27 января 2019

Я не понимаю, как валидатор xml («процессор с поддержкой схемы», как его называет w3c) знает, где найти экземпляр схемы в типичной внешней ссылке на xsd из документа xml.

Вот типичная декларация:

<root xmlns="www.example.org"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="www.example.org" "http://example.org/schemas/schema1.xsd">
  <foo>some data</foo>
</root>
  1. мы объявляем пространство имен по умолчанию для корневого элемента и всех его дочерних элементов как "www.example.org"

  2. мы связываем имя / префикс "xsi" с пространством имен "http://www.w3.org/2001/XMLSchema-instance".

  3. Если я правильно понимаю (что, очевидно, не так!), То именно информация в фактическом ресурсе, на которую ссылается пространство имен xsi, позволяет валидатору узнать, что schemaLocation (в следующей строке) законный атрибут самого пространства имен xsi ("http://www.w3.org/2001/XMLSchema-instance").

Но пространство имен - это не местоположение (URI), так как парсер узнает, куда обращаться, чтобы определить, является ли schemaLocation на самом деле атрибутом, определенным в "http://www.w3.org/2001/XMLSchema-instance" пространстве имен?

Ответы [ 2 ]

0 голосов
/ 27 января 2019

как парсер узнает, куда идти, чтобы определить, schemaLocation фактически является атрибутом, определенным в "http://www.w3.org/2001/XMLSchema-instance" пространство имен?

Атрибут записывается с использованием имени xsi:schemaLocation, и есть объявление пространства имен, которое связывает префикс xsi с URI http://www.w3.org/2001/XMLSchema-instance, поэтому анализатор XML знает, что расширенное имя атрибута (в Clark запись) {http://www.w3.org/2001/XMLSchema-instance}schemaLocation. Это не требует знания схемы или какой-либо ссылки на внешний ресурс.

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

Найдя атрибут с расширенным именем {http://www.w3.org/2001/XMLSchema-instance}schemaLocation, средство проверки схемы, следовательно, знает, что его содержимое должно быть последовательностью пар URI пространства имен / местоположения. Это то, что валидаторы схемы просто знают, им не нужно обращаться к схеме, чтобы это выяснить. Поэтому он знает, что схема для пространства имен www.example.org может быть найдена в http://example.org/schemas/schema1.xsd, и он может пойти и извлечь схему из этого местоположения.

0 голосов
/ 27 января 2019

Средство проверки имеет встроенную схему для этого пространства имен. Спецификация определения схемы XML раздел 2.7 Разметка, связанная со схемой в проверяемых документах говорит:

Язык определения схемы XML: Structures определяет несколько атрибутов для непосредственного использования в любых документах XML. Эти атрибуты находятся в пространстве имен экземпляра схемы (http://www.w3.org/2001/XMLSchema-instance), описанном выше в Пространстве имен экземпляра схемы (xsi) (§1.3.1.2). Все процессоры схемы должны иметь соответствующие объявления атрибутов для этих атрибутов, встроенные в * 1009). * см. Объявление атрибута для атрибута «тип» (§3.2.7.1), Объявление атрибута для атрибута «nil» (§3.2.7.2), Объявление атрибута для атрибута «schemaLocation» (§3.2.7.3) и Объявление атрибута для атрибута noNamespaceSchemaLocation (§3.2.7.4).

...