XML 中的命名空间和前缀有什么区别?

What is the difference between namespace and prefix in XML?

我被迫与外部 XML 打架,我不明白 XML 文件中命名空间和前缀之间的区别。我的意思是,我使用名称空间和标签名称通过 Linq 库获取此文件中的值。但是我不知道它们之间的区别。

-<a:RoutePointsMeteoData z:Id="31" z:Size="10">
-<b:anyType z:Id="32" i:type="a:WaypointFLMeteoData">
    <a:DevISA>0</a:DevISA>
    <a:DisplayTemperatureType>IsaDev</a:DisplayTemperatureType>
    <a:RelatedRoutePointName>1739276a822f8a919b</a:RelatedRoutePointName>
    <a:TemperatureSource>NotDefined</a:TemperatureSource>
    <a:WindDirection>0</a:WindDirection>
    <a:WindSource>NotDefined</a:WindSource>
    <a:WindSpeed>0</a:WindSpeed>

谁能告诉我在标签中使用前缀的主要objective?例如:

<a:DevISA>0</a:DevISA>

这个 a: 的目的是什么?这是一种检测标签的显着特征吗?

XML 命名空间前缀是完整 XML 命名空间的缩写。

因为命名空间是为了区分不合格的 XML 名称,所以命名空间本身最好足够长,以便在添加到不合格名称之前创建一个词汇上不同的新名称。与 URI 所有权一致的组织所有权很好 属性 也往往会增加命名空间的长度。

为了避免将完整的 XML 名称空间与不合格的 XML 名称笨拙地串联起来,引入了一种缩写机制,

xmlns:a="http://example.com/some/full/namespace/name"

允许 RoutePointsMeteoData 在此命名空间中写为 a:RoutePointsMeteoData 而不是 {http://example.com/some/full/namespace/name}RoutePointsMeteoData。 (这种替代符号,称为 Clark Notation,未标准化——它不直接与 XML 兼容,但常用于元描述、JAXP API 规范中的参数名称等)

补充说明:

  • XML 命名空间前缀本身是任意的;只有通过他们 绑定到他们派生的完整 XML 命名空间名称 意义。
  • XML 命名空间前缀 必须 声明才能使 XML 文档被认为是namespace-well-formed.