JEP 268:XML 目录
概述
开发一个支持 OASIS XML Catalogs 标准 v1.1 的标准 XML Catalog API。该 API 将定义 catalog 和 catalog-resolver 抽象,可以与接受解析器的 JAXP 处理器一起使用。
非目标
新的 API 不打算复制现有的内部目录实现。换句话说,不打算提供兼容的 API 或保持源代码或二进制兼容性。使用内部 API 的现有库或应用程序需要迁移到新的 API,以便利用新功能。
动机
XML 目录在解析 XML/XSD/XSL 中的外部引用时非常有用,它消除了重复获取外部资源的必要。在某些情况下,为了确保应用程序在本地环境中正常运行(当导入的 XML 资源来源与原始来源不同时),必须使用 XML 目录。
XML 目录还可以通过将远程外部引用定向到本地目录,然后禁止检索外部资源来提高应用程序的安全性。
自 JDK 6 以来,JDK 中已包含一个内部目录解析器。由于缺乏公共 API,外部库/应用程序直接使用或引用了它。它还被打包并交付在 Maven 仓库中,并被 JAX-WS/JAXB 等应用程序使用(例如,参见 com.sun.xml.ws.util.xml.XmlUtil)。为了使该功能能够真正得到支持,一个标准的 API 是可取的。
描述
XML 目录 API 将根据 OASIS XML 目录标准 v1.1 定义以下接口。它将为核心目录标准的功能提供直接支持,实现 EntityResolver
和 URIResolver
接口:
-
CatalogManager
将管理 XML 目录和CatalogResolver
的创建,以及相关特性和属性。 -
Catalog
将实现 OASIS 开放目录文件的语义。它将定义一个实体目录,该目录将外部标识符和 URI 引用映射到(其他)URI 引用,并委托给其他目录。 -
CatalogResolver
将实现 JAXP 现有的EntityResolver
和URIResolver
接口。解析器将支持 OASIS 标准处理指令作为一个 SAXXMLFilter
。
该 JEP 还建议在公共 API 推出后移除内部目录解析器实现。
新的 API 将符合当前的规范版本 1.1,该版本与 OASIS 技术决议 9401:1997(TR 9401 的修正案 2) 兼容,内部目录解析器就是基于此构建的。