Class XMLCatalogResolver
- java.lang.Object
-
- gov.nasa.pds.tools.label.CachedLSResourceResolver
-
- gov.nasa.pds.tools.label.XMLCatalogResolver
-
- All Implemented Interfaces:
org.apache.xerces.xni.parser.XMLEntityResolver
,LSResourceResolver
,EntityResolver
,EntityResolver2
public class XMLCatalogResolver extends CachedLSResourceResolver implements org.apache.xerces.xni.parser.XMLEntityResolver, EntityResolver2
Adaption of Xerces XMLCatalogResolver to bootstrap in catalog 1.1 support. In addition the resolveIdentifier method differs in that it does not resolve schema includes based on URIs as is the default behavior with the Xerces version.
The catalog resolver handles the resolution of external identifiers and URI references through XML catalogs. This component supports XML catalogs defined by the OASIS XML Catalogs Specification. It encapsulates the XML Commons resolver. An instance of this class may be registered on the parser as a SAX entity resolver, as a DOM LSResourceResolver or as an XNI entity resolver by setting the property (http://apache.org/xml/properties/internal/entity-resolver).
It is intended that this class may be used standalone to perform catalog resolution outside of a parsing context. It may be shared between several parsers and the application.
-
-
Constructor Summary
Constructors Constructor Description XMLCatalogResolver()
Constructs a catalog resolver with a default configuration.XMLCatalogResolver(String[] catalogs)
Constructs a catalog resolver with the given list of entry files.XMLCatalogResolver(String[] catalogs, boolean preferPublic)
Constructs a catalog resolver with the given list of entry files and the preference for whether system or public matches are preferred.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
clear()
Forces the cache of catalog mappings to be cleared.String[]
getCatalogList()
Returns the initial list of catalog entry files.InputSource
getExternalSubset(String name, String baseURI)
Locates an external subset for documents which do not explicitly provide one.LSInput
getLSInputFromResolvableResource(String schemaUrl)
boolean
getPreferPublic()
Returns the preference for whether system or public matches are preferred.boolean
getUseLiteralSystemId()
Returns the preference for whether the literal system identifier should be used when resolving system identifiers when both it and the expanded system identifier are available.InputSource
resolveEntity(String publicId, String systemId)
Resolves an external entity.InputSource
resolveEntity(String name, String publicId, String baseURI, String systemId)
Resolves an external entity.org.apache.xerces.xni.parser.XMLInputSource
resolveEntity(org.apache.xerces.xni.XMLResourceIdentifier resourceIdentifier)
Resolves an external entity.String
resolveIdentifier(org.apache.xerces.xni.XMLResourceIdentifier resourceIdentifier)
Resolves an identifier using the catalog.String
resolvePublic(String publicId, String systemId)
Returns the URI mapping in the catalog for the given external identifier ornull
if no mapping exists.LSInput
resolveResource(String type, String namespaceURI, String publicId, String systemId, String baseURI)
Resolves a resource using the catalog.String
resolveSchema(String namespaceURI, String systemId, String baseURI)
String
resolveSchematron(String systemId)
String
resolveSystem(String systemId)
Returns the URI mapping in the catalog for the given external identifier ornull
if no mapping exists.String
resolveURI(String uri)
Returns the URI mapping in the catalog for the given URI reference ornull
if no mapping exists.void
setCatalogList(String[] catalogs)
Sets the initial list of catalog entry files.void
setPreferPublic(boolean preferPublic)
Sets the preference for whether system or public matches are preferred.void
setUseLiteralSystemId(boolean useLiteralSystemId)
Sets the preference for whether the literal system identifier should be used when resolving system identifiers when both it and the expanded system identifier are available.-
Methods inherited from class gov.nasa.pds.tools.label.CachedLSResourceResolver
addCachedEntities, getCachedEntities, getProblemHandler, setProblemHandler
-
-
-
-
Constructor Detail
-
XMLCatalogResolver
public XMLCatalogResolver()
Constructs a catalog resolver with a default configuration.
-
XMLCatalogResolver
public XMLCatalogResolver(String[] catalogs)
Constructs a catalog resolver with the given list of entry files.
- Parameters:
catalogs
- an ordered array list of absolute URIs
-
XMLCatalogResolver
public XMLCatalogResolver(String[] catalogs, boolean preferPublic)
Constructs a catalog resolver with the given list of entry files and the preference for whether system or public matches are preferred.
- Parameters:
catalogs
- an ordered array list of absolute URIspreferPublic
- the prefer public setting
-
-
Method Detail
-
getCatalogList
public final String[] getCatalogList()
Returns the initial list of catalog entry files.
- Returns:
- the initial list of catalog entry files
-
setCatalogList
public final void setCatalogList(String[] catalogs)
Sets the initial list of catalog entry files. If there were any catalog mappings cached from the previous list they will be replaced by catalog mappings from the new list the next time the catalog is queried.
- Parameters:
catalogs
- an ordered array list of absolute URIs
-
clear
public final void clear()
Forces the cache of catalog mappings to be cleared.
-
getPreferPublic
public final boolean getPreferPublic()
Returns the preference for whether system or public matches are preferred. This is used in the absence of any occurrence of the
prefer
attribute on thecatalog
entry of a catalog. If this property has not yet been explicitly set its value istrue
.- Returns:
- the prefer public setting
-
setPreferPublic
public final void setPreferPublic(boolean preferPublic)
Sets the preference for whether system or public matches are preferred. This is used in the absence of any occurrence of the
prefer
attribute on thecatalog
entry of a catalog.- Parameters:
preferPublic
- the prefer public setting
-
getUseLiteralSystemId
public final boolean getUseLiteralSystemId()
Returns the preference for whether the literal system identifier should be used when resolving system identifiers when both it and the expanded system identifier are available. If this property has not yet been explicitly set its value is
true
.- Returns:
- the preference for using literal system identifiers for catalog resolution
- See Also:
setUseLiteralSystemId(boolean)
-
setUseLiteralSystemId
public final void setUseLiteralSystemId(boolean useLiteralSystemId)
Sets the preference for whether the literal system identifier should be used when resolving system identifiers when both it and the expanded system identifier are available.
The literal system identifier is the URI as it was provided before absolutization. It may be embedded within an entity. It may be provided externally or it may be the result of redirection. For example, redirection may have come from the protocol level through HTTP or from an application's entity resolver.
The expanded system identifier is an absolute URI which is the result of resolving the literal system identifier against a base URI.
- Parameters:
useLiteralSystemId
- the preference for using literal system identifiers for catalog resolution
-
resolveEntity
public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException
Resolves an external entity. If the entity cannot be resolved, this method should return
null
. This method returns an input source if an entry was found in the catalog for the given external identifier. It should be overridden if other behaviour is required.- Specified by:
resolveEntity
in interfaceEntityResolver
- Parameters:
publicId
- the public identifier, ornull
if none was suppliedsystemId
- the system identifier- Throws:
SAXException
- any SAX exception, possibly wrapping another exceptionIOException
- thrown if some i/o error occurs
-
resolveEntity
public InputSource resolveEntity(String name, String publicId, String baseURI, String systemId) throws SAXException, IOException
Resolves an external entity. If the entity cannot be resolved, this method should return
null
. This method returns an input source if an entry was found in the catalog for the given external identifier. It should be overridden if other behaviour is required.- Specified by:
resolveEntity
in interfaceEntityResolver2
- Parameters:
name
- the identifier of the external entitypublicId
- the public identifier, ornull
if none was suppliedbaseURI
- the URI with respect to which relative systemIDs are interpreted.systemId
- the system identifier- Throws:
SAXException
- any SAX exception, possibly wrapping another exceptionIOException
- thrown if some i/o error occurs
-
getExternalSubset
public InputSource getExternalSubset(String name, String baseURI) throws SAXException, IOException
Locates an external subset for documents which do not explicitly provide one. This method always returns
null
. It should be overrided if other behaviour is required.- Specified by:
getExternalSubset
in interfaceEntityResolver2
- Parameters:
name
- the identifier of the document root elementbaseURI
- the document's base URI- Throws:
SAXException
- any SAX exception, possibly wrapping another exceptionIOException
- thrown if some i/o error occurs
-
resolveResource
public LSInput resolveResource(String type, String namespaceURI, String publicId, String systemId, String baseURI)
Resolves a resource using the catalog. This method interprets that the namespace URI corresponds to uri entries in the catalog. Where both a namespace and an external identifier exist, the namespace takes precedence.
- Specified by:
resolveResource
in interfaceLSResourceResolver
- Overrides:
resolveResource
in classCachedLSResourceResolver
- Parameters:
type
- the type of the resource being resolvednamespaceURI
- the namespace of the resource being resolved, ornull
if none was suppliedpublicId
- the public identifier of the resource being resolved, ornull
if none was suppliedsystemId
- the system identifier of the resource being resolved, ornull
if none was suppliedbaseURI
- the absolute base URI of the resource being parsed, ornull
if there is no base URI
-
resolveSchema
public String resolveSchema(String namespaceURI, String systemId, String baseURI) throws IOException
- Throws:
IOException
-
resolveSchematron
public String resolveSchematron(String systemId) throws IOException
- Throws:
IOException
-
resolveEntity
public org.apache.xerces.xni.parser.XMLInputSource resolveEntity(org.apache.xerces.xni.XMLResourceIdentifier resourceIdentifier) throws org.apache.xerces.xni.XNIException, IOException
Resolves an external entity. If the entity cannot be resolved, this method should return
null
. This method only callsresolveIdentifier
and returns an input source if an entry was found in the catalog. It should be overridden if other behaviour is required.- Specified by:
resolveEntity
in interfaceorg.apache.xerces.xni.parser.XMLEntityResolver
- Parameters:
resourceIdentifier
- location of the XML resource to resolve- Throws:
org.apache.xerces.xni.XNIException
- thrown on general errorIOException
- thrown if some i/o error occurs
-
resolveSystem
public final String resolveSystem(String systemId) throws IOException
Returns the URI mapping in the catalog for the given external identifier or
null
if no mapping exists. If the system identifier is an URN in thepublicid
namespace it is converted into a public identifier by URN "unwrapping" as specified in the XML Catalogs specification.- Parameters:
systemId
- the system identifier to locate in the catalog- Returns:
- the mapped URI or
null
if no mapping was found in the catalog - Throws:
IOException
- if an i/o error occurred while reading the catalog
-
resolvePublic
public final String resolvePublic(String publicId, String systemId) throws IOException
Returns the URI mapping in the catalog for the given external identifier or
null
if no mapping exists. Public identifiers are normalized before comparison.- Parameters:
publicId
- the public identifier to locate in the catalogsystemId
- the system identifier to locate in the catalog- Returns:
- the mapped URI or
null
if no mapping was found in the catalog - Throws:
IOException
- if an i/o error occurred while reading the catalog
-
resolveURI
public final String resolveURI(String uri) throws IOException
Returns the URI mapping in the catalog for the given URI reference or
null
if no mapping exists. URI comparison is case sensitive. If the URI reference is an URN in thepublicid
namespace it is converted into a public identifier by URN "unwrapping" as specified in the XML Catalogs specification and then resolution is performed following the semantics of external identifier resolution.- Parameters:
uri
- the URI to locate in the catalog- Returns:
- the mapped URI or
null
if no mapping was found in the catalog - Throws:
IOException
- if an i/o error occurred while reading the catalog
-
resolveIdentifier
public String resolveIdentifier(org.apache.xerces.xni.XMLResourceIdentifier resourceIdentifier) throws org.apache.xerces.xni.XNIException, IOException
Resolves an identifier using the catalog. This method interprets that the namespace of the identifier corresponds to uri entries in the catalog. Where both a namespace and an external identifier exist, the namespace takes precedence.
- Parameters:
resourceIdentifier
- the identifier to resolve- Throws:
org.apache.xerces.xni.XNIException
- thrown on general errorIOException
- thrown if some i/o error occurs
-
-