Module  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”的功能没有System属性。

    [2]值应与本表格完全一致,区分大小写。 任何未指定的值将导致IllegalArgumentException

    [3]目录规范对the prefer attribute中的复杂规则进行了定义 虽然可以是公共的或系统的,但是规范实际上使得系统成为首选方案,也就是说,无论选项如何,如果发现系统条目始终被使用。 公共条目只有在偏好为公开且系统条目未找到时才被考虑。 因此,建议将prefer属性设置为public(默认值)。

    [4]尽管在OASIS规范目录非标准属性, deferresolve由Java目录API相同识别prefer为在主目录的目录项的属性。 请注意,将仅使用为主目录文件的目录条目指定的属性。

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

    范围和订单

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

    在目录和组条目的目录文件中指定为属性的属性应优先于其他任何设置。 例如,如果一个prefer属性在目录文件设定为<catalog prefer="public"> ,对于“喜欢”的属性的任何其它输入是没有必要的或将被忽略。

    通过目录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功能和有效的目录文件的存在。 仅当功能为真且有效时,JAXP处理器才会使用目录,通过javax.xml.catalog.files属性指定目录文件。 如果USE_CATALOG设置为false或没有指定目录文件,将不会尝试使用目录。

    JAXP处理器将遵守CatalogFeatures的默认设置。 例如,处理器将默认情况下报告异常,因为javax.xml.catalog.resolve属性的默认值是严格的,因为没有匹配的条目。

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

    目录支持可用于支持解析器的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对象的构建器的实例。
        结果
        建筑师的一个实例