针对架构和数据库的XML验证

时间:2015-01-27 04:59:36

标签: c# xml dtd

我有一个像这样的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)。什么样的Schema验证更适合这种情况(DTD-XSD-XDR)?
3)。关于如何在<genre>元素的情况下可视化建议值和现有值的任何建议?

赞赏任何提示或代码片段。

1 个答案:

答案 0 :(得分:0)

Here是一些示例XML模式(XSD)。您基本上可以只为您的book元素交换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]);
}