All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.sf.saxon.lib.ExternalObjectModel Maven / Gradle / Ivy

There is a newer version: 12.5
Show newest version
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2018-2022 Saxonica Limited
// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
// If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
// This Source Code Form is "Incompatible With Secondary Licenses", as defined by the Mozilla Public License, v. 2.0.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

package net.sf.saxon.lib;

import net.sf.saxon.Configuration;
import net.sf.saxon.event.Receiver;
import net.sf.saxon.expr.JPConverter;
import net.sf.saxon.expr.PJConverter;
import net.sf.saxon.om.NodeInfo;
import net.sf.saxon.trans.XPathException;

import javax.xml.transform.Result;
import javax.xml.transform.Source;

/**
 * This interface must be implemented by any third-party object model that can
 * be wrapped with a wrapper that implements the Saxon Object Model (the NodeInfo interface).
 * 

This interface is designed to enable advanced applications to implement and register * new object model implementations that Saxon can then use without change. Although it is intended * for external use, it cannot at this stage be considered part of the stable Saxon Public API. * In particular, it is likely that the interface will grow by the addition of new methods.

*

For maximum integration, an object may extend {@link net.sf.saxon.om.TreeModel} as well as implementing * this interface. To implement TreeModel, it must supply a Builder; in effect this * means that it will be possible to use the external object model for output as well as for * input.

*/ public interface ExternalObjectModel { /** * Get the name of a characteristic class, which, if it can be loaded, indicates that the supporting libraries * for this object model implementation are available on the classpath * @return by convention (but not necessarily) the class that implements a document node in the relevant * external model */ String getDocumentClassName(); /** * Get the URI of the external object model as used in the JAXP factory interfaces for obtaining * an XPath implementation * * @return the URI used to identify this object model in the JAXP XPath factory mechanism. */ String getIdentifyingURI(); /** * Get a converter from XPath values to values in the external object model * * @param targetClass the required class of the result of the conversion. If this class represents * a node or list of nodes in the external object model, the method should return a converter that takes * a native node or sequence of nodes as input and returns a node or sequence of nodes in the * external object model representation. Otherwise, it should return null. * @return a converter, if the targetClass is recognized as belonging to this object model; * otherwise null */ PJConverter getPJConverter(Class targetClass); /** * Get a converter from values in the external object model to XPath values. * * @param sourceClass the class (static or dynamic) of values to be converted * @param config the Saxon Configuration object * @return a converter, if the sourceClass is recognized as belonging to this object model; * otherwise null */ JPConverter getJPConverter(Class sourceClass, Configuration config); /** * Get a converter that converts a sequence of XPath nodes to this model's representation * of a node list. *

This method is primarily for the benefit of DOM, which uses its own NodeList * class to represent collections of nodes. Most other object models use standard * Java collection objects such as java.util.List

* * @param node an example of the kind of node used in this model * @return if the model does not recognize this node as one of its own, return null. Otherwise * return a PJConverter that takes a list of XPath nodes (represented as NodeInfo objects) and * returns a collection of nodes in this object model */ PJConverter getNodeListCreator(Object node); /** * Test whether this object model recognizes a particular kind of JAXP Result object, * and if it does, return a Receiver that builds an instance of this data model from * a sequence of events. If the Result is not recognised, return null. * * @param result a JAXP result object * @return a Receiver that writes to that result, if available; or null otherwise * @throws net.sf.saxon.trans.XPathException * if any failure occurs */ Receiver getDocumentBuilder(Result result) throws XPathException; /** * Give this ExternalObjectModel the opportunity of recognising a Source object and returning * an ActiveSource, which will be used to send an instance of this external model to a supplied * Receiver. The default implementation returns null. * @param supplied a supplied Source * @return an ActiveSource object if the source is recognised, or null if not * @since 11 (introduced to give more cross-platform compatibility) */ default ActiveSource getActiveSource(Source supplied) { return null; } /** * Wrap or unwrap a node using this object model to return the corresponding erSaxon node. If the supplied * source does not belong to this object model, return null * * @param source a JAXP Source object * @param config the Saxon configuration * @return a NodeInfo corresponding to the Source, if this can be constructed; otherwise null */ NodeInfo unravel(Source source, Configuration config); }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy