Модераторы: diadiavova

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Непонятки с целевым пространством имён в xsd 
:(
    Опции темы
LostSoul2
Дата 1.10.2014, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 1.10.2014

Репутация: нет
Всего: нет



Добрый день.
Я новичок в xml и всём, что с ним связано; сейчас изучаю язык схем xsd. Возник такой вопрос:
есть файл со схемой file.xsd, и там в схеме задано целевое пр-во имён, скажем,  targetNamespace="blablabla".  Обязательно ли тогда в самом xml-документе, который описывает эта схема, повторно задавать это пр-во имён? Т. е., писать что-то вроде: 
<ИмяПр-ваИмён:имяКорневогоЭлемента  xmlns:ИмяПр-ваИмён = "blablabla"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation = "blablabla  file.xsd">
...Содержимое документа.
</ИмяПр-ваИмён:имяКорневогоЭлемента>

Или можно просто писать:
<ИмяПр-ваИмён:имяКорневогоЭлемента  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation = "blablabla  file.xsd">
...Содержимое документа.
</ИмяПр-ваИмён:имяКорневогоЭлемента>

Вопрос возник на фоне примера вот отсюда.  Для удобства привожу этот пример здесь:
<p:Person
   xmlns:p="http://contoso.com/People"
   xmlns:v="http://contoso.com /Vehicles"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation=
     "http://contoso.com/People 
      http://contoso.com/schemas/people.xsd 
      http://contoso.com/schemas/Vehicles
      http://contoso.com/schemas/vehicles.xsd
      http://contoso.com/schemas/People
      http://contoso.com/schemas/people.xsd">
   <name>John</name>
   <age>28</age>
   <height>59</height>
   <v:Vehicle>
      <color>Red</color>
      <wheels>4</wheels>
      <seats>2</seats>
   </v:Vehicle>
</p:Person>
Как видите, присутствует "лишнее" пр-во имён http://contoso.com/schemas/People, которое упоминается в schemaLocation, но не определяется в корневом элементе Person, в отличие от пространств имён p и v.
PM MAIL   Вверх
diadiavova
Дата 1.10.2014, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5820
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Цитата(LostSoul2 @  1.10.2014,  15:42 Найти цитируемый пост)
 Обязательно ли тогда в самом xml-документе, который описывает эта схема, повторно задавать это пр-во имён?

Обязательно писать xmlns:prefix="namespace", а вот schemaLocation - необязательно. В сущности этот атрибут нужен только для того, чтобы указать валидатору, где находится схема документа, сопоставленная соответствующему пространству имен. Если в этом нет необходимости(например, если программа-валидатор просматривает собственное хранилище схем и находит нужную там), то можно вообще без этого атрибута обойтись. А вот указание пространства имен - совсем другое дело, оно необходимо для того, чтобы указать, к какому пространству относится элемент или атрибут.
Цитата(LostSoul2 @  1.10.2014,  15:42 Найти цитируемый пост)
Как видите, присутствует "лишнее" пр-во имён http://contoso.com/schemas/People, которое упоминается в schemaLocation, но не определяется в корневом элементе Person, в отличие от пространств имён p и v. 

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


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
LostSoul2
Дата 2.10.2014, 01:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 1.10.2014

Репутация: нет
Всего: нет



Цитата(diadiavova @  1.10.2014,  20:57 Найти цитируемый пост)
Цитата(LostSoul2 @  1.10.2014,  15:42 )
 Обязательно ли тогда в самом xml-документе, который описывает эта схема, повторно задавать это пр-во имён?

Обязательно писать xmlns:prefix="namespace", а вот schemaLocation - необязательно. В сущности этот атрибут нужен только для того, чтобы указать валидатору, где находится схема документа, сопоставленная соответствующему пространству имен. Если в этом нет необходимости(например, если программа-валидатор просматривает собственное хранилище схем и находит нужную там), то можно вообще без этого атрибута обойтись. А вот указание пространства имен - совсем другое дело, оно необходимо для того, чтобы указать, к какому пространству относится элемент или атрибут.


А если в схеме задать одно целевое пр-во имён, а в самом xml-документе задать другое, вот так:
<ИмяПр-ваИмён:имяКорневогоЭлемента  xmlns:ИмяПр-ваИмён = "ffffffff"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation = "blablabla  file.xsd">
Что тогда будет?
PM MAIL   Вверх
diadiavova
Дата 2.10.2014, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5820
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Цитата(LostSoul2 @  2.10.2014,  02:39 Найти цитируемый пост)
А если в схеме задать одно целевое пр-во имён, а в самом xml-документе задать другое

Тогда данная схема не будет сопоставлена с этим документом.
Цитата(LostSoul2 @  2.10.2014,  02:39 Найти цитируемый пост)
вот так:

А вот так - это не то же самое, что ты написал. Целевое пространство имен в схеме - задается атрибутом targetNamespace корневого элемента самого xsd-файла. А то, что ты пишешь в schemaLocation - это всего лишь путь к файлу схемы. Не надо путать. В данном случае не будет ровным счетом ничего. Пространство имен заданное в хмл-документе, подразумевает наличие схемы для этого пространства. Если валидатору известно местоположение схемы, то атрибут schemaLocation не нужен вообще, если неизвестно, то можно задать его этим атрибутом, но если в схемалокэйшн ты ты задаешь адрес схемы для пространства имен, не встречающегося в документе, то это просто лишняя информация. Возможно валидатор тебя об этом проинформирует, а возможно просто проигнорирует эти данные. Как он должен себя вести в соответствие со спецификацией и прописано ли его поведение в спецификации - я не знаю. Если интересно - поищи сам, можешь начать отсюда
http://www.w3.org/TR/xmlschema11-1/#xsi-namespace
А можешь просто попробовать такой документ проверить и посмотреть, что будет.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
LostSoul2
Дата 3.10.2014, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 1.10.2014

Репутация: нет
Всего: нет



Объясню своё видение ситуации после всего вышеизложенного вами и мной.
Если вот так:
<ИмяПр-ваИмён:имяКорневогоЭлемента  xmlns:ИмяПр-ваИмён = "blablabla"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation = "blablabla  file.xsd"> - то есть, имя пр-ва имён, заданного в корневом элементе, и имя целевого пр-ва имён, заданного в схеме, одинаковы и равны blablabla. Это значит, что схема ставится в соответствие той части xml-файла, на которую распространяется пр-во имён blablabla (ну, в данном случае оно распространяется на весь файл, т.к. было объявлено в корневом элементе). Т.е., в схеме должны описываться только элементы, которые в xml-файле встречаются в зоне действия пр-ва имён  blablabla.

Если вот так:
<ИмяПр-ваИмён:имяКорневогоЭлемента  xmlns:ИмяПр-ваИмён = "fffffff"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation = "blablabla  file.xsd"> - имена пространств имён fffffff и blablabla не совпадают. Это значит, что схема вообще ничему не соответствует в данном файле и, в сущности, с ним не связана.

Я всё правильно понял?


PM MAIL   Вверх
diadiavova
Дата 3.10.2014, 00:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5820
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Цитата(LostSoul2 @  3.10.2014,  01:08 Найти цитируемый пост)
Я всё правильно понял?

Не все. Во-первых с терминологией путаешься. Не надо путать пространства имен и префиксы.
Код

<x:root xmlns:x="urn:my-schemas:x-namespace">...

Здесь пространством имен является urn:my-schemas:x-namespace, а x - это префикс. Разница между ними как между именем переменной и ее значением. В данном случае префикс выполняет роль имени переменной, а пространство имен - ее значения. Не надо эти вещи путать.
 Во-вторых, области видимости... если ты объявляешь некий префикс пусть даже в корневом элементе, то это означает, что он будет соответствовать любому элементу внутри данного и самому этому элементу, за исключением тех элементов, в которых он будет переопределен. Переопределять можно где угодно. Одному и тому же пространству имен в одной и той же области видимости может соответствовать несколько префиксов(так же как несколько переменных могут ссылаться на один и тот же объект).

Цитата(LostSoul2 @  3.10.2014,  01:08 Найти цитируемый пост)
 имя пр-ва имён, заданного в корневом элементе, и имя целевого пр-ва имён, заданного в схеме, одинаковы и равны blablabla. Это значит, что схема ставится в соответствие той части xml-файла, на которую распространяется пр-во имён blablabla (ну, в данном случае оно распространяется на весь файл, т.к. было объявлено в корневом элементе).
Я немного иначе сформулирую, поскольку в твоей формулировке есть не очень конкретные определения. Схема предназначена для определения структуры некоего документа. Пространство имен - в теории уникальная строка, которая идентифицирует схему, то есть это ее глобально-уникальный идентификатор, если хочешь. В документе ты указываешь пространство имен для того, чтобы явно обозначить в какой именно схеме описан данный элемент или атрибут, это особенно критично для гибридных документов, в которых могут присутствовать элементы, описанные в разных схемах. Поскольку имена элементов не обязаны быть уникальными, то вполне может возникнуть ситуация, когда они совпадут и не будет ясно к какой схеме относится элемент. Именно поэтому их соотносят с пространствами имен, для того, чтобы не было неоднозначности. 
Цитата(LostSoul2 @  3.10.2014,  01:08 Найти цитируемый пост)
Если вот так:
<ИмяПр-ваИмён:имяКорневогоЭлемента  xmlns:ИмяПр-ваИмён = "fffffff"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation = "blablabla  file.xsd"> - имена пространств имён fffffff и blablabla не совпадают. Это значит, что схема вообще ничему не соответствует в данном файле и, в сущности, с ним не связана.
Тут уточнение: если пространство blablabla в документе нигде не используется, то это лишняя информация, но вовсе не обязательно оно должно быть объявлено именно в корневом элементе. То есть схемалокейшн будет в корневом элементе и вовсе не обязательно, чтобы это пространство было объявлено там же. И то, что имена пространств не совпадают вообще значения не имеет. Еще раз повторяю, что местоположение схемы, связанной с пространством имен вовсе не обязано присутствовать в документе. В данном случае правильнее было бы сказать, что информация из схемалокейшн не имеет никакого отношения к объявленному пространству имен, но сказать, что она совсем ничему не соответствует в данном документе нельзя, поскольку вполне может соответствовать(смотри выше).



--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
LostSoul2
Дата 3.10.2014, 02:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 1.10.2014

Репутация: нет
Всего: нет



Цитата(diadiavova @  3.10.2014,  00:38 Найти цитируемый пост)
Цитата(LostSoul2 @  3.10.2014,  01:08 )
 имя пр-ва имён, заданного в корневом элементе, и имя целевого пр-ва имён, заданного в схеме, одинаковы и равны blablabla. Это значит, что схема ставится в соответствие той части xml-файла, на которую распространяется пр-во имён blablabla (ну, в данном случае оно распространяется на весь файл, т.к. было объявлено в корневом элементе).
Я немного иначе сформулирую, поскольку в твоей формулировке есть не очень конкретные определения. Схема предназначена для определения структуры некоего документа. Пространство имен - в теории уникальная строка, которая идентифицирует схему, то есть это ее глобально-уникальный идентификатор, если хочешь. В документе ты указываешь пространство имен для того, чтобы явно обозначить в какой именно схеме описан данный элемент или атрибут, это особенно критично для гибридных документов, в которых могут присутствовать элементы, описанные в разных схемах. Поскольку имена элементов не обязаны быть уникальными, то вполне может возникнуть ситуация, когда они совпадут и не будет ясно к какой схеме относится элемент. Именно поэтому их соотносят с пространствами имен, для того, чтобы не было неоднозначности. 


То есть: если где-то в xml-файле (не обязательно в корневом элементе) объявлено пр-во имён namespaceID, то, в идеале, должна существовать схема с  targetNamespace=namespaceID, которая описывает все элементы из xml-документа, находящиеся в области видимости namespaceID?
PM MAIL   Вверх
diadiavova
Дата 3.10.2014, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5820
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



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


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
LostSoul2
Дата 3.10.2014, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 1.10.2014

Репутация: нет
Всего: нет



Спасибо, док.
PM MAIL   Вверх
LostSoul2
Дата 4.10.2014, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 1.10.2014

Репутация: нет
Всего: нет



Тема реанимируется. Возникли новые вопросы . 

Пример из книги. Фрагмент XML-файла:
<cont:contract xmlns:cont="http://blablabla">
   <cont:type>Трудовой договор</cont:type>
   <cont:name>Пётр Петров</cont:name>
</cont:contract>

Схема, описывающая пр-во имён http://blablabla:
<xsd:schema targetNamespace="http://blablabla" xmlns:cont="http://blablabla">
  <xsd:element name="cont:contract">
   <xsd:complexType>
      <xsd:all>
         <xsd:element name="type" type="normalizedString" />
         <xsd:element name="name" type="normalizedString" />
      </xsd:all>
   </xsd:complexType>
  </xsd:element>
</xsd:schema>

Вопрос: почему в схеме нужно писать <xsd:element name="cont:contract">, но при этом не нужно писать name="cont:type" и name="cont:name"?
Заранее спасибо.
PM MAIL   Вверх
diadiavova
Дата 5.10.2014, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5820
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



LostSoul2, будь добр, используй разметку для подсветки кода.



Цитата(LostSoul2 @  5.10.2014,  00:00 Найти цитируемый пост)
Вопрос: почему в схеме нужно писать <xsd:element name="cont:contract">, но при этом не нужно писать name="cont:type" и name="cont:name"?

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

<xsd:schema targetNamespace="http://blablabla" xmlns:cont="http://blablabla" xmlns="http://blablabla">



--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
LostSoul2
Дата 5.10.2014, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 1.10.2014

Репутация: нет
Всего: нет



Цитата(diadiavova @  5.10.2014,  13:55 Найти цитируемый пост)
Для вложенных элементов не всегда необходимо указывать префиксы, но для элементов верхнего уровня это нужно.  Обычно для того, чтобы избежать этого неудобства в корневом элементе схемы указывают целевое пространство имен для элементов без префиксов. 


А при каких условиях для вложенных элементов не нужно указывать префикс?
И почему всегда нужно указывать префикс для элементов верхнего уровня, раз уж можно указать целевое пр-во имён для всех имён без префиксов в схеме? Почему и имена элементов верхнего уровня не включить в это целевое пространство имён?
PM MAIL   Вверх
diadiavova
Дата 6.10.2014, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5820
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Элементы, объявленные в схеме на верхнем уровне - это элементы, доступные глобально. Они могут в том числе быть корневыми элементами документа и для корневого элемента указать тем или иным способом пространство имен все-таки надо. Для вложенных элементов, в случае отсутствия явного указания пространства имен с помощью префикса, префикс считается относящимся к тому пространству имен, к которому принадлежит родительский элемент(если такая возможность для него предусмотрена схемой, может быть и такое, что префикс придется писать в любом случае). Исходя из этого правила для гибридных документов, в схеме приходится указывать к какому пространству принадлежат элементы верхнего уровня. Кроме того, надо понимать, что в схеме есть два совершенно разных элемента с названием element, фактически это элементы разных типов. ЕМНИП, элементы верхнего уровня имеют и другие отличия от вложенных, так что путать их не надо.



--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
LostSoul2
Дата 7.10.2014, 02:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 1.10.2014

Репутация: нет
Всего: нет



Цитата(diadiavova @  6.10.2014,  22:49 Найти цитируемый пост)
Элементы, объявленные в схеме на верхнем уровне - это элементы, доступные глобально. Они могут в том числе быть корневыми элементами документа


Xочу уточнить. Вот есть корневой элемент A, в нём - вложенный элемент B, а в нём - ещё несколько вложенных элементов. В элементе B определено пр-во имён: <prefix:B xmlns:prefix="http://blablabla">.
И есть  схема для этого пр-ва имён: <xsd:schema targetNamespace="http://blablabla" xmlns:prefix="http://blablabla">...</xsd:schema>. В этой схеме элемент B, очевидно, должен описываться с префиксом. А вот те элементы, которые вложены в него - без префикса?
PM MAIL   Вверх
diadiavova
Дата 7.10.2014, 07:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5820
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Цитата(LostSoul2 @  7.10.2014,  03:44 Найти цитируемый пост)
В этой схеме элемент B, очевидно, должен описываться с префиксом. А вот те элементы, которые вложены в него - без префикса?

По умолчанию так и есть, но в корневом элементе схемы может быть определён атрибут elementFormDefault, а так же для конкретного элемента - form. Аналогичные правила есть и для атрибутов.
http://msdn.microsoft.com/ru-ru/library/ms...(v=vs.110).aspx


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
LostSoul2
Дата 8.10.2014, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 1.10.2014

Репутация: нет
Всего: нет



А что вообще делают изначально - схему, и под неё пишут xml-документ, или наоборот, схему делают для готового документа?
PM MAIL   Вверх
diadiavova
Дата 8.10.2014, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5820
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



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


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
LostSoul2
Дата 21.10.2014, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 1.10.2014

Репутация: нет
Всего: нет



Добрый день. 

Есть xml-файл:
Код

<?xml version="1.0" ?>
<cont:contract xmlns:cont="http://blablabla">
  <type>TYPE</type>
  <name>NAME</name>
</cont:contract>


Составил для него схему:
Код

<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". Или это валидатор кривой?
А если префикс действительно здесь не нужен, зачем тогда объявлять его в схеме через xmlns:cont="http://blablabla"? Или это объявление совсем для чего-то другого делается?

Это сообщение отредактировал(а) LostSoul2 - 21.10.2014, 17:26
PM MAIL   Вверх
diadiavova
Дата 21.10.2014, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5820
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Префикс не является частью имени, а имя не может содержать двоеточий. Префикс указывает на принадлежность элемента или атрибута некоторому пространству имен и в принципе является внутренним инструментом документа. Схема в принципе не может диктовать какие префиксы в документе можно использовать, а какие нет. Тот префикс, который ты объявил в схеме, используется для разруливания пространств внутри самой схемы и никак не влияет на то, какой префикс будет использоваться в целевом документе для указания на пространство имен, описанное в этой схеме.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
LostSoul2
Дата 22.10.2014, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 1.10.2014

Репутация: нет
Всего: нет



Цитата(diadiavova @  21.10.2014,  20:56 Найти цитируемый пост)
Тот префикс, который ты объявил в схеме, используется для разруливания пространств внутри самой схемы и никак не влияет на то, какой префикс будет использоваться в целевом документе для указания на пространство имен, описанное в этой схеме.


Да, с этим, я кажется, разобрался. Спасибо.
Но возникают новые траблы.

Есть xml-файл:
Код

<?xml version="1.0" ?>
<nsp1:root xmlns:nsp1="http://blablabla">
  <inner attr1="attr1value" attr2="attr2value"/>
</nsp1:root>




Схема:
Код

<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
Впрочем, может, я зря всё время даю ссылку на валидатор? Может, они все одинаковые?

В вышеизложенном виде всё работает. Но если написать
Код

<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. Что здесь может быть не так? Во всех примерах xml-файлов, что я видел, преспокойно пишут префикс и во вложенных элементах. Хотя догадываюсь, что проблема в схеме, чего-то я там не указал...
PM MAIL   Вверх
diadiavova
Дата 22.10.2014, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5820
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Цитата(LostSoul2 @  22.10.2014,  14:23 Найти цитируемый пост)
 Хотя догадываюсь, что проблема в схеме, чего-то я там не указал... 

Вот если бы ты еще догадался что именно, то было бы вообще замечательно. Я ведь об этом уже писал и причем не далее как в этой самой теме.
http://forum.vingrad.ru/index.php?showtopi...t&p=2625240


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
LostSoul2
Дата 22.10.2014, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 1.10.2014

Репутация: нет
Всего: нет



Благодарю. Разобрался.  Надо elementFormDefault="qualified" attributeFormDefault="qualified".
PM MAIL   Вверх
LostSoul2
Дата 23.10.2014, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 1.10.2014

Репутация: нет
Всего: нет



Добрый вечер.
Возник ещё вопрос: если в схеме не указано целевое пр-во имён, что это значит для xml-документа, соответствующего этой схеме (при условии, что документ валидный, т.е., действительно ей соответствует)? Что его элементы не должны принадлежать ни к каким пр-вам имён? Или что схема тупо описывает документ, не обращая внимания на пр-ва имён, к которым принадлежат элементы?
Спасибо.


Это сообщение отредактировал(а) LostSoul2 - 23.10.2014, 20:59
PM MAIL   Вверх
diadiavova
Дата 23.10.2014, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5820
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Элементы документа просто не будут сопоставлены схеме и вряд ли будет возможность объяснить валидатору на предмет чего выполняется проверка. Но если такая возможность всё же есть, то результат, видимо, от валидатора и будет зависеть.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
LostSoul2
Дата 23.10.2014, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 1.10.2014

Репутация: нет
Всего: нет



Зачем же тогда вообще нужны такие схемы? Для чего придуман noNamespaceSchemaLocation? Для каких-то редких случаев?

Некоторые примеры, вот этот, в частности - http://wbex.ru/index.php/XML/XML_Schema/no...eSchemaLocation - заставляют думать, что элементы xml-документа для такой схемы именно не должны находиться в каких-либо пр-вах имён. Валидатор этот пример принял, после некоторых доделок, не связанных с пр-вами имён.

Это сообщение отредактировал(а) LostSoul2 - 23.10.2014, 23:31
PM MAIL   Вверх
LostSoul2
Дата 2.11.2014, 01:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 1.10.2014

Репутация: нет
Всего: нет



Добрый вечер.
Посоветуйте, пожалуйста, какую-нибудь программу-валидатор, в которой можно было бы использовать схемы, состоящие из нескольких xsd-файлов, соединённых посредством xsd:import. Не шарю в этих программах совсем, а то, что видел в интернете, онлайн или для скачивания, не позволяет работать со схемами из нескольких файлов.
PM MAIL   Вверх
diadiavova
Дата 2.11.2014, 01:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5820
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Я в закрепленной теме оставил ссылку на список программ. Поищи среди них.
http://forum.vingrad.ru/index.php?showtopi...t&p=2546715


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

Прежде чем опубликовать вопрос, попробуйте воспользоваться поиском - возможно тема уже поднималась.

Также рекомендуем Вам зайти в раздел FAQ ,раздел дополняется и, возможно, там вы увидите готовое решение.

Для ответов на часто задаваемые вопросы существует FAQ раздела. Новости можно публиковать в разделе новостей. Для статей так же есть специальный раздел

Желаем удачи в Вашем деле!


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | XML, XSL | Следующая тема »


 




[ Время генерации скрипта: 0.2620 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.