xml - 发布 xml 模式的标准方法

标签 xml namespaces xsd

假设我有一个 xml 架构,定义命名空间:http://foo.com/mySchema。是否有一种标准方法来发布架构,以便架构的 xml 实例只需要定义命名空间而不是 xsi:schemaLocation

例如,如果您查看 imdb 的站点地图 xml:http://www.imdb.com/sitemap_US_index.xml.gz

xml 定义了一个命名空间:http://www.sitemaps.org/schemas/sitemap/0.9无需定义 schemaLocation。

如果您访问此 URI,它有 2 个 xsd:“siteindex.xsd”和“sitemap.xsd”

我的问题是:

  1. 这是 xml 标准的一部分吗?每个 xml 解析器都“知道”如何从 namespace URI 中查找架构吗?
  2. 是否有一个独立的“xsd repo”工具可以帮助我在我的域下发布 xsd,而无需自己设置 Web 服务器的麻烦。我正在想象某种带有某种 RESTful API 的东西,它允许我PUT新模式、DELETE现有模式,当然还有GET新模式,使用它们的命名空间 URI

最佳答案

XML 标准没有为您作为 XSD 的发布者提供明确的方法来规定 XSD 的 targetNamespace 和 XSD 位置之间的绑定(bind)。

没有通用的“xsd repo”工具可以管理任何类型的众所周知的存储库,可以在这方面为您提供帮助。当然,现在有很多选择使用基于云的存储设施(Google Drive、DropBox、Amazon Cloud Drive 等)来轻松发布任何文件并通过 URL 使其公开可用。

您可以自行决定在何处发布您的 XSD。请记住namespace URLs do not have to be retrievable ;不要求存在 XSD。另请记住,命名空间和 XSD 物理位置之间的绑定(bind)是用户的责任,而不是 XSD 发布者的责任。您提到 xsi:schemaLocation 作为 XML 文档作者控制下的一种用于指定 XSD 位置的机制;另一个是 XML Catalog

关于xml - 发布 xml 模式的标准方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28008433/

相关文章:

c++ - C++ 中不允许嵌套命名空间声明是否有特定原因?

Python - 如果部署到两个不同的路径,命名空间会发生冲突

ruby - 在不明确提及其 namespace 的情况下引用类

java - 如何在不使用控制流异常的情况下根据模式验证 XML?

c# - 在 XML 序列化期间忽略属性 XmlNamespaceDeclarations

xml - XSLT 从子目录转换多个文件

java - 如何在 Java 1.4 中向 XML 节点添加属性

include - 部分模式包含在多个子模式中

xml - xsd :key and xsd:unique 之间的区别

使用根级别元素解析 XML