特性 | 描述 | 属性名称 | 系统属性 [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目录规范中是非标准属性,defer
和resolve
被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
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic class
用于构建CatalogFeatures对象的Builder类。static enum
在目录功能表中定义的功能类型。 -
Method Summary
Modifier and TypeMethodDescriptionstatic CatalogFeatures.Builder
builder()
返回一个用于创建CatalogFeatures对象的构建器实例。static CatalogFeatures
defaults()
返回具有默认设置的CatalogFeatures实例。返回指定功能的值。
-
Method Details
-
defaults
返回具有默认设置的CatalogFeatures实例。- 返回:
- 默认的CatalogFeatures实例
-
get
返回指定功能的值。- 参数:
-
cf
- Catalog功能的类型 - 返回:
- 功能的值
-
builder
返回一个用于创建CatalogFeatures对象的构建器实例。- 返回:
- 一个构建器的实例
-