2015-01-27 3 views
0

У меня есть пример XML, как это:Проверка XML против схемы и базы данных

<catalog> 
    <book id="bk101"> 
     <author>Gambardella, Matthew</author> 
     <title>XML Developer's Guide</title> 
     <genre>Computer # Sci-Fi</genre> 
     <price>44.95</price> 
     <publish_date>2000-10-01</publish_date> 
     <description>An in-depth look at creating applications 
     with XML.</description> 
    </book> 
    <book id="bk102"> 
     <author>Ralls, Kim</author> 
     <title>Midnight Rain</title> 
     <genre>Fantasy # Teen</genre> 
     <price>5.95</price> 
     <publish_date>2000-12-16</publish_date> 
     <description>A former architect battles corporate zombies, 
     an evil sorceress, and her own childhood to become queen 
     of the world.</description> 
    </book> 

Цель состоит в том, чтобы выполнить проверку на структуру XML и целостности данных.
Пример:
1). «Книга» должна содержать <author>, <title>, <genre>, <price> и так далее. Их тип данных также должен быть проверен.
2). Значения элемента <genre> должны быть проверены против таблицы в базе данных и определять, существуют ли они (действительны) или нет. В случае допустимости мы предоставим альтернативное (обобщенное) значение из этой таблицы, чтобы мы могли выбрать, придерживаться старого значения или предлагаемого значения.

Вопросы:
1). Какую DTD-разметку следует использовать для определения того, что определенный элемент должен быть проверен против базы данных?
2). Какая валидация схемы лучше подходит для этого сценария (DTD - XSD - XDR)?
3). Любое предложение о том, как визуализировать предлагаемое значение и существующее значение в этом случае элемента <genre>?

Любые намеки или фрагменты кода оценены ..

ответ

0

Here некоторые схемы выборки XML (XSD). Вы могли бы просто поменять элемент shiporder на свой элемент книги, он даже рассмотрит, как проверить типы данных и предоставить регулярные выражения для этого.

Я не уверен, что означает validated again a table in database. Требуется ли фактическое значение в базе данных, чтобы быть действительным? Предложение для жанров generalized состояло в том, чтобы разделить жанр на # и использовать первый токен? Это может быть предложено как жанр.

var dom = new XmlDocument(); 
dom.Load("catalog.xml"); 

var res = dom.SelectNodes("//book/genre", mgr); 
foreach(XmlNode node in res){ 
    string s = node.InnerText(); 
    string[] tokens= s.Split('#'); 
    CheckAgainstDatabase(tokens[0]); 
} 
+0

Hi Bensonius. Да, «действительный» означает, что эти значения существуют в таблице. Они разделены символом # и будут разделены до проверки базы данных. Представьте, что таблица имеет не менее 3 столбцов, [element_node] - [generalized_value] - [allowed_value]. – Keith

Смежные вопросы