XSD文件的目的是什么?

93

既然我们可以在C# (.NET)中查询XML文件,为什么还需要XSD文件呢?我知道它是特定XML文件的元数据文件。我们可以在XSD中指定关系,但它的作用是什么?

XML

<?xml version="1.0" encoding="utf-8" ?>
<Root>
  <Customers>
    <Customer CustomerID="GREAL">
      <CompanyName>Great Lakes Food Market</CompanyName>
      <ContactName>Howard Snyder</ContactName>
      <ContactTitle>Marketing Manager</ContactTitle>
      <Phone>(503) 555-7555</Phone>
      <FullAddress>
        <Address>2732 Baker Blvd.</Address>
        <City>Eugene</City>
        <Region>OR</Region>
        <PostalCode>97403</PostalCode>
        <Country>USA</Country>
      </FullAddress>
    </Customer>
  </Customers>
  <Orders>
    <Order>
      <CustomerID>GREAL</CustomerID>
      <EmployeeID>6</EmployeeID>
      <OrderDate>1997-05-06T00:00:00</OrderDate>
      <RequiredDate>1997-05-20T00:00:00</RequiredDate>
      <ShipInfo ShippedDate="1997-05-09T00:00:00">
        <ShipVia>2</ShipVia>
        <Freight>3.35</Freight>
        <ShipName>Great Lakes Food Market</ShipName>
        <ShipAddress>2732 Baker Blvd.</ShipAddress>
        <ShipCity>Eugene</ShipCity>
        <ShipRegion>OR</ShipRegion>
        <ShipPostalCode>97403</ShipPostalCode>
        <ShipCountry>USA</ShipCountry>
      </ShipInfo>
    </Order>
    <Order>
      <CustomerID>GREAL</CustomerID>
      <EmployeeID>8</EmployeeID>
      <OrderDate>1997-07-04T00:00:00</OrderDate>
      <RequiredDate>1997-08-01T00:00:00</RequiredDate>
      <ShipInfo ShippedDate="1997-07-14T00:00:00">
        <ShipVia>2</ShipVia>
        <Freight>4.42</Freight>
        <ShipName>Great Lakes Food Market</ShipName>
        <ShipAddress>2732 Baker Blvd.</ShipAddress>
        <ShipCity>Eugene</ShipCity>
        <ShipRegion>OR</ShipRegion>
        <ShipPostalCode>97403</ShipPostalCode>
        <ShipCountry>USA</ShipCountry>
      </ShipInfo>
    </Order>
  </Orders>
</Root>

我想根据提供的CustomerIDOrder元素中获取数据。

还有: 在XSD中给出关系的目的是什么?


请参考以下链接:https://dev59.com/f3E95IYBdhLWcg3wY85l。 - AVA
10个回答

114

XSD文件用于验证XML文件是否符合特定的格式。

在这方面,它们与之前存在的DTD类似。

XSD和DTD之间的主要区别在于,XSD是用XML编写的,并被认为更易阅读和理解。


谢谢,那么我可以使用Linq从c3.net查询xsd文件以获取xml文件中的数据吗?怎么做? - Red Swan
@Oded - 是的,但在我看来,DTD中很多基本的东西都是真正的痛苦。 - mort
好的,谢谢大家。那么,在模式文件中设置关系的主要目的是什么?为什么需要它? - Red Swan
@Lalit - 如果你_需要_确保关系正确,可以使用XSD验证XML,以确保它具有正确的关系。如果你不关心这些事情,就不需要XSD。 - Oded
4
@Lalit - 如果您不关心关系本身,并且不需要检查它们是否符合某种规则(在XSD中编码),那么请不要使用XSD,直接查询XML即可。 - Oded
显示剩余6条评论

49

没有XML Schema(XSD文件),一个XML文件是由元素和属性自由组合而成的。XSD文件定义了哪些元素和属性是允许存在的,以及它们出现的顺序。

总体来说,XML是一种元语言。XSD文件定义了元语言中具体的语言。例如,如果你的XSD文件包含了XHTML 1.0的定义,那么你的XML文件必须符合XHTML 1.0标准,而不是其他格式。


20

您在问题中提到了C#,因此可以将XSD视为类似于C#接口的角色。

XSD 定义了 XML 应该像什么样子,这与接口定义类应实现的内容的方式类似。


4
如果你拿一个类和它所应该实现的接口,就可以判断这个类是否正确。同样地,如果你拿一个 XML 文件和它对应的 XSD 文件,就可以判断这个 XML 文件是否正确。 - Garry

17

XSDs约束XML文档的词汇和结构。

XML的关键在于协议,而XSD提供了超越XML本身基本定义的结构化和通信协议手段。


12

此外问题是:为什么在xsd中给出关系的目的是什么。

假设您想为外部方的工具生成一些XML,或类似物 - 您如何知道它所允许遵循的结构以正确使用其工具?您编写一个模式。同样,如果您希望其他人使用您的工具,则会为他们编写一个模式以供遵循。这也可能有助于验证您自己的XML。


9
在理解XSD(XML Schema Definition)之前,让我解释一下;
什么是模式?
例如; 电子邮件ID:peter#gmail
您可以确定上述电子邮件ID无效,因为没有@,.com或.net或.org。
我们知道电子邮件模式看起来像peter@gmail.com。
结论:模式不验证数据,它验证结构。
XSD实际上是XML模式的实现之一。我们还有其他实现方式 我们使用XSD验证XML数据。

7

XSD是一份正式的合同,它规定了如何形成XML文档。通常用于验证XML文档或生成代码。


5

5
一个XSD文件是XML Schema Definition的缩写,用于提供一种标准方法来检查给定的XML文档是否符合您的预期。

5

.xsd文件被称为XML模式。通过XML模式,我们可以要求给定的XML具有特定的结构 - 哪些元素以哪种顺序出现,出现多少次,带有哪些属性,如何嵌套等等。如果我们有一个XML输入的模式,我们可以使用几行调用模式验证器来验证它是否包含我们需要的数据,而且没有其他内容。


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