5.11 Creating a New Extractor Type
You can create a new extractor type by extending the RDFCTX_EXTRACTOR or RDFCTX_WS_EXTRACTOR extractor type.
The extractor type to be extended must be accessible using Web service calls. The schema in which the new extractor type is created must be granted additional privileges to allow creation of the subtype. For example, if a new extractor type is created in the schema RDFCTXU, you must enter the following commands to grant the UNDER and RDFCTX_ADMIN privileges to that schema:
GRANT under ON mdsys.rdfctx_extractor TO rdfctxu; GRANT rdfctx_admin TO rdfctxu;
As an example, assume that an information extractor can process an incoming document and return an XML document that contains extracted information. To enable the information extractor to be invoked using a PL/SQL wrapper, you can create the corresponding extractor type implementation, as in the following example:
create or replace type rdfctxu.info_extractor under rdfctx_extractor ( xsl_trans sys.XMLtype, constructor function info_extractor ( xsl_trans sys.XMLType ) return self as result, overriding member function getDescription return VARCHAR2, overriding member function rdfReturnType return VARCHAR2, overriding member function extractRDF(document CLOB, docId VARCHAR2) return CLOB ) / create or replace type body rdfctxu.info_extractor as constructor function info_extractor ( xsl_trans sys.XMLType ) return self as result is begin self.extr_type := 'Info Extractor Inc.'; -- XML style sheet to generate RDF/XML from proprietary XML documents self.xsl_trans := xsl_trans; return; end info_extractor; overriding member function getDescription return VARCHAR2 is begin return 'Extactor by Info Extractor Inc.'; end getDescription; overriding member function rdfReturnType return VARCHAR2 is begin return 'RDF/XML'; end rdfReturnType; overriding member function extractRDF(document CLOB, docId VARCHAR2) return CLOB is ce_xmlt sys.xmltype; begin EXECUTE IMMEDIATE 'begin :1 = info_extract_xml(doc => :2); end;' USING IN OUT ce_xmlt, IN document; -- Now pass the ce_xmlt through RDF/XML transformation -- return ce_xmlt.transform(self.xsl_trans).getClobVal(); end extractRdf; end;
In the preceding example:
-
The implementation for the created
info_extractor
extractor type relies on the XML style sheet, set in the constructor, to generate RDF/XML from the proprietary XML schema used by the underlying information extractor. -
The
extractRDF
function assumes that theinfo_extract_xml
function contacts the desired information extractor and returns an XML document with the information extracted from the document that was passed in. -
The XML style sheet is applied on the XML document to generate equivalent RDF/XML, which is returned by the
extractRDF
function.
Parent topic: Semantic Indexing for Documents