Module java.xml

Class CatalogFeatures

java.lang.Object
javax.xml.catalog.CatalogFeatures

public class CatalogFeatures extends Object
CatalogFeatures保存了一组特性和属性。
目录特性
特性 描述 属性名称 系统属性 [1] 值 [2] 操作
类型
FILES 一个以分号分隔的URI列表,用于定位目录文件。这些URI必须是绝对的,并且必须有一个URL协议处理程序来处理URI方案。 javax.xml.catalog.files javax.xml.catalog.files String URIs 将第一个目录读取为当前目录;如果在当前目录中找不到匹配项,包括委托目录中的任何目录,则加载其他目录。
PREFER 指示公共标识符和系统标识符之间的优先级。默认值为public [3]。 javax.xml.catalog.prefer N/A String system 搜索系统条目以进行匹配;当外部标识符仅指定公共标识符时,搜索公共条目。
public 搜索系统条目以进行匹配;当找不到匹配的系统条目时,搜索公共条目。
DEFER 指示在需要时才读取替代目录,包括在委托条目或nextCatalog中指定的目录。默认值为true。 javax.xml.catalog.defer [4] javax.xml.catalog.defer String true 根据需要加载替代目录。
false 加载所有目录[5]。
RESOLVE 确定在所有指定目录耗尽后找不到匹配条目时的操作。默认为strict。 javax.xml.catalog.resolve [4] javax.xml.catalog.resolve String strict 如果找不到匹配项,则抛出CatalogException。
continue 允许XML解析器继续,就好像没有匹配项一样。
ignore 告诉XML解析器如果没有匹配项,则跳过外部引用。

[1] 对于标记为"N/A"的特性,没有系统属性。

[2] 值必须与此表中列出的完全一致,区分大小写。任何未指定的值将导致IllegalArgumentException

[3] 目录规范在prefer属性上定义了复杂的规则。尽管prefer可以是public或system,但规范实际上将system作为首选选项,也就是说,无论选择哪个选项,如果找到系统条目,系统条目始终会被使用。只有在prefer为public且找不到系统条目时才会考虑公共条目。因此,建议将prefer属性设置为public(这是默认值)。

[4] 尽管在OASIS目录规范中是非标准属性,deferresolve被Java目录API识别为与prefer一样是主目录目录条目中的属性。请注意,只有在主目录文件的目录条目中指定的属性才会被使用。

[5] 如果意图是共享整个目录存储,则可能希望将属性javax.xml.catalog.defer设置为false,以允许预加载整个目录。

属性优先级

目录特性遵循属性优先级,如模块摘要中所述,关于它们的值从各种配置源(如JAXP配置文件、系统和API属性)中检索的优先级。除了一般的配置源外,目录特性还在目录文件本身中得到支持,其中它们可以作为目录和组条目的属性指定。当指定这些属性时,它们将优先于任何其他配置源。例如,如果在目录文件中设置了prefer属性,如<catalog prefer="public">,则不需要或将被忽略任何其他"prefer"属性的输入。

可以通过其构建器创建CatalogFeatures实例,如下面的示例代码所示:


                CatalogFeatures f = CatalogFeatures.builder()
                        .with(Feature.FILES, "file:///etc/xml/catalog")
                        .with(Feature.PREFER, "public")
                        .with(Feature.DEFER, "true")
                        .with(Feature.RESOLVE, "ignore")
                        .build();
 

JAXP XML处理器支持

目录特性在JAXP处理器中得到支持,包括SAX和DOM(javax.xml.parsers)、StAX解析器(javax.xml.stream)、模式验证(javax.xml.validation)和XML转换(javax.xml.transform)。上述特性可以通过定义setProperty或setAttribute接口的JAXP工厂或处理器来设置。例如,以下代码片段通过javax.xml.catalog.files属性将URI设置到SAX解析器的目录文件中:

      SAXParserFactory spf = SAXParserFactory.newInstance();
      spf.setFeature(XMLConstants.USE_CATALOG, true); [1]
      SAXParser parser = spf.newSAXParser();
      parser.setProperty(CatalogFeatures.Feature.FILES.getPropertyName(), "file:///etc/xml/catalog");
 

[1] 请注意,此语句不是必需的,因为USE_CATALOG的默认值为true。

