Элемент header не имеет объявленного пространства имен, поэтому он получает "безымянное пространство имен". Атрибут xmlns в элементе abc объявляет пространство имен как www.example.org (без префикса пространства имен). Элемент "user" фактически находится в пространстве имен www.example.org , поскольку он является дочерним элементом элемента " abc ", который имеет объявленное пространство имен ( xmlns = "www.example.org ).
Ни один из наборов элементов не использует префиксы пространства имен для устранения неоднозначности двух «типов» элементов, поэтому, когда вы на них смотрите, это немного сбивает с толку. Возможно, было бы более понятно, если бы вы использовали префикс пространства имен для www.example.org пространства в вашем XML, например:
<?xml version="1.0" encoding="UTF-8"?>
<header xmlns:example="www.example.org">
<example:abc >
<example:user>me</example:user>
</example:abc>
</header>
Приведенный выше XML и опубликованный вами XML эквивалентны, но немного легче понять, какие элементы «принадлежат» к пространству имен « www.example.org » когда вы используете префикс пространства имен.
Утилита генерации схем oXygen создала две схемы (ниже), которые импортируют друг друга.
Ваш образец XML-документа проверяется по этим схемам (поскольку они оба импортируют друг друга, вы можете ссылаться на любую из них, когда вызываете проверку)
Первый файл схемы sampleSchema.xsd :
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" xmlns:ns1="www.example.org">
<xs:import namespace="www.example.org" schemaLocation="example.xsd"/>
<xs:element name="header">
<xs:complexType>
<xs:sequence>
<xs:element ref="ns1:abc"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Второй файл схемы example.xsd :
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="www.example.org" xmlns:ns1="www.example.org">
<xs:import schemaLocation="sampleSchema.xsd"/>
<xs:element name="abc">
<xs:complexType>
<xs:sequence>
<xs:element ref="ns1:user"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="user" type="xs:NCName"/>
</xs:schema>