Мне кажется, что ваш вопрос связан с пониманием специального пространства имен: "нет пространства имен" .В следующем простом XML-документе
<?xml version="1.0" encoding="utf-8"?>
<root>
<myElement>Bla Bla</myElement>
</root>
элементы root
и myElement
имеют специальное пространство имен, названное "no namespace".Вы можете определить соответствующую XML-схему:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element name="myElement" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Поскольку в схеме она не используется targetNamespace
, схема определяет схему "без пространства имен".
Кстатисхема "http://www.w3.org/2001/XMLSchema-instance" дает вам простой способ ссылаться на схему из XML-документа. Давайте сохраним вышеуказанный документ схемы в файле NoNamespace.xsd
, а XML-документ мы сохраним в файле NoNamespace.xml
. Кроме того, мы помещаемоба файла в одной папке. Затем мы можем изменить XML-документ на следующий
<?xml version="1.0" encoding="utf-8"?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="NoNamespace.xsd">
<myElement>Bla Bla</myElement>
</root>
Теперь у нас есть явная ссылка на схему, которую мы используем.
Вопрос о квалифицированных именах элементов или квалифицированных именах атрибутов не зависит от вашего основного вопроса. Его очень легко объяснить. квалифицированных имен не более, чем имена с префиксом namespace как <xs:element>
или xsi:noNamespaceSchemaLocation="NoNamespace.xsd"
. Таким образом, квалифицированный может быть как элементом, так и атрибутом.
В одном документе вы можете смешивать элементы, относящиеся к другому пространству имен.Например, в следующем документе
<?xml version="1.0" encoding="utf-8"?>
<root>
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<p>Hello!</p>
</body>
</html>
<myElement>
<myChild xmlns="http://www.ok-soft-gmbh.com/xsd/test/123">
<mySubChild xmlns="">
<x></x>
</mySubChild>
<mySecondChild>Hello!<mySecondChild>
</myChild>
</myElement>
</root>
элемент <html>
и его дочерние элементы имеют пространство имен "http://www.w3.org/1999/xhtml"", и его следует проверить по известной схеме XHTML.Элементы <root>
и <myElement>
не имеют "namespece".Элементы <myChild>
и <mySecondChild>
имеют пространство имен "http://www.ok -soft-gmbh.com / xsd / test / 123".Элемент <mySubChild>
вместе с элементом <x>
также не имеет "namespece", как <root>
и <myElement>
.Так что все очень просто.
ОБНОВЛЕНО : Если я понимаю, вы исправляете все типы, определенные в схеме XML, будут "глобальными" в вашем определении.Вы не можете определить «внутренний» или «закрытый» типы.
Я не уверен, в чем заключается ваш вопрос к XML-файлу и схеме XSD, которые вы включили в свой пример.Возможно, вам будет полезно переписать XML-файл, используя ту же схему, как показано ниже:
<?xml version="1.0" encoding="UTF-8"?>
<contact xmlns="http://www.someDomain.com"
xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
xs:schemaLocation="http://www.someDomain.com Contacts.xsd">
<firstName></firstName>
<lastName xmlns=""></lastName>
</contact>
Таким образом, элемент lastName
определен в схеме Contacts.xsd
, но определен какэлемент из "пространства имен".Ваша XML-схема говорит, что элемент <contact>
из "http://www.someDomain.com"
должен иметь два дочерних элемента: firstName
из targetNamespace
"http://www.someDomain.com" и элемент lastName
из" no namespace ". Надеюсь, это поможетвы.