【问题标题】:Hosting W3 XML Schema files locally在本地托管 W3 XML Schema 文件
【发布时间】:2017-03-17 03:51:06
【问题描述】:

我在一家公司工作,我们拥有自己的 XML 语言,该语言具有自己的一组架构,可针对 the W3 schema 进行验证。出于商业原因,我需要在内部托管这些文件,而不是依赖网络托管版本。我对 XML 模式几乎没有经验,我想知道这到底意味着什么。是否像将页面源代码复制并粘贴到我自己的文件中并将我们的其他模式指向那里一样简单?我还需要担心命名空间文件吗?任何帮助在这里表示赞赏。谢谢。

【问题讨论】:

  • @kjhughes 我想我认为我链接到的 XSD 我想在本地托管的 XSD - 它是我们架构中链接的内容:<xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2009/01/xml.xsd"/>
  • 根据您的架构处理器,您甚至可能会发现对于一些流行的架构,例如用于 XML 命名空间的架构,您甚至不需要提供 schemaLocation - 架构处理器已经知道在哪里可以找到它.
  • @kjhughes 所以我不需要在本地托管命名空间文件?如果 W3 站点无法访问,这会导致问题吗? (用例是 DDOS 攻击阻止我们访问 W3)。
  • @MichaelKay 我可能错了,我认为在我的用例中这没有帮助。问题是有时由于 DDOS 攻击,我们无法访问 W3。在这种情况下,即使处理器知道去哪里寻找,它也无法找到它,对吗?或者你是说我可以在本地某个地方放置架构并且处理器会在那里查看?
  • @kjhughes 我想我对术语感到困惑。我现在知道我需要在本地托管xml.xsd。我想知道我是否需要主持http://www.w3.org/XML/1998/namespace。当您说不更改名称空间 URI 时,这就是您的意思吗?我不需要托管该文件?抱歉,我不太具备表达自己所需的领域语言。

标签: xml xsd schema w3c w3c-validation


【解决方案1】:

在本地托管外部 XSD,包括来自 W3C 的任何 XSD:

  1. 识别外部 XSD 依赖项。

    您可以通过 xs:includexs:import @schemaLocation 属性给出的所有 XSD 的传递闭包来识别 XSD 的外部依赖项。 (没有xs:includexs:import 意味着没有依赖关系。)

  2. 在本地复制 XSD。

    请注意,要实际检索xml.xsd,请使用浏览器以外的工具(例如wget)或查看提供给您的网络浏览器的文件源。

  3. 调整对 XSD 的引用。

    更新@schemaLocation 属性以引用本地 而不是远程副本。看 How to reference a local XML Schema file correctly? 或者,使用 XML Catalog 重新映射到本地位置。

请注意,您不需要更改任何namespace URIs, which are lexical constructs that do not need to be retrievable

【讨论】:

  • 谢谢!我现在明白了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多