【问题标题】:XML Validation against Schema and Database针对模式和数据库的 XML 验证
【发布时间】:2015-01-27 19:43:29
【问题描述】:

我有一个这样的示例 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)。 “书”必须包含&lt;author&gt;&lt;title&gt;&lt;genre&gt;&lt;price&gt; 等。还必须检查它们的数据类型。
2)。元素&lt;genre&gt; 的值必须针对数据库中的表进行验证,并确定它们是否存在(有效)。在有效的情况下,我们将从该表中提供一个替代(通用)值,以便我们可以选择是坚持旧值还是建议值。

问题:
1)。我应该使用哪个 DTD 标记来标识必须针对数据库验证某个元素?
2)。哪种模式验证更适合这种情况(DTD - XSD - XDR)?
3)。在 &lt;genre&gt; 元素的这种情况下,关于如何可视化建议值和现有值的任何建议?

感谢任何提示或代码 sn-ps..

【问题讨论】:

    标签: c# xml dtd


    【解决方案1】:

    Here 是一些示例 XML 模式 (XSD)。您基本上可以将 shiporder 元素替换为您的 book 元素,它甚至会涉及如何验证数据类型并为此提供正则表达式。

    我不确定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]);
    }
    

    【讨论】:

    • 您好,本索尼乌斯。是的,“有效”表示这些值存在于表中。它们由 # 分隔,并将在检查数据库之前进行拆分。想象一下表格至少有 3 列,[element_node] - [generalized_value] - [allowed_value]。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    • 2014-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-29
    相关资源
    最近更新 更多