详解Fuse开发中UX Markup语言之命名空间Namespace

本文将解释UX markup语言是如何关联Uno文档中的命名空间的,以及他们之间协同工作的原理。

首先普及下何为命名空间

在XML中命名空间提供避免元素命名冲突的方法,在 XML(标准通用标记语言下的一个子集) 中,元素名称是由开发者定义的,当两个不同的文档使用相同的元素名时,就会发生命名冲突,具体参看本文尾部的命名空间详解。

默认命名空间池The Default Namespace Pool

默认状态时,在你的项目及他引用的包packages中,一个UX文档将要知道关于所有的类,包括公共的public和可实例化instantiatable的类classes。

默认的�命名空间池包括无XML命名空间前缀但可以访问和存取的命名空间集合(以下简称命名空间集)。namespaces that are accessible with no XML namespace prefix.

在一个默认的项目中,默认的命名空间池就包括下面的命名空间集:

  • global::
  • Fuse
  • Fuse.Animations
  • Fuse.Drawing
  • Fuse.Entities
  • Fuse.Controls
  • Fuse.Layouts
  • Fuse.Shapes
  • Fuse.Elements
  • Fuse.Effects
  • Fuse.Triggers
  • Fuse.Navigation
  • Fuse.Triggers.Actions
  • Fuse.Gestures
  • Fuse.Resources

这意味着任何从命名空间清单中列出的类,包括在全局命名空间global namespace在的类,在UX都支持无前缀或参数限定符的方式存取。(重定义除外unless overridden)

重新定义默认命名空间池Overriding the default namespace pool

包含在默认命名空间池中的所有命名空间集都能使用xmlns属性来指定,重定义将应用到被指定的元素和他的子分支树上面its subtree。

下例中,这些来自于FuseMyCompany.MyLibrary的类在没有XML命名空间前缀的情况下也是可以访问的。





MyCompany.MyLibrary.MyClass之所以能以无前缀的方式使用,是因为他在此处的上下文环境中来说是在默认命名空间池里的。

�使用整个命名空间路径来访问类full namespace path

类也能使用他们的完整命名空间路径来访问,像这样:





指定XML命名空间前缀

定制自建命名空间前缀后便支持使用“短名称”shortcut来访问命名空间集,无重定义默认的命名空间池。without overriding the default namespace pool.

定制的前缀必须使用一个指定的定制属性关键词xmlns:,像这样:






附:详解命名空间

在XML里,任何元素类别或者属性因此分为两部分名字,一个是命名空间里的名字另一个是它的本地名。在XML里,命名空间通常是一个统一资源识别符(URI)的名字。而URI之只当名字用。主要目的是为了避免名字的冲突。

命名空间是用来组织和重用代码的。如同名字一样的意思,NameSpace(名字空间),之所以出来这样一个东西,是因为人类可用的单词数太少,并且不同的人写的程序不可能所有的变量都没有重名现象,对于库来说,这个问题尤其严重,如果两个人写的库文件中出现同名的变量或函数(不可避免),使用起来就有问题了。为了解决这个问题,引入了名字空间这个概念,通过使用 namespace xxx;你所使用的库函数或变量就是在该名字空间中定义的,这样一来就不会引起不必要的冲突了。

通常来说,命名空间是唯一识别的一套名字,这样当对象来自不同的地方但是名字相同的时候就不会含糊不清了。使用扩展标记语言的时候,XML的命名空间是所有元素类别和属性的集合。元素类别和属性的名字是可以通过唯一XML命名空间来唯一。

在XML中命名空间提供避免元素命名冲突的方法

什么是命名冲突
在 XML(标准通用标记语言下的一个子集) 中,元素名称是由开发者定义的,当两个不同的文档使用相同的元素名时,就会发生命名冲突。

在XML里,任何元素类别或者属性因此分为两部分名字,一个是命名空间里的名字另一个是它的本地名。在XML里,命名空间通常是一个统一资源识别符(URI)的名字。而URI之只当名字用。主要目的是为了避免名字的冲突。

这个XML文档携带着某个表格中的信息:







Apples Bananas


这个 XML 文档携带有关桌子的信息(一件家具):


African Coffee Table
80
120


假如这两个 XML 文档被一起使用,由于两个文档都包含带有不同内容和定义的 元素,就会发生命名冲突。
XML 解析器无法确定如何处理这类冲突。
使用前缀来避免命名冲突
此文档带有某个表格中的信息:



Apples
Bananas



此 XML 文档携带着有关一件家具的信息:


African Coffee Table
80
120


现命名冲突已经不存在了,这是由于两个文档都使用了不同的名称来命名它们的
元素 ()。
通过使用前缀,我们创建了两种不同类型的
元素。

使用命名空间(Namespaces

这个 XML 文档携带着某个表格中的信息:




Apples
Bananas



此 XML 文档携带着有关一件家具的信息:


African Coffee Table
80
120


与仅仅使用前缀不同,我们为
标签添加了一个 xmlns 属性,这样就为前缀赋予了一个与某个命名空间相关联的限定名称。

XML Namespace (xmlns) 属性

XML 命名空间属性被放置于元素的开始标签之中,并使用以下的语法:
xmlns:namespace-prefix="namespaceURI"
当命名空间被定义在元素的开始标签中时,所有带有相同前缀的子元素都会与同一个命名空间相关联。
注释:用于标示命名空间的地址不会被解析器用于查找信息。其惟一的作用是赋予命名空间一个惟一的名称。不过,很多公司常常会作为指针来使用命名空间指向实际存在的网页,这个网页包含关于命名空间的信息。

统一资源标识符(URI)

统一资源标识符是一串可以标识因特网资源的字符。最常用的 URI 是用来标示因特网域名地址的统一资源定位器(URL)。另一个不那么常用的 URI 是统一资源命名(URN)。在我们的例子中,我们仅使用 URL。

默认的命名空间(Default Namespaces)

为元素定义默认的命名空间可以让我们省去在所有的子元素中使用前缀的工作。
请使用下面的语法:
xmlns="namespaceURI"
这个 XML 文档携带着某个表格中的信息:







Apples Bananas

部分参考资料:https://www.fusetools.com/learn/guides/ux-markup-namespaces

Tag:Fuse, Fuseapp, Fusetools, native app
发布时间:2016年05月11日
博客被黑,挪窝安家……

你可能感兴趣的:(详解Fuse开发中UX Markup语言之命名空间Namespace)