Xmlns, xmlns: xsi, xsi: schemaLocation и targetNamespace?

Для следующего фрагмента XML:

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
                             http://maven.apache.org/xsd/maven-4.0.0.xsd">

Что означают атрибуты xmlns, xmlns:xsi и xsi:schemaLocation? Как они связаны? Что для : для?

И есть 2 URL-адреса в xsi:schemaLocation=

Если 1 не существует, зачем его все еще класть?

Ответы

Ответ 1

Связанные с пространством имен атрибуты в XML и XML-схеме (XSD)

  • xmlns является частью Пространства имен W3C в Рекомендации XML:

    Префикс xmlns используется только для объявления привязок пространства имен и по определению связано с именем пространства имен http://www.w3.org/2000/xmlns/.

    В вашем примере он объявляет, что http://maven.apache.org/POM/4.0.0 является пространством имен по умолчанию для элементов вашего проекта Maven.

  • xmlns:xsi объявляет стандартный префикс пространства имен (xsi) для используемого основного пространства имен в XSD: http://www.w3.org/2001/XMLSchema-instance

    Схема XML: Структуры также определяют несколько атрибутов для прямого использования в любых XML-документах. Эти атрибуты находятся в другом пространстве имен, который имеет имя пространства имен http://www.w3.org/2001/XMLSchema-instance. Для краткости текст и примеры в этой спецификации используют префикс xsi: для этого последнее пространство имен; на практике может использоваться любой префикс.

    В вашем примере он объявляет обычную привязку префикса пространства имен xsi к http://www.w3.org/2001/XMLSchema-instance, который правильно устанавливает следующие атрибуты:

    • xsi:type позволяет экземпляру XML напрямую связывать информацию типа элемента, а не через XSD, См. Как ограничить значение элемента XML с помощью xsi: type в XSD?

      В вашем примере, xsi:type не используется; включенный здесь для полноты относительно xsi.

    • xsi:nil позволяет считать пустой элемент действительным, если XSD не может в противном случае разрешили его.

      В вашем примере, xsi:nil не используется; включенный здесь для полноты относительно xsi.

    • xsi:schemaLocation и xsi:noNamespaceSchemaLocation предоставляют подсказки для XML-процессор относительно того, как связать XSD с XML-документом. Используйте xsi:schemaLocation, когда есть пространство имен; используйте xsi:noNamespaceSchemaLocation, когда нет пространства имен.

      В вашем примере существует пространство имен, поэтому вы правильно используете xsi:schemaLocation, значения которого разделены пробелом пары пространства имен и XSD-location-URI. В вашем примере используется пространство имен, http://maven.apache.org/POM/4.0.0, а пространства имен - это лексические конструкции именования, которые не должны быть восстановлены. В вашем примере также используется XSD-location-URI, http://maven.apache.org/xsd/maven-4.0.0.xsd, который может быть восстановлен, как и должно быть.

      Если ваш пример не использовал пространство имен, вы должны использовать xsi:noNamespaceSchemaLocation, значение которого представляет собой единственный XSD-location-URI, который намекает на местоположение предполагаемого XSD и который должен быть извлечен.

  • targetNamespace является атрибутом корня xs:schema элемент XSD, который определяет пространство имен корневого элемента экземпляров XML-документа, которые XSD предназначен для управления. Это должно соответствие по умолчанию или явное пространство имен этих корней XML-документов элементы.

Ответ 2

xmlns определяет пространство имен по умолчанию, в котором указано, что все узлы в проекте node и без псевдонима пространства имен будут находиться в пространстве имен http://maven.apache.org/POM/4.0.0 по умолчанию.

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" определяет пространство имен - http://www.w3.org/2001/XMLSchema-instance и дает ему новый псевдоним - xsi

xsi:schemaLocation является атрибутом schemaLocation of. "http://www.w3.org/2001/XMLSchema-instance" пространство имен. Он содержит пары значений - URI пространства имен и ссылку на расположение схемы для файла xsd-shema этого пространства имен. Он может содержать много пар значений - один файл xsd для каждого определенного URI пространства имен. Это означает, что ссылка http://maven.apache.org/xsd/maven-4.0.0.xsd contans xsd shema с определением пространства имен http://maven.apache.org/POM/4.0.0.