-
- All Superinterfaces:
-
EntityResolver
,LSResourceResolver
,URIResolver
,XMLResolver
public interface CatalogResolver extends EntityResolver, XMLResolver, URIResolver, LSResourceResolver
目录解析器,实现SAXEntityResolver
,StAXXMLResolver
,Schema Validation使用的DOM LSLSResourceResolver
和TransformURIResolver
,并使用目录解析外部引用。所述Catalog Standard分辨
external identifiers
从uri entries
为用于单独识别的DTD,而uri entries
用于其他资源,如样式表和架构。 然而,Java API(例如XMLResolver
和LSResourceResolver
)没有这样的区别。 与现有Java API一致,此CatalogResolver将系统标识符识别为URI,并将搜索目录中的system
和uri
条目以查找匹配的条目。搜索在当前目录中开始。 如果找到匹配项,则不再进行任何尝试。 只有当前目录中没有匹配项时,才会考虑备用目录,包括委托和下一个目录。
搜索订单
解析器将首先使用指定的systemId
搜索系统类型的条目。 该系统条目包括system
,rewriteSystem
和systemSuffix
条目。如果未找到匹配项,则可以根据
prefer
属性搜索public
条目。prefer
字段 :如果prefer
是公共的,并且通过系统条目找不到匹配项,public
考虑public
条目。 如果未指定,则默认情况下prefer
是公共的(请注意,根据OASIS标准,系统条目将始终在公共条目之前考虑。首选公共意味着在指定系统和公共标识符时将匹配公共条目。因此,建议更喜欢公众。)如果未找到
systemId
和public
标识符的uri
项,则解析程序将继续使用指定的systemId
或href
搜索uri
条目。 该uri
条目包括uri
,rewriteURI
和uriSuffix
条目。错误处理
CatalogResolver扩展指定的已检查异常的接口,包括:-
SAXException
和IOException
byEntityResolver.resolveEntity(java.lang.String, java.lang.String)
-
XMLStreamException
byXMLResolver.resolveEntity(java.lang.String, java.lang.String, java.lang.String, java.lang.String)
-
TransformerException
byURIResolver.resolve(java.lang.String, java.lang.String)
该CatalogResolver然而,将抛出
CatalogException
只有当javax.xml.catalog.resolve
被指定为strict
。 对于期望处理已检查的Exceptions的应用程序,可能需要使用自定义解析程序来包装CatalogResolver或使用Catalog
对象实现它。- 从以下版本开始:
- 9
-
-
方法摘要
所有方法 实例方法 抽象方法 变量和类型 方法 描述 Source
resolve(String href, String base)
实现URIResolver。InputSource
resolveEntity(String publicId, String systemId)
实现EntityResolver
。InputStream
resolveEntity(String publicId, String systemId, String baseUri, String namespace)
实现XMLResolver
。LSInput
resolveResource(String type, String namespaceUri, String publicId, String systemId, String baseUri)
-
-
-
方法详细信息
-
resolveEntity
InputSource resolveEntity(String publicId, String systemId)
实现EntityResolver
。 该方法搜索主目录和备用目录中的商品,以尝试查找与指定的publicId
或systemId的匹配项。- Specified by:
-
resolveEntity
接口EntityResolver
- 参数
-
publicId
- 要引用的外部实体的公共标识符,如果未提供,则为null -
systemId
- 被引用的外部实体的系统标识符。 所有外部实体都需要系统标识符。 XML需要所有外部实体上的系统标识符,因此始终指定此值。 - 结果
-
如果找到映射,则为
InputSource
对象。 如果没有找到映射,返回一个InputSource
含有一个空对象Reader
如果javax.xml.catalog.resolve
属性设置为ignore
; 如果javax.xml.catalog.resolve
属性设置为continue
则返回null。 - 异常
-
CatalogException
- 如果未找到映射且javax.xml.catalog.resolve
指定为strict
- 另请参见:
-
InputSource
-
resolve
Source resolve(String href, String base)
实现URIResolver。 该方法搜索主目录和备用目录中的商品,以尝试查找与指定的href
属性匹配的href
。href
属性将按字面意思使用,不会尝试对base
进行绝对base
。如果该值为URN,则
href
属性将被识别为publicId
,并用于搜索public
条目。 如果该值是URI,则将其视为systemId
,并用于搜索system
和uri
条目。- Specified by:
-
resolve
接口URIResolver
- 参数
-
href
- 指定样式表URI的href属性,可以是相对的或绝对的 -
base
- 如果需要绝对URI,则href属性将作为绝对值的基URI - 结果
-
如果找到映射,则为
Source
对象。 如果未找到映射,则在javax.xml.catalog.resolve
属性设置为ignore
返回空的Source
对象; 如果javax.xml.catalog.resolve
属性设置为continue
,则返回Source
对象,其中包含原始URI(href,或者如果base不为null,则使用base解析href)。 - 异常
-
CatalogException
- 如果未找到映射且javax.xml.catalog.resolve
指定为strict
-
resolveEntity
InputStream resolveEntity(String publicId, String systemId, String baseUri, String namespace)
实现XMLResolver
。 出于解析publicId
和systemId
的目的,此方法等效于resolveEntity(java.lang.String, java.lang.String)
。systemId
将按字面意思使用,不会尝试对baseUri
绝对。baseUri
和namespace
不用于搜索目录中的匹配项。 但是,xml源中的相对systemId
可能已由解析器使用baseURI
进行绝对,因此无法找到system
条目。 在这种情况下,一个systemSuffix
项建议在system
条目。- Specified by:
-
resolveEntity
接口XMLResolver
- 参数
-
publicId
- 正在引用的外部实体的公共标识符,如果未提供,则为null -
systemId
- 被引用的外部实体的系统标识符。 所有外部实体都需要系统标识符。 XML需要所有外部实体上的系统标识符,因此始终指定此值。 -
baseUri
- CatalogResolver未使用的绝对基URI -
namespace
- 要解析的实体的名称空间,而不是CatalogResolver使用的名称空间。 - 结果
-
如果找到映射,则为
InputStream
对象; 如果未找到映射且javax.xml.catalog.resolve
属性设置为continue
或ignore
,则continue
ignore
。 请注意,对于XMLResolver,不可能忽略引用,因此ignore
被视为与continue
相同。 - 异常
-
CatalogException
- 如果未找到映射且javax.xml.catalog.resolve
指定为strict
-
resolveResource
LSInput resolveResource(String type, String namespaceUri, String publicId, String systemId, String baseUri)
实现LSResourceResolver
。 出于解析publicId
和systemId
的目的,此方法等效于resolveEntity(java.lang.String, java.lang.String)
。systemId
将在字面上使用,不会试图对baseUri
绝对。 该baseUri
,namespaceUri
和type
在寻求一种产品目录中的比赛没有被使用。 但是,解析器使用baseURI
可能已使源中的相对systemId
成为绝对,因此无法找到system
条目。 在这种情况下,一个systemSuffix
项建议在system
条目。- Specified by:
-
resolveResource
接口LSResourceResolver
- 参数
-
type
- 正在解析的资源的类型,CatalogResolver不使用 -
namespaceUri
- 正在解析的资源的名称空间,而不是CatalogResolver使用的名称空间 -
publicId
- 正在引用的外部实体的公共标识符,如果未提供公共标识符或资源不是实体,null
。 -
systemId
- 系统标识符,被引用的外部资源的URI引用 -
baseUri
- CatalogResolver未使用的绝对基URI - 结果
-
如果找到映射,则为
LSInput
对象; 如果未找到映射且javax.xml.catalog.resolve
属性设置为continue
或ignore
,则continue
ignore
。 请注意,对于LSResourceResolver
,无法忽略引用,因此ignore
被视为与continue
相同。 - 异常
-
CatalogException
- if no mapping is found andjavax.xml.catalog.resolve
is specified asstrict
-
-