模块  java.xml
软件包  javax.xml.catalog

Class CatalogFeatures


  • public class CatalogFeatures
    extends Object
    CatalogFeatures包含一组功能和属性。 Catalog Features Feature Description Property Name System Property [1] jaxp.properties [1] Value [2] Action Type Value FILES A semicolon-delimited list of URIs to locate the catalog files. The URIs must be absolute and have a URL protocol handler for the URI scheme. javax.xml.catalog.files javax.xml.catalog.files javax.xml.catalog.files String URIs Reads the first catalog as the current catalog; Loads others if no match is found in the current catalog including delegate catalogs if any. PREFER Indicates the preference between the public and system identifiers. The default value is public [3]. javax.xml.catalog.prefer N/A N/A String system Searches system entries for a match; Searches public entries when external identifier specifies only a public identifier public Searches system entries for a match; Searches public entries when there is no matching system entry. DEFER Indicates that the alternative catalogs including those specified in delegate entries or nextCatalog are not read until they are needed. The default value is true. javax.xml.catalog.defer [4] javax.xml.catalog.defer javax.xml.catalog.defer String true Loads alternative catalogs as needed. false Loads all catalogs[5]. RESOLVE Determines the action if there is no matching entry found after all of the specified catalogs are exhausted. The default is strict. javax.xml.catalog.resolve [4] javax.xml.catalog.resolve javax.xml.catalog.resolve String strict Throws CatalogException if there is no match. continue Allows the XML parser to continue as if there is no match. ignore Tells the XML parser to skip the external references if there no match.

    [1]标记为“N / A”的功能没有系统属性。

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

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

    [4]虽然OASIS目录规范中的非标准属性, deferresolve被Java Catalog API识别, deferresolve相同,因为它是主目录的prefer中的属性。 请注意,将仅使用为主Catalog文件的商品指定的属性。

    [5]如果打算共享整个目录存储,可能需要将属性javax.xml.catalog.defer设置为false以允许预加载整个目录。

    范围和顺序

    可以通过目录文件,目录API,系统属性和jaxp.properties设置功能和属性,优先级顺序相同。

    在目录和组条目的目录文件中指定为属性的属性应优先于任何其他设置。 例如,如果在目录文件中设置prefer属性,如prefer<catalog prefer="public"> ,则“prefer”属性的任何其他输入都不是必需的,或者将被忽略。

    通过Catalog API设置的属性会覆盖可能由系统属性和/或jaxp.properties设置的属性。 在多个接口的情况下,程序中的最新应优先考虑。 对于CatalogFeatures.Feature.FILES ,这意味着通过CatalogManager的方法指定的URI将覆盖可能通过CatalogFeatures.Builder输入的任何URI

    设置时的系统属性应覆盖jaxp.properties中的jaxp.properties

    jaxp.properties文件通常位于Java安装的conf目录中。 该文件仅由JAXP实现读取一次,然后缓存其值以供将来使用。 如果在第一次尝试从该文件读取时该文件不存在,则不再进行任何检查以检查其是否存在。 读取后,无法更改jaxp.properties中任何属性的值。

    可以通过其构建器创建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处理器对Catalog的支持取决于USE_CATALOG功能和是否存在有效的Catalog文件。 只有当该功能为true且通过javax.xml.catalog.files属性指定了有效的目录文件时,JAXP处理器才会使用目录。 如果USE_CATALOG设置为false,或者没有指定目录文件,则不会尝试使用目录。

    JAXP处理器将遵循CatalogFeatures的默认设置。 例如,由于javax.xml.catalog.resolve属性的默认值为strict,因此当没有找到匹配的条目时,处理器将默认报告Exception。

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

    Catalog支持可用于支持解析程序的JAXP库中的任何进程。 下表列出了所有此类过程。

    Processes with Catalog Support

    Processes with Catalog Support Process Catalog Entry Type Example DTDs and external entities public, system
       The following DTD reference:
       <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    
       Can be resolved using the following Catalog entry:
       <public publicId="-//W3C//DTD XHTML 1.0 Strict//EN" uri="catalog/xhtml1-strict.dtd"/>
       or
       <systemSuffix systemIdSuffix="html1-strict.dtd" uri="catalog/xhtml1-strict.dtd"/>
     
    XInclude uri
       The following XInclude element:
       <xi:include href="http://openjdk.java.net/xml/disclaimer.xml"/>
    
       can be resolved using a URI entry:
       <uri name="http://openjdk.java.net/xml/disclaimer.xml" uri="file:///pathto/local/disclaimer.xml"/>
       or
       <uriSuffix uriSuffix="disclaimer.xml" uri="file:///pathto/local/disclaimer.xml"/>
     
    XSD import uri
       The following import element:
        <xsd:import namespace="http://openjdk.java.net/xsd/XSDImport_person"
                    schemaLocation="http://openjdk.java.net/xsd/XSDImport_person.xsd"/>
    
       can be resolved using a URI entry:
       <uri name="http://openjdk.java.net/xsd/XSDImport_person.xsd" uri="file:///pathto/local/XSDImport_person.xsd"/>
       or
       <uriSuffix uriSuffix="XSDImport_person.xsd" uri="file:///pathto/local/XSDImport_person.xsd"/>
       or
       <uriSuffix uriSuffix="http://openjdk.java.net/xsd/XSDImport_person" uri="file:///pathto/local/XSDImport_person.xsd"/>
     
    XSD include uri
       The following include element:
       <xsd:include schemaLocation="http://openjdk.java.net/xsd/XSDInclude_person.xsd"/>
    
       can be resolved using a URI entry:
       <uri name="http://openjdk.java.net/xsd/XSDInclude_person.xsd" uri="file:///pathto/local/XSDInclude_person.xsd"/>
       or
       <uriSuffix uriSuffix="XSDInclude_person.xsd" uri="file:///pathto/local/XSDInclude_person.xsd"/>
     
    XSL import and include uri
       The following include element:
       <xsl:include href="http://openjdk.java.net/xsl/include.xsl"/>
    
       can be resolved using a URI entry:
       <uri name="http://openjdk.java.net/xsl/include.xsl" uri="file:///pathto/local/include.xsl"/>
       or
       <uriSuffix uriSuffix="include.xsl" uri="file:///pathto/local/include.xsl"/>
     
    XSL document function uri
       The document in the following element:
       <xsl:variable name="dummy" select="document('http://openjdk.java.net/xsl/list.xml')"/>
    
       can be resolved using a URI entry:
       <uri name="http://openjdk.java.net/xsl/list.xml" uri="file:///pathto/local/list.xml"/>
       or
       <uriSuffix uriSuffix="list.xml" uri="file:///pathto/local/list.xml"/>
     
    从以下版本开始:
    9
    • 方法详细信息

      • defaults

        public static CatalogFeatures defaults()
        返回具有默认设置的CatalogFeatures实例。
        结果
        默认的CatalogFeatures实例
      • builder

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