powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Непонятки с префиксами и пространствами имён в схеме
8 сообщений из 8, страница 1 из 1
Непонятки с префиксами и пространствами имён в схеме
    #38783327
Добрый день.
Есть xml-файл:
Код: xml
1.
2.
3.
4.
5.
<?xml version="1.0" ?>
<cont:contract xmlns:cont="http://blablabla">
  <type>TYPE</type>
  <name>NAME</name>
</cont:contract>



Составил для него схему:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://blablabla" xmlns:cont="http://blablabla">
  <element name="cont:contract">
   <complexType>
      <all>
         <element name="type" type="normalizedString" />
         <element name="name" type="normalizedString" />
      </all>
   </complexType>
  </element>
</schema>



Поверяю валидность вот здесь: http://www.freeformatter.com/xml-validator-xsd.html
И валидатор орёт, что ему в схеме не нравится имя "cont:contract". Если убрать префикс, то всё нормально.
Почему писать "cont:contract неправильно? Ведь я здесь же в схеме прописал xmlns:cont=" http://blablabla".
...
Рейтинг: 0 / 0
Непонятки с префиксами и пространствами имён в схеме
    #38783370
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Летучий Змей
Код: xml
1.
targetNamespace="http://blablabla"

Схема описывает идентификаторы, которые будут находиться в пространстве " http://blablabla"
Летучий Змей
Код: xml
1.
xmlns:cont="http://blablabla"

Если нужно будет сослаться на идентификаторы из пространства " http://blablabla" то в схеме можно будет использовать для этого алиас cont
Летучий Змей
Код: xml
1.
<element name="cont:contract">

Здесь описывается элемент с именем cont:contract в пространстве имен " http://blablabla". Т.е. XML должен быть такого вида
Код: xml
1.
<cont:contract xmlns="http://blablabla">

или такого, что эквивалентно
Код: xml
1.
<ns:cont:contract xmlns:ns="http://blablabla">

но имя элемента не может содержать двоеточие, отсюда и ошибка валидатора

Ваша ошибка в непонимании неймспейсов. Идея там такая: каждый элемент имеет имя (local-name) и принадлежит некому пространству имен (быть может - пустому). Пространство имен элемента определяется в таком порядке
1) префикс
2) явное указание через модификатор xmlns элемента
3) пространство имен родительского элемента.

Префикс - это просто алиас пространства имен. Этот алиас валиден только в текущем документе

Следующие записи полностью эквивалентны
Код: xml
1.
<cont:contract xmlns:cont="http://blablabla">


Код: xml
1.
<ns:contract xmlns:ns="http://blablabla">


Код: xml
1.
<contract xmlns="http://blablabla">
...
Рейтинг: 0 / 0
Непонятки с префиксами и пространствами имён в схеме
    #38783375
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Летучий Змей, в name указывается имя элемента. А префикс пространство имен не является частью имени. Отсюда и ошибка.

Вот так нужно:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://blablabla" xmlns="http://blablabla">
  <xs:element name="contract">
    <xs:complexType>
      <xs:all>
        <xs:element name="type" type="normalizedString" />
        <xs:element name="name" type="normalizedString" />
      </xs:all>
    </xs:complexType>
  </xs:element>
</xs:schema>
...
Рейтинг: 0 / 0
Непонятки с префиксами и пространствами имён в схеме
    #38783376
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazileВот так нужно:Зачем вот это?bazile
Код: xml
1.
xmlns="http://blablabla"


Это лишнее
...
Рейтинг: 0 / 0
Непонятки с префиксами и пространствами имён в схеме
    #38783384
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рекомендую всем заинтересованным Namespace Tutorial . Всё показано очень наглядно в цвете. Понятно даже без знания английского языка.
...
Рейтинг: 0 / 0
Непонятки с префиксами и пространствами имён в схеме
    #38783568
Новая проблема.
Есть xml-файл:
Код: xml
1.
2.
3.
4.
<?xml version="1.0" ?>
<nsp1:root xmlns:nsp1="http://blablabla">
  <inner attr1="attr1value" attr2="attr2value"/>
</nsp1:root>



Схема:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://blablabla">
  <element name="root">
    <complexType>
      <all>
         <element name="inner">
           <complexType>
              <simpleContent>
                 <extension base="string">
                    <attribute name="attr1" type="string"/>
                    <attribute name="attr2" type="string"/>
                 </extension>
              </simpleContent>
           </complexType>
         </element>
      </all>
    </complexType>
  </element>
</schema>



Валидатор всё тот же - http://www.freeformatter.com/xml-validator-xsd.html

В вышеизложенном виде всё работает. Но если написать
Код: xml
1.
2.
3.
<nsp1:root xmlns:nsp1="http://blablabla">
  <nsp1:inner attr1="attr1value" attr2="attr2value"/>
</nsp1:root>


начинаются вопли, что Invalid Content Was Found Starting With Element 'nsp1:inner'. One Of '{inner}' Is Expected. Что не так?
...
Рейтинг: 0 / 0
Непонятки с префиксами и пространствами имён в схеме
    #38784180
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Летучий ЗмейЧто не так?Кривой валидатор. MSXML говорит, что XML валидный
...
Рейтинг: 0 / 0
Непонятки с префиксами и пространствами имён в схеме
    #38784278
Разобрался. Надо писать в схеме elementFormDefault="qualified".
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Непонятки с префиксами и пространствами имён в схеме
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]