【问题标题】:How to locate an XML Schema (XSD) by namespace?如何通过命名空间定位 XML Schema (XSD)?
【发布时间】:2014-09-15 23:18:25
【问题描述】:

是否有任何简单通用的方法可以根据命名空间定位架构?例如,在下面的 XML 中,我如何找到 http://schemas.microsoft.com/developer/msbuild/2003 的架构?

<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

【问题讨论】:

    标签: xml xsd


    【解决方案1】:

    在给定 XML 命名空间的情况下在哪里寻找 XSD:

    1. 检查任何可用的xsi:schemaLocation 提示给出的位置xsi:schemaLocation="namespace location".

      在这种情况下,我们没有架构位置提示。

    2. 通过在浏览器中键入名称来检查名称空间值是否为 URI 形式。

      在这种情况下,http://schemas.microsoft.com/developer/msbuild/2003 命名空间是 URI 的形式,但端点处没有 XSD:

      您要查找的资源已被删除,有它的名字 已更改,或暂时不可用。

    3. 检查任何正在运行的XML CatalogsURI Resolution 条目。

      在这种情况下,没有提到 XML 目录。

    4. 检查XML Standards Library

      在这种情况下,搜索的命名空间没有条目。

    5. 查看维基百科的 List of XML markup languagesList of XML schemas

      在这种情况下,搜索的命名空间没有条目。

    6. 检查您的 XML 工具的架构关联机制。以下是一些:

      在这种情况下,没有提到任何工具,但它是 Microsoft 命名空间,因此如果安装了 Visual Studio,请检查 XML 架构对话框中列出的关联和本地架构缓存。

      根据this source,给定命名空间的 XSD 是 msbuild.xsd 并且可以位于 Visual Studio 架构缓存中。 这是 MSBuild 生成文件的架构

    底线: 一般来说,上述过程应该允许您将命名空间解析为 XSD 的物理位置,但请注意,难度可能从简单到不可能。

    【讨论】:

    • 感谢您的出色回答! RDDL 对这个目的也有用吗?
    • @yigal,不客气。 RDDL 如果你能在任何地方发现它也很有用。
    【解决方案2】:

    XML 命名空间和资源 URL 之间没有映射,您可以在其中找到架构资源。命名空间就是这样 - 可以在其中定义名称以免与其他名称冲突的空间。

    【讨论】:

    • 此外,命名空间通常恰好是 URL(统一资源定位器),这会导致混淆,因为您会认为它们是 URL,它们背后有什么东西。对于常见的 W3C 架构,您实际上可以通过取消引用 URL 来获取架构或至少一些文档。但命名空间标识符不必是 URL,也可以是 URN/URI。 Tl;dr 对于大多数模式来说,这个字符串并没有多大意义。
    • 这不是有害的,它只是约定俗成的——尽管有些误导。 stackoverflow.com/questions/5758041/…
    猜你喜欢
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-15
    • 1970-01-01
    • 2010-10-29
    相关资源
    最近更新 更多