JAXP处理器对目录的支持取决于USE_CATALOG特性和有效目录文件的存在。只有当特性为true且通过javax.xml.catalog.files属性指定了有效的目录文件时,JAXP处理器才会使用目录。如果USE_CATALOG设置为false,或者未指定目录文件,则不会尝试使用目录。

JAXP处理器将遵守javax.xml.catalog.resolve属性的默认设置。例如,当找不到匹配项时,默认情况下处理器将报告异常,因为javax.xml.catalog.resolve属性的默认值为strict。

JAXP处理器优先考虑用户指定的自定义解析器。如果注册了这样的解析器,它将优先于CatalogResolver使用。但是,如果它返回null,则处理器将继续使用CatalogResolver进行解析。如果它返回空源,则CatalogResolver将不会尝试。

目录支持适用于JAXP库中支持解析器的任何过程。以下表列出了所有支持目录的过程。

支持目录的过程

具有目录支持的进程
进程 目录条目类型 示例
DTD和外部实体 public, system
   下面的DTD引用:
   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

   可以使用以下目录条目解析:
   <public publicId="-//W3C//DTD XHTML 1.0 Strict//EN" uri="catalog/xhtml1-strict.dtd"/>
   或
   <systemSuffix systemIdSuffix="html1-strict.dtd" uri="catalog/xhtml1-strict.dtd"/>
 
XInclude uri
   下面的XInclude元素:
   <xi:include href="https://openjdk.org/xml/disclaimer.xml"/>

   可以使用URI条目解析:
   <uri name="https://openjdk.org/xml/disclaimer.xml" uri="file:///pathto/local/disclaimer.xml"/>
   或
   <uriSuffix uriSuffix="disclaimer.xml" uri="file:///pathto/local/disclaimer.xml"/>
 
XSD导入 uri
   下面的导入元素:
    <xsd:import namespace="https://openjdk.org/xsd/XSDImport_person"
                schemaLocation="https://openjdk.org/xsd/XSDImport_person.xsd"/>

   可以使用URI条目解析:
   <uri name="https://openjdk.org/xsd/XSDImport_person.xsd" uri="file:///pathto/local/XSDImport_person.xsd"/>
   或
   <uriSuffix uriSuffix="XSDImport_person.xsd" uri="file:///pathto/local/XSDImport_person.xsd"/>
   或
   <uriSuffix uriSuffix="https://openjdk.org/xsd/XSDImport_person" uri="file:///pathto/local/XSDImport_person.xsd"/>
 
XSD包含 uri
   下面的包含元素:
   <xsd:include schemaLocation="https://openjdk.org/xsd/XSDInclude_person.xsd"/>

   可以使用URI条目解析:
   <uri name="https://openjdk.org/xsd/XSDInclude_person.xsd" uri="file:///pathto/local/XSDInclude_person.xsd"/>
   或
   <uriSuffix uriSuffix="XSDInclude_person.xsd" uri="file:///pathto/local/XSDInclude_person.xsd"/>
 
XSL导入和包含 uri
   下面的包含元素:
   <xsl:include href="https://openjdk.org/xsl/include.xsl"/>

   可以使用URI条目解析:
   <uri name="https://openjdk.org/xsl/include.xsl" uri="file:///pathto/local/include.xsl"/>
   或
   <uriSuffix uriSuffix="include.xsl" uri="file:///pathto/local/include.xsl"/>
 
XSL文档函数 uri
   下面元素中的文档:
   <xsl:variable name="dummy" select="document('https://openjdk.org/xsl/list.xml')"/>

   可以使用URI条目解析:
   <uri name="https://openjdk.org/xsl/list.xml" uri="file:///pathto/local/list.xml"/>
   或
   <uriSuffix uriSuffix="list.xml" uri="file:///pathto/local/list.xml"/>
 
自从:
9
  • Method Details

    • defaults

      public static CatalogFeatures defaults()
      返回具有默认设置的CatalogFeatures实例。
      返回:
      默认的CatalogFeatures实例
    • get

      public String get(CatalogFeatures.Feature cf)
      返回指定功能的值。
      参数:
      cf - Catalog功能的类型
      返回:
      功能的值
    • builder

      public static CatalogFeatures.Builder builder()
      返回一个用于创建CatalogFeatures对象的构建器实例。
      返回:
      一个构建器的实例