Чтение базы данных XML по схеме

Мне трудно работать с набором данных, особенно при попытке проверить данные XML по файлу схемы.

Я программирую с помощью Visual Studio 2008, XSD создается с его помощью.

Я полагаюсь на Altova XMLSpy для проверки в автономном режиме, и проблема возникает, когда у Altova нет жалоб при проверке данных по схеме, а мой код VB.NET вызывает исключение.

Простой код считывает файл схемы XSD, а затем файл данных XML:

Dim tmpDataSet As New DataSet
(...)
tmpDataSet.ReadXmlSchema(xsdtreamreader)
tmpDataSet.ReadXml(xmltreamreader)

При выполнении последней строки возникает следующее исключение:

Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints.

person perevera    schedule 31.03.2014    source источник
comment
У вас гораздо больше шансов получить хорошие ответы на вопросы о переполнении стека, если информация в вашем вопросе позволит другим воспроизвести проблему. Можете ли вы воспроизвести свою проблему с документом схемы из двадцати строк и документом из десяти строк? Посмотрите, сможете ли вы, и включите этот материал в свой вопрос. Если вы не можете, это тоже может быть подсказкой. В файлах справки SO и в эссе Эрика Рэймонда и Рика Моэна Как правильно задавать вопросы.   -  person C. M. Sperberg-McQueen    schedule 01.04.2014


Ответы (1)


Вы правы, К. М. Сперберг-МакКуин, так что давайте скажем проще.

Я протестировал минимальный файл схемы, содержащий только две таблицы и отношение «один ко многим» между ними (файл схемы скопирован ниже).

Затем я вставил 2 записи только в родительскую таблицу (файл данных скопирован ниже).

Как и ожидалось, XMLSpy без проблем проверяет данные по схеме.

Тогда как .NET справляется с этим?

Если вы сначала читаете данные, а затем файл схемы, все работает хорошо:

tmpDataSet.ReadXmlSchema(_dataSchema)
tmpDataSet.ReadXml(_dataXml)

Однако, если вы сделаете это в обратном порядке:

tmpDataSet.ReadXml(_dataXml)
tmpDataSet.ReadXmlSchema(_dataSchema)   

возникает следующее исключение:

Invalid 'Key' node inside constraint named: FK_MonitoringPoint_ChannelProfile.

Итак, первый урок заключается в том, что вы должны сначала прочитать схему, как я где-то читал.

Однако это не сработает в какой-то реальной ситуации с более сложной схемой и большим количеством данных, как я указал в своем первом сообщении, только со следующим общим сообщением об исключении:

Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints.

В этой ситуации я не могу понять, почему проверка не удалась и почему это отличается от XMLSpy, говорящего, что файл действителен.

person perevera    schedule 01.04.2014
comment
Я не могу вставить содержимое XSD и XML и не знаю, как прикреплять файлы... - person perevera; 01.04.2014