【问题标题】:Schema import without a namespace-attribute没有命名空间属性的模式导入
【发布时间】:2013-09-29 16:00:25
【问题描述】:

喂,

如果我导入这样的命名空间:

<xs:import namespace="UniqueIRIstyleNameSpaceName" schemaLocation="mySchema.xsd"></xs:import>

我知道 mySchema.xsd 创建了一个 targetNamespace="UniqueIRIstyleNameSpaceName"。 现在,如果我转到:http://www.w3schools.com/schema/el_import.asp 并阅读在绑定到 'xs' 的命名空间中定义的 'import' 元素的相应 API,它说属性 'namespace' 是可选的。

现在是问题:

  • 此类导入的属性“命名空间”的值必须始终与相应架构 (.xsd) 中的“目标命名空间”的值相同?

  • 如果是这样:完全放弃“命名空间”属性不是更容易吗?

  • 如果不是:...我遇到了很大的麻烦,因为我似乎还没有完全理解命名空间的概念,并且对一些关键字很感兴趣,可以在其中查找信息以关闭泄漏:)

我问这个是因为我目前正在使用 XML/XSD,就像我职业生涯中的第 5 次一样,并且从未在另一个变体中看到过它,但“命名空间”属性始终存在并匹配相应架构中的“目标命名空间”值。

非常感谢和问候

Jba

【问题讨论】:

    标签: xml import namespaces xsd schema


    【解决方案1】:

    此类导入的属性“命名空间”的值必须始终与相应架构 (.xsd) 中的“目标命名空间”的值相同?

    是的,当然。 您不能重新定义导入架构的目标命名空间!

    这确实是可能的,但使用&lt;xs:include&gt; 并且仅当包含的架构没有目标命名空间时。 这种技术被称为“变色龙设计”。

    如果是这样:完全放弃“命名空间”属性不是更容易吗?

    没有。唯一应该省略 namespace 属性的情况是导入的模式 没有目标命名空间。也就是说,它的目标命名空间是全局的。

    &lt;xs:import&gt; 中,namespace 属性是主要属性。指定导入的命名空间可能足以让模式处理器导入必要的模式。 schemaLocation 是在哪里找到它的提示。

    【讨论】:

      【解决方案2】:

      添加到 ColdFusion 的答案:

      1. xs:include 必须是 xs:schema 的子元素,并且用于一个模式包含在另一个文件中定义的片段,具有相同或没有目标命名空间

      2. 还要注意 XML 文档要包含模式引用,这是通过根节点上的属性完成的; schemaLocation 的命名空间一半是必需的,但是如果目标架构是没有指定目标命名空间的片段怎么办?然后你可以定义你喜欢的任何命名空间,例如

        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="anyNameSpaceYouWant .\SampleLocalFile.xsd"

      (使用 Visual Studio 2019 内置 XML 验证器测试)

      参考: https://www.w3schools.com/XML/schema_howto.asp https://www.w3schools.com/xml/el_include.asp

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-05
        • 2019-07-31
        • 2014-09-01
        • 2012-03-25
        • 2011-03-14
        • 2010-11-04
        • 2015-04-09
        • 1970-01-01
        相关资源
        最近更新 更多