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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Уникальность в рамках группы 
V
    Опции темы
Compositum
  Дата 12.4.2012, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

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



Доброго времени суток. 

Можно ли в XSD создавать такой идентификатор, уникальность которого проверялась бы не во всём документе в целом, а лишь среди его братьев, в рамках текущего родителя?

Пример:

Код

<document>
    <group name="variant 1">
        <parameter id="p1"></parameter>
        <parameter id="p2"></parameter>
        <parameter id="p3"></parameter>
        <parameter id="p4"></parameter>
    </group>
    <group name="variant 2">
        <parameter id="p1"></parameter>
        <parameter id="p2"></parameter>
        <parameter id="p3"></parameter>
        <parameter id="p4"></parameter>
    </group>
</document>


Т.е. в данном случае уникальность id должна проверяться только в рамках того элемента group, в котором находятся элементы parameter.

Спасибо
PM   Вверх
diadiavova
Дата 12.4.2012, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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





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


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

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



Честно говоря, то, как по ссылке изложен материал, мне не понятно. :( Если не сложно, прошу на примерах показать, как это юзать. Я нацарапал такое (но оно не работает):

sample.xml
Код

<?xml version="1.0" encoding="utf-8"?>
<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://mea-orbis.com/2012/XMLSchema/unique ./sample.xsd">
    <group name="variant-1">
        <parameter id="p1"></parameter>
        <parameter id="p2"></parameter>
        <parameter id="p3"></parameter>
        <parameter id="p4"></parameter>
    </group>
    <group name="variant-2">
        <parameter id="p1"></parameter>
        <parameter id="p2"></parameter>
        <parameter id="p3"></parameter>
        <parameter id="p4"></parameter>
    </group>
</document>


и схему (sample.xsd):
Код

<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns="http://mea-orbis.com/2012/XMLSchema/unique">
  <xsd:element name="document">
    <xsd:complexType>
      <xsd:sequence>
        <!--Группа-->
        <xsd:element name="group" minOccurs="0" maxOccurs="unbounded">
          <xsd:complexType>
            <xsd:sequence>
              <!--Параметр-->
              <xsd:element name="parameter" minOccurs="0" maxOccurs="unbounded">
                <xsd:complexType>
                  <xsd:attribute name="id" type="xsd:ID"/>
                </xsd:complexType>                
              </xsd:element>
            </xsd:sequence>
            <xsd:attribute name="name" type="xsd:ID"/>
          </xsd:complexType>
          <!--Уникальность идентификатора в рамках группы-->
          <xsd:unique name="unic">
            <xsd:selector xpath="parameter"/>
            <xsd:field xpath="@id"/>
          </xsd:unique>
        </xsd:element>
      </xsd:sequence>      
    </xsd:complexType>    
  </xsd:element>
</xsd:schema>


Ещё хотелось бы понять разницу между xsd:IDREF и xsd:IDREFS. И последний, не маловажный вопрос: можно ли с помощью xsd:IDREF и xsd:IDREFS ссылаться на xsd:ID другого XML файла?

Спасибо.
PM   Вверх
Compositum
  Дата 12.4.2012, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

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



На форуме какая-то непонятная хрень... Если пытаюсь приаттачить файл, получаю бесконечно задумавшийся ползунок с просьбой подождать. В результате пост с приаттаченным файлом не создаётся, т.к. ползунок впадает в анабиоз. Раньше такого не было...

user posted image

Я хотел книжку выложить по XML Схемам...

Это сообщение отредактировал(а) Compositum - 12.4.2012, 22:42
PM   Вверх
diadiavova
Дата 12.4.2012, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Compositum, на самом деле ты все правильно понял, просто там ошибка немного в другом...
Опять проблемы с пространствами имен. В схеме надо объявлять основное пространство имен с префиксом и использовать этот префикс в выражениях xpath. Кроме того следует указывать elementFormDefault="qualified" в корневом элементе, чтобы опять не было путаницы. Вот в таком виде это сработает
Код

<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns="http://mea-orbis.com/2012/XMLSchema/unique" 
    targetNamespace="http://mea-orbis.com/2012/XMLSchema/unique" 
            xmlns:t="http://mea-orbis.com/2012/XMLSchema/unique"
            elementFormDefault="qualified">
  <xsd:element name="document">
    <xsd:complexType>
      <xsd:sequence>
        <!--Группа-->
        <xsd:element name="group" minOccurs="0" maxOccurs="unbounded">
          <xsd:complexType>
            <xsd:sequence>
              <!--Параметр-->
              <xsd:element name="parameter" minOccurs="0" maxOccurs="unbounded">
                <xsd:complexType>
                  <xsd:attribute name="id"/>
                </xsd:complexType>
              </xsd:element>
            </xsd:sequence>
            <xsd:attribute name="name" type="xsd:ID"/>
          </xsd:complexType>
          <!--Уникальность идентификатора в рамках группы-->
          <xsd:unique name="unic">
            <xsd:selector xpath="t:parameter"/>
            <xsd:field xpath="@id"/>
          </xsd:unique>
        </xsd:element>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>


Код

<?xml version="1.0" encoding="utf-8"?>
<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://mea-orbis.com/2012/XMLSchema/unique">
  
  <group name="variant-1">
    <parameter id="p1"></parameter>
    <parameter id="p2"></parameter>
    <parameter id="p3"></parameter>
    <parameter id="p4"></parameter>
  </group>
  <group name="variant-2">
    
    <parameter id="p1"></parameter>
    <parameter id="p2"></parameter>
    <parameter id="p3"></parameter>
    <parameter id="p4"></parameter>
<!-- Следующий элемент не пройдет валидацию-->
    <parameter id="p1"/>

  </group>
</document>


Добавлено через 1 минуту и 22 секунды
Цитата(Compositum @  12.4.2012,  23:42 Найти цитируемый пост)
 Раньше такого не было...

Бывало и раньше. Опиши проблему в "Багах Форума". Хотя не думаю, что это даст результат. Пройдет наверно само smile

Добавлено через 2 минуты и 18 секунд
Цитата(Compositum @  12.4.2012,  23:42 Найти цитируемый пост)
Я хотел книжку выложить по XML Схемам...

Зачем? smile И потом, не факт, что при этом будут соблюдены авторские права.


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


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

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



Твой вариант работает, но... Я не понял почему... Ты ведь в XML файле не указал где следует искать XSD схему... В первом посте я в XML использовал атрибут 
Код

xsi:schemaLocation="http://mea-orbis.com/2012/XMLSchema/unique ./sample.xsd"

Причём такой (мой) вариант XML не выдаёт ошибок, хотя он неправилен:
Код

<?xml version="1.0" encoding="utf-8"?>
<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
          xsi:schemaLocation="http://mea-orbis.com/2012/XMLSchema/unique ./sample.xsd">
    <group name="variant-1">
        <parameter id="p1"></parameter>
        <parameter id="p1"></parameter>
        <parameter id="p1"></parameter>
        <parameter id="p1"></parameter>
    </group>
    <group name="variant-2">
        <parameter id="p1"></parameter>
        <parameter id="p2"></parameter>
        <parameter id="p3"></parameter>
        <parameter id="p4"></parameter>
    </group>
</document>

А твой работает правильно... Почему???

Добавлено @ 23:03
а стоп... в моём варианте нужно было указать:
Код

xmlns="http://mea-orbis.com/2012/XMLSchema/unique"

тогда он заработает.

Но всё равно не понятно, почему работает твой, хотя ты не указал schemaLocation...

Это сообщение отредактировал(а) Compositum - 12.4.2012, 23:03
PM   Вверх
diadiavova
Дата 12.4.2012, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Compositum @  12.4.2012,  23:59 Найти цитируемый пост)
В первом посте я в XML использовал атрибут 

Об этом атрибуте я тебе уже говорил. Ты пренебрег тем, что я сказал, повторять не буду. Схема работает независимо от того, знает о ней документ или нет, она просто является описанием структуры, а все остальное - дело софта. Я не знаю каким пользуешься ты, но видимо он тоже видит твою схему.
Цитата(Compositum @  12.4.2012,  23:59 Найти цитируемый пост)

Но всё равно не понятно, почему работает твой, хотя ты не указал schemaLocation...

Магия  smile 


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


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

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



Цитата(diadiavova @ 12.4.2012,  23:08)

Об этом атрибуте я тебе уже говорил.

Ты писал, что XSL 1.0 с прибором кладёт на XSD. В данном случае речь не об XSL. Или я чего упустил?

Это сообщение отредактировал(а) Compositum - 12.4.2012, 23:11
PM   Вверх
diadiavova
Дата 12.4.2012, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Compositum @  13.4.2012,  00:11 Найти цитируемый пост)
Ты писал, что XSL 1.0 с прибором кладёт на XSD. В данном случае речь не об XSL. Или я чего упустил?

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


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

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

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

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

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


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

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


 




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


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

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