什么是四维空间,四维空间和三维空间究竟有什么区别?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是四维空间,四维空间和三维空间究竟有什么区别?相关的知识,希望对你有一定的参考价值。

参考技术A 四维空间是在三维的基本上,再增加一个垂直方向。四维空间和三维空间的区别是垂直方向增加或者减少。 参考技术B 如果说三维空间就是由长宽高组成,那么四维空间就是多了一条维度,这个维度人类是不可知的。四维空间里的三维空间就好比三维空间的我们看一张纸一样,四维空间可以随意对三维空间发生改变,三维空间却对四维空间束手无策。 参考技术C 四维空间就是比三维空间多出了一个维度,让四维空间的人能够在三维空间里有无敌的姿态,四维空间可能就是有无限个三维空间所组成的。 参考技术D 四维空间是三维坐标上,加入一个时间坐标,就形成四维空间。三维空间是三个坐标形成的立体几何空间。本质上四维空间只比三维空间多了一个时间轴,但在四维空间里,时间变得能够被掌控,这给人带来无限的想象。

XSD:命名空间和默认命名空间有啥区别

【中文标题】XSD:命名空间和默认命名空间有啥区别【英文标题】:XSD : what is the difference between the namespace and the default namespaceXSD:命名空间和默认命名空间有什么区别 【发布时间】:2014-08-10 10:03:58 【问题描述】:

也许问题的标题具有误导性,那是因为我无法用一句话来解释我的问题。

在w3school tutorial中有这个例子:

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           targetNamespace="http://www.w3schools.com"
           xmlns="http://www.w3schools.com"
           elementFormDefault="qualified">
    ...
    ...
</xs:schema>

作者曾声明:xmlns:xs="http://www.w3.org/2001/XMLSchema" 表示:

架构中使用的元素和数据类型来自“http://www.w3.org/2001/XMLSchema”命名空间。它还指定来自“http://www.w3.org/2001/XMLSchema”命名空间的元素和数据类型应以 xs 为前缀。

不过,作者也说过targetNamespace="http://www.w3schools.com"的意思是:

此架构定义的元素(注意、收件人、发件人、标题、正文。)来自“http://www.w3schools.com”命名空间。

我在理解前面的段落时遇到了问题。第一段声明元素来自http://www.w3.org/2001/XMLSchema 命名空间,而第二段声明元素来自http://www.w3schools.com 命名空间。

在我看来,这两个句子是相互冲突的。

你能告诉我哪一个是正确的吗?每一个的真正含义是什么?

感谢您的宝贵时间。

问候,

【问题讨论】:

【参考方案1】:

默认命名空间、限定名和前缀

default 命名空间是没有映射到任何前缀的命名空间。您使用以下方式声明它:

xmlns="a-string-that-is-usually-an-uri"

如果您在 XML 文件中有这样的声明,则任何无前缀的 元素 都将属于该命名空间。无前缀的属性总是属于无命名空间

在一个 XML 文档中可以有多个命名空间声明,但每个范围内只能有一个默认命名空间。您也不需要任何默认命名空间。范围由元素本身及其后代组成。在下面的文档中,有两个默认命名空间。 ns2 命名空间替换了声明它的元素及其后代中的 ns1

<root xmlns="ns1">
    <text>This is ns1</text>
    <child xmlns="ns2">
        <text>This is ns2</text>
    </child>
</root>

上面的文档中有两个&lt;text&gt; 元素。实际上它们是完全不同的元素,因为每个元素都属于不同的命名空间。它们具有相同的本地名称,但它们的限定名称不同。

如果您有相同命名空间的声明,例如:

xmlns:p="a-string-that-is-usually-an-uri"

您正在使用前缀p 映射命名空间,上下文中的任何元素都可以使用该前缀(考虑到格式良好的文档,不一定有效)。对于有效的文档,作为命名空间一部分的元素应该由它限定,或者作为声明默认命名空间的元素的无前缀后代(或自身),或者作为声明默认命名空间的元素的前缀后代(或自身)映射到该前缀的命名空间。前缀也可用于限定属性。

通过使用前缀,您可以在根元素中包含所有声明,并且可以混合限定元素:

<root xmlns:p="ns1" xmlns:q="ns2" xmlns="ns0">
    <p:text>This is ns1</p:text>
    <q:child xmlns="ns2">
        <q:text>This is ns2</q:text>
        <p:text>This is ns1 again!</p:text>
        <text>This is ns0</text>
    </q:child>
</root>

上面的每个&lt;text&gt; 元素都是不同命名空间的一部分。

花点时间阅读本指南:Understanding XML Namespaces。它很短,如果您仔细阅读,您肯定会理解 XML 中的名称空间是如何工作的。如果你愿意,你也可以阅读官方文档XML Namespaces specification。

XSD 中的目标命名空间

关于您正在阅读的教程。这个文件:

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           targetNamespace="http://www.w3schools.com"
           xmlns="http://www.w3schools.com"
           elementFormDefault="qualified">
    ...
    ...
</xs:schema>

两个命名空间声明和一个目标命名空间声明。由于它也是一个模式,它包含将属于 目标命名空间类型定义。这可能会造成混淆,因为模式是一个 XML 文档,它为使用 XML 的其他 XML 文档声明规则。将 XSD 文档视为普通的 XML 文档,您有一个命名空间映射到 xs 前缀,另一个命名空间是 default 命名空间。你也可以合法地使用不同的前缀:

<abc:schema xmlns:abc="http://www.w3.org/2001/XMLSchema"
           targetNamespace="http://www.w3schools.com"
           xmlns:xyz="http://www.w3schools.com"
           elementFormDefault="qualified">
    <abc:complexType name="MyType"> ...</abc:complexType>
    <abc:element name="myElementOne" type="xyz:MyType" />
    <abc:element name="myElementTwo" type="abc:string" />
</abc:schema>

如果您仔细查看上面的示例,您可能会看到关联:

    schemacomplexTypeelement 元素以及string 类型都属于http://www.w3.org/2001/XMLSchema 命名空间。 架构中没有属于 http://www.w3schools.com 命名空间的元素或属性,因为这是一个架构,它实际上定义了这些元素。 MyType 复杂类型是http://www.w3schools.com 命名空间的一部分。这是因为它是在架构中声明的,架构的targetNamespacehttp://www.w3schools.com。由于该命名空间映射到 xyz 前缀,那么当您引用它时,您需要 prefix 它这就是第一个元素的 type 属性中发生的事情,同样的方式第二个元素的type 属性引用http://www.w3.org/2001/XMLSchema 命名空间的string 类型。

您也可以像这样编写上述架构。没什么区别:

<schema xmlns="http://www.w3.org/2001/XMLSchema"
           targetNamespace="http://www.w3schools.com"
           xmlns:xyz="http://www.w3schools.com"
           elementFormDefault="qualified">
    <complexType name="MyType"> ...</complexType>
    <element name="myElementOne" type="xyz:MyType" />
    <element name="myElementTwo" type="string" />
</schema>

现在请注意一个默认命名空间,它是http://www.w3.org/2001/XMLSchema,所以该命名空间的所有类型和元素都没有前缀。

不过,最好遵循约定并将前缀映射到 XSD 命名空间(通常为 xsxsd)。

关于矛盾句

实际上,它们并不冲突。但它们写得不好(它们可能,也许,在它们原来的上下文中)。第一个:

架构中使用的元素和数据类型来自“http://www.w3.org/2001/XMLSchema”命名空间。它还指定来自“http://www.w3.org/2001/XMLSchema”命名空间的元素和数据类型应以 xs 为前缀。

将 XSD 文档视为常规 XML 文件。在任何 XML 文件中,根元素中的命名空间声明(例如 xmlns="ns1")声明了 unprefixed 元素来自 ns1 default 命名空间。在句子描述的情况下,作者指的是所有前缀元素(如elementcomplexType、simpleType,sequence) and types (such asstring,integer@987654364 @decimal) because thexs`前缀映射到XSD命名空间。作者说的是XML文件中使用的元素和类型,没有定义。

下一句是关于targetNamespace,它是XSD 规范特有的一个属性。它声明了所有类型的命名空间:

targetNamespace="http://www.w3schools.com" 表示此架构定义的元素(note、to、from、heading、body)来自“http://www.w3schools.com " 命名空间。

这是指您分配给类型和元素的名称。当您创建一个声明该命名空间的 instance 时,您将使用这些元素:

<note xmlns="http://www.w3schools.com">...</note>

<x:note xmlns:x="http://www.w3schools.com">...</x:note>

但在 XSD 中,您是在定义它们。你甚至不需要在模式中声明xmlns="http://www.w3schools.com"if 你从来没有引用(使用诸如typeref 等属性)到任何您在其中创建的其他类型或元素。

【讨论】:

我可以加xmlns="xs",写一个更兼容的XSD吗?【参考方案2】:
   default namespace serve only one purpose, it allows use of namespace qualified xml components without namespace prefix. 

只是给你一个解决上述问题的提示,当你定义一个组件时,你应该考虑它的 targetNamespace,但是当你引用一个组件时,请考虑默认命名空间(或带有前缀的命名空间)。

【讨论】:

以上是关于什么是四维空间,四维空间和三维空间究竟有什么区别?的主要内容,如果未能解决你的问题,请参考以下文章

命名空间,类,对象和实例之间有什么区别?

色彩空间中的HSL、HSV、HSB有啥区别?

色彩空间中的HSL,HSV,HSB有啥区别

类、包、命名空间和模块之间有啥区别?

四维物体怎么穿过三维空间

RGB、lαβ、HSV色彩空间的区别