Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / В XSD теряется key. Что неправильно? / 3 сообщений из 3, страница 1 из 1
10.08.2011, 15:36
    #37389404
zvb73
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В XSD теряется key. Что неправильно?
Здравствуйте!

Есть вот такой xml:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<?xml version="1.0" encoding="utf-8"?>
<DocumentElement>
  <test>
    <aaa> 111 </aaa>
    <bbb> 222 </bbb>
  </test>
  <test>
    <aaa> 333 </aaa>
    <bbb> 444 </bbb>
  </test>
</DocumentElement>
И к нему схема:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="DocumentElement">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="test">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="aaa" type="xs:string" />
              <xs:element name="bbb" type="xs:string" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
    <xs:key name="primarykey">
      <xs:selector xpath="test" />
      <xs:field xpath="aaa" />
    </xs:key>
  </xs:element>
</xs:schema>
Всё хорошо, всё работает как надо.

Теперь понадобилось добавить в xml ещё один элемент <title>bla-bla</title>.
Вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<?xml version="1.0" encoding="utf-8"?>
<DocumentElement>
  <title>bla-bla</title>
  <test>
    <aaa> 111 </aaa>
    <bbb> 222 </bbb>
  </test>
  <test>
    <aaa> 333 </aaa>
    <bbb> 444 </bbb>
  </test>
</DocumentElement>

Каким образом надо переделать xsd?
Когда делаю вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="DocumentElement">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="title" type="xs:string" />
        <xs:element maxOccurs="unbounded" name="test">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="aaa" type="xs:string" />
              <xs:element name="bbb" type="xs:string" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
    <xs:key name="primarykey">
      <xs:selector xpath="test" />
      <xs:field xpath="aaa" />
    </xs:key>
  </xs:element>
</xs:schema>
то теряю primarykey. Что неправильно?
...
Рейтинг: 0 / 0
11.08.2011, 09:14
    #37390391
refreg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В XSD теряется key. Что неправильно?
zvb73,

Такой XML:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<DocumentElement>
	<title>bla-bla</title>
	<test>
		<aaa> 111 </aaa>
		<bbb> 222 </bbb>
	</test>
	<test>
		<aaa> 111 </aaa>
		<bbb> 444 </bbb>
	</test>
</DocumentElement>
Валидацию не проходит - пишет "дубликат ключа"
Или я не понял, в чем проблема?
...
Рейтинг: 0 / 0
11.08.2011, 10:16
    #37390492
zvb73
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В XSD теряется key. Что неправильно?
Хм, действительно, посмотрел средствами Вижуал Студии - пишет дубликат ключа...

Проблема в том, что я этот хмл гружу в System.Data.DataTable посредством ReadXmlSchema() и ReadXml().
При этом если будут невалидные значения, то должен возникать эксепшн (если я возьму файл с дублированным ключом).
Эксепшн не возникает. Ну оно и понятно - в получившемся DataTable нету необходимого констрейнта primarykey (который есть в первом случае, когда в схеме не описан title).

Блин, похоже очередная задрочка от Микрософт, когда они в System.Data понимают xsd не так как положено. Так же как и в этом случае - /topic/857920&hl=
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / В XSD теряется key. Что неправильно? / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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