Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Как применяются key , keyref xml schema? / 5 сообщений из 5, страница 1 из 1
05.07.2014, 10:46
    #38688560
dwyli
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как применяются key , keyref xml schema?
<парковаться xmlns=" http://parken.org" xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://parken.org parken.xsd">
<машина номер="12341"/>
<машина номер="258"/>
<машина номер="12"/>
<машина номер="4587"/>
<парковка id="12">
<парк>258</parkt>
<парк>12</parkt>
</парковка>
<парковка id="1597">
<парк>12341</>
<парк>4587</>
</парковка>
</парковаться>

на основе этого xml документа надо составить схему, в которой машины имеют разные номера, парковки имеют разные id. На одной парковке может стоять только одна машина, которая уже известна из документа и каждой машине разрешается стоять максимально только на одной парковке. Как применить эти ограничения с помощью key keyref и unique. вот моя схема что смогла сделать дальше не знаю, Подскажите?

<xs:schema xmlns:xs=" http://www.w3.org/2001/XMLSchema" targetNamespace=" http://parken.org" xmlns:tns=" http://parken.org" elementFormDefault="qualified">
<xs:element name="парковаться">
<xs:complexType>
<xs:sequence>
<xs:element name="машина" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="номер" type="xs:positiveInteger"></xs:attribute>
</xs:complexType>

<xs:key name="номерType">
<xs:selector xpath="tns:парковаться/tns:машина></xs:selector>
<xs:field xpath="@номер"></xs:field>
</xs:key>

</xs:element>
<xs:element name="парковка" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="парк" type="xs:positiveInteger" maxOccurs="unbounded"></xs:element>
</xs:sequence>
<xs:attribute name="id" type="xs:positiveInteger"></xs:attribute>
</xs:complexType>

<xs:key name="idType">
<xs:selector xpath="tns:парковаться/tns:парковка"></xs:selector>
<xs:field xpath="@id"></xs:field>
</xs:key>

<xs:keyref refer="tns:номерType" name="номерRefType">
<xs:selector xpath="????"></xs:selector>
<xs:field xpath="?????"></xs:field>
</xs:keyref>

</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>

</xs:schema>
...
Рейтинг: 0 / 0
05.07.2014, 16:07
    #38688611
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как применяются key , keyref xml schema?
dwyliНа одной парковке может стоять только одна машина, которая уже известна из документаЧто это значит?
...
Рейтинг: 0 / 0
05.07.2014, 16:13
    #38688612
petalvik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как применяются key , keyref xml schema?
dwyli,

приведите валидный xml.
...
Рейтинг: 0 / 0
05.07.2014, 16:27
    #38688619
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как применяются key , keyref xml schema?
Ваша ошибка в том, что Вы не на том уровне объявляете ключи и в них указываете неправильный селектор
Код: 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.
50.
51.
<xs:schema 
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  targetNamespace="http://parken.org" 
  xmlns:tns="http://parken.org" 
  elementFormDefault="qualified">
    <xs:element name="парковаться">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="машина" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:attribute name="номер" type="xs:positiveInteger"/>
                    </xs:complexType>
                </xs:element>
                <xs:element name="парковка" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="парк" type="xs:positiveInteger" maxOccurs="unbounded"/>
                        </xs:sequence>
                        <xs:attribute name="id" type="xs:positiveInteger"/>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
         </xs:complexType>
         <!-- нам нужен уникальный номер машины в пределах всего элемента
             "парковаться" при этом сами мы находимся в элементе "парковаться".
             Т.е. путь до номера с текущего места будет tns:машина/@номер -->
         <xs:key name="номерType">
               <xs:selector xpath="tns:машина/>
                <xs:field xpath="@номер"/>
          </xs:key>

           <!-- налогично с id парковки -->
           <xs:key name="idType">
                <xs:selector xpath="tns:парковка"/>
                <xs:field xpath="@id"/>
            </xs:key>

            <!-- на каждой парковке должна стоять известная машина -->
            <xs:keyref refer="tns:номерType" name="номерRefType">
                  <xs:selector xpath="tns:парковка"/>
                  <xs:field xpath="tns:парк"/>
            </xs:keyref>

            <!-- и самое главное - каждая машина может находиться не более,
            чем на одной парковке -->
            <xs:key name="местоType">
                  <xs:selector xpath="tns:парковка"/>
                  <xs:field xpath="tns:парк"/>
            </xs:key>
    </xs:element>
</xs:schema>
...
Рейтинг: 0 / 0
06.07.2014, 20:03
    #38688941
dwyli
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как применяются key , keyref xml schema?
_Vasilisk_,
Спасибо вам большое теперь понятно все стало. сама бы не разобралась.
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Как применяются key , keyref xml schema? / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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