powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XSD: key - keyref
7 сообщений из 7, страница 1 из 1
XSD: key - keyref
    #37761251
Nick121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите с ключами. У самого ничего не получается :)

Есть XML:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
<?xml version="1.0" encoding="UTF-8"?>

<tables>
    <table name="user">
        <key>
            <fieldRef name="userId"/>
        </key>
        <field name="userId"/>
        <field name="name"/>
    </table>

    <table name="language">
        <key>
            <fieldRef name="languageId"/>
        </key>
        <field name="languageId"/>
        <field name="language" />
    </table>

    <table name="bind">
        <field name="userId"/>
        <field name="languageId"/>
    </table>
</tables>



Нужен XSD с ограничением или с проверкой по значению.
Код: xml
1.
2.
3.
4.
5.
6.
7.
    <table name="user">
        <key>
            <fieldRef name="userId"/> <!-- вот это -->
        </key>
        <field name="userId"/> <!-- должно соответствовать этому -->
        <field name="name"/>
    </table>



Сам смог сваять такое, но что-то не хочет работать. Почему не понимаю.

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
<?xml version = "1.0" encoding = "utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:as="myproject"
           targetNamespace="myproject"
           elementFormDefault="qualified">

  <xs:element name="tables">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="as:table" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="table">
    <xs:complexType>
        <xs:sequence>
          <xs:element name="key" type="as:key" minOccurs="0">
            <xs:keyref name="field_ref" refer="as:PKField">
              <xs:selector xpath="as:fieldRef"/>
              <xs:field xpath="@name"/>
            </xs:keyref>
          </xs:element>
          <xs:element name="field" type="as:field" maxOccurs="unbounded"/>
        </xs:sequence>
      <xs:attribute name="name" type="xs:string" use="required"/>
    </xs:complexType>

    <xs:key name="PKField">
      <xs:selector xpath="as:field"/>
      <xs:field xpath="@name"/>
    </xs:key>

  </xs:element>

  <xs:complexType name="key">
    <xs:sequence>
      <xs:element name="fieldRef">
        <xs:complexType>
          <xs:attribute name="name" type="xs:string" use="required"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="field">
    <xs:attribute name="name" type="xs:string" use="required"/>
  </xs:complexType>
</xs:schema>
...
Рейтинг: 0 / 0
XSD: key - keyref
    #37761549
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
 <xs:element name="table">
    <xs:complexType>
        <xs:sequence>
          <xs:element name="key" type="as:key" minOccurs="0"/>
          <xs:element name="field" type="as:field" maxOccurs="unbounded"/>
        </xs:sequence>
      <xs:attribute name="name" type="xs:string" use="required"/>
    </xs:complexType>

    <xs:key name="PKField">
      <xs:selector xpath="as:field"/>
      <xs:field xpath="@name"/>
    </xs:key>

    <xs:keyref name="field_ref" refer="as:PKField">
      <xs:selector xpath="as:Key/as:fieldRef"/>
      <xs:field xpath="@name"/>
    </xs:keyref>
  </xs:element>
...
Рейтинг: 0 / 0
XSD: key - keyref
    #37761846
Nick121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_, спасибо.

Действительно работает, но вроде я так тоже пытался... видимо где-то в другом месте ошибся.
(смотрел здесь http://wbex.ru/index.php/XML/XML_Schema/keyref)
А точно, вспомнил - когда так писал, то key и keyref размещал на уровень выше и он у меня ругался по другому: dublicate key.
Кстати, а в чем тогда разница между key и unique? Если key тоже уникальный...


Потом здесь смотрел http://msdn.microsoft.com/en-us/library/ms256101.aspx
Выложенный здесь вариант на msdn'овский пример похож...
А можешь объяснить в чем причина: почему такой вариант не работает? Если для этого, конечно, не надо писать трактат :)
(хм... msdn'овский пример вообще не ругается... и не важно что данные невалидные...)
...
Рейтинг: 0 / 0
XSD: key - keyref
    #37762090
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nick121в чем тогда разница между key и unique?unique допускает отсутствие элемента
Nick121А можешь объяснить в чем причина: почему такой вариант не работает?Какой - такой?
Nick121(хм... msdn'овский пример вообще не ругается... и не важно что данные невалидные...)Я не вижу ни схемы, ни данных. Поэтому могу только предположить, что у Вас где-то ошибка
...
Рейтинг: 0 / 0
XSD: key - keyref
    #37762331
Nick121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Nick121А можешь объяснить в чем причина: почему такой вариант не работает?
_Vasilisk_Какой - такой?

Тот с которого все началось :)

Ведь предложенный Вами вариант, который заработал отличается от моего тем, что вот этот кусок
Код: xml
1.
2.
3.
4.
    <xs:keyref name="field_ref" refer="as:PKField">
      <xs:selector xpath="as:Key/as:fieldRef"/>
      <xs:field xpath="@name"/>
    </xs:keyref>



подняли на уровень выше.


Nick121(хм... msdn'овский пример вообще не ругается... и не важно что данные невалидные...)
_Vasilisk_Я не вижу ни схемы, ни данных.

Там http://msdn.microsoft.com/en-us/library/ms256101.aspx и схема и данные. я просто скопировал.
Но это в общем не важно, можно и не смотреть.
_Vasilisk_Поэтому могу только предположить, что у Вас где-то ошибка
Вполне возможно. Вожусь со схемами всего 4-й день.
...
Рейтинг: 0 / 0
XSD: key - keyref
    #37763077
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nick121подняли на уровень выше.Именно в этом и разница. Изменился уровень контроля ключа
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
<root>
  <table>
    <row>
      <id>...</id>
      ......
      <id>...</id>
    </row>
    ........
    <row>
      ......
    </row>
    .......
  </table>
  ............
  <table>
    .........
  </table>

в зависимости от того на какой уровень воткнуть ключ по id он пудет контролировать уникальность в рамках строки, таблицы или документа
...
Рейтинг: 0 / 0
XSD: key - keyref
    #37763150
Nick_K_121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_в зависимости от того на какой уровень воткнуть ключ по id он пудет контролировать уникальность в рамках строки, таблицы или документа

Вон оно как.
Ок.
Спасибо.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XSD: key - keyref
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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