1

嗨,

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

<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 次一样,并且从未在另一个变体中看到过它,但“命名空间”属性始终存在并匹配相应架构中的“目标命名空间”值。

非常感谢和问候

贾巴

4

2 回答 2

6

这种导入的属性“命名空间”的值是否必须始终与相应模式 (.xsd) 中的“目标命名空间”的值相同?

是的,一点没错。您不能重新定义导入模式的目标命名空间!

这确实是可能的,但<xs:include>仅在包含的架构没有目标命名空间时才使用。这种技术被称为“变色龙设计”。

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

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

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

于 2013-09-24T12:58:55.070 回答
0

添加到 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

于 2020-11-27T19:40:40.443 回答