如何将XML链接到XSD?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将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"

..line只是为了给我们一个唯一的XML命名空间,还是它还提供了关于架构所在位置的信息?

答案

尝试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处理器都不会忽视这些“提示”。

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

另一答案

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

另一答案

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

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

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

另一答案

这不是一个愚蠢的问题,但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

以上是关于如何将XML链接到XSD?的主要内容,如果未能解决你的问题,请参考以下文章

如果它对 xsd 无效,你能阻止节点插入到 XmlDocument 中吗?

如何将 XML 映射到 C# 对象

针对包含 xsd:import without location 的 XSD 验证 XML

不使用注释的 Java 代码到 XML/XSD

如何用C或c++写一段代码读取xsd结构生成一个XML文件,现在我有数据文件和XSD文件

如何在 php 页面中显示 XML 外部实体?