如何将XML链接到XSD?

时间:2009-04-11 20:48:28

标签: xml xsd

一直在想,就像我们使用-declaration将XML绑定到DTD一样,我们如何使用XSD进行操作?

MSDN示例:

<?xml version="1.0"?>
<Product ProductID="123" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="Product.xsd">
    <ProductName>Rugby jersey</ProductName>
</Product> 

是xsi:NoNamespaceSchemaLocation可以解决这个问题吗?或者这只是另一个名称空间?

[编辑]

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

..只是为了给我们一个唯一的XML命名空间,或者它是否也提供了关于模式可以位于何处的信息?

4 个答案:

答案 0 :(得分:18)

尝试 schemaLocation

<?xml version="1.0"?>

<note
xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3schools.com note.xsd">
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

noNamespaceSchemaLocation是不同的。请注意,对于XML文档的使用者来说,两者在理论上确实只是“提示”。我从来没有遇到过不遵循它们的xml处理器;毕竟,这是W3C的推荐。 见http://www.w3.org/TR/xmlschema-1/

但实际上,可能出错了,如here,但话又说回来,它被认为是一个错误。

简而言之:我只相信它,到目前为止没有任何伤害: - )

我认为现在任何不太合适的xml处理器都不会忽略这个“提示”。

网址始终是唯一的,但在某些情况下,会在网址下提供一些信息。

答案 1 :(得分:4)

xsi:noNamespaceSchemaLocation和xsi:schemaLocation都向决定遵守这些提示的XML处理器提供提示。但它们只是提示。它们不一定会导致您的文档根据架构进行验证。

答案 2 :(得分:3)

我通常只包含命名空间,并期望如果正在处理它关心验证它,那么他们将获得架构并设置其处理环境,以便它可以找到XSD。我xsi:schemaLocation和这些属性的成功有限。大多数问题通常集中在寻找XSD文件本身。有些处理器希望包含路径,如果XSD位于文件系统而不是Web服务器上,那么这些路径会很有趣。

每个处理器似乎都以不同的方式实现了查找。有些使用单独的模式目录对象,有些则需要您单独加载和附加模式。除非您提供处理文档的代码,否则最好不要包含xsi:schemaLocationxsi:noNamespaceSchemaLocation恕我直言。他们所包含的唯一能做的就是腿筋,他们正在处理您的文档,无论是将模式放在同一位置,还是找到一些方法来使他们选择的处理器忽略或解决位置规范。

作为旁注,我遇到的最大问题实际上是使用引用SYSTEM的{​​{1}}声明指定的DTD。问题是我在FreeBSD盒子上处理文件。我最终编写了自己的解析器来将Windows样式的路径映射到本地文件系统,因为我无法自行修改文档,并且需要对它们进行验证。

答案 3 :(得分:3)

这不是一个愚蠢的问题,而是John Saunders has it right

  

就像我们使用-decleration将XML绑定到DTD一样,我们如何使用XSD进行操作?

这是问题的本质 - 你不能。 DTD方法的一个问题是文档指定了验证机制而不是文档使用者。在DTD之后,您可以获取XML文档并使用XSD或RELAX NG或其他一些机制对其进行验证 - 它们是分离的(至少在理论上)。任何XSD链接只是一个提示,是可选的。 It is not possible to validate an arbitrary document

相关问题