Skip to content

JEP 268: XML Catalogs | XML 目录

摘要

开发一个标准的 XML Catalog API,支持 OASIS XML Catalogs 标准,v1.1。该 API 将定义目录和目录解析器的抽象,可与接受解析器的 JAXP 处理器一起使用。

非目标

新 API 不打算复制现有的内部目录实现。换句话说,没有意图提供兼容的 API 或维护源代码或二进制兼容性。现有使用内部 API 的库或应用程序需要迁移到新 API,以利用新功能。

动机

XML Catalogs 在解析 XML/XSD/XSL 中的外部引用时非常有用,无需重复获取外部资源。在某些情况下,需要 XML Catalog 来确保应用程序在本地环境中正常工作,其中导入的 XML 资源的来源与原始资源不同。

XML Catalogs 还可以通过将远程外部引用指向本地 Catalog,然后禁止检索外部资源来提高应用程序的安全性。

自 JDK 6 开始,JDK 中包含了一个内部目录解析器。由于缺乏公共 API,它被外部库 / 应用程序直接使用或引用。它还被捆绑并发布在 Maven 存储库中,并被诸如 JAX-WS/JAXB 等应用程序使用(参见,例如,com.sun.xml.ws.util.xml.XmlUtil)。需要一个标准的 API,以实际支持该功能。

描述

XML Catalog API 将根据 OASIS XML Catalogs 标准,v1.1 定义以下接口。它将直接支持 Catalog 标准的核心功能,并实现 EntityResolver 和 URIResolver 接口:

  • CatalogManager 将管理 XML Catalogs 和 CatalogResolver 的创建,以及特性和属性。
  • Catalog 将实现 OASIS Open Catalog 文件的语义。它将定义一个实体目录,将外部标识符和 URI 引用映射到(其他)URI 引用,并委托给其他目录。
  • CatalogResolver 将实现 JAXP 的现有 EntityResolverURIResolver 接口。解析器将支持 OASIS 标准处理指令作为 SAX XMLFilter。

在提供公共 API 后,本 JEP 还建议删除内部目录解析器实现。

新 API 将符合当前的规范版本 1.1,与 OASIS Technical Resolution 9401:1997 (Amendment 2 to TR 9401) 兼容,这也是内部目录解析器的基础。