【问题标题】:Referencing XSD from XML从 XML 引用 XSD
【发布时间】:2015-01-21 12:48:20
【问题描述】:

我一直在寻找一种将 XSD 附加到 XML 文件的方法,以便打开 XML 的程序可以访问相应的 XSD,但我发现的所有答案都包括使用命名空间,甚至没有任何解释关于它。

我只有 XSD,没有“命名空间”或其他任何东西。我怎样才能将我的 XSD 引用到 XML 文件中?

【问题讨论】:

  • 您可能指的是Using Inline Schemas 及其对命名空间的使用。基本上,您可以在不使用此命名空间 xmlns:x="urn:book" 的情况下采用该示例 - 只有当您必须区分您可能引用的多个架构中定义的 book 元素时才真正需要它。
  • 感谢您的回答,但我想将这两个文件分开,我只需要从 XML 中引用 XSD

标签: xml namespaces xsd


【解决方案1】:

如果您的架构没有 targetNamespace,那么您可以在根元素上使用 xsi:noNamespaceSchemaLocation 将其附加到非命名空间 XML 文件

<example xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="schema.xsd">

验证解析器将尝试将架构位置解析为相对于 XML 文档位置的相对 URL,如果架构和文档不在同一个位置,您可能希望使用绝对 URL 而不是相对 URL。

xsi:noNamespaceSchemaLocation="http://example.com/schema.xsd"

【讨论】:

  • 谢谢,但这条线是做什么用的:xmlns:xsi="w3.org/2001/XMLSchema-instance" ?
  • @Virus721 它声明了 xsi 命名空间前缀,然后用于架构位置属性。命名空间仅适用于使用 xsi: 前缀的名称,它不会将文档中的其余元素放入命名空间。
  • 我必须使用这个网址吗?为什么我什至必须使用 URL?它是否从给定的 URL 中检索到某些内容?你如何选择网址?
  • @Virus721 命名空间 URI 只是标识一个特定的命名空间,它们不是可以从中检索任何内容的 URL。 http://www.w3.org/2001/XMLSchema-instance 命名空间是架构规范的一部分 - 将(非命名空间)文档链接到其架构的方式是使用具有命名空间 http://www.w3.org/2001/XMLSchema-instance 和本地名称 noNamespaceSchemaLocation 的属性。
  • @Virus721 W3C 规范倾向于使用类似于 http: URL 的 URI 命名其命名空间,但其他规范使用更不透明的 URN 标识符,例如 urn:oasis:names:tc:entity:xmlns:xml:catalog
猜你喜欢
  • 2014-06-17
  • 1970-01-01
  • 1970-01-01
  • 2011-06-17
  • 2012-01-19
  • 1970-01-01
  • 2010-10-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多