什么是四维空间,四维空间和三维空间究竟有什么区别?
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>
上面的文档中有两个<text>
元素。实际上它们是完全不同的元素,因为每个元素都属于不同的命名空间。它们具有相同的本地名称,但它们的限定名称不同。
如果您有相同命名空间的声明,例如:
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>
上面的每个<text>
元素都是不同命名空间的一部分。
花点时间阅读本指南: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>
如果您仔细查看上面的示例,您可能会看到关联:
schema
、complexType
和element
元素以及string
类型都属于http://www.w3.org/2001/XMLSchema
命名空间。
架构中没有属于 http://www.w3schools.com
命名空间的元素或属性,因为这是一个架构,它实际上定义了这些元素。
MyType
复杂类型是http://www.w3schools.com
命名空间的一部分。这是因为它是在架构中声明的,架构的targetNamespace
是http://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 命名空间(通常为 xs
或 xsd
)。
关于矛盾句
实际上,它们并不冲突。但它们写得不好(它们可能,也许,在它们原来的上下文中)。第一个:
架构中使用的元素和数据类型来自“http://www.w3.org/2001/XMLSchema”命名空间。它还指定来自“http://www.w3.org/2001/XMLSchema”命名空间的元素和数据类型应以 xs 为前缀。
将 XSD 文档视为常规 XML 文件。在任何 XML 文件中,根元素中的命名空间声明(例如 xmlns="ns1")声明了 unprefixed 元素来自 ns1
default 命名空间。在句子描述的情况下,作者指的是所有前缀元素(如element
、complexType
、simpleType,
sequence) and types (such as
string,
integer@987654364 @decimal) because the
xs`前缀映射到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 你从来没有引用(使用诸如type
、ref
等属性)到任何您在其中创建的其他类型或元素。
【讨论】:
我可以加xmlns="xs"
,写一个更兼容的XSD吗?【参考方案2】:
default namespace serve only one purpose, it allows use of namespace qualified xml components without namespace prefix.
只是给你一个解决上述问题的提示,当你定义一个组件时,你应该考虑它的 targetNamespace,但是当你引用一个组件时,请考虑默认命名空间(或带有前缀的命名空间)。
【讨论】:
以上是关于什么是四维空间,四维空间和三维空间究竟有什么区别?的主要内容,如果未能解决你的问题,请参考以下文章