32.2. XML 命名空间映射


概述

XML 架构类型、组和元素定义使用命名空间进行范围。命名空间可防止使用相同名称的实体之间可能存在命名。Java 软件包提供了类似目的。因此,Apache CXF 将 schema 文档的目标命名空间映射到包含实现架构文档中定义的结构所必需的软件包中。

软件包命名

生成的软件包的名称通过以下算法从模式的目标命名空间派生:

  1. URI 方案(如果存在)被剥离。

    注意

    Apache CXF 将仅剥离 http:https:urn: 方案。

    例如,命名空间 http:\\www.widgetvendor.com\types\widgetTypes.xsd 变为 \\widgetvendor.com\types\widgetTypes.xsd

  2. 尾随文件类型标识符(如果存在)。

    例如,\\www.widgetvendor.com\types\widgetTypes.xsd 变为 \\widgetvendor.com\types\widgetTypes

  3. 生成的字符串使用 /: 作为分隔符分成字符串列表。

    因此,\\www.widgetvendor.com\types\widgetTypes 变为列表 {"www.widegetvendor.com", "types", "widgetTypes"}

  4. 如果列表中的第一个字符串是一个互联网域名,它被处理如下:

    1. 领导的 www. 被剥离。
    2. 剩余的字符串使用 . 作为分隔符,被分成多个部分。
    3. 列表的顺序被撤销。

      因此, {"www.widegetvendor.com", "types", "widgetTypes"} 变为 {"com", "widegetvendor", "types", "widgetTypes"}

      注意

      Internet 域名以以下之一结尾: .com.net.edu.org.gov,或位于两个字母国家代码之一。

  5. 字符串将转换为所有小写。

    因此, {"com", "widegetvendor", "types", "widgetTypes"} 变为 {"com", "widegetvendor", "types", "widgettypes"}

  6. 字符串被规范化为有效的 Java 软件包名称组件,如下所示:

    1. 如果字符串包含任何特殊字符,则特殊字符将转换为下划线(_)。
    2. 如果有任何字符串是 Java 关键字,则关键字以下划线(__)作为前缀。
    3. 如果有任何字符串以 numeral 开头,则字符串以下划线(_)作为前缀。
  7. 字符串使用 . 作为分隔符进行串联。

    因此, {"com", "widegetvendor", "types", "widgettypes"} 变为软件包名称 com.widgetvendor.types.widgettypes

命名空间 http:\\www.widgetvendor.com\types\widgetTypes.xsd 中定义的 XML Schema 结构映射到 Java 软件包 com.widgetvendor.types.widgettypes

软件包内容

生成的 JAXB 软件包包含以下内容:

  • 一个类实现架构中定义的每个复杂类型

    有关复杂类型映射的详情,请参考 第 35 章 使用复杂类型

  • 使用 enumeration facet 定义的任何简单类型的 enum 类型

    有关如何映射枚举的更多信息,请参阅 第 34.3 节 “Enumerations”

  • 一个公共 ObjectFactory 类,其中包含从 schema 中实例化对象的方法

    如需有关 ObjectFactory 类的更多信息,请参阅 第 32.3 节 “Object Factory”

  • 一个 package-info.java 文件,提供有关软件包中类的元数据
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.