Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / [xsd][unique] Правило не работает. / 6 сообщений из 6, страница 1 из 1
22.06.2012, 12:58
    #37850142
YetAnotherEntity
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[xsd][unique] Правило не работает.
Пишу схему и застрял на unique. Вот отрывок из схемы:
Код: 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.
 <xs:element name="StudentBase">
      <xs:complexType>
          <xs:sequence>
              <xs:element name="Students">
                  <xs:complexType>
                      <xs:sequence>
                          <xs:element name="Student" maxOccurs="unbounded" >
                              <xs:complexType>
                                <xs:sequence>
                                    <xs:element name="FullName" type="xs:string" nillable="false" />
                                    <xs:element name="Region" type="xs:string" />          
                                    <xs:element name="E-Mail" type="email" />
                                    <xs:element name="StartDate" type="xs:date" />        
                                    <xs:element name="ContractSigned" type="xs:boolean" /> 
                                </xs:sequence>
                            </xs:complexType> 
                          </xs:element>
                      </xs:sequence>
                  </xs:complexType>                                                                                                                                           
                  <xs:unique name="uniqueStudentsFullNameConstraint">
                      <xs:selector xpath="Students/Student" />
                      <xs:field xpath="FullName" />
                  </xs:unique>
              </xs:element>
              <xs:element name="Curriculums" >
                  <xs:complexType>
                      <xs:sequence>
                          <xs:element name="Curriculum" type="Curriculum" maxOccurs="unbounded" />
                      </xs:sequence>
                  </xs:complexType>
              </xs:element>
          </xs:sequence>
      </xs:complexType>
  </xs:element>  


Проблема в том, что валидатор не ругается при наличии нескольких студентов с одинаковым именем. Может, кто-нибудь увидит ошибку?
...
Рейтинг: 0 / 0
22.06.2012, 13:20
    #37850196
YetAnotherEntity
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[xsd][unique] Правило не работает.
Перенос правила unique на один уровень вверх с изменением xpath запроса тоже не помогает:
Код: 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.
 <xs:element name="StudentBase">
      <xs:complexType>
          <xs:sequence>
              <xs:element name="Students">
                  <xs:complexType>
                      <xs:sequence>
                          <xs:element name="Student" maxOccurs="unbounded" >
                              <xs:complexType>
                                <xs:sequence>
                                    <xs:element name="FullName" type="xs:string" nillable="false" />
                                    <xs:element name="Region" type="xs:string" />          
                                    <xs:element name="E-Mail" type="email" />
                                    <xs:element name="StartDate" type="xs:date" />        
                                    <xs:element name="ContractSigned" type="xs:boolean" /> 
                                </xs:sequence>
                            </xs:complexType> 
                          </xs:element>
                      </xs:sequence>
                  </xs:complexType> 
              </xs:element>
              <xs:element name="Curriculums" >
                  <xs:complexType>
                      <xs:sequence>
                          <xs:element name="Curriculum" type="Curriculum" maxOccurs="unbounded" />
                      </xs:sequence>
                  </xs:complexType>
              </xs:element>
          </xs:sequence>
      </xs:complexType>                                                                                                                                          
      <xs:unique name="uniqueStudentsFullNameConstraint">
          <xs:selector xpath="Students/Student" />
          <xs:field xpath="FullName" />
      </xs:unique>
  </xs:element> 
...
Рейтинг: 0 / 0
22.06.2012, 14:01
    #37850269
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[xsd][unique] Правило не работает.
YetAnotherEntityМожет, кто-нибудь увидит ошибку?В первом варианте ошибка в селекторе. Должно быть
Код: xml
1.
<xs:selector xpath="Student" />



какое пространство имен у схемы? Приведите все атрибуты элемента <xsd:schema>
...
Рейтинг: 0 / 0
22.06.2012, 16:54
    #37850711
YetAnotherEntity
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[xsd][unique] Правило не работает.
_Vasilisk_YetAnotherEntityМожет, кто-нибудь увидит ошибку?В первом варианте ошибка в селекторе. Должно быть
Код: xml
1.
<xs:selector xpath="Student" />



какое пространство имен у схемы? Приведите все атрибуты элемента <xsd:schema>

Да, там была опечатка, склеил его по памяти после изменений. Второй пример точно корректен, но валидатор работать не хочет. Причем один раз Eclise таки указал мне, что существует дублирование, т.е. правило сработало. Не могу понять, неужели валидаторы настолько кривые, что не могут корректно обработать правило? Пробовал валидировать в Netbeans, в Eclipse и ещё паре онлайн валидаторов.

Вот атрибуты корневого элемента схемы:
Код: xml
1.
2.
3.
4.
5.
<xs:schema version="1.0"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           targetNamespace="http://www.ins.com"
           xmlns="http://www.ins.com"
           elementFormDefault="qualified">



А вот атрибуты в валидируемом xml файле:
Код: xml
1.
2.
3.
4.
<StudentBase xmlns="http://www.ins.com"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xsi:schemaLocation="http://www.ins.com Report.xsd ">
  
...
Рейтинг: 0 / 0
22.06.2012, 23:59
    #37851171
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[xsd][unique] Правило не работает.
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<xs:schema version="1.0"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           targetNamespace="http://www.ins.com"
           xmlns:ins="http://www.ins.com"
           elementFormDefault="qualified">
..................
  <xs:unique name="uniqueStudentsFullNameConstraint">
    <xs:selector xpath="ins:Student" />
    <xs:field xpath="ins:FullName" />
  </xs:unique>
...
Рейтинг: 0 / 0
23.06.2012, 15:51
    #37851496
YetAnotherEntity
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[xsd][unique] Правило не работает.
_Vasilisk_
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<xs:schema version="1.0"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           targetNamespace="http://www.ins.com"
           xmlns:ins="http://www.ins.com"
           elementFormDefault="qualified">
..................
  <xs:unique name="uniqueStudentsFullNameConstraint">
    <xs:selector xpath="ins:Student" />
    <xs:field xpath="ins:FullName" />
  </xs:unique>


Прошу прощения за задержку с ответом... Ваш совет помог: я объявил свой namespace с префиксом и всё заработало. Спасибо большое за помощь.
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / [xsd][unique] Правило не работает. / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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