文章内容摘自 XML本质论
- 命名
element attribute 都用 URI (Uniform Resource Identifier,统一资源标识符) 命名。以确保在多种XML格式交互时不出现命名冲突。
URI是指URN (Uniform Resource Name,统一资名称) 或 URL (Uniform Resource Locator,统一资源定位符)。
当 UR I用来区分 XML 名称时,它们被看作是称为 命名空间 ( namespace ) 的抽象名称集的标识符。
构成:本地名和名称空间URI
本地名规范:
NCName :: = ( Letter | '_' ) ( NCNameChar )*
NCNameChar :: = Letter | Digit | '_' | '-' | '.' | CombiningChar | Extender
实例:
本地名为 People, 不附属于任何命名空间
本地名为 People, 命名空间 URI 为 uuid:1c759aed-b748-475c-ab68-10679700c4f2
若其子元素没有显示的声明其命名空间,则默认在父元素的命名空间下,是继承关系。
并且,子元素的归属于最近的父元素的声明的命名空间,
如下,Person 的子元素命名空间是 http://www.example.net/people/schema/
将 Person元素从命名空间删除。
出于语法的便利考虑,XML 支持使用 命名空间 URI 的本地别名化。第个元素都能使用前缀映射到 URI 的命名空间。
声明格式 : xmlns : myns = 'uri-reference'
前缀是 myns ,该别名可用作 element 和 attribute 的前缀。
QName :: (Prefix ':' )? LocalPart
Prefix :: = NCName
LocalPart :: NCName
实例:
逻辑上等同于:
也等同于:
考虑如下情况:
a d 的命名空间是 http://develop.com 而 b c 的则是 http://example.com
还是有就近原则在里面。
对于 attribute :
atr b 不属于任何命名空间,而 atr c 属于 http://y.org
给定的所有 attribute 必须由 命名空间URI/本地名 对惟一命名。
而
是不合法的。
这里有一个问题需要说明下。
attribute 的命名空间没有默认值。也就是说一般情况下不会属于任何命名空间,不属于 element 的命名空间。
除非使用 带前缀的命名方式 才能关联到命名空间。