在读取XML文件时,何时应使用XML模式(.xsd)?

3
我有一个XML文件,其中包含数据源的配置数据以及“dataseries”元素中保存的相关查询。
由于我不需要从XML中组成域对象,而只需要读取和使用设置来配置连接等,因此我想知道是否使用我定义的XML模式有任何优势?
我正在使用LINQ to XML来读取我的XML,并最初认为使用强类型XML是个好主意。
我应该使用.xsd文件还是过度设计了?
一个模拟的XML文件:
 <?xml version="1.0" encoding="utf-8" ?>
<datasource name=" Datasource" cache="true">
  <database>
    <connection>
      <provider-name>sqlServer6.0</provider-name>
      <source name="E5"
            connectionString=""/>
    </connection>
    <update-interval>30</update-interval>
    <minimum-update-interval>2</minimum-update-interval>
  </database>
  <dataseries name="" identifier="e5">
    <graph-type></graph-type>
      <query>
        SELECT Period, Price
        FROM PriceUS
        WHERE Date = @date
      </query>
  </dataseries>
  <dataseries name="" identifier="e52">
    <graph-type></graph-type>
    <query>
      SELECT Period, Price
      FROM PriceUS
      WHERE Date = @date
    </query>
  </dataseries>
</datasource>
3个回答

4
有两个级别的“正确”XML文档:格式良好和有效。格式良好意味着它符合XML规范,有效意味着它符合您的模式。如果您从一个完全陌生的人那里接受XML文档,通常最好在继续之前检查文档的有效性。
正如您所提到的,XML模式也可以用于生成XML数据绑定实体。当您向世界或客户发布服务或模式时,模式文档可以用作规范。世界或客户可以使用XSD文件验证或数据绑定您交换的XML文档。

由于模式是插件框架的一部分,.xsd 作为规范使用将有益处。由于我不需要数据绑定,并且使用 LINQ 进行查询会变得复杂,因此我可能会保持简单! - theringostarrs
你对XML文件有绝对的控制吗?是否有其他人可以修改它或发送给你另一个文件?如果是这样,请验证(模式)。如果不是...可能还是要验证一下。 - Andrew Coleson

1

从技术上讲,XML中有两种正式的模式类型。一种是原始模式语法,称为文档类型定义(DTD),这是古老的SGML时代的遗留物。然后还有W3C标准XSD,它与现代数据更兼容。

我提到这个唯一的原因是你可能会收到一个使用DTD描述的XML文件,而你可能需要知道如何处理它。

但是,请不要让朋友们为新应用程序创建DTD。


Relax NG紧凑语法怎么样? - Eugene Yokota

0
当您想要验证XML时,模式是很好的选择,例如,确保某些元素存在或具有有限的值集。如果您将大量使用XML并且希望将XML转换为C#对象更容易,则模式也是不错的选择--在这种情况下,您可以使用代码生成器生成可从XML编组和取消编组的C#对象。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接