Sophie

Sophie

distrib > Fedora > 14 > x86_64 > media > updates > by-pkgid > 71d40963b505df4524269198e237b3e3 > files > 976

virtuoso-opensource-doc-6.1.4-2.fc14.noarch.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
 <head profile="http://internetalchemy.org/2003/02/profile">
  <link rel="foaf" type="application/rdf+xml" title="FOAF" href="http://www.openlinksw.com/dataspace/uda/about.rdf" />
  <link rel="schema.dc" href="http://purl.org/dc/elements/1.1/" />
  <meta name="dc.title" content="14. RDF Data Access and Data Management" />
  <meta name="dc.subject" content="14. RDF Data Access and Data Management" />
  <meta name="dc.creator" content="OpenLink Software Documentation Team ;&#10;" />
  <meta name="dc.copyright" content="OpenLink Software, 1999 - 2009" />
  <link rel="top" href="index.html" title="OpenLink Virtuoso Universal Server: Documentation" />
  <link rel="search" href="/doc/adv_search.vspx" title="Search OpenLink Virtuoso Universal Server: Documentation" />
  <link rel="parent" href="rdfandsparql.html" title="Chapter Contents" />
  <link rel="prev" href="rdfinsertmethods.html" title="RDF Insert Methods in Virtuoso" />
  <link rel="next" href="virtuosospongerfacetinstall.html" title="Virtuoso Faceted Browser Installation and configuration" />
  <link rel="shortcut icon" href="../images/misc/favicon.ico" type="image/x-icon" />
  <link rel="stylesheet" type="text/css" href="doc.css" />
  <link rel="stylesheet" type="text/css" href="/doc/translation.css" />
  <title>14. RDF Data Access and Data Management</title>
  <meta http-equiv="Content-Type" content="text/xhtml; charset=UTF-8" />
  <meta name="author" content="OpenLink Software Documentation Team ;&#10;" />
  <meta name="copyright" content="OpenLink Software, 1999 - 2009" />
  <meta name="keywords" content="" />
  <meta name="GENERATOR" content="OpenLink XSLT Team" />
 </head>
 <body>
  <div id="header">
    <a name="virtuososponger" />
    <img src="../images/misc/logo.jpg" alt="" />
    <h1>14. RDF Data Access and Data Management</h1>
  </div>
  <div id="navbartop">
   <div>
      <a class="link" href="rdfandsparql.html">Chapter Contents</a> | <a class="link" href="rdfinsertmethods.html" title="RDF Insert Methods in Virtuoso">Prev</a> | <a class="link" href="virtuosospongerfacetinstall.html" title="Virtuoso Faceted Browser Installation and configuration">Next</a>
   </div>
  </div>
  <div id="currenttoc">
   <form method="post" action="/doc/adv_search.vspx">
    <div class="search">Keyword Search: <br />
        <input type="text" name="q" /> <input type="submit" name="go" value="Go" />
    </div>
   </form>
   <div>
      <a href="http://www.openlinksw.com/">www.openlinksw.com</a>
   </div>
   <div>
      <a href="http://docs.openlinksw.com/">docs.openlinksw.com</a>
   </div>
    <br />
   <div>
      <a href="index.html">Book Home</a>
   </div>
    <br />
   <div>
      <a href="contents.html">Contents</a>
   </div>
   <div>
      <a href="preface.html">Preface</a>
   </div>
    <br />
   <div class="selected">
      <a href="rdfandsparql.html">RDF Data Access and Data Management</a>
   </div>
    <br />
   <div>
      <a href="rdfdatarepresentation.html">Data Representation</a>
   </div>
   <div>
      <a href="rdfsparql.html">SPARQL</a>
   </div>
   <div>
      <a href="sparqlextensions.html">Extensions</a>
   </div>
   <div>
      <a href="rdfgraphsecurity.html">RDF Graphs Security</a>
   </div>
   <div>
      <a href="rdfviews.html">Linked Data Views over RDBMS Data Source</a>
   </div>
   <div>
      <a href="rdfrdfviewgnr.html">Automated Generation of RDF Views over Relational Data Sources</a>
   </div>
   <div>
      <a href="rdfviewsenterpr.html">Examples of Linked Data Views</a>
   </div>
   <div>
      <a href="rdfinsertmethods.html">RDF Insert Methods in Virtuoso</a>
   </div>
   <div class="selected">
      <a href="virtuososponger.html">RDFizer Middleware (Sponger)</a>
    <div>
        <a href="#virtuosospongerintro" title="What Is The Sponger?">What Is The Sponger?</a>
        <a href="#virtuosospongerimp" title="Why is it Important?">Why is it Important?</a>
        <a href="#virtuosospongerworkpr" title="How Does It Work?">How Does It Work?</a>
        <a href="#virtuosospongerinstall" title="Installation Steps">Installation Steps</a>
        <a href="#virtuosospongerusage" title="Using The Sponger">Using The Sponger</a>
        <a href="#virtuosospongerconsm" title="Consuming the Generated RDF Structured Data">Consuming the Generated RDF Structured Data</a>
        <a href="#virtuosospongercartridgesextractorusecases" title="RDF Cartridges Use Cases">RDF Cartridges Use Cases</a>
        <a href="#virtuosospongerarch" title="Cartridge Architecture">Cartridge Architecture</a>
        <a href="#rdfspongerprogrammerguide" title="Sponger Programmers Guide">Sponger Programmers Guide</a>
        <a href="#virtuosospongersampleuses" title="Sponger Usage Examples">Sponger Usage Examples</a>
    </div>
   </div>
   <div>
      <a href="virtuosospongerfacetinstall.html">Virtuoso Faceted Browser Installation and configuration</a>
   </div>
   <div>
      <a href="virtuosospongerfacent.html">Virtuoso Faceted Web Service</a>
   </div>
   <div>
      <a href="rdfiridereferencing.html">Linked Data</a>
   </div>
   <div>
      <a href="rdfsparqlrule.html">Inference Rules &amp; Reasoning</a>
   </div>
   <div>
      <a href="rdfsparqlgeospat.html">RDF and Geometry</a>
   </div>
   <div>
      <a href="rdfperformancetuning.html">RDF Performance Tuning</a>
   </div>
   <div>
      <a href="rdfnativestorageproviders.html">RDF Data Access Providers (Drivers)</a>
   </div>
   <div>
      <a href="rdfgraphreplication.html">RDF Graph Replication</a>
   </div>
    <br />
  </div>
  <div id="text">
    <a name="virtuososponger" />
    <h2>14.9. RDFizer Middleware (Sponger)</h2>
    <a name="virtuosospongerintro" />
    <h3>14.9.1. What Is The Sponger?</h3>
<p>The Virtuoso Sponger is the Linked Data middleware component of Virtuoso that generates 
	Linked Data from a variety of data sources, supporting a wide variety of data representation 
	and serialization formats. The sponger is transparently integrated into Virtuoso&#39;s SPARQL Query 
	Processor where it delivers URI de-referencing within SPARQL query patterns, across disparate 
	data spaces. It also delivers configurable smart HTTP caching services. Optionally, it can be 
	used by the <a href="htmlconductorbar.html#contentcrawlerrdf">Virtuoso Content Crawler</a> to periodically 
	populate and replenish data within the native RDF Quad Store. 
</p>
<p>The sponger is a fully fledged HTTP proxy service that is also directly accessible via 
	SOAP or REST interfaces.
</p>
<p>As depicted below, OpenLink&#39;s broad portfolio of Linked-Data-aware products supports a number 
	of routes for creating or consuming Linked Data. The Sponger provides a key platform for developers 
	to generate quality data meshes from unstructured or semi-structured data sources.
</p>
<table class="figure" border="0" cellpadding="0" cellspacing="0">
    <tr>
     <td>
          <img alt="OpenLink Linked Data generation options" src="../images/linked_data_gen_opts3.png" />
     </td>
    </tr>
    <tr>
        <td>Figure: 14.9.1.1. OpenLink Linked Data generation options</td>
    </tr>
    </table>
<p>
Architecturally, the Sponger is comprised of a number of Cartridges two types of cartridges: Extractor 
and Meta Cartridges. Extractor Cartridges focus on data extraction and transformation services while 
the Meta Cartridges provide lookups and joins across other linked data spaces and Web 2.0 APIs. Both 
cartridge types are themselves comprised of a data extractors and RDF Schema/Ontology Mapper 
components.</p>
<p>Cartridges are is highly customizable. Custom cartridges can be developed using any language 
	supported by the Virtuoso Server Extensions API enabling structured linked data generation from 
	resource types not available in the default Sponger Cartridge collection bundled -- as part of 
	the Virtuoso Sponger VAD package (rdf_mappers_dav.vad).
</p>
    <table class="figure" border="0" cellpadding="0" cellspacing="0">
    <tr>
     <td>
          <img alt="Virtuoso metadata extraction &amp; RDF structured data generation" src="../images/linked_data_gen_opts4.png" />
     </td>
    </tr>
    <tr>
        <td>Figure: 14.9.1.2. Virtuoso metadata extraction &amp; RDF structured data generation</td>
    </tr>
    </table>
  <br />  
  
	<a name="virtuosospongerimp" />
    <h3>14.9.2. Why is it Important?</h3>
<p>	
A majority of the worlds data naturally resides in non RDF form at the current time. The Sponger
delivers middleware that accelerates the bootstrap of the Semantic Data Web by generating RDF
from non RDF data sources, unobtrusively. This &quot;Swiss army knife&quot; for on-the-fly Linked Data generation 
provides a bridge between the traditional Document Web and the Linked Data Web (&quot;Data Web&quot;).
</p>
<p>Sponging data from non-RDF Web sources and converting it to RDF exposes the data in a 
canonical form for querying and inference, and enables fast and easy construction of linked 
data driven mesh-ups as opposed to code driven Web 2.0 mash-ups.
</p>
<p>The RDF extraction and instance data generation products that offer functionality 
demonstrated by the Sponger are also commonly referred to as RDFizers.
</p>
<br />

<a name="virtuosospongerworkpr" />
    <h3>14.9.3. How Does It Work?</h3>
<p>
When an RDF aware client requests data from a network accessible resource via the Sponger
the following events occur:
</p>
<ul>
<li>A requests in made for data in RDF form, and if RDF is returned nothing further happens</li>
<li>If RDF isn&#39;t returned, then the Sponger passes the data through a Metadata Extraction
Pipeline process (using Metadata Extractors)</li>
<li>The extracted data is transformed to RDF via a Mapping Pipeline process (RDF is extracted by way
of Ontology matching and mapping) that results in RDF Entities (instance data) generation</li>
<li>RDF Entities are returned to the client</li>
</ul>
<p>The imported data forms a local cache and its invalidation rules conform to those of traditional
HTTP clients (Web Browsers). Thus, expiration time is determined based on subsequent data fetches of
the same resource (note: the first data load will record the &#39;expires&#39; header) with current time
compared to expiration time stored in the local cache. If HTTP &#39;expires&#39; header data isn&#39;t returned
by the source data server, then the &quot;Sponger&quot; will derive it&#39;s own invalidation time frame by
evaluating the &#39;date&#39; header and &#39;last-modified&#39; HTTP headers. Irrespective of path taken,
local cache invalidation is driven by an assessment of current time relative to recorded expiration time.
</p>
<p>To manage the cache expiration, set the <strong>MinExpiration</strong> parameter in 
your Virtuoso.ini file.</p>
<p>Read full description of the parameter in the <a href="sect5_ini_SPARQL.html">[SPARQL] ini seciton</a>.</p>
<p>Designed with a pluggable architecture, the Sponger&#39;s core functionality is provided by Cartridges.
Each cartridge includes Data Extractors which extract data from one or more data sources, and Ontology
Mappers which map the extracted data to one or more ontologies/schemas, and route to producing RDF
Linked Data.
</p>
<p>The Schema Mappers are typically XSLT (e.g. GRDDL and other OpenLink Mapping Schemas) or
Virtuoso PL based. The Metadata Extractors may be developed in Virtuoso PL, C/C++, Java, or any
other language that can be integrated into the Virtuoso via it&#39;s server extensions APIs.
</p>
<p>
The Sponger also includes a pluggable name resolution mechanism that enables the development of
Custom Resolvers for naming schemes (e.g. URNs) associated with protocols beyond HTTP.
Examples of custom resolvers include:
</p>
<ul>
<li>
        <a href="http://dbpedia.org/resource/LSID">LSID</a>
      </li>
<li>
        <a href="http://dbpedia.org/resource/DOI">DOI</a>
      </li>
</ul>
<br />

<a name="virtuosospongerinstall" />
    <h3>14.9.4. Installation Steps</h3>
<ol>
      <li>Download the <a href="http://s3.amazonaws.com/opldownload/uda/vad-packages/6.1/virtuoso/rdf_mappers_dav.vad">rdf_mappers_dav.vad</a> package.</li>
      <li>Install the rdf_mappers_dav.vad package by using the Conductor UI or by using iSQL:
<div>
          <pre class="programlisting">
SQL&gt; DB.DBA.VAD_INSTALL(&#39;tmp/rdf_mappers_dav.vad&#39;,0);
SQL_STATE  SQL_MESSAGE
VARCHAR  VARCHAR
_______________________________________________________________________________

00000    No errors detected
00000    Installation of &quot;RDF Mappers&quot; is complete.
00000    Now making a final checkpoint.
00000    Final checkpoint is made.
00000    SUCCESS


6 Rows. -- 1078 msec.
</pre>
        </div>  	
  </li>
      <li>
        <a href="virtuososponger.html#virtuosospongercreatecustcartrrgst">Cartridge Configuration</a>
    <ul>
      <li>
            <a href="virtuososponger.html#virtuosospongercartridgesextr">Extractor Cartridges</a>
          </li>
      <li>
            <a href="virtuososponger.html#virtuosospongercartridgesmeta">Meta Cartridges</a>
          </li>
</ul>
  </li>
    </ol>
<p>
	<div class="tip">
		<div class="tiptitle">See Also: <a href="sect5_virtuosospongerrdfmapperspackage.html">RDF Mapper Package content description.</a>
        </div>
  </div>
</p>  
<br />


<a name="virtuosospongerusage" />
    <h3>14.9.5. Using The Sponger</h3>
    <p>The Sponger can be invoked via the following mechanisms:</p>
    <ol>
    <li>
        <a href="virtuososponger.html#virtuosospongerusageprocessor">Virtuoso SPARQL query processor</a>
    </li>
    <li>
        <a href="virtuososponger.html#virtuosospongerusageproxy">RDF Proxy Service</a>
    </li>
    <li>
        <a href="virtuososponger.html#virtuosospongerusageclapp">OpenLink RDF client applications</a>
    </li>
      <li>
        <a href="virtuososponger.html#virtuosospongerusagebrief">ODS-Briefcase (Virtuoso WebDAV)</a> - a component of the OpenLink Data Spaces distributed collaborative application platform</li>
    <li>
        <a href="virtuososponger.html#virtuosospongerusagedirect">Directly via Virtuoso PL</a>
    </li>
    </ol>
    
    <a name="virtuosospongerusageprocessor" />
    <h4>14.9.5.1. SPARQL Query Processor IRI Dereferencing</h4>
    <p>The Sponger is transparently integrated into the Virtuoso SPARQL query processor, where it supports
IRI dereferencing.
      </p>
      <p>Virtuoso extends the SPARQL Query Language such that it is possible to download RDF resources 
      	from a given IRI, parse, and then store the resulting triples in a graph, with all three operations 
      	performed during the SPARQL query-execution process. The IRI/URI of the graph used to store the 
      	triples is usually equal to the URL where the resources are downloaded from, consequently the 
      	feature is known as &quot;IRI/URI dereferencing&quot;. If a SPARQL query instructs the SPARQL processor 
      	to retrieve the target graph into local storage, then the SPARQL sponger will be invoked.
      </p>
      <p>The SPARQL extensions for IRI dereferencing are described below. Essentially these enable 
      	downloading and local storage of selected triples either from one or more named graphs, or 
      	based on a proximity search from a starting URI for entities matching the select criteria and 
      	also related by the specified predicates, up to a given depth. For full details see 
      	section <a href="rdfiridereferencing.html">Linked Data - IRI Dereferencing</a>.
      </p>
      <p>Note: For brevity, any reference to URI/IRIs above or in subsequent sections implies 
      an HTTP URI/IRI, where IRI is an internationalized URI. Similarly, in the context of the 
      Sponger, the term IRI in the Virtuoso reference documentation should be taken to mean an HTTP IRI.	
      </p> 
      <a name="virtuosospongerusageprocessor" />
    <h5>14.9.5.1.1. SPARQL Extensions for IRI Dereferencing of FROM Clauses</h5>
        <p>In addition to the &quot;define get:...&quot; SPARQL extensions for IRI dereferencing in FROM 
        	clauses, Virtuoso supports dereferencing SPARQL IRIs used in the WHERE clause (graph patterns) 
        	of a SPARQL query via a set of &quot;define input:grab-...&quot; pragmas.
        </p>	
        <p>Consider an RDF resource which describes a member of a contact list, user1, and also 
        	contains statements about other users, user2 anduser3 , known to him. Resource user3 in turn 
        	contains statements about user4 and so on. If all the data relating to these users were 
        	loaded into Virtuoso&#39;s RDF database, the query to retrieve the details of all the users 
        	could be quite simple. e.g.:         	
        </p>	
<div>
      <pre class="programlisting">
sparql
prefix foaf: &lt;http://xmlns.com/foaf/0.1/&gt;
prefix rdf: &lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&gt;
select ?id ?firstname ?nick
where
  {
    graph ?g
      {
        ?id rdf:type foaf:Person .
        ?id foaf:firstName ?firstname .
        ?id foaf:knows ?fn .
        ?fn foaf:nick ?nick .
      }
   }
limit 10;	
</pre>
    </div>        
        <p>But what if some or all of these resources were not present in Virtuoso&#39;s quad store? 
        	The highly distributed nature of the Linked Data Web makes it highly likely that these 
        	interlinked resources would be spread across several data spaces. Virtuoso&#39;s &#39;input:grab-...&#39; 
        	extensions to SPARQL enable IRI dereferencing in such a way that all appropriate resources 
        	are loaded, i.e. &quot;sponged&quot;, during query execution, even if some of the resources are not 
        	known beforehand. For any particular resource matched, and if necessary downloaded, by the 
        	query, it is possible to download related resources via a designated predicate path(s) to 
        	a specifiable depth i.e. number of &#39;hops&#39;, distance, or degrees of separation (i.e compute 
        	Transitive Closures in SPARQL).
        </p>
        <p>Using Virtuoso&#39;s &#39;input:grab-&#39; pragmas to enable sponging, the above query might be 
        	recast to: 
        </p>	
<div>
      <pre class="programlisting">
sparql
define input:grab-var &quot;?more&quot;
define input:grab-depth 10
define input:grab-limit 100
define input:grab-base &quot;http://www.openlinksw.com/dataspace/kidehen@openlinksw.com/weblog/kidehen@openlinksw.com%27s%20BLOG%20%5B127%5D/1300&quot;
prefix foaf: &lt;http://xmlns.com/foaf/0.1/&gt;
prefix rdf: &lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&gt;
prefix rdfs: &lt;http://www.w3.org/2000/01/rdf-schema#&gt;

select ?id ?firstname ?nick
where {
    graph ?g {
               ?id rdf:type foaf:Person .
               ?id foaf:firstName ?firstname .
               ?id foaf:knows ?fn .
               ?fn foaf:nick ?nick .
               optional { ?id rdfs:SeeAlso ?more }
            }
}
limit 10;	
</pre>
    </div>        
        <p>Another example showing a designated predicate traversal path via the input:grab-seealso 
        	extension is: 
        </p>	
<div>
      <pre class="programlisting">
sparql
define input:grab-iri &lt;http://www.openlinksw.com/dataspace/kidehen@openlinksw.com/weblog/kidehen@openlinksw.com%27s%20BLOG%20%5B127%5D/sioc.ttl&gt;
define input:grab-var &quot;id&quot;
define input:grab-depth 10
define input:grab-limit 100
define input:grab-base &quot;http://www.openlinksw.com/dataspace/kidehen@openlinksw.com/weblog/kidehen@openlinksw.com%27s%20BLOG%20%5B127%5D/1300&quot;
define input:grab-seealso &lt;foaf:maker&gt;
prefix foaf: &lt;http://xmlns.com/foaf/0.1/&gt;

select ?id
where
  {
    graph ?g
      {
        ?id a foaf:Person .
      }
  }
limit 10;	
</pre>
    </div>        
        <p>A list of the input:grab pragmas is given below:</p>
          <ul>        
            <li>input:grab-var specifies the name of the SPARQL variable whose values should be used as IRIs of resources that should be downloaded.</li>
            <li>input:grab-iri specifies an IRI that should be retrieved before executing the rest of the query, if it is not in the quad store already. (This pragma can be included multiple times).</li>
            <li>input:grab-seealso (or its synonym input:grab-follow-predicate) specifies a predicate IRI to be used when traversing a graph. (This pragma can be included multiple times).</li>
            <li>input:grab-limit sets the maximum number of resources (graph subject or object nodes) to be retrieved from a target graph.</li>
            <li>input:grab-depth sets the maximum &#39;degrees of separation&#39; or links (predicates) between nodes in the target graph.</li>
            <li>input:grab-all &quot;yes&quot; instructs the SPARQL processor to dereference everything related to the query. All variables and literal IRIs in the query become values for input:grab-var and input:grab-iri. The resulting performance may be very bad.</li>
            <li>input:grab-base specifies the base IRI to use when converting relative IRIs to absolute. (Default: empty string).</li>
            <li>input:grab-destination overrides the default IRI dereferencing and forces all retrieved triples to be stored in the specified graph.</li>
            <li>input:grab-loader identifies the procedure used to retrieve each resource via HTTP, parse and store it. (Default: DB.DBA.RDF_SPONGE_UP)</li>
            <li>input:grab-resolver identifies the procedure that resolves IRIs and determines the HTTP method of retrieval. (Default: DB.DBA.RDF_GRAB_RESOLVER_DEFAULT)</li>
          </ul>
      <br />
      <a name="virtuosospongerusageprocessorex" />
    <h5>14.9.5.1.2. SPARQL Processor Usage Example</h5>
        <p>Sponge can be performed directly from within the SPARQL processor.</p>
        <p>After logging into Virtuoso&#39;s Conductor interface, the following query can be 
        issued from the Interactive SQL (iSQL) panel: 
        </p> 	
<div>
      <pre class="programlisting">
sparql
define get:uri &quot;http://www.ivan-herman.net/foaf.html&quot;
define get:soft &quot;soft&quot;
select * from &lt;http://mygraph&gt; where {?s ?p ?o}
</pre>
    </div>        
        <p>Here the sparql keyword invokes the SPARQL processor from the SQL interface and the 
        	RDF data sponged from page http://www.ivan-herman.net/foaf.html is loaded into the local 
        	RDF quad store as graph http://mygraph .
        </p>	
        <p>The new graph can then be queried using the basic SPARQL client normally available 
        	in a default Virtuoso installation at http://localhost:8890/sparql/. e.g.: 
        </p>		
<div>
      <pre class="programlisting">
select * from &lt;http://mygraph&gt; where {?s ?p ?o}	
</pre>
    </div>        
      <br />      
    <br />   
    <a name="virtuosospongerusageproxy" />
    <h4>14.9.5.2. RDF Proxy Service</h4>
    <p>The Sponger&#39;s functionality is also exposed via an in-built REST style Web service. This web
service takes a target URL and either returns the content &quot;as is&quot; or tries to transform (by sponging)
to RDF. Thus, the proxy service can be used as a &#39;pipe&#39; for RDF browsers to browse non-RDF sources.</p>
    <p>When the rdf_mappers package is installed, Virtuoso reserves the path &#39;/about/[id|data|rdf|html]/http/&#39; for
Sponger Proxy URI Service. For example, if a Virtuoso installation on host example.com listens for HTTP
requests on port 8080 then client applications should use a &#39;service endpoint&#39; string equal to
&#39;http://example.com:8080/about/[id|data|rdf|html]/http/&#39;. If the rdf_mappers package is not installed, then
the service uses the path &#39;/proxy/rdf/&#39;.</p>
    <p>Note: The old Sponger Proxy URI Service pattern &#39;/proxy/&#39; is now deprecated.</p>
      <a name="virtuosospongerusageproxyex1" />
    <h5>14.9.5.2.1. Example 1</h5>
    <p>The following URLs return information about musician John Cale, gleaned from the MusicBrainz
music metadatabase, rendered as RDF or HTML respectively. (The sponged data is available in the HTML
rendering through the foaf:primaryTopic property.)</p>
    <ul>
      <li>http://demo.openlinksw.com/about/rdf/http://musicbrainz.org/artist/72c090b6-a68e-4cb9-b330-85278681a714.html</li>
      <li>http://demo.openlinksw.com/about/html/http/musicbrainz.org/artist/72c090b6-a68e-4cb9-b330-85278681a714.html</li>
    </ul>
      <br />
      <a name="virtuosospongerusageproxyex2" />
    <h5>14.9.5.2.2. Example 2</h5>
        <p>The file http://www.ivan-herman.net/foaf.html contains a short profile of the W3C Semantic 
        	Web Activity Lead Ivan Herman. This XHTML file contains RDF embedded as RDFa. Running the file 
        	through the Sponger via Virtuoso&#39;s RDF proxy service extracts the embedded FOAF data as pure 
        	RDF, as can be seen by executing:
        </p>
<div>
      <pre class="programlisting">
curl -H &quot;Accept: application/rdf+xml&quot; http://linkeddata.uriburner.com/about/rdf/http://www.ivan-herman.net/foaf.html	
</pre>
    </div>
        <p>(linkeddata.uriburner.com hosts a public Virtuoso instance.) Though this example 
        	demonstrates the action of the /about/rdf/ service quite transparently, it is a basic and 
        	unwieldy way to view RDF. As described earlier, the OpenLink Data Explorer uses the same 
        	proxy service to provide a more polished means to extract and view sponged RDF data.
        </p>	
      <br />
    <br />
    <a name="virtuosospongerusageclapp" />
    <h4>14.9.5.3. OpenLink RDF Client Applications</h4>
      <p>OpenLink currently provides two main RDF client applications:</p>
      <ul>
        <li>
        <a href="http://ode.openlinksw.com/">OpenLink Data Explorer</a> (ODE)</li>
        <li>
        <a href="http://demo.openlinksw.com/isparql">iSPARQL</a>
      </li>
      </ul>
      <p>ODE is a Linked Data explorer packaged as a Firefox plugin (support for other browsers 
      	is planned). iSPARQL is an interactive AJAX-based SPARQL query builder with support for 
      	SPARQL QBE, bundled as part of the 
      	<a href="http://oat.openlinksw.com/">OpenLink Ajax Toolkit</a> (OAT). Both RIA 
      	clients utilise sponging extensively.</p>
      <p>The ODE plugin is dual faceted - RDF data can be viewed and explored natively, through its 
      	integral RDF browser, or, as described above, rendered as HTML through ODE&#39;s &#39;View Page Metadata&#39; 
      	option. The screenshots below show ODE&#39;s RDF browser being launched through the &#39;View Linked 
      	Data Sources&#39; popup menu.
      </p>
      <table class="figure" border="0" cellpadding="0" cellspacing="0">
    <tr>
     <td>
          <img alt="Launching ODE's RDF browser" src="../images/twitter_home.png" />
     </td>
    </tr>
    <tr>
        <td>Figure: 14.9.5.3.1. Launching ODE&#39;s RDF browser</td>
    </tr>
    </table>
      <p>The RDF browser then displays RDF data sponged via the Crunchbase cartridge.</p>
      <table class="figure" border="0" cellpadding="0" cellspacing="0">
    <tr>
     <td>
          <img alt="ODE RDF browser displaying sponged Crunchbase data" src="../images/twitter_ode_rdf.png" />
     </td>
    </tr>
    <tr>
        <td>Figure: 14.9.5.3.2. ODE RDF browser displaying sponged Crunchbase data</td>
    </tr>
    </table>      
      <p>iSPARQL directs queries to the configured SPARQL endpoint. When targetting a Virtuoso 
      	/sparql service, Virtuoso specific sponging options can be enabled through the &#39;Preferences&#39; 
      	dialog box.
      </p>	
      <p>The iSPARQL sponger settings are appended to SPARQL queries through the &#39;should-sponge&#39; 
      	query parameter. These are translated to IRI dereferencing pragmas on the server as follows: 
      </p>	
      <table class="data">


  <tr>
    <th class="data">iSPARQL sponging setting</th>
        <th class="data">/sparql endpoint: &quot;should-sponge&quot; query parameter value</th>
        <th class="data">SPARQL processor directives</th>
  </tr>


<tr>
        <td class="data">Use only local data</td>
        <td class="data">N/A</td>
        <td class="data">N/A</td>
      </tr>
<tr>
        <td class="data">Retrieve remote RDF data for all missing source graphs</td>
        <td class="data">soft</td>
        <td class="data">define get:soft &quot;soft&quot;</td>
      </tr>
<tr>
        <td class="data">Retrieve all missing remote RDF data that might be useful</td>
        <td class="data">grab-all</td>
        <td class="data">	define input:grab-all &quot;yes&quot; define input:grab-depth 5 define input:grab-limit 100</td>
      </tr>
<tr>
        <td class="data">Retrieve all missing remote RDF data that might be useful including seeAlso references</td>
        <td class="data">grab-seealso</td>
        <td class="data">define input:grab-all &quot;yes&quot; define input:grab-depth 5 define input:grab-limit 200define input:grab-seealso &lt;http://www.w3.org.2000/01/rdf-schema#seeAlso&gt;define input:grab-seealso &lt;http://xmlns.com/foaf/0.1/seeAlso&gt;</td>
      </tr>
<tr>
        <td class="data">Try to download all referenced resources</td>
        <td class="data">grab-everything</td>
        <td class="data">
define input:grab-all &quot;yes&quot;define input:grab-intermediate &quot;yes&quot;define input:grab-depth 5define input:grab-limit 500define input:grab-seealso &lt;http://www.w3.org.2000/01/rdf-schema#seeAlso&gt;define input:grab-seealso &lt;http://xmlns.com/foaf/0.1/seeAlso&gt;</td>
      </tr>


</table>
    <br />

<br />
    <a name="virtuosospongerusagebrief" />
    <h4>14.9.5.4. ODS-Briefcase (Virtuoso WebDAV)</h4>
      <p>ODS-Briefcase is a component of 
      	<a href="http://virtuoso.openlinksw.com/wiki/main/Main/OdsIndex">OpenLink Data Spaces</a> 
      	(ODS), a new generation distributed collaborative application platform for creating Semantic 
      	Web presence via Data Spaces derived from weblogs, wikis, feed aggregators, photo galleries, 
      	shared bookmarks, discussion forums and more. It is also a high level interface to the Virtuoso 
      	WebDAV repository.
      </p>
      <p>ODS-Briefcase offers file-sharing functionality that includes the following features:</p>
      <ul>
        <li>Web brower-based interactions</li>
        <li>Web Services (direct use of the HTTP based WebDAV protocol)</li>
        <li>SPARQL query language support - all WebDAV resources are exposed as SIOC ontology 
        	instance data (RDF data sets)</li>        
      </ul>      
      <p>When resources or documents are put into the ODS Briefcase and are made publicly readable 
      	(via a Unix-style +r permission or ACL setting) and the resource in question is of a supported 
      	content type, metadata is automatically extracted at file upload time.
      </p>
      <p>Note: ODS-Briefcase extracts metadata from a wide array of file formats, automatically.</p>
      <p>The extracted metadata is available in two forms, pure WebDAV and RDF (with RDF/XML or 
      	N3/Turtle serialization options), that is optionally synchronized with the underlying Virtuoso 
      	Quad Store.
      </p>                  
      <p>All public readable resources in WebDAV have their owner, creation time, update time, size 
      	and tags published, plus associated content type dependent metadata. This WebDAV metadata is 
      	also available in RDF form as a SPARQL queriable graph accessible via the SPARQL protocol 
      	endpoint using the WebDAV location as the RDF data set URI (graph or data source URI).
      </p>                  
      <p>You can also use a special RDF_Sink folder to automate the process of uploading RDF 
      	resources files into the Virtuoso Quad Store via WebDAV or raw HTTP. The properties of the special 
      	folder control whether sponging (RDFization) occurs. Of course, by default, this feature is enabled 
      	across all Virtuoso and ODS installations (with an ODS-Briefcase Data Space instance enabled).
      </p>
      <a name="virtuosospongerusagebriefex" />
    <h5>14.9.5.4.1. Raw HTTP Example for Extracting Metadata using CURL</h5>                  
<div>
      <pre class="programlisting">
Username: demo
Password: demo
Source File: wine.rdf
Destination Folder:
http://demo.openlinksw.com/DAV/home/demo/rdf_sink/
Content Type: application/rdf+xml

$ curl -v -T wine.rdf -H content-type:application/rdf+xml http://demo.openlinksw.com/DAV/home/demo/rdf_sink/ -u demo:demo	
</pre>
    </div>      
      <p>Finally, you can also get RDF data into Virtuoso&#39;s Quad Store via WebDAV using the Virtuoso 
      	Web Crawler utility (configurable via the Virtuoso Conductor UI). This feature also provides the 
      	ability to enable or disable Sponging as depicted below.
      </p>
      <br />   
      <a name="virtuosospongerusagebriefint" />
    <h5>14.9.5.4.2. Sponger and ODS-Briefcase Structured Data Extractor Interrelationship</h5>                                                         
        <p>As the Sponger and ODS-Briefcase both extract structured data, what is the relationship 
        	between these two facilities?
        </p>	
        <p>The principal difference between the two is that the Sponger is anRDF data crawler &amp; 
        	generator, whereas Briefcase&#39;s structured data extractor is a WebDAV resourcefilter. The 
        	Briefcase structured data extractor is aimed at providing RDF data from WebDAV resources. 
        	Thus, if none of the available Sponger cartridges are able to extract metadata and produce 
        	RDF structured data, the Sponger calls upon the Briefcase extractor as the last resort in 
        	the RDF structured data generation pipeline.
        </p>
        <table class="figure" border="0" cellpadding="0" cellspacing="0">
    <tr>
     <td>
          <img alt="Conductor's content import configuration panel" src="../images/fig2_top.png" />
     </td>
    </tr>
    <tr>
        <td>Figure: 14.9.5.4.2.1. Conductor&#39;s content import configuration panel</td>
    </tr>
    </table>
        <table class="figure" border="0" cellpadding="0" cellspacing="0">
    <tr>
     <td>
          <img alt="Conductor's content import configuration panel" src="../images/fig2_bottom.png" />
     </td>
    </tr>
    <tr>
        <td>Figure: 14.9.5.4.2.2. Conductor&#39;s content import configuration panel</td>
    </tr>
    </table>
        <table class="figure" border="0" cellpadding="0" cellspacing="0">
    <tr>
     <td>
          <img alt="Conductor's content import configuration panel" src="../images/fig2_bottom2.png" />
     </td>
    </tr>
    <tr>
        <td>Figure: 14.9.5.4.2.3. Conductor&#39;s content import configuration panel</td>
    </tr>
    </table>  
        <table class="figure" border="0" cellpadding="0" cellspacing="0">
    <tr>
     <td>
          <img alt="Conductor's content import configuration panel" src="../images/fig2_bottom3.png" />
     </td>
    </tr>
    <tr>
        <td>Figure: 14.9.5.4.2.4. Conductor&#39;s content import configuration panel</td>
    </tr>
    </table>
       <br /> 
    <br />
    <a name="virtuosospongerusagedirect" />
    <h4>14.9.5.5. Directly via Virtuoso PL</h4>
    <p>Sponger cartridges are invoked through a cartridge hook which provides a Virtuoso PL entry point 
    	to the packaged functionality. Should you wish to utilize the Sponger from your own Virtuoso PL 
    	procedures, you can do so by calling these hook routines directly. Full details of the hook 
    	function prototype and how to define your own cartridges are presented <a href="virtuososponger.html#virtuosospongercreatecustcartran">here</a>.</p>
    <br />
<br />

<a name="virtuosospongerconsm" />
    <h3>14.9.6. Consuming the Generated RDF Structured Data</h3>
  <p>The generated RDF-based structured data (RDF) can be consumed in a number of ways, depending on 
  	whether or not the data is persisted in Virtuoso&#39;s RDF Quad Store.
  </p>
  <p>If the data is persisted, it can be queried through the Virtuoso SPARQL endpoint associated with 
  	any Virtuoso instance: /sparql. The RDF is exposed in a graph typically identified using a URL matching 
  	the source resource URL from which the RDF data was generated. Naturally, any SQL query can also access 
  	this, since SPARQL can be freely intermixed with SQL via Virtuoso&#39;s SPASQL (SPARQL inside SQL) 
  	functionality. RDF data is also accessible through Virtuoso&#39;s implementation of the URIQA protocol.
  </p>
  <p>If not persisted, as is the case with the RDF Proxy Service, the data can be consumed by an RDF 
  	aware Web client, e.g. an RDF browser such as the OpenLink Data Explorer (ODE).
  </p>
 <br />


   <a name="virtuosospongercartridgesextractorusecases" />
    <h3>14.9.7. RDF Cartridges Use Cases</h3>
<p>This section contains examples of Web resources which can be transformed by RDF Cartridges.
It also states where additional setup for given cartridges is needed i.e. keys account names etc.
</p>
<p>
      <strong>Service based:</strong>
    </p>
<ul>
<li>amazon
<div>
          <pre class="programlisting">
needs: api key
example: http://www.amazon.com/gp/product/0553383043
</pre>
        </div>
</li>
<li>ebay
<div>
          <pre class="programlisting">
needs: account, api-key
example: http://cgi.ebay.com/RARE-DAY-IN-FAIRY-LAND-ELEPHANT-FOLIO-20-FULL-COLOR_W0QQitemZ140209597189QQihZ004QQcategoryZ29223QQssPageNameZWDVWQQrdZ1QQcmdZViewItem
</pre>
        </div>
</li>
<li>flickr
needs: api-key
example: http://farm1.static.flickr.com/212/496684670_7122c831ed.jpg
<div>
          <pre class="programlisting">
</pre>
        </div>
</li>
<li>mbz
<div>
          <pre class="programlisting">
example: http://musicbrainz.org/release/37e955d4-a53c-45aa-a812-1b23b88dbc13.html
</pre>
        </div>
</li>
<li>mql (freebase)
<div>
          <pre class="programlisting">
example: http://www.freebase.com/view/en/beta_ursae_majoris
</pre>
        </div>
</li>
<li>facebook
<div>
          <pre class="programlisting">
needs: api-key, secret, persistent-session-id
example: http://www.facebook.com/profile.php?id=841100003
</pre>
        </div>
</li>
<li>yahoo-stock
<div>
          <pre class="programlisting">
example: http://finance.yahoo.com/q?s=AAPL
</pre>
        </div>
</li>
<li>yahoo-traffic
<div>
          <pre class="programlisting">
example: http://local.yahooapis.com/MapsService/V1/trafficData?appid=YahooDemo&amp;street=701+First+Street&amp;city=Sunnyvale&amp;state=CA
</pre>
        </div>
</li>
<li>Bugzilla
<div>
          <pre class="programlisting">
example: https://bugzilla.mozilla.org/show_bug.cgi?id=251714
</pre>
        </div>
</li>
<li>SVG</li>
<li>OO document
<div>
          <pre class="programlisting">
needs: unzip plugin
</pre>
        </div>
</li>
<li>Wikipedia
<div>
          <pre class="programlisting">
needs: php plugin &amp; dbpedia extractor
example: http://wikipedia.org/wiki/London
</pre>
        </div>
</li>
<li>Opencalais</li>
<li>iCalendar</li>
</ul>
<p>
      <strong>GRDDL</strong>
    </p>
  <ul>
<li>Google Base (google)
<div>
          <pre class="programlisting">
example: http://www.google.com/base/feeds/snippets/17891817243016304554
</pre>
        </div>
</li>
<li>eRDF</li>
<li>RDFa</li>
<li>hCard</li>
<li>hCalendar</li>
<li>hReview</li>
<li>relLicense</li>
<li>XBRL</li>
<li>HR-XML</li>
<li>DC</li>
<li>geoURL</li>
<li>Ning</li>
<li>XFN</li>
<li>xFolk</li>
</ul>
<p>
      <strong>URN handlers</strong>
    </p>
<table class="data">
    <caption>Table: 14.9.7.1. URN handlers List</caption>
    
    
    
      <tr>
        <th class="data">URN handler</th>
        <th class="data">Sample URI</th>
        <th class="data">Resource Description</th>
        <th class="data">Linked Data View</th>        
        <th class="data">Linked Data Graph</th>        
        <th class="data">Needs</th>                
      </tr>
    
    
      <tr>
        <td class="data">LSID</td>
        <td class="data">urn:lsid:ubio.org:namebank:12292</td>
        <td class="data">
          <a href="http://demo.openlinksw.com/about/html/urn:lsid:ubio.org:namebank:12292">HTML Representation</a>
        </td>
        <td class="data">
          <a href="http://demo.openlinksw.com/describe/?url=urn:lsid:ubio.org:namebank:12292">Linked Data View</a>
        </td>
        <td class="data">
          <a href="http://demo.openlinksw.com/ode/?uri=urn:lsid:ubio.org:namebank:12292">Data Explorer View</a>
        </td>                                
        <td class="data">none</td>        
      </tr>
      <tr>
        <td class="data">DOI</td>
        <td class="data">doi:10.1038/35057062</td>
        <td class="data">
          <a href="http://demo.openlinksw.com/about/html/doi:10.1038/35057062">HTML Representation</a>
        </td>
        <td class="data">
          <a href="http://demo.openlinksw.com/describe/?url=doi:10.1038/35057062">Linked Data View</a>
        </td>
        <td class="data">
          <a href="http://demo.openlinksw.com/ode/?uri=doi:10.1038/35057062">Data Explorer View</a>
        </td>                                
        <td class="data">Needs hslookup plugin, relevant html, pdf, xml etc. mappers enabled.</td>        
      </tr>
      <tr>
        <td class="data">OAI</td>
        <td class="data">oai:dcmi.ischool.washington.edu:article/8</td>
        <td class="data">
          <a href="http://demo.openlinksw.com/about/html/oai:dcmi.ischool.washington.edu:article/8">HTML Representation</a>
        </td>
        <td class="data">
          <a href="http://demo.openlinksw.com/describe/?url=oai:dcmi.ischool.washington.edu:article/8">Linked Data View</a>
        </td>
        <td class="data">
          <a href="http://demo.openlinksw.com/ode/?uri=oai:dcmi.ischool.washington.edu:article/8">Data Explorer View</a>
        </td>                                
        <td class="data">none</td>        
      </tr>
      
    
  
</table>
    <br />
<a name="virtuosospongerrdfmappers" />
    <h4>14.9.7.2. SPARQL IRI Dereferencing</h4>
<p>The Virtuoso SPARQL engine (called for brevity just SPARQL below) supports IRI Dereferencing,
however it understands only RDF data, that is it can retrieve only files containing RDF/XML, turtle
or N3 serialized RDF data, if format is unknown it will try mapping with built-in WebDAV metadata
extractor. In order to extend this feature with dereferencing web or file resources which naturally
don&#39;t have RDF data (like PDF, JPEG files for example) is provided a special mechanism in SPARQL
engine. This mechanism is called RDF mappers for translation of non-RDF data files to RDF.</p>
<p>In order to instruct the SPARQL to call a RDF mapper it needs to be registered and it will
be called for a given URL or MIME type pattern. In other words, when unknown for SPARQL format is
received during URL dereferencing process, it will look into a special registry (a table) to match
either the MIME type or IRI using a regular expression, if match is found the mapper function will
be called.</p>
<a name="virtuosospongerproxy" />
    <h5>14.9.7.2.1. Sponger Proxy service</h5>
<p>Sponger functionality is also exposed via Virtuoso&#39;s &quot;/proxy/rdf/&quot; endpoint, as an in-built
REST style Web service available in any Virtuoso standard installation. This web service takes
a target URL and either returns the content &quot;as is&quot; or tries to transform (by sponging) to RDF.
Thus, the proxy service can be used as a &#39;pipe&#39; for RDF browsers to browse non-RDF sources.
</p>
<p>For more information see <a href="rdfsparql.html#rdfproxyservice">RDF Sponger Proxy service</a>
    </p>
<br />
<a name="virtuosospongercache" />
    <h5>14.9.7.2.2. Cache Invalidation</h5>
<p>To clear cache on all values of HS_LOCAL_IRI of the SYS_HTTP_SPONGE table use:</p>
<div>
      <pre class="programlisting">
SPARQL clear graph &lt;A-Named-Graph&gt;;
</pre>
    </div>
<br />
<br />
<br />

<a name="virtuosospongerarch" />
    <h3>14.9.8. Cartridge Architecture</h3>
  <a name="virtuosospongerarchcr" />
    <h4>14.9.8.1. What is a Cartridge?</h4>
    <p>See full description <a href="virtuososponger.html#virtuosospongeroverviewcartarch">here</a>
    </p>
  <br />
  <a name="virtuosospongercartridgesextr" />
    <h4>14.9.8.2. Extractor Cartridges</h4>
    <p>An Extractor Cartridge processes a Resource of a given format, extracting RDF according to 
    	rules appropriate to that format. External data does not come into play; only the content of 
    	the Resource fed to the Sponger.
    </p>	
    <a name="virtuosospongercartridgesstand" />
    <h5>14.9.8.2.1. Supported Standard Non-RDF Data Formats</h5>
      <p>These Cartridges handle open formats - typically community-developed, openly-documented, 
      	and freely-licensed data structures.</p>
<table class="data">


  <tr>
    <th class="data">Cartridge</th>
        <th class="data">Sample URI</th>
        <th class="data">Resource Description</th>
        <th class="data">Linked Data Graph</th>
  </tr>


<tr>
        <td class="data">AB Meta</td>
        <td class="data">
          <a href="http://abmeta.org/album2.html">example</a> </td>
        <td class="data">  <a href="http://linkeddata.uriburner.com/about/html/http/abmeta.org/album2.html">HTML Representation</a> </td>
        <td class="data">  <a href="http://linkeddata.uriburner.com/ode/?uri=http://abmeta.org/album2.html">Data Explorer View</a> </td>
      </tr>
<tr>
        <td class="data">Atom</td>
        <td class="data">
          <a href="http://www.openlinksw.com/blog/~kidehen/gems/atom.xml">example</a> </td>
        <td class="data">  <a href="http://linkeddata.uriburner.com/about/html/http/www.openlinksw.com/blog/~kidehen/gems/atom.xml">HTML Representation</a> </td>
        <td class="data">  <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.openlinksw.com/blog/~kidehen/gems/atom.xml">Data Explorer View</a> </td>
      </tr>
<tr>
        <td class="data">CSV</td>
        <td class="data">
          <a href="http://data.london.gov.uk/datafiles/business-economy/employment-projections-sector-2009.csv">example</a> </td>
        <td class="data">  <a href="http://linkeddata.uriburner.com/about/html/http/data.london.gov.uk/datafiles/business-economy/employment-projections-sector-2009.csv">HTML Representation</a> </td>
        <td class="data">  <a href="http://linkeddata.uriburner.com/ode/?uri=http://data.london.gov.uk/datafiles/business-economy/employment-projections-sector-2009.csv">Data Explorer View</a> </td>
      </tr>
<tr>
        <td class="data">DC</td>
        <td class="data">
          <a href="http://dublincore.org/2008/01/14/dcterms.rdf">example</a> </td>
        <td class="data">  <a href="http://linkeddata.uriburner.com/about/html/http/dublincore.org/2008/01/14/dcterms.rdf">HTML Representation</a> </td>
        <td class="data">  <a href="http://linkeddata.uriburner.com/ode/?uri=http://dublincore.org/2008/01/14/dcterms.rdf">Data Explorer View</a> </td>
      </tr>
<tr>
        <td class="data">eRDF</td>
        <td class="data">
          <a href="http://www.w3.org/2001/sw/grddl-wg/doc29/hotel-data.html">example</a> </td>
        <td class="data">  <a href="http://linkeddata.uriburner.com/about/html/http/www.w3.org/2001/sw/grddl-wg/doc29/hotel-data.html">HTML Representation</a> </td>
        <td class="data">  <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.w3.org/2001/sw/grddl-wg/doc29/hotel-data.html">Data Explorer View</a> </td>
      </tr>
<tr>
        <td class="data">hAudio</td>
        <td class="data">
          <a href="http://alpha.libre.fm/user/weborganics">example</a> </td>
        <td class="data">  <a href="http://linkeddata.uriburner.com/about/html/http/alpha.libre.fm/user/weborganics">HTML Representation</a> </td>
        <td class="data">  <a href="http://linkeddata.uriburner.com/ode/?uri=http://alpha.libre.fm/user/weborganics">Data Explorer View</a> </td>
      </tr>
<tr>
        <td class="data">hCalendar</td>
        <td class="data">
          <a href="http://www.maine.gov/portal/government/calendar.shtml">example</a> </td>
        <td class="data">  <a href="http://linkeddata.uriburner.com/about/html/http/www.maine.gov/portal/government/calendar.shtml">HTML Representation</a> </td>
     <td class="data">  <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.maine.gov/portal/government/calendar.shtml">Data Explorer View</a>
     </td>
      </tr>
<tr>
        <td class="data">hCard</td>
        <td class="data">
          <a href="http://dbaron.org/">example</a> </td>
        <td class="data">  <a href="http://linkeddata.uriburner.com/about/html/http/dbaron.org/">HTML Representation</a> </td>
     <td class="data">  <a href="http://linkeddata.uriburner.com/ode/?uri=http://dbaron.org/">Data Explorer View</a>
     </td>
      </tr>
<tr>
        <td class="data">hListing</td>
        <td class="data">
          <a href="http://feedback.ebay.com/ws/eBayISAPI.dll?ViewFeedback2&amp;userid=manganos&amp;ftab=AllFeedback&amp;frm=284&amp;iid=5863912155">example</a> </td>
        <td class="data">  <a href="http://linkeddata.uriburner.com/about/html/http/feedback.ebay.com/ws/eBayISAPI.dll?ViewFeedback2&amp;userid=manganos&amp;ftab=AllFeedback&amp;frm=284&amp;iid=5863912155">HTML Representation</a> </td>
     <td class="data">  <a href="http://linkeddata.uriburner.com/ode/?uri=http://feedback.ebay.com/ws/eBayISAPI.dll?ViewFeedback2&amp;userid=manganos&amp;ftab=AllFeedback&amp;frm=284&amp;iid=5863912155">Data Explorer View</a>
     </td>
      </tr>
<tr>
        <td class="data">hNews</td>
        <td class="data">
          <a href="http://www.semissourian.com/story/1620555.html">example</a> </td>
        <td class="data">  <a href="http://linkeddata.uriburner.com/about/html/http://www.semissourian.com/story/1620555.html">HTML Representation</a> </td>
     <td class="data">  <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.semissourian.com/story/1620555.html">Data Explorer View</a>
     </td>
      </tr>
<tr>
        <td class="data">hProduct</td>
        <td class="data">
          <a href="http://www.roger-junca.com/Roti-de-magret-du-Sud-ouest-produit-89.html">example</a> </td>
        <td class="data">  <a href="http://linkeddata.uriburner.com/about/html/http/www.roger-junca.com/Roti-de-magret-du-Sud-ouest-produit-89.html">HTML Representation</a> </td>
     <td class="data">  <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.roger-junca.com/Roti-de-magret-du-Sud-ouest-produit-89.html">Data Explorer View</a>
     </td>
      </tr>
<tr>
        <td class="data">HR-XML</td>
        <td class="data">
          <a href="http://ns.hr-xml.org/2_5/HR-XML-2_5/SEP/ResumeExample.xml">example</a> </td>
        <td class="data">  <a href="http://linkeddata.uriburner.com/about/html/http/ns.hr-xml.org/2_5/HR-XML-2_5/SEP/ResumeExample.xml">HTML Representation</a> </td>
     <td class="data">  <a href="http://linkeddata.uriburner.com/ode/?uri=http://ns.hr-xml.org/2_5/HR-XML-2_5/SEP/ResumeExample.xml">Data Explorer View</a>
     </td>
      </tr>
<tr>
        <td class="data">hRecipe</td>
        <td class="data">
          <a href="http://www.bbc.co.uk/food/recipes/beef_tacos_with_salsa_67130%01hrecipe">example</a> </td>
        <td class="data">  <a href="http://linkeddata.uriburner.com/about/html/http://linkeddata.uriburner.com/about/id/entity/http/www.bbc.co.uk/food/recipes/beef_tacos_with_salsa_67130%01hrecipe">HTML Representation</a> </td>
     <td class="data">  <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.bbc.co.uk/food/recipes/beef_tacos_with_salsa_67130">Data Explorer View</a>
     </td>
      </tr>
<tr>
        <td class="data">hResume</td>
        <td class="data">
          <a href="http://brev.name/resume/brev-resume.html">example</a> </td>
        <td class="data">  <a href="http://linkeddata.uriburner.com/about/html/http/brev.name/resume/brev-resume.html">HTML Representation</a> </td>
     <td class="data">  <a href="http://linkeddata.uriburner.com/ode/?uri=http://brev.name/resume/brev-resume.html">Data Explorer View</a>
     </td>
      </tr>
<tr>
        <td class="data">hReview</td>
        <td class="data">
          <a href="http://www.concertbuzz.net/genres/classic-rock/jethro-tull.html">example</a> </td>
        <td class="data">  <a href="http://linkeddata.uriburner.com/about/html/http/www.concertbuzz.net/genres/classic-rock/jethro-tull.html">HTML Representation</a> </td>
     <td class="data">  <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.concertbuzz.net/genres/classic-rock/jethro-tull.html">Data Explorer View</a>
     </td>
      </tr>
<tr>
        <td class="data">HTTP in RDF</td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/about/rdf/http://data.london.gov.uk/datafiles/business-economy/employment-projections-sector-2009.csv">example</a> </td>
        <td class="data">  <a href="http://linkeddata.uriburner.com/about/html/http/linkeddata.uriburner.com/about/rdf/http://data.london.gov.uk/datafiles/business-economy/employment-projections-sector-2009.csv">HTML Representation</a> </td>
     <td class="data">  <a href="http://linkeddata.uriburner.com/ode/?uri=http://linkeddata.uriburner.com/about/rdf/http://data.london.gov.uk/datafiles/business-economy/employment-projections-sector-2009.csv">Data Explorer View</a>
     </td>
      </tr>
<tr>
        <td class="data">iCalendar</td>
        <td class="data">
          <a href="http://www.mozilla.org/projects/calendar/caldata/AustrianHolidays.ics">example</a> </td>
        <td class="data">  <a href="http://linkeddata.uriburner.com/about/html/http/www.mozilla.org/projects/calendar/caldata/AustrianHolidays.ics">HTML Representation</a> </td>
     <td class="data">  <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.mozilla.org/projects/calendar/caldata/AustrianHolidays.ics">Data Explorer View</a>
     </td>
      </tr>
<tr>
        <td class="data">Microsoft Word 2003 XML Document</td>
        <td class="data">
          <a href="http://ec2-174-129-156-25.compute-1.amazonaws.com/DAV/office_tests/word2003xml.xml">example</a> </td>
        <td class="data">  <a href="http://linkeddata.uriburner.com/about/html/http/ec2-174-129-156-25.compute-1.amazonaws.com/DAV/office_tests/word2003xml.xml">HTML Representation</a> </td>
     <td class="data">  <a href="http://linkeddata.uriburner.com/ode/?uri=http://ec2-174-129-156-25.compute-1.amazonaws.com/DAV/office_tests/word2003xml.xml">Data Explorer View</a>
     </td>
      </tr>
<tr>
        <td class="data">Microsoft XML Spreadsheet 2003</td>
        <td class="data">
          <a href="http://mathewpeet.org/thesis/programs/spreadsheet/XRDCALC-LATTICEPARAM.xls">example</a> </td>
        <td class="data">  <a href="http://linkeddata.uriburner.com/about/html/http/mathewpeet.org/thesis/programs/spreadsheet/XRDCALC-LATTICEPARAM.xls">HTML Representation</a> </td>
     <td class="data">  <a href="http://linkeddata.uriburner.com/ode/?uri=http://mathewpeet.org/thesis/programs/spreadsheet/XRDCALC-LATTICEPARAM.xls">Data Explorer View</a>
     </td>
      </tr>
<tr>
        <td class="data">Microsoft Documents</td>
        <td class="data">
          <a href="http://data.london.gov.uk/datafiles/business-economy/employment-projections-sector-2009.csv">example</a> </td>
        <td class="data">  <a href="http://linkeddata.uriburner.com/about/html/http/linkeddata.uriburner.com/about/rdf/http://data.london.gov.uk/datafiles/business-economy/employment-projections-sector-2009.csv">HTML Representation</a> </td>
     <td class="data">  <a href="http://linkeddata.uriburner.com/ode/?uri=http://linkeddata.uriburner.com/about/rdf/http://data.london.gov.uk/datafiles/business-economy/employment-projections-sector-2009.csv">Data Explorer View</a>
     </td>
      </tr>
<tr>
        <td class="data">OData</td>
        <td class="data">
          <a href="http://services.odata.org/Northwind/Northwind.svc/">example</a> </td>
        <td class="data">  <a href="http://linkeddata.uriburner.com/about/html/http://services.odata.org/Northwind/Northwind.svc/">HTML Representation</a> </td>
     <td class="data">  <a href="http://linkeddata.uriburner.com/ode/?uri=http://services.odata.org/Northwind/Northwind.svc/">Data Explorer View</a>
     </td>
      </tr>
<tr>
        <td class="data">OO document</td>
        <td class="data">
          <a href="http://www.pitonyak.org/AndrewMacro.odt">example</a> </td>
        <td class="data">  <a href="http://linkeddata.uriburner.com/about/html/http/www.pitonyak.org/AndrewMacro.odt">HTML Representation</a> </td>
     <td class="data">  <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.pitonyak.org/AndrewMacro.odt">Data Explorer View</a>
     </td>
      </tr>
<tr>
        <td class="data">OPML</td>
        <td class="data">
          <a href="http://news.bbc.co.uk/rss/feeds.opml">example</a> </td>
        <td class="data">  <a href="http://linkeddata.uriburner.com/about/html/http/news.bbc.co.uk/rss/feeds.opml">HTML Representation</a> </td>
     <td class="data">  <a href="http://linkeddata.uriburner.com/ode/?uri=http://news.bbc.co.uk/rss/feeds.opml">Data Explorer View</a>
     </td>
      </tr>
<tr>
        <td class="data">PPTX</td>
        <td class="data">
          <a href="http://download.microsoft.com/download/4/D/E/4DE0D83D-7845-4FD1-9A8E-12F532EC81BC/Keynote.pptx">example</a> </td>
        <td class="data">  <a href="http://linkeddata.uriburner.com/about/html/http/download.microsoft.com/download/4/D/E/4DE0D83D-7845-4FD1-9A8E-12F532EC81BC/Keynote.pptx">HTML Representation</a> </td>
     <td class="data">  <a href="http://linkeddata.uriburner.com/ode/?uri=http://download.microsoft.com/download/4/D/E/4DE0D83D-7845-4FD1-9A8E-12F532EC81BC/Keynote.pptx">Data Explorer View</a>
     </td>
      </tr>
<tr>
        <td class="data">RDFa</td>
        <td class="data">
          <a href="http://virtuoso.openlinksw.com/presentations/Creating_Deploying_Exploiting_Linked_Data2/Creating_Deploying_Exploiting_Linked_Data2_TimBL_v3.html">example</a> </td>
        <td class="data">  <a href="http://linkeddata.uriburner.com/about/html/http/virtuoso.openlinksw.com/presentations/Creating_Deploying_Exploiting_Linked_Data2/Creating_Deploying_Exploiting_Linked_Data2_TimBL_v3.html">HTML Representation</a> </td>
     <td class="data">  <a href="http://virtuoso.openlinksw.com/presentations/Creating_Deploying_Exploiting_Linked_Data2/Creating_Deploying_Exploiting_Linked_Data2_TimBL_v3.html">Data Explorer View</a>
     </td>
      </tr>
<tr>
        <td class="data">RSS</td>
        <td class="data">
          <a href="http://microformats.org/feed/">example</a> </td>
        <td class="data">  <a href="http://linkeddata.uriburner.com/about/html/http/microformats.org/feed/">HTML Representation</a> </td>
     <td class="data">  <a href="http://linkeddata.uriburner.com/ode/?uri=http://microformats.org/feed/">Data Explorer View</a>
     </td>
      </tr>
<tr>
        <td class="data">Slidy</td>
        <td class="data">
          <a href="http://slideshow.rubyforge.org/microformats.html">example</a> </td>
        <td class="data">  <a href="http://linkeddata.uriburner.com/about/html/http/slideshow.rubyforge.org/microformats.html">HTML Representation</a> </td>
     <td class="data">  <a href="http://linkeddata.uriburner.com/ode/?uri=http://slideshow.rubyforge.org/microformats.html">Data Explorer View</a>
     </td>
      </tr>
<tr>
        <td class="data">vCalendar</td>
        <td class="data">
          <a href="http://upcoming.org/event/130719/">example</a> </td>
        <td class="data">  <a href="http://linkeddata.uriburner.com/about/html/http/upcoming.org/event/130719/">HTML Representation</a> </td>
     <td class="data">  <a href="http://linkeddata.uriburner.com/ode/?uri=http://upcoming.org/event/130719/">Data Explorer View</a>
     </td>
      </tr>
<tr>
        <td class="data">vCard</td>
        <td class="data">
          <a href="http://tech.yahoo.com/pr/apple-ipod-video-30gb-black-mp3-player/1992981873">example</a> </td>
        <td class="data">  <a href="http://linkeddata.uriburner.com/about/html/http/tech.yahoo.com/pr/apple-ipod-video-30gb-black-mp3-player/1992981873">HTML Representation</a> </td>
     <td class="data">  <a href="http://linkeddata.uriburner.com/ode/?uri=http://tech.yahoo.com/pr/apple-ipod-video-30gb-black-mp3-player/1992981873">Data Explorer View</a>
     </td>
      </tr>
<tr>
        <td class="data">WebDAV Metadata</td>
        <td class="data">
          <a href="http://data.london.gov.uk/datafiles/business-economy/employment-projections-sector-2009.csv">example</a> </td>
        <td class="data">  <a href="http://linkeddata.uriburner.com/about/html/http/linkeddata.uriburner.com/about/rdf/http://data.london.gov.uk/datafiles/business-economy/employment-projections-sector-2009.csv">HTML Representation</a> </td>
     <td class="data">  <a href="http://linkeddata.uriburner.com/ode/?uri=http://linkeddata.uriburner.com/about/rdf/http://data.london.gov.uk/datafiles/business-economy/employment-projections-sector-2009.csv">Data Explorer View</a>
     </td>
      </tr>
<tr>
        <td class="data">XBRL</td>
        <td class="data">
          <a href="http://www.sec.gov/Archives/edgar/data/51143/000110465908059468/ibm-20080429.xml">example</a> </td>
        <td class="data">  <a href="http://linkeddata.uriburner.com/about/html/http://www.sec.gov/Archives/edgar/data/51143/000110465908059468/ibm-20080429.xml">HTML Representation</a> </td>
     <td class="data">  <a href="http://www.sec.gov/Archives/edgar/data/51143/000110465908059468/ibm-20080429.xml">Data Explorer View</a>
     </td>
      </tr>
<tr>
        <td class="data">XFN Profile</td>
        <td class="data">
          <a href="http://www.molly.com/people.php">example</a> </td>
        <td class="data">  <a href="http://linkeddata.uriburner.com/about/html/http/www.molly.com/people.php">HTML Representation</a> </td>
     <td class="data">  <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.molly.com/people.php">Data Explorer View</a>
     </td>
      </tr>
<tr>
        <td class="data">XFN Profile2</td>
        <td class="data">
          <a href="http://www.molly.com/people.php">example</a> </td>
        <td class="data">  <a href="http://linkeddata.uriburner.com/about/html/http/www.molly.com/people.php">HTML Representation</a> </td>
     <td class="data">  <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.molly.com/people.php">Data Explorer View</a>
     </td>
      </tr>
<tr>
        <td class="data">xHTML</td>
        <td class="data">
          <a href="http://virtuoso.openlinksw.com/Whitepapers/html/AIW_Virtuoso_SOA.htm">example</a> </td>
        <td class="data">  <a href="http://linkeddata.uriburner.com/about/html/http/virtuoso.openlinksw.com/Whitepapers/html/AIW_Virtuoso_SOA.htm">HTML Representation</a> </td>
     <td class="data">  <a href="http://linkeddata.uriburner.com/ode/?uri=http://virtuoso.openlinksw.com/Whitepapers/html/AIW_Virtuoso_SOA.htm">Data Explorer View</a>
     </td>
      </tr>
<tr>
        <td class="data">XHTML</td>
        <td class="data">
          <a href="http://www.lespetitescases.net/semantique-et-xhtml">example</a> </td>
        <td class="data">  <a href="http://linkeddata.uriburner.com/about/html/http/www.lespetitescases.net/semantique-et-xhtml">HTML Representation</a> </td>
     <td class="data">  <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.lespetitescases.net/semantique-et-xhtml">Data Explorer View</a>
     </td>
      </tr>


</table>
    <br />
    <br />
    <a name="virtuosospongercartridgesnonstand" />
    <h5>14.9.8.2.2. Supported Vendor-specific Non-RDF Data Formats</h5>
<p>These Cartridges handle closed formats - typically proprietary; sometimes undocumented; possibly 
	licensed to no-one except the format originator. Sometimes data may not be parsed as desired or 
	expected, as many of these Cartridges have required reverse-engineering of the data format 
	in question.</p>
<table class="data">


  <tr>
              <th class="data">Cartridge</th>
        <th class="data">Needs</th>
        <th class="data">Sample URI</th>
        <th class="data">Resource Description</th>
        <th class="data">Linked Data Graph</th>
  </tr>


            <tr>
        <td class="data">Amazon</td>
        <td class="data">API Key</td>
     <td class="data">
          <a href="http://www.amazon.com/gp/product/0553383043">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/www.amazon.com/gp/product/0553383043">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.amazon.com/gp/product/0553383043">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">BestBuy</td>
        <td class="data"> API Key </td>
     <td class="data">
          <a href="http://www.bestbuy.com/site/KOSS+-+Pro+DJ100+Professional+Over-the-Ear+Headphones+-+Black/9745789.p?skuId=9745789&amp;id=1218165774336">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/www.bestbuy.com/site/KOSS+-+Pro+DJ100+Professional+Over-the-Ear+Headphones+-+Black/9745789.p?skuId=9745789&amp;id=1218165774336">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.bestbuy.com/site/KOSS+-+Pro+DJ100+Professional+Over-the-Ear+Headphones+-+Black/9745789.p?skuId=9745789&amp;id=1218165774336">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">Bing</td>
        <td class="data"> none </td>
     <td class="data">
          <a href="http://www.bing.com/community/members/livesearch/default.aspx">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/www.bing.com/community/members/livesearch/default.aspx">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.bing.com/community/members/livesearch/default.aspx">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">Bugzillas</td>
        <td class="data"> none</td>
     <td class="data">
          <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=251714">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/https://bugzilla.mozilla.org/show_bug.cgi?id=251714">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=https://bugzilla.mozilla.org/show_bug.cgi?id=251714">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">CNET</td>
        <td class="data"> API Key </td>
     <td class="data">
          <a href="http://shopper.cnet.com/samsung-moment-sprint/4014-6452_9-33775546.html">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/linkeddata.uriburner.com/about/rdf/http://shopper.cnet.com/samsung-moment-sprint/4014-6452_9-33775546.html">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://linkeddata.uriburner.com/about/rdf/http://shopper.cnet.com/samsung-moment-sprint/4014-6452_9-33775546.html">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">CrunchBase</td>
        <td class="data"> none </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/rdf/http://www.crunchbase.com/company/radar-music-videos">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/linkeddata.uriburner.com/about/rdf/http://www.crunchbase.com/company/radar-music-videos">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://linkeddata.uriburner.com/about/rdf/http://www.crunchbase.com/company/radar-music-videos">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">Delicious</td>
        <td class="data"> none </td>
     <td class="data">
          <a href="http://delicious.com/popular/blog">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/delicious.com/popular/blog">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://delicious.com/popular/blogI">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">Digg</td>
        <td class="data"> none </td>
     <td class="data">
          <a href="http://digg.com/general_sciences/At_Last-Stem_Cells_without_Side_Effects_">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/digg.com/general_sciences/At_Last-Stem_Cells_without_Side_Effects_">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://digg.com/general_sciences/At_Last-Stem_Cells_without_Side_Effects_">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">Discogs</td>
        <td class="data"> php plugin, DBpedia Extractor </td>
     <td class="data">
          <a href="http://www.discogs.com/Todd-Barton-and...ic-Poetry-Of-The-Kesh/release/2053074">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http://www.amazon.com/o/ASIN/0553383043">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.amazon.com/o/ASIN/0553383043">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">Disqus</td>
        <td class="data"> API Key, API Account </td>
     <td class="data">
          <a href="http://www.scripting.com/stories/2009/02/01/wheresYourData.html#disqus_thread">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/www.scripting.com/stories/2009/02/01/wheresYourData.html#disqus_thread">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.scripting.com/stories/2009/02/01/wheresYourData.html#disqus_thread">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">DOI</td>
        <td class="data"> hslookup plugin; relevant html-, pdf-, xml-, etc., -mappers enabled </td>
     <td class="data">
          <a href="http://doi.ieeecomputersociety.org/10.1109/MIC.2008.16">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/doi.ieeecomputersociety.org/10.1109/MIC.2008.16">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://doi.ieeecomputersociety.org/10.1109/MIC.2008.16">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">Dublin Core</td>
        <td class="data"> none </td>
     <td class="data">
          <a href="http://dublincore.org/documents/2002/07/31/dcmes-xml/dcmes-xml-dtd.shtml">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/dublincore.org/documents/2002/07/31/dcmes-xml/dcmes-xml-dtd.shtml">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://dublincore.org/documents/2002/07/31/dcmes-xml/dcmes-xml-dtd.shtml">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">eBay</td>
        <td class="data"> account, API Key </td>
     <td class="data">
          <a href="http://cell-phones.shop.ebay.com/Cell-Phones-Smartphones-/3312/i.html?LH_TopRatedSellers=1&amp;LH_ItemCondition=1&amp;Brand=Apple%2520iPhone&amp;LH_Price=100..%40c&amp;_nkw=%22iphone+4%22&amp;_trkparms=65%253A15%257C66%253A2%257C39%253A1&amp;_dmd=1&amp;_dmpt=Cell_Phones&amp;_mPrRngCbx=1&amp;_sc=1&amp;_sticky=1&amp;_trksid=p3907.m551&amp;_sop=12&amp;_sc=1%26clkid%3D6198561558861688578&amp;_qi=RTM733776">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/cell-phones.shop.ebay.com/Cell-Phones-Smartphones-/3312/i.html?LH_TopRatedSellers=1&amp;LH_ItemCondition=1&amp;Brand=Apple%2520iPhone&amp;LH_Price=100..%40c&amp;_nkw=%22iphone+4%22&amp;_trkparms=65%253A15%257C66%253A2%257C39%253A1&amp;_dmd=1&amp;_dmpt=Cell_Phones&amp;_mPrRngCbx=1&amp;_sc=1&amp;_sticky=1&amp;_trksid=p3907.m551&amp;_sop=12&amp;_sc=1%26clkid%3D6198561558861688578&amp;_qi=RTM733776">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://cell-phones.shop.ebay.com/Cell-Phones-Smartphones-/3312/i.html?LH_TopRatedSellers=1&amp;LH_ItemCondition=1&amp;Brand=Apple%2520iPhone&amp;LH_Price=100..%40c&amp;_nkw=%22iphone+4%22&amp;_trkparms=65%253A15%257C66%253A2%257C39%253A1&amp;_dmd=1&amp;_dmpt=Cell_Phones&amp;_mPrRngCbx=1&amp;_sc=1&amp;_sticky=1&amp;_trksid=p3907.m551&amp;_sop=12&amp;_sc=1%26clkid%3D6198561558861688578&amp;_qi=RTM733776">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">Evri</td>
        <td class="data"> none </td>
     <td class="data">
          <a href="http://www.evri.com/organization/general-motors-0x4938f">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http://www.evri.com/organization/general-motors-0x4938f">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.evri.com/organization/general-motors-0x4938f">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">Facebook</td>
     <td class="data"> API key and secret, OAuth token <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtCartConfigFacebook">See details</a>
     </td>
     <td class="data">
          <a href="http://www.facebook.com/people/Richard-Max-Koster/1319314117">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/www.facebook.com/people/Richard-Max-Koster/1319314117">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.facebook.com/people/Richard-Max-Koster/1319314117">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">Flickr</td>
        <td class="data"> API Key </td>
     <td class="data">
          <a href="http://farm1.static.flickr.com/212/496684670_7122c831ed.jpg">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http://linkeddata.uriburner.com/about/id/entity/http/www.google.com/">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.amazon.com/o/ASIN/0553383043">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">Freebase</td>
        <td class="data"> none </td>
     <td class="data">
          <a href="http://www.freebase.com/view/location">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/www.freebase.com/view/location">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.freebase.com/view/location">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">Geonames</td>
        <td class="data"> none </td>
     <td class="data">
          <a href="http://ws.geonames.org/search?q=london&amp;maxRows=10&amp;type=rdf">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/ws.geonames.org/search?q=london&amp;maxRows=10&amp;type=rdf">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://ws.geonames.org/search?q=london&amp;maxRows=10&amp;type=rdf">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">geoURL</td>
        <td class="data"> none </td>
     <td class="data">
          <a href="http://geourl.org/near?p=wiki.worldflicks.org/saanen.html">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/geourl.org/near?p=wiki.worldflicks.org/saanen.html">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://geourl.org/near?p=wiki.worldflicks.org/saanen.html">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">Get Satisfaction</td>
        <td class="data"> none </td>
     <td class="data">
          <a href="http://getsatisfaction.com/mozilla/topics/ubiquity_mostly_fails_on_mac_ppc">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/getsatisfaction.com/mozilla/topics/ubiquity_mostly_fails_on_mac_ppc">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://getsatisfaction.com/mozilla/topics/ubiquity_mostly_fails_on_mac_ppc">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">Google+</td>
     <td class="data">API key <a href="http://edit-wiki.usnet.private/dataspace/dav/wiki/VOS/VirtCartConfigGooglePlus">See details</a>
     </td>
     <td class="data">
          <a href="https://plus.google.com/106795562240032292110">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/https/plus.google.com/106795562240032292110">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=https://plus.google.com/106795562240032292110">Data Explorer View</a>  </td>
      </tr>            
            <tr>
        <td class="data">Google Base</td>
        <td class="data"> none </td>
     <td class="data">
          <a href="http://www.google.com/base/feeds/snippets">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/www.google.com/base/feeds/snippets/">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.google.com/base/feeds/snippets">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">Google Book</td>
        <td class="data"> none  </td>
     <td class="data">
          <a href="http://books.google.com/books?id=SRadJIuhVjAC&amp;dq=GOOGLE&amp;ie=ISO-8859-1&amp;source=gbs_gdata">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http://books.google.com/books?id=SRadJIuhVjAC&amp;dq=GOOGLE&amp;ie=ISO-8859-1&amp;source=gbs_gdata">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://books.google.com/books?id=SRadJIuhVjAC&amp;dq=GOOGLE&amp;ie=ISO-8859-1&amp;source=gbs_gdata">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">Google Document</td>
        <td class="data"> none </td>
     <td class="data">
          <a href="http://docs.google.com/Present?docid=dc7jvc6m_1056g8fs54hp">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/docs.google.com/Present?docid=dc7jvc6m_1056g8fs54hp">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://docs.google.com/Present?docid=dc7jvc6m_1056g8fs54hp">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">Google Social Graph</td>
        <td class="data"> none </td>
     <td class="data">
          <a href="http://socialgraph.apis.google.com/lookup?q=http://example.com/">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/socialgraph.apis.google.com/lookup?q=http://example.com/">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://socialgraph.apis.google.com/lookup?q=http://example.com/">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">Google Spreadsheet</td>
        <td class="data"> none </td>
     <td class="data">
          <a href="http://spreadsheets.google.com/pub?key=p9pdwsai2hDMsLkXsoM05KQ&amp;gid=1">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/spreadsheets.google.com/pub?key=p9pdwsai2hDMsLkXsoM05KQ&amp;gid=1">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://spreadsheets.google.com/pub?key=p9pdwsai2hDMsLkXsoM05KQ&amp;gid=1">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">Hoovers</td>
        <td class="data"> none </td>
     <td class="data">
          <a href="http://www.hoovers.com/openlink/--ID__104304--/free-co-factsheet.xhtml">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/www.hoovers.com/openlink/--ID__104304--/free-co-factsheet.xhtml">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.hoovers.com/openlink/--ID__104304--/free-co-factsheet.xhtml">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">ISBN</td>
        <td class="data"> API Key </td>
     <td class="data">
          <a href="http://isbndb.com/search-all.html?kw=King+Stephen">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/isbndb.com/search-all.html?kw=King+Stephen">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://isbndb.com/search-all.html?kw=King+Stephen">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">LastFM</td>
        <td class="data"> API Key </td>
     <td class="data">
          <a href="http://www.last.fm/music/+noredirect/Teddy+Pendegrass">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/www.last.fm/music/+noredirect/Teddy+Pendegrass">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.last.fm/music/+noredirect/Teddy+Pendegrass">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">LibraryThing</td>
        <td class="data"> API Key </td>
     <td class="data">
          <a href="http://www.librarything.com/work/1060">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/www.librarything.com/work/1060">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.librarything.com/work/1060">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">LinkedIn</td>
        <td class="data"> API key and secret, OAuth token <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtCartConfigLinkedIn">See details</a> </td>
     <td class="data">
          <a href="http://www.linkedin.com/in/kidehen">example</a>
     </td>
     <td class="data">
          <a href="http://uriburner.com/about/html/http/uriburner.com/about/id/entity/http/www.linkedin.com/in/kidehen">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.linkedin.com/in/kidehen">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">LSID</td>
        <td class="data"> none </td>
     <td class="data">
          <a href="http://lsid.tdwg.org/urn:lsid:ubio.org:namebank:11815">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/lsid.tdwg.org/urn:lsid:ubio.org:namebank:11815">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://lsid.tdwg.org/urn:lsid:ubio.org:namebank:11815">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">Meetup</td>
        <td class="data"> API Key </td>
     <td class="data">
          <a href="http://www.meetup.com/Nonpracticing-Lawyers-Social-Support-Group/">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/www.meetup.com/Nonpracticing-Lawyers-Social-Support-Group/">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.meetup.com/Nonpracticing-Lawyers-Social-Support-Group/">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">MusicBrainz</td>
        <td class="data"> none </td>
     <td class="data">
          <a href="http://musicbrainz.org/release/37e955d4-a53c-45aa-a812-1b23b88dbc13.html">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/musicbrainz.org/release/37e955d4-a53c-45aa-a812-1b23b88dbc13.html">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://musicbrainz.org/release/37e955d4-a53c-45aa-a812-1b23b88dbc13.html">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">Ning Metadata</td>
        <td class="data"> none </td>
     <td class="data">
          <a href="http://www.ning.com/search?q=new+york+city&amp;sf=rs&amp;rs=1">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/www.ning.com/search?q=new+york+city&amp;sf=rs&amp;rs=1">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.ning.com/search?q=new+york+city&amp;sf=rs&amp;rs=1">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">OAI</td>
        <td class="data"> none </td>
     <td class="data">
          <a href="http://news.cnet.com/IBM%2C-screensaver-to-tackle-smallpox/2100-1008_3-983374.html">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/news.cnet.com/IBM%2C-screensaver-to-tackle-smallpox/2100-1008_3-983374.html">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://news.cnet.com/IBM%2C-screensaver-to-tackle-smallpox/2100-1008_3-983374.html">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">Open Social</td>
        <td class="data"> none </td>
     <td class="data">
          <a href="http://socialgraph.apis.google.com/otherme?pretty=1&amp;q=www.openlinksw.com/blog/~kidehen/">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/socialgraph.apis.google.com/otherme?pretty=1&amp;q=www.openlinksw.com/blog/~kidehen/">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://socialgraph.apis.google.com/otherme?pretty=1&amp;q=www.openlinksw.com/blog/~kidehen/">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">OpenLibrary</td>
        <td class="data"> none </td>
     <td class="data">
          <a href="http://openlibrary.org/b/OL1230137M">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/openlibrary.org/b/OL1230137M">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://openlibrary.org/b/OL1230137M">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">OpenStreetMap</td>
        <td class="data"> none </td>
     <td class="data">
          <a href="http://openstreetmap.org/?lat=57.6569&amp;lon=11.8886&amp;zoom=14&amp;layers=B000FTF">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/openstreetmap.org/?lat=57.6569&amp;lon=11.8886&amp;zoom=14&amp;layers=B000FTF">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://openstreetmap.org/?lat=57.6569&amp;lon=11.8886&amp;zoom=14&amp;layers=B000FTF">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">oReilly</td>
        <td class="data"> none </td>
     <td class="data">
          <a href="http://oreilly.com/catalog/9780596523206/">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/oreilly.com/catalog/9780596523206/">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://oreilly.com/catalog/9780596523206/">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">Picasa</td>
        <td class="data"> none </td>
     <td class="data">
          <a href="http://picasaweb.google.com/lh/explore#utm_medium=embed&amp;utm_source=pwalogin">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http://picasaweb.google.com/lh/explore#utm_medium=embed&amp;utm_source=pwalogin">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://picasaweb.google.com/lh/explore#utm_medium=embed&amp;utm_source=pwalogin">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">Radio Pop</td>
        <td class="data"> none </td>
     <td class="data">
          <a href="http://www.radiopop.co.uk/users/tristanf/friends.xml">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/www.radiopop.co.uk/users/tristanf/friends.xml">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.radiopop.co.uk/users/tristanf/friends.xml">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">relLicense</td>
        <td class="data"> none </td>
     <td class="data">
          <a href="http://creativecommons.org/licenses/by-nc/3.0/us/">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/creativecommons.org/licenses/by-nc/3.0/us/">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://creativecommons.org/licenses/by-nc/3.0/us/">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">Revyu</td>
        <td class="data"> none </td>
     <td class="data">
          <a href="http://revyu.com/people/smonroe/about/html">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/revyu.com/people/smonroe/about/html">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://revyu.com/people/smonroe/about/html">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">Rhapsody</td>
        <td class="data"> none </td>
     <td class="data">
          <a href="http://mp3.rhapsody.com/playlistdetail?playlistId=ply.25288413">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/mp3.rhapsody.com/playlistdetail?playlistId=ply.25288413">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://mp3.rhapsody.com/playlistdetail?playlistId=ply.25288413">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">SalesForce.com</td>
        <td class="data">API Key,user login</td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/rdf/https://na6.salesforce.com/0038000000ViF6k#this">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/linkeddata.uriburner.com/about/rdf/https://na6.salesforce.com/0038000000ViF6k#this">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://linkeddata.uriburner.com/about/rdf/https://na6.salesforce.com/0038000000ViF6k#this">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">SlideShare</td>
        <td class="data"> API Key, SharedSecret </td>
     <td class="data">
          <a href="http://www.slideshare.net/rumito/rdf-views-of-sql-data-power-point-presentation-1-173180/">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/www.slideshare.net/rumito/rdf-views-of-sql-data-power-point-presentation-1-173180/">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.slideshare.net/rumito/rdf-views-of-sql-data-power-point-presentation-1-173180/">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">SlideSix</td>
        <td class="data"> none </td>
     <td class="data">
          <a href="http://slidesix.com/view/ESWC2008SPARQLBIOpenLink">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/slidesix.com/view/ESWC2008SPARQLBIOpenLink">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://slidesix.com/view/ESWC2008SPARQLBIOpenLink">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">SVG</td>
        <td class="data"> none </td>
     <td class="data">
          <a href="http://www.schepers.cc/semweb/rdf-diagram.svg">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/www.schepers.cc/semweb/rdf-diagram.svg">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.schepers.cc/semweb/rdf-diagram.svg">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">Tesco</td>
        <td class="data"> none </td>
     <td class="data">
          <a href="http://www.tesco.com/superstore/xpi/6/xpi54427686.htm">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http://www.tesco.com/superstore/xpi/6/xpi54427686.htm">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.tesco.com/superstore/xpi/6/xpi54427686.htm">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">Tumblr</td>
        <td class="data"> none </td>
     <td class="data">
          <a href="http://cupcakesoftheday.tumblr.com/">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http://cupcakesoftheday.tumblr.com/">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://cupcakesoftheday.tumblr.com/">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">TWFY (theyworkforyou)</td>
        <td class="data">	API Key  </td>
     <td class="data">
          <a href="http://www.theyworkforyou.com/mp/diane_abbott/hackney_north_and_stoke_newington">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/www.theyworkforyou.com/mp/diane_abbott/hackney_north_and_stoke_newington">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.theyworkforyou.com/mp/diane_abbott/hackney_north_and_stoke_newington">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">Twitter</td>
        <td class="data"> API key and secret, OAuth token <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtCartConfigTwitter">See details</a> </td>
     <td class="data">
          <a href="http://twitter.com/kidehen">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http://twitter.com/kidehen">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://twitter.com/kidehen">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">Ustream</td>
        <td class="data"> none </td>
     <td class="data">
          <a href="http://www.ustream.tv/recorded/4848859/highlight/55618">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http://www.ustream.tv/recorded/4848859/highlight/55618">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.ustream.tv/recorded/4848859/highlight/55618">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">Web Resource CC (Licenses) </td>
        <td class="data"> none </td>
     <td class="data">
          <a href="http://creativecommons.org/licenses/by-nc-nd/2.5/">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/creativecommons.org/licenses/by-nc-nd/2.5/">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://creativecommons.org/licenses/by-nc-nd/2.5/">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">Wikipedia</td>
        <td class="data"> none </td>
     <td class="data">
          <a href="http://en.wikipedia.org/wiki/House_MD">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http://en.wikipedia.org/wiki/House_MD">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://en.wikipedia.org/wiki/House_MD">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">xFolk</td>
        <td class="data"> none </td>
     <td class="data">
          <a href="http://blogmarks.net/marks/tag/hdd">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/blogmarks.net/marks/tag/hdd">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://blogmarks.net/marks/tag/hdd">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">Yahoo! Finance</td>
        <td class="data"> none </td>
     <td class="data">
          <a href="http://finance.yahoo.com/q?s=AAPL">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/finance.yahoo.com/q?s=AAPL">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://finance.yahoo.com/q?s=AAPL">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">Yahoo! SearchMonkey</td>
        <td class="data"> none </td>
     <td class="data">
          <a href="http://tech.groups.yahoo.com/group/ysearchboss/message/1983">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/tech.groups.yahoo.com/group/ysearchboss/message/1983">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://tech.groups.yahoo.com/group/ysearchboss/message/1983">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">Yahoo! Traffic Data</td>
        <td class="data"> none </td>
     <td class="data">
          <a href="http://local.yahooapis.com/MapsService/rss/trafficData.xml?appid=YdnDemo&amp;street=701+First+Avenue&amp;city=Sunnyvale&amp;state=CA">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/local.yahooapis.com/MapsService/rss/trafficData.xml?appid=YdnDemo&amp;street=701+First+Avenue&amp;city=Sunnyvale&amp;state=CA">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://local.yahooapis.com/MapsService/rss/trafficData.xml?appid=YdnDemo&amp;street=701+First+Avenue&amp;city=Sunnyvale&amp;state=CA">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">Yahoo! Weather</td>
        <td class="data"> none </td>
     <td class="data">
          <a href="http://weather.yahooapis.com/forecastrss?p=94089">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/weather.yahooapis.com/forecastrss?p=94089">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://weather.yahooapis.com/forecastrss?p=94089">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">Yelp</td>
        <td class="data"> none </td>
     <td class="data">
          <a href="http://api.yelp.com/business_review_search?term=yelp&amp;tl_lat=37.9&amp;tl_long=-122.5&amp;br_lat=37.788022&amp;br_long=-122.399797&amp;limit=3&amp;ywsid=XXXXXXXXXXXXXXXXXX">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/api.yelp.com/business_review_search?term=yelp&amp;tl_lat=37.9&amp;tl_long=-122.5&amp;br_lat=37.788022&amp;br_long=-122.399797&amp;limit=3&amp;ywsid=XXXXXXXXXXXXXXXXXX">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://api.yelp.com/business_review_search?term=yelp&amp;tl_lat=37.9&amp;tl_long=-122.5&amp;br_lat=37.788022&amp;br_long=-122.399797&amp;limit=3&amp;ywsid=XXXXXXXXXXXXXXXXXX">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">Youtube</td>
        <td class="data"> none </td>
     <td class="data">
          <a href="http://www.youtube.com/watch?v=rOsPKjbMvxY">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/www.youtube.com/watch?v=rOsPKjbMvxY">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.youtube.com/watch?v=rOsPKjbMvxY">Data Explorer View</a>  </td>
      </tr>
            <tr>
        <td class="data">Zillow</td>
        <td class="data"> none </td>
     <td class="data">
          <a href="http://www.zillow.com/homedetails/26-George-Rd-Maynard-MA-01754/57086765_zpid">example</a>
     </td>
     <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http://www.zillow.com/homedetails/26-George-Rd-Maynard-MA-01754/57086765_zpid">HTML Representation</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.zillow.com/homedetails/26-George-Rd-Maynard-MA-01754/57086765_zpid">Data Explorer View</a>  </td>
      </tr>


</table>
    <br />
<br />
  <br />
  <a name="virtuosospongercartridgesmeta" />
    <h4>14.9.8.3. Meta Cartridges</h4>
    <p>A Meta Cartridge submits a Resource to a third-party Web Service for processing. Returned RDF 
    	supplements the RDF generated by Extractor and other Meta Cartridges. Locally generated RDF may 
    	also be submitted to the third-party services, instead-of or in-addition-to the original 
    	Resource itself.
    </p>	
    <p>Default Sponger behavior is for all installed Meta Cartridges to be brought to bear on all 
    	submitted Resources:
    </p>	
<table class="data">


  <tr>
    <th class="data">Cartridge</th>
        <th class="data">Needs</th>
        <th class="data">Sample URI</th>
        <th class="data">Resource Description</th>
        <th class="data">Linked Data Graph</th>
        <th class="data">Notes</th>
  </tr>


<tr>
        <td class="data">Alchemy</td>
        <td class="data">API Key</td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/about/id/entity/http/jira.codehaus.org/browse/CONTINUUM-884%01alchemy_entity_1">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http/jira.codehaus.org/browse/CONTINUUM-884">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://jira.codehaus.org/browse/CONTINUUM-884">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">Amazon Search for products</td>
        <td class="data">API Key, secret</td>
        <td class="data">
          <a href="http://www.amazon.com/o/ASIN/0553383043#this">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http://www.amazon.com/o/ASIN/0553383043">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.amazon.com/o/ASIN/0553383043">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">BBC Links</td>
        <td class="data" />
        <td class="data">
          <a href="http://news.bbc.co.uk">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http://twitter.com/bbcnews">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://twitter.com/bbcnews">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">BestBuy Search for products</td>
        <td class="data">API Key</td>
        <td class="data">
          <a href="http://www.bestbuy.com/site/KOSS+-+Pro+DJ100+Professional+Over-the-Ear+Headphones+-+Black/9745789.p?skuId=9745789&amp;id=1218165774336">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http/www.bestbuy.com/site/KOSS+-+Pro+DJ100+Professional+Over-the-Ear+Headphones+-+Black/9745789.p?skuId=9745789&amp;id=1218165774336">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.bestbuy.com/site/KOSS+-+Pro+DJ100+Professional+Over-the-Ear+Headphones+-+Black/9745789.p?skuId=9745789&amp;id=1218165774336">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">Bing</td>
        <td class="data">API Key</td>
        <td class="data">
          <a href="http://www.bing.com/videos/watch/video/cap-reattached-to-leaking-bp-well/6kn9out">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http/twitter.com/bing">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://twitter.com/bing">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">Bit.ly</td>
        <td class="data" />
        <td class="data">
          <a href="http://bit.ly/cGwRgc">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http/www.springerlink.com/content/528h15634q332p02/">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.springerlink.com/content/528h15634q332p02/">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">CNET Search for products</td>
        <td class="data">API Key</td>
        <td class="data">
          <a href="http://www.xomreviews.com/shopper.cnet.com">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http/www.xomreviews.com/shopper.cnet.com">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.xomreviews.com/shopper.cnet.com">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">Collecta</td>
        <td class="data" />
        <td class="data">
          <a href="http://www.crunchbase.com/company/microsoft">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http://www.crunchbase.com/company/microsoft">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.crunchbase.com/company/microsoft">Data Explorer View</a> </td>
        <td class="data">Check rdfs:seeAlso <a href="http://localhost:9301/about/html/http/social.msdn.microsoft.com/Forums/en-US/wpf/thread/108fbffc-c849-4d60-ab3e-00c425342aaf">links</a> found for microsoft.</td>
      </tr>
<tr>
        <td class="data">Crunchbase</td>
        <td class="data" />
        <td class="data">
          <a href="http://www.crunchbase.com/company/radar-music-videos">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http://techcrunch.com/2010/05/02/rapportive/">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://techcrunch.com/2010/05/02/rapportive/">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">Dapper Search</td>
        <td class="data" />
        <td class="data">
          <a href="http://www.dapper.net/dapplications/Blotter/">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http/www.alexa.com/siteinfo/dapper.net">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.alexa.com/siteinfo/dapper.net">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">DBpedia Meta</td>
        <td class="data" />
        <td class="data">
          <a href="http://dbpedia.org/page/TweetDeck">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http/www.programmableweb.com/api/dbpedia">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.programmableweb.com/api/dbpedia">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">Delicious Meta</td>
        <td class="data">User Login</td>
        <td class="data">
          <a href="http://delicious.com/tag/crunchbase">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http://linkeddata.uriburner.com/about/id/entity/http/www.crunchbase.com/company/google">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://linkeddata.uriburner.com/about/id/entity/http/www.crunchbase.com/company/google">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">Digg.com</td>
        <td class="data" />
        <td class="data">
          <a href="http://google.com/">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http://linkeddata.uriburner.com/about/id/entity/http/google.com/">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://google.com/">Data Explorer View</a> </td>
        <td class="data">Check rdfs:seeAlso the <a href="http://mashable.com/2010/07/12/google-app-inventor/">links</a> from Digg.com .</td>
      </tr>
<tr>
        <td class="data">Discogs</td>
        <td class="data">API Key, php plugin, DBpedia Extractor</td>
        <td class="data">
          <a href="http://www.discogs.com/Todd-Barton-and...ic-Poetry-Of-The-Kesh/release/2053074">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http://www.amazon.com/o/ASIN/0553383043">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.amazon.com/o/ASIN/0553383043">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">Document Links</td>
        <td class="data" />
        <td class="data">example </td>
        <td class="data"> HTML Representation </td>
        <td class="data"> Data Explorer View </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">eBay Search for products</td>
        <td class="data">account, API Key</td>
        <td class="data">
          <a href="http://shop.ebay.com/stores/__W0QQLHQ5fSellerWithStoreZ1QQ_nkwZtoys?_rdc=1">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http/wordpress.xdroop.com/space/HotWheels/Buying+Hotwheels+On+eBay">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://wordpress.xdroop.com/space/HotWheels/Buying+Hotwheels+On+eBay">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">Evri Meta</td>
        <td class="data" />
        <td class="data">
          <a href="http://www.evri.com/organization/apple-store-0x60ee5">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http://www.evri.com/organization/apple-store-0x60ee5">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.evri.com/organization/apple-store-0x60ee5">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">Facebook</td>
        <td class="data">API Key, secret, persistent-session-id.</td>
     <td class="data"> <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtCartConfigFacebook">See details</a>
     </td>
        <td class="data">
          <a href="http://www.facebook.com/people/Richard-Max-Koster/1319314117">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http/www.facebook.com/people/Richard-Max-Koster/1319314117">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.facebook.com/people/Richard-Max-Koster/1319314117">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">Flickr Search for photos</td>
        <td class="data">API Key</td>
        <td class="data">
          <a href="http://farm5.static.flickr.com/4034/4406875198_7e562051cc.jpg">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http://linkeddata.uriburner.com/about/id/entity/http/www.google.com/">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://linkeddata.uriburner.com/about/id/entity/http/www.google.com/">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">FOAF-Search</td>
        <td class="data" />
        <td class="data">
          <a href="http://www.slideshare.net/kidehen">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http://linkeddata.uriburner.com/about/id/entity/http/www.slideshare.net/kidehen/">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.slideshare.net/kidehen">Data Explorer View</a> </td>
     <td class="data">Check rdfs:seeAlso at: <a href="http://identi.ca/user/14092">link1</a>, <a href="http://semantictweet.com/kidehen#me">link2</a>, <a href="http://myopenlink.net:8890/dataspace/person/kidehen#this">link3</a>
     </td>
      </tr>
<tr>
        <td class="data">Foursquare</td>
        <td class="data" />
        <td class="data">
          <a href="http://foursquare.com/scobleizer">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http/foursquare.com/scobleizer">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://foursquare.com/scobleizer">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">Freebase NYTC</td>
        <td class="data">API Key</td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/rdf.freebase.com/ns/en.john_kerry">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http://linkeddata.uriburner.com/about/html/http://www.freebase.com/view/en/john_kerry">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://linkeddata.uriburner.com/about/html/http://www.freebase.com/view/en/john_kerry">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">Freebase NYTCF</td>
        <td class="data">API Key</td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/rdf.freebase.com/ns/en.john_kerry">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http://linkeddata.uriburner.com/about/html/http://www.freebase.com/view/en/john_kerry">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://linkeddata.uriburner.com/about/html/http://www.freebase.com/view/en/john_kerry">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">FriendFeed</td>
        <td class="data" />
        <td class="data">
          <a href="http://friendfeed.com/informationweek/0f212311/web-link-shrinkage-powers-spam-surge">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http/www.informationweek.com/news/security/vulnerabilities/showArticle.jhtml?articleID=218401098">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.informationweek.com/news/security/vulnerabilities/showArticle.jhtml?articleID=218401098">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">Geonames Meta</td>
        <td class="data" />
        <td class="data">
          <a href="http://ws.geonames.org/search?q=london&amp;maxRows=10&amp;type=rdf">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http/ws.geonames.org/search?q=london&amp;maxRows=10&amp;type=rdf">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://ws.geonames.org/search?q=london&amp;maxRows=10&amp;type=rdf">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">Geopoints</td>
        <td class="data" />
        <td class="data">
          <a href="http://www.geopoint.nl/en/">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http://www.mit.edu/~6.170/api/ps2/GeoPoint.html">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.mit.edu/~6.170/api/ps2/GeoPoint.html">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">Gowalla</td>
        <td class="data" />
        <td class="data">
          <a href="http://gowalla.com/spots/7163409">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http://gowalla.com/spots/7163409">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://gowalla.com/spots/7163409">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">Get Glue Meta</td>
        <td class="data">User Login</td>
        <td class="data">
          <a href="http://getglue.com">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http://blog.adaptiveblue.com/?p=4746">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://blog.adaptiveblue.com/?p=4746">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">Get Glue</td>
        <td class="data" />
        <td class="data">
          <a href="http://getglue.com/smartlinks">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http/www.readwriteweb.com/archives/get_glue_on_your_iphone.php">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.readwriteweb.com/archives/get_glue_on_your_iphone.php">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">Google Buzz</td>
        <td class="data" />
        <td class="data"> <a href="http://google.com/">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http://linkeddata.uriburner.com/about/id/entity/http/google.com/">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://google.com/">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">Google Book</td>
        <td class="data" />
        <td class="data">
          <a href="http://www.google.com/">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http://www.google.com/">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.google.com/">Data Explorer View</a> </td>
     <td class="data">Check rdfs:seeAlso links like <a href="http://books.google.com/*">this one</a>
     </td>
      </tr>
<tr>
        <td class="data">Google Plus</td>
        <td class="data" />
        <td class="data">
          <a href="https://plus.google.com/112399767740508618350">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/https://plus.google.com/112399767740508618350">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=https://plus.google.com/112399767740508618350">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">Google Places</td>
        <td class="data" />
        <td class="data">
          <a href="http://maps.google.com/maps?cid=9095091124955696692">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http://maps.google.com/maps?cid=9095091124955696692">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://maps.google.com/maps?cid=9095091124955696692">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">Google Search</td>
        <td class="data" />
        <td class="data">
          <a href="http://linkeddata.uriburner.com/about/id/entity/http/www.google.com/finance?q=NYSE:MON%01Recognition1">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http://www.google.com/finance?q=NYSE:MON">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.google.com/finance?q=NYSE:MON">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">Google Social Graph</td>
        <td class="data" />
        <td class="data">
          <a href="http://www.openlinksw.com/dataspace/person/kidehen@openlinksw.com/about.rdf">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http://linkeddata.uriburner.com/about/html/http://linkeddata.uriburner.com/about/id/entity/http/www.openlinksw.com/blog/~kidehen/">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://linkeddata.uriburner.com/about/html/http://linkeddata.uriburner.com/about/id/entity/http/www.openlinksw.com/blog/~kidehen/">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">Guardian</td>
        <td class="data">API Key</td>
        <td class="data">
          <a href="http://www.guardian.co.uk/politics/2010/mar/15/gordon-brown-continue-as-labour-leader">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http/www.alexa.com/siteinfo/guardian.co.uk">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.alexa.com/siteinfo/guardian.co.uk">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">Hoovers</td>
        <td class="data">API Key</td>
        <td class="data">
          <a href="http://www.hoovers.com/openlink/--ID__104304--/free-co-factsheet.xhtml">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http/www.hoovers.com/company/OpenLink_Software_Inc/rfcyfci-1.html">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.hoovers.com/company/OpenLink_Software_Inc/rfcyfci-1.html">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">Jigsaw (company)</td>
        <td class="data" />
        <td class="data">
          <a href="http://google.com/">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http://linkeddata.uriburner.com/about/id/entity/http/google.com/">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://google.com/">Data Explorer View</a> </td>
     <td class="data">Check the c:location <a href="proxy:entity/http/www.google.com/%23address">link</a>
     </td>
      </tr>
<tr>
        <td class="data">Jigsaw (person)</td>
        <td class="data" />
        <td class="data">
          <a href="http://www.crunchbase.com/person/todd-sharp">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http://linkeddata.uriburner.com/about/id/entity/http/www.crunchbase.com/person/todd-sharp">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.crunchbase.com/person/todd-sharp">Data Explorer View</a> </td>
        <td class="data">Check several Jigsaw search seeAlso <a href="http://www.jigsaw.com/scid5307274/todd_sharp.xhtml">link</a>.</td>
      </tr>
<tr>
        <td class="data">Journalisted</td>
        <td class="data" />
        <td class="data">
          <a href="http://journalisted.com/walter-gammie">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http/whois.domaintools.com/journalisted.com">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://whois.domaintools.com/journalisted.com">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">Last.FM</td>
        <td class="data">API Key</td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/about/id/entity/http/www.last.fm/music/Rod+Stewart/Greatest+Hits">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/id/entity/http/www.last.fm/music/Rod+Stewart/Greatest+Hits">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.last.fm/music/Rod+Stewart/Greatest+Hits">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">LinkedIn</td>
        <td class="data">API Key and Session Key;</td>
     <td class="data">
          <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtLinkedInMeta">See details</a>
     </td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/about/id/entity/http/www.jigsaw.com/scid34931678/vinod_khosla.xhtml">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/id/entity/http/www.jigsaw.com/scid34931678/vinod_khosla.xhtml">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.jigsaw.com/scid34931678/vinod_khosla.xhtml">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">Local Search</td>
        <td class="data" />
        <td class="data">example </td>
        <td class="data"> HTML Representation </td>
        <td class="data"> Data Explorer View </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">LOD</td>
        <td class="data" />
        <td class="data">
          <a href="http://lod.openlinksw.com/b3s/search.vsp?q=1">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http/lod.openlinksw.com/b3s/search.vsp?q=1">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://lod.openlinksw.com/b3s/search.vsp?q=1">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">MIME Type</td>
        <td class="data" />
        <td class="data">example </td>
        <td class="data"> HTML Representation </td>
        <td class="data"> Data Explorer View </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">New York Times</td>
        <td class="data">API Key</td>
        <td class="data">
          <a href="http://www.nytimes.com/2005/03/17/technology/circuits/17stat.html?ex=1268715600&amp;en=6840507aca561cf8&amp;ei=5090&amp;partner=rssuserland">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http/download.cnet.com/New-York-Times-Crosswords-Monthly-Subscription/3000-2111_4-10918973.html">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://download.cnet.com/New-York-Times-Crosswords-Monthly-Subscription/3000-2111_4-10918973.html">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">NPR Meta</td>
        <td class="data">API Key</td>
        <td class="data">
          <a href="http://www.crunchbase.com/company/google">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http://www.crunchbase.com/company/google">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.crunchbase.com/company/google">Data Explorer View</a> </td>
        <td class="data">Check rdfs:seeAlso links like: <a href="http://www.npr.org/templates/rss/podcast.php?id=510236">link1</a>; <a href="http://www.npr.org/templates/rss/podcast.php?id=510235">link2</a>; <a href="http://www.npr.org/templates/rss/podcast.php?id=510213">link3</a>.</td>
      </tr>
<tr>
        <td class="data">NYT: The Article Search</td>
        <td class="data" />
        <td class="data">
          <a href="http://twitter.com/bbcnews">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http://linkeddata.uriburner.com/about/id/entity/http/twitter.com/bbcnews">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://twitter.com/bbcnews">Data Explorer View</a> </td>
        <td class="data">Check the rdfs:seeAlso: <a href="proxy:entity/http/twitter.com/bbcnews%23nytimes_1">link</a>. </td>
      </tr>
<tr>
        <td class="data">NYT: The TimesTags</td>
        <td class="data" />
        <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/rdf.freebase.com/ns/en.john_kerry">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http://linkeddata.uriburner.com/about/html/http://www.freebase.com/view/en/john_kerry">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://linkeddata.uriburner.com/about/html/http://www.freebase.com/view/en/john_kerry">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">OpenCalais</td>
        <td class="data">any html page</td>
        <td class="data">
          <a href="http://d.opencalais.com/er/company/ralg-tr1r/7cf71bb9-2969-35d3-8fa1-3723bdb5958c">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http/news.cnet.com/8301-13505_3-9805771-16.html">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://news.cnet.com/8301-13505_3-9805771-16.html">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">Oreilly Search for products</td>
        <td class="data" />
        <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/oreilly.com/catalog/9780596007973">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http://linkeddata.uriburner.com/about/id/entity/http/oreilly.com/catalog/9780596007973/?@Lookup@=17&amp;refresh=0">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://linkeddata.uriburner.com/about/id/entity/http/oreilly.com/catalog/9780596007973/?@Lookup@=17&amp;refresh=0">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">Primal</td>
        <td class="data" />
        <td class="data">
          <a href="http://www.google.com">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http://www.google.com">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.google.com">Data Explorer View</a> </td>
        <td class="data">Check the set of sioc:topic and scot:hasScot.</td>
      </tr>
<tr>
        <td class="data">ProgrammableWeb</td>
        <td class="data" />
        <td class="data">
          <a href="http://linkeddata.uriburner.com/about/id/entity/http/www.productwiki.com/samsung-un46c6400%01Product">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http://linkeddata.uriburner.com/about/id/entity/http/www.productwiki.com/samsung-un46c6400%01Product">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://linkeddata.uriburner.com/about/id/entity/http/www.productwiki.com/samsung-un46c6400%01Product">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">Provenance</td>
        <td class="data" />
        <td class="data">
          <a href="http://www.amazon.com/Catch-22-Joseph-Heller/dp/0684833395/">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http://www.amazon.com/Catch-22-Joseph-Heller/dp/0684833395/">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.amazon.com/Catch-22-Joseph-Heller/dp/0684833395/">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">Punkt</td>
        <td class="data" />
        <td class="data">
          <a href="http://linkeddata.uriburner.com/about/id/entity/http/www.youtube.com/watch?v=DrZvn1qckIs">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http://linkeddata.uriburner.com/about/id/entity/http/www.youtube.com/watch?v=DrZvn1qckIs">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://linkeddata.uriburner.com/about/id/entity/http/www.youtube.com/watch?v=DrZvn1qckIs">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">RapLeaf</td>
        <td class="data" />
        <td class="data">
          <a href="http://www.facebook.com/people/Roman-Korolenko/1465877213">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http://www.crunchbase.com/service-provider/ivan-pr">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.crunchbase.com/service-provider/ivan-pr">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">SameAs.org</td>
        <td class="data" />
        <td class="data">
          <a href="http://sameas.org/">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http://www.ckan.net/package/sameas">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.ckan.net/package/sameas">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">Sindice</td>
        <td class="data" />
        <td class="data">
          <a href="http://sindice.com/developers/inspector?doReasoning=true&amp;q=tim+berners+lee&amp;qt=term&amp;url=http%3A%2F%2Fwww.nylon.gr%2Ftag%2Ftim-berners-lee%2F">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http/www.killerstartups.com/Web20/sindice-com-the-semantic-web-index">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.killerstartups.com/Web20/sindice-com-the-semantic-web-index">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">SimpleGeo</td>
        <td class="data" />
        <td class="data">
          <a href="https://simplegeo.com/SG_0ODZdCvKJeB22EyTOyiLxO_37.772357_-122.405783@1294081369/">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/https://simplegeo.com/SG_0ODZdCvKJeB22EyTOyiLxO_37.772357_-122.405783@1294081369/">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=https://simplegeo.com/SG_0ODZdCvKJeB22EyTOyiLxO_37.772357_-122.405783@1294081369/">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">Technorati</td>
        <td class="data">API Key</td>
        <td class="data">
          <a href="http://support.technorati.com/support/siteguide/tags">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http/download.cnet.com/Technorati-Tag/3000-12565_4-10658084.html">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://download.cnet.com/Technorati-Tag/3000-12565_4-10658084.html">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">Tesco Product Search</td>
        <td class="data">User Login, DeveloperKey, ApplicationKey</td>
        <td class="data">
          <a href="http://www.tesco.com/groceries/Product/Details/?id=252330678">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http://www.tesco.com/groceries/Product/Details/?id=252330678">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.tesco.com/groceries/Product/Details/?id=252330678">Data Explorer View</a> </td>
        <td class="data">Check set of Tesco rdfs:seeAlso links like <a href="tesco:groceries/Product/Details/?id=252990345">this one</a>.</td>
      </tr>
<tr>
        <td class="data">Topsy</td>
        <td class="data" />
        <td class="data">
          <a href="http://google.com/">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http://linkeddata.uriburner.com/about/id/entity/http/google.com/">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://google.com/">Data Explorer View</a> </td>
        <td class="data">Check the <a href="http://www1.folha.uol.com.br/folha/informatica/ult124u675304.shtml">rdfs:seeAlso</a> from topsy.com.</td>
      </tr>
<tr>
        <td class="data">TrueKnowledge</td>
        <td class="data" />
        <td class="data">
          <a href="http://www.microsoft.com">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http://www.microsoft.com">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.microsoft.com">Data Explorer View</a> </td>
        <td class="data">Check set of rdfs:seeAlso links like: <a href="http://www.microsoft.com/">link1</a>; <a href="http://www.microsoft.com/worldwide">link2</a>; <a href="http://en.wikipedia.org/wiki/Microsoft">link3</a>.</td>
      </tr>
<tr>
        <td class="data">Tweetme</td>
        <td class="data" />
        <td class="data">
          <a href="http://google.com/">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http://linkeddata.uriburner.com/about/id/entity/http/google.com/">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://google.com/">Data Explorer View</a> </td>
        <td class="data">Check the <a href="http://tweetmeme.com/story/12017895">rdfs:seeAlso</a> link.</td>
      </tr>
<tr>
        <td class="data">Twitter Meta</td>
        <td class="data">User Login</td>
        <td class="data">
          <a href="http://twitter.com/Techmeme/">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http/www.techmeme.com/081001/p43">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.techmeme.com/081001/p43">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">uClassify</td>
        <td class="data" />
        <td class="data">
          <a href="http://linkeddata.uriburner.com/about/id/entity/http/www.openlinksw.com/blog/~kidehen/%01Russian">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http://linkeddata.uriburner.com/about/html/http://www.openlinksw.com/blog/~kidehen/">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://linkeddata.uriburner.com/about/html/http://www.openlinksw.com/blog/~kidehen/">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">Uclassify</td>
        <td class="data" />
        <td class="data">
          <a href="http://www.crunchbase.com/company/google">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http://www.crunchbase.com/company/google">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.crunchbase.com/company/google">Data Explorer View</a> </td>
     <td class="data">Check diff langs uc:class: <a href="proxy:entity/http/www.crunchbase.com/company/google%23Arabic">link</a>
     </td>
      </tr>
<tr>
        <td class="data">UMBEL</td>
        <td class="data">min-score, max-results</td>
        <td class="data">
          <a href="http://fgiasson.com/blog/index.php/2008/08/29/umbel-as-a-coherent-framework-to-support-ontology-development/">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http/umbel.zitgist.com/api_philosophy.php">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http/umbel.zitgist.com/api_philosophy.php">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">USA Today Best-Selling Books</td>
        <td class="data" />
        <td class="data">
          <a href="http://api.usatoday.com/open/bestsellers/books/titles?title=HARRY+POTTER&amp;api_key=8ge2bvrna8x27wvc84qhz3e7&amp;encoding=xml">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http://api.usatoday.com/open/bestsellers/books/titles?title=HARRY+POTTER&amp;api_key=8ge2bvrna8x27wvc84qhz3e7&amp;encoding=xml">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://api.usatoday.com/open/bestsellers/books/titles?title=HARRY+POTTER&amp;api_key=8ge2bvrna8x27wvc84qhz3e7&amp;encoding=xml">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">Ustream</td>
        <td class="data" />
        <td class="data">
          <a href="http://www.ustream.tv/recorded/4848859/highlight/55618">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http://www.ustream.tv/recorded/4848859/highlight/55618">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.ustream.tv/recorded/4848859/highlight/55618">Data Explorer View</a> </td>
        <td class="data">Check rdfs:seeAlso links like: <a href="http://www.ustream.tv/recorded/7039249/highlight/75027">this one</a>.</td>
      </tr>
<tr>
        <td class="data">Virtuoso Faceted Web Service</td>
        <td class="data" />
        <td class="data"> example </td>
        <td class="data"> HTML Representation </td>
        <td class="data"> Data Explorer View </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">voID Statistics</td>
        <td class="data" />
        <td class="data">example </td>
        <td class="data"> HTML Representation </td>
        <td class="data"> Data Explorer View </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">whoisi?</td>
        <td class="data" />
        <td class="data">
          <a href="http://whoisi.com/api/getPersonForURL?app=example&amp;url=http://boatcovers.bestdealsoffer.com/">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">World Bank</td>
        <td class="data">API Key</td>
        <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http/web.worldbank.org/WBSITE/EXTERNAL/TOPICS/EXTEDUCATION/0,,contentMDK:20263110~menuPK:531742~pagePK:210058~piPK:210062~theSitePK:282386,00.html">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http/www.lib.berkeley.edu/doemoff/govinfo/intl/gov_ibrd.html">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.lib.berkeley.edu/doemoff/govinfo/intl/gov_ibrd.html">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">WorldCat Basic Search</td>
        <td class="data" />
        <td class="data">
          <a href="http://www.crunchbase.com/company/yahoo">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http://www.crunchbase.com/company/yahoo">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.crunchbase.com/company/yahoo">Data Explorer View</a> </td>
        <td class="data">Check seeAlso links like <a href="http://worldcat.org/oclc/613205142">this one</a>.</td>
      </tr>
<tr>
        <td class="data">xISBN</td>
        <td class="data">API Key</td>
        <td class="data">
          <a href="http://isbndb.com/d/book/a_concise_history_of_italy_a02.html">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http://isbndb.com/d/book/a_concise_history_of_italy_a02.html">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://isbndb.com/d/book/a_concise_history_of_italy_a02.html">Data Explorer View</a> </td>
        <td class="data">Check set of owl:sameAs links: <a href="http://purl.org/NET/book/isbn/0670236489#book">link1</a>; <a href="http://purl.org/NET/book/isbn/0500450102#book">link2</a>.</td>
      </tr>
<tr>
        <td class="data">XRD</td>
        <td class="data" />
        <td class="data">
          <a href="http://s2.googleusercontent.com/webfinger/?q=john@gmail.com">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http/hueniverse.com/xrd/">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://hueniverse.com/xrd/">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">Yahoo BOSS</td>
        <td class="data">API Key</td>
        <td class="data">
          <a href="http://boss.yahooapis.com/ysearch/web/v1/UNITED+STATES?appid=cxgCRk3V34ElK7Amd8ieyy9eELzD7QrpAHTzOv6MeEBz56JUUgGi1x2vf_.pE.c-&amp;format=xml&amp;view=searchmonkey_rdf">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http://linkeddata.uriburner.com/about/html/http://linkeddata.uriburner.com/about/id/entity/http/twitter.com/kidehen?@Lookup@=10&amp;refresh=0">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://linkeddata.uriburner.com/about/html/http://linkeddata.uriburner.com/about/id/entity/http/twitter.com/kidehen?@Lookup@=10&amp;refresh=0">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">Yahoo Geocode</td>
        <td class="data">API Key</td>
        <td class="data">
          <a href="http://local.yahooapis.com">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http://www.programmableweb.com/api/yahoo-local-search">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.programmableweb.com/api/yahoo-local-search">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">Yelp Search for business</td>
        <td class="data">API Key</td>
        <td class="data">
          <a href="http://www.smallbusinesssem.com/inc-magazine-goes-deep-on-yelp/2669/">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http/www.readwriteweb.com/archives/yelp_assembles_small_business_advisory_board.php">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://www.readwriteweb.com/archives/yelp_assembles_small_business_advisory_board.php">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">Zemanta</td>
        <td class="data">API Key, min-score, max-results</td>
        <td class="data">
          <a href="http://developer.zemanta.com/wiki/helloworld/ruby">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http/kobesearch.cpan.org/htdocs/Net-Zemanta/Net/Zemanta/Suggest.pm.html">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http://kobesearch.cpan.org/htdocs/Net-Zemanta/Net/Zemanta/Suggest.pm.html">Data Explorer View</a> </td>
        <td class="data" />
      </tr>
<tr>
        <td class="data">Zillow</td>
        <td class="data">API Key</td>
        <td class="data">
          <a href="http://www.zillow.com/homedetails/26-George-Rd-Maynard-MA-01754/57086765_zpid/">example</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/about/html/http/www.crunchbase.com/company/zillow">HTML Representation</a> </td>
        <td class="data"> <a href="http://linkeddata.uriburner.com/ode/?uri=http/www.crunchbase.com/company/zillow">Data Explorer View</a> </td>
        <td class="data" />
      </tr>


</table>
    <br />
    <a name="virtuosospongercartridgetypesmetarest" />
    <h5>14.9.8.3.2. Meta Cartridge Usage via REST Request</h5>
<p>Description.vsp underlies the /about/html/ page, and accepts the parameters described below.</p> 
<table class="data">


  <tr>
    <th class="data">Parameter</th>
        <th class="data">Value</th>
        <th class="data">Description</th>
        <th class="data">Example</th>
  </tr>


<tr>
  <td class="data">
          <strong>@Lookup@</strong>
        </td>
  <td class="data"> </td>
  <td class="data">The type of lookup</td>
  <td class="data"> </td>
</tr>
<tr>
  <td class="data" />
  <td class="data">No Value</td>
  <td class="data">When value is not given (i.e., <strong>@Lookup@=</strong>), all will work as if the parameter were not present. %BR% The &quot;Lookup&quot; name is chosen to distinguish between parameters belonging to the URL being processed, and parameters for the Sponger.</td>
  <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http://www.apple.com/?@Lookup@=&amp;refresh=0">Refresh the graph with all current cartridges, either type</a>
        </td>
</tr>  
<tr>
  <td class="data" />
  <td class="data">
          <strong>0</strong>
        </td>
  <td class="data">NLP meta only</td>
  <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http://www.apple.com/?@Lookup@=0&amp;refresh=0">Execute only NLP meta extraction</a>
        </td>
</tr>  
<tr>
  <td class="data" />
  <td class="data">
          <strong>-2</strong>
        </td>
  <td class="data">Keywords-based only</td>
  <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http://www.apple.com/?@Lookup@=-2&amp;refresh=0">Execute only keywords-based meta extraction</a>
        </td>
</tr>  
<tr>
  <td class="data" />
  <td class="data">
          <strong>x,y...</strong>
        </td>
  <td class="data">A list of meta cartridges to be executed, by their unique IDs. The ID column can be found in <strong>Conductor -&amp;gt; Linked Data -&amp;gt; Sponger -&amp;gt; Meta Cartridges</strong>
        </td>
  <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http://www.apple.com/?@Lookup@=19,22&amp;refresh=0">Execute only CNET (ID=19) and NYT: The TimesTags (ID=22) meta cartridges</a>
        </td>
</tr>  
<tr>
  <td class="data">
          <strong>refresh=0,1,2 etc.</strong>
        </td>
  <td class="data" />
  <td class="data">
          <strong>Usage</strong>: for cache invalidation. When used 1 or larger number (n), adds 
  <strong>get:refresh &quot;N&quot;</strong> (explicit refresh interval in seconds) as a directive to Sponger. 
  A refresh of zero (&quot;0&quot;) seconds will make a new graph on the next lookup with the 
  &#39;<strong>@Lookup@</strong>&#39; parameter value.</td>
  <td class="data">
          <a href="http://linkeddata.uriburner.com/about/html/http://www.apple.com/?@Lookup@=&amp;refresh=0">Refresh the graph with all current cartridges</a>
        </td>
</tr>  
<tr>
  <td class="data">
          <strong>refresh=clean</strong>
        </td>
  <td class="data" />
  <td class="data">
          <strong>Usage</strong>: for overwriting. The &#39;clean&#39; usage explicitly clears the graph i.e. 
  will cause the Sponger to drop cache even if it is marked to be in the fly. Thus, if sponged cache by 
  some reason is left in some inconsistent state like shutdown during sponge, then &#39;clean&#39; is required 
  as it doesn&#39;t check cache state. <strong>Note</strong>: must be used with caution as other threads 
  may be doing sponge at same time.</td>
  <td class="data" />
</tr>  


</table>
    <br />
    <br />  
    <a name="virtuosospongercartridgetypesmetarestexamples" />
    <h5>14.9.8.3.3. Meta Cartridges Parametrized Examples</h5>
<p>All examples in the table below start from the same Resource, 
	http://www.news.com, and submit it to the Sponger for processing with the single listed Meta Cartridge.</p>

<p>It can be informative to start by seeing what the results would be 
	<a href="http://linkeddata.uriburner.com/about/html/http/www.news.com/?@Lookup@=99999&amp;refresh=0">with no Meta Cartridges at all</a>.</p>  

<p>If you have a lot of time to spare, you may want to see what the results would be 
	<a href="http://linkeddata.uriburner.com/about/html/http/www.news.com/?@Lookup@=&amp;refresh=0">with all Meta Cartridges combined</a>. 
	As may be obvious, this must wait for each of the above services to respond, so it may take quite 
	some time to return.</p>

<table class="data">


  <tr>
    <th class="data">Cartridge</th>
        <th class="data">URL Pattern</th>
        <th class="data">Example</th>
  </tr>


<tr>
        <td class="data">Alchemy</td>
        <td class="data">@Lookup@=8&amp;refresh=0</td>
     <td class="data">   <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL1">cURL example</a>
     </td>
      </tr> 
<tr>
        <td class="data">Amazon Search for products</td>
        <td class="data">@Lookup@=13&amp;refresh=0</td>
     <td class="data">   <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL2">cURL example</a>
     </td>
      </tr> 
<tr>
        <td class="data">BBC</td>
        <td class="data">@Lookup@=1665&amp;refresh=0</td>
     <td class="data">   <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL3">cURL example</a>
     </td>
      </tr> 
<tr>
        <td class="data">BestBuy Search for products</td>
        <td class="data">@Lookup@=14&amp;refresh=0</td>
     <td class="data">   <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL4">cURL example</a>
     </td>
      </tr> 
<tr>
        <td class="data">Bing</td>
        <td class="data">@Lookup@=11&amp;refresh=0</td>
     <td class="data">   <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL5">cURL example</a>
     </td>
      </tr> 
<tr>
        <td class="data">Bit.ly</td>
        <td class="data">@Lookup@=915&amp;refresh=0</td>
     <td class="data">   <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL6">cURL example</a>
     </td>
      </tr> 
<tr>
        <td class="data">CNET</td>
        <td class="data">@Lookup@=19&amp;refresh=0</td>
     <td class="data">   <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL7">cURL example</a>
     </td>
      </tr> 
<tr>
        <td class="data">Crunchbase</td>
        <td class="data">@Lookup@=839&amp;refresh=0</td>
     <td class="data">   <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL8">cURL example</a>
     </td>
      </tr> 
<tr>
        <td class="data">Dapper</td>
        <td class="data">@Lookup@=243&amp;refresh=0</td>
     <td class="data">   <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL9">cURL example</a>
     </td>
      </tr> 
<tr>
        <td class="data">DBpedia</td>
        <td class="data">@Lookup@=26&amp;refresh=0</td>
     <td class="data">   <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL10">cURL example</a>
     </td>
      </tr> 
<tr>
        <td class="data">Delicious Meta</td>
        <td class="data">@Lookup@=23&amp;refresh=0</td>
     <td class="data">   <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL11">cURL example</a>
     </td>
      </tr> 
<tr>
        <td class="data">Discogs</td>
        <td class="data">@Lookup@=840&amp;refresh=0</td>
     <td class="data">   <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL12">cURL example</a>
     </td>
      </tr> 
<tr>
        <td class="data">Document Links</td>
        <td class="data">@Lookup@=34&amp;refresh=0</td>
     <td class="data">   <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL13">cURL example</a>
     </td>
      </tr> 
<tr>
        <td class="data">eBay</td>
        <td class="data">@Lookup@=18&amp;refresh=0</td>
     <td class="data">
          <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL14">cURL example</a>
     </td>
      </tr>  
<tr>
        <td class="data">Evri Meta</td>
        <td class="data">@Lookup@=3966&amp;refresh=0</td>
     <td class="data">
          <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL15">cURL example</a>
     </td>
      </tr>  
<tr>
        <td class="data">Flickr Search for photos</td>
        <td class="data">@Lookup@=16&amp;refresh=0</td>
     <td class="data">
          <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL16">cURL example</a>
     </td>
      </tr>  
<tr>
        <td class="data">Freebase NYTC</td>
        <td class="data">@Lookup@=5&amp;refresh=0</td>
     <td class="data">
          <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL17">cURL example</a>
     </td>
      </tr>  
<tr>
        <td class="data">Freebase NYTCF</td>
        <td class="data">@Lookup@=4&amp;refresh=0</td>
     <td class="data">
          <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL18">cURL example</a>
     </td>
      </tr>  
<tr>
        <td class="data">Geonames Meta</td>
        <td class="data">@Lookup@=24&amp;refresh=0</td>
     <td class="data">
          <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL19">cURL example</a>
     </td>
      </tr>  
<tr>
        <td class="data">Geopoints</td>
        <td class="data">@Lookup@=3731&amp;refresh=0</td>
     <td class="data">
          <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL20">cURL example</a>
     </td>
      </tr>  
<tr>
        <td class="data">Get Glue Meta</td>
        <td class="data">@Lookup@=25&amp;refresh=0</td>
     <td class="data">
          <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL21">cURL example</a>
     </td>
      </tr>  
<tr>
        <td class="data">Google Search</td>
        <td class="data">@Lookup@=1382&amp;refresh=0</td>
     <td class="data">
          <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL22">cURL example</a>
     </td>
      </tr>  
<tr>
        <td class="data">Google Social Graph</td>
        <td class="data">@Lookup@=30&amp;refresh=0</td>
     <td class="data">
          <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL23">cURL example</a>
     </td>
      </tr>  
<tr>
        <td class="data">Guardian</td>
        <td class="data">@Lookup@=28&amp;refresh=0</td>
     <td class="data">
          <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL24">cURL example</a>
     </td>
      </tr>  
<tr>
        <td class="data">Hoovers</td>
        <td class="data">@Lookup@=2&amp;refresh=0</td>
     <td class="data">
          <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL25">cURL example</a>
     </td>
      </tr>  
<tr>
        <td class="data">Journalisted</td>
        <td class="data">@Lookup@=3174&amp;refresh=0</td>
     <td class="data">
          <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL26">cURL example</a>
     </td>
      </tr>  
<tr>
        <td class="data">Local Search</td>
        <td class="data">@Lookup@=15&amp;refresh=0</td>
     <td class="data">
          <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL27">cURL example</a>
     </td>
      </tr>  
<tr>
        <td class="data">LOD</td>
        <td class="data">@Lookup@=21&amp;refresh=0</td>
     <td class="data">
          <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL28">cURL example</a>
     </td>
      </tr>  
<tr>
        <td class="data">MIME Type</td>
        <td class="data">@Lookup@=1029&amp;refresh=0</td>
     <td class="data">
          <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL29">cURL example</a>
     </td>
      </tr>  
<tr>
        <td class="data">New York Times</td>
        <td class="data">@Lookup@=22&amp;refresh=0</td>
     <td class="data">
          <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL30">cURL example</a>
     </td>
      </tr>  
<tr>
        <td class="data">NPR Meta</td>
        <td class="data">@Lookup@=29&amp;refresh=0</td>
     <td class="data">
          <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL31">cURL example</a>
     </td>
      </tr>  
<tr>
        <td class="data">NYT: The Article Search</td>
        <td class="data">@Lookup@=9&amp;refresh=0</td>
     <td class="data">
          <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL32">cURL example</a>
     </td>
      </tr>  
<tr>
        <td class="data">NYT: The TimesTags</td>
        <td class="data">@Lookup@=22&amp;refresh=0</td>
     <td class="data">
          <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL33">cURL example</a>
     </td>
      </tr>  
<tr>
        <td class="data">OpenCalais</td>
        <td class="data">@Lookup@=1&amp;refresh=0</td>
     <td class="data">
          <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL34">cURL example</a>
     </td>
      </tr>  
<tr>
        <td class="data">Oreilly Search for products</td>
        <td class="data">@Lookup@=17&amp;refresh=0</td>
     <td class="data">
          <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL35">cURL example</a>
     </td>
      </tr>  
<tr>
        <td class="data">RapLeaf</td>
        <td class="data">@Lookup@=2745&amp;refresh=0</td>
     <td class="data">
          <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL36">cURL example</a>
     </td>
      </tr>  
<tr>
        <td class="data">SameAs.org</td>
        <td class="data">@Lookup@=3257&amp;refresh=0</td>
     <td class="data">
          <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL37">cURL example</a>
     </td>
      </tr>  
<tr>
        <td class="data">Sindice</td>
        <td class="data">@Lookup@=12&amp;refresh=0</td>
     <td class="data">
          <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL38">cURL example</a>
     </td>
      </tr>  
<tr>
        <td class="data">Technorati</td>
        <td class="data">@Lookup@=27&amp;refresh=0</td>
     <td class="data">
          <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL39">cURL example</a>
     </td>
      </tr>  
<tr>
        <td class="data">Tesco</td>
        <td class="data">@Lookup@=31&amp;refresh=0</td>
     <td class="data">
          <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL40">cURL example</a>
     </td>
      </tr>  
<tr>
        <td class="data">TrueKnowledge</td>
        <td class="data">@Lookup@=3967&amp;refresh=0</td>
     <td class="data">
          <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL41">cURL example</a>
     </td>
      </tr>  
<tr>
        <td class="data">Twitter</td>
        <td class="data">@Lookup@=4020&amp;refresh=0</td>
     <td class="data">
          <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL42">cURL example</a>
     </td>
      </tr>  
<tr>
        <td class="data">uClassify</td>
        <td class="data">@Lookup@=3086&amp;refresh=0</td>
     <td class="data">
          <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL43">cURL example</a>
     </td>
      </tr>  
<tr>
        <td class="data">UMBEL</td>
        <td class="data">@Lookup@=6&amp;refresh=0</td>
     <td class="data">
          <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL44">cURL example</a>
     </td>
      </tr>  
<tr>
        <td class="data">Ustream</td>
        <td class="data">@Lookup@=3902&amp;refresh=0</td>
     <td class="data">
          <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL45">cURL example</a>
     </td>
      </tr>  
<tr>
        <td class="data">Virtuoso Faceted Web Service</td>
        <td class="data">@Lookup@=21&amp;refresh=0</td>
     <td class="data">
          <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL46">cURL example</a>
     </td>
      </tr>  
<tr>
        <td class="data">voID Statistics</td>
        <td class="data">@Lookup@=35&amp;refresh=0</td>
     <td class="data">
          <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL47">cURL example</a>
     </td>
      </tr>  
<tr>
        <td class="data">whoisi?</td>
        <td class="data">@Lookup@=3052&amp;refresh=0</td>
     <td class="data">
          <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL48">cURL example</a>
     </td>
      </tr>  
<tr>
        <td class="data">World Bank</td>
        <td class="data">@Lookup@=3&amp;refresh=0</td>
     <td class="data">
          <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL49">cURL example</a>
     </td>
      </tr>  
<tr>
        <td class="data">XRD</td>
        <td class="data">@Lookup@=3650&amp;refresh=0</td>
     <td class="data">
          <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL50">cURL example</a>
     </td>
      </tr>  
<tr>
        <td class="data">Yahoo BOSS</td>
        <td class="data">@Lookup@=10&amp;refresh=0</td>
     <td class="data">
          <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL51">cURL example</a>
     </td>
      </tr>  
<tr>
        <td class="data">Yahoo Geocode</td>
        <td class="data">@Lookup@=2855&amp;refresh=0</td>
     <td class="data">
          <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL52">cURL example</a>
     </td>
      </tr>  
<tr>
        <td class="data">Yelp Search for business</td>
        <td class="data">@Lookup@=20&amp;refresh=0</td>
     <td class="data">
          <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL53">cURL example</a>
     </td>
      </tr>  
<tr>
        <td class="data">Zemanta</td>
        <td class="data">@Lookup@=7&amp;refresh=0</td>
     <td class="data">
          <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL54">cURL example</a>
     </td>
      </tr>  
<tr>
        <td class="data">Zillow</td>
        <td class="data">@Lookup@=32&amp;refresh=0</td>
     <td class="data">
          <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSpongerCartridgeSupportedDataSourcesMetaRESTExamplescURL55">cURL example</a>
     </td>
      </tr>  


</table>
    <br />
<br />
<br />
 <br />
<a name="rdfspongerprogrammerguide" />
    <h3>14.9.9. Sponger Programmers Guide</h3>
  <p>The Sponger forms part of the extensible RDF framework built into Virtuoso Universal Server. A
key component of the Sponger&#39;s pluggable architecture is its support for Sponger Cartridges, which
themselves are comprised of an Entity Extractor and an Ontology Mapper. Virtuoso bundles numerous
pre-written cartridges for RDF data extraction from a wide range of data sources. However, developers
are free to develop their own custom cartridges. This programmer&#39;s guide describes how.</p>
  <p>The guide is a companion to the <a href="http://virtuoso.openlinksw.com/Whitepapers/pdf/sponger_whitepaper_10102007.pdf">Virtuoso Sponger</a> whitepaper. The latter describes the Sponger in depth, its architecture, configuration, use and integration with other Virtuoso facilities such as the Open Data Services (ODS) application framework. This guide focuses solely on custom cartridge development.</p>
      
      <a name="virtuosospongeroverviewxmlset" />
    <h4>14.9.9.1. Configuration of CURIEs used by the sponger</h4>
      <p>For configuring CURIEs used by the Sponger which is exposed via sponger
clients such as &quot;description.vsp&quot; - the VSP based information resource description utility,
you can use the <a href="fn_xml_set_ns_decl.html">xml_set_ns_decl</a> function.</p>
      <p>Here is sample example to add curie pattern:</p>
<div>
      <pre class="programlisting">
-- Example link: http://linkeddata.uriburner.com/about/rdf/http://twitter.com/guykawasaki/status/1144945513#this
XML_SET_NS_DECL (&#39;uriburner&#39;,
                 &#39;http://linkeddata.uriburner.com/about/rdf/http://&#39;,
                 2);
</pre>
    </div>
    <br />
    
      <a name="virtuosospongeroverviewcartarch" />
    <h4>14.9.9.2. Cartridge Architecture</h4>
      <p>The Sponger is comprised of cartridges which are themselves comprised of an entity extractor
and an ontology mapper. Entities extracted from non-RDF resources are used as the basis for generating
structured data by mapping them to a suitable ontology. A cartridge is invoked through its cartridge hook,
a Virtuoso/PL procedure entry point and binding to the cartridge&#39;s entity extractor and ontology mapper.</p>
      <p>
      <strong>Entity Extractor</strong>
    </p>
      <p>When an RDF aware client requests data from a network accessible resource via the Sponger the
following events occur:</p>
      <ul>
        <li>A request is made for data in RDF form (explicitly via HTTP Accept Headers), and if
RDF is returned nothing further happens. </li>
        <li>If RDF isn&#39;t returned, the Sponger passes the data through a <strong>Entity Extraction Pipeline</strong>
(using Entity Extractors). </li>
        <li>The extracted data is transformed into RDF via a <strong>Mapping Pipeline</strong>. RDF instance data is generated by way of ontology matching and mapping. </li>
        <li>RDF instance data (aka. RDF Structured Linked Data) are returned to the client.</li>
      </ul>
      <p>
      <strong>Extraction Pipeline</strong>
    </p>
      <p>Depending on the file or format type detected at ingest, the Sponger applies the appropriate
entity extractor. Detection occurs at the time of content negotiation instigated by the retrieval user
agent. The normal extraction pipeline processing is as follows:</p>
      <ul>
        <li>The Sponger tries to get RDF data (including N3 or Turtle) directly from the dereferenced
URL. If it finds some, it returns it, otherwise, it continues.</li>
        <li>If the URL refers to a HTML file, the Sponger tries to find &quot;link&quot; elements referring to
RDF documents. If it finds one or more of them, it adds their triples into a temporary RDF graph and
continues its processing.</li>
        <li>The Sponger then scans for microformats or GRDDL. If either is found, RDF triples are
generated and added to a temporary RDF graph before continuing.</li>
        <li>If the Sponger finds eRDF or RDFa data in the HTML file, it extracts it from the HTML
file and inserts it into the RDF graph before continuing.</li>
        <li>If the Sponger finds it is talking with a web service such as Google Base, it maps
the API of the web service with an ontology, creates triples from that mapping and includes the triples
into the temporary RDF graph.</li>
        <li>The next fallback is scanning of the HTML header for different Web 2.0 types or RSS
1.1, RSS 2.0, Atom, etc. </li>
        <li>Failing those tests, the scan then uses standard Web 1.0 rules to search in the
header tags for metadata (typically Dublin Core) and transform them to RDF and again add them to the
temporary graph. Other HTTP response header data may also be transformed to RDF.</li>
        <li>If nothing has been retrieved at this point, the ODS-Briefcase metadata
extractor is tried.</li>
        <li>Finally, if nothing is found, the Sponger will return an empty graph.</li>
</ul>
      <p>
      <strong>Ontology Mapper</strong>
    </p>
      <p>Sponger ontology mappers peform the the task of generating RDF instance data from
extracted entities (non-RDF) using ontologies associated with a given data source type. They are
typically XSLT (using GRDDL or an in-built Virtuoso mapping scheme) or Virtuoso/PL based. Virtuoso
comes preconfigured with a large range of ontology mappers contained in one or more Sponger
cartridges.</p>
      <p>
      <strong>Cartridge Registry</strong>
    </p>
      <p>To be recognized by the SPARQL engine, a Sponger cartridge must be registered in
the Cartridge Registry by adding a record to the table DB.DBA.SYS_RDF_MAPPERS, either manually
via DML, or more easily through Conductor, Virtuoso&#39;s browser-based administration console,
which provides a UI for adding your own cartridges. (Sponger configuration using Conductor is
described in detail later.) The SYS_RDF_MAPPERS table definition is as follows:</p>
<div>
      <pre class="programlisting">
create table &quot;DB&quot;.&quot;DBA&quot;.&quot;SYS_RDF_MAPPERS&quot;
(
&quot;RM_ID&quot; INTEGER IDENTITY,  -- cartridge ID. Determines the order of the cartridge&#39;s invocation in the Sponger processing chain
&quot;RM_PATTERN&quot; VARCHAR,  -- a REGEX pattern to match the resource URL or MIME type
&quot;RM_TYPE&quot; VARCHAR,  -- which property of the current resource to match: &quot;MIME&quot; or &quot;URL&quot;
&quot;RM_HOOK&quot; VARCHAR,  -- fully qualified Virtuoso/PL function name
&quot;RM_KEY&quot; LONG VARCHAR,  -- API specific key to use
&quot;RM_DESCRIPTION&quot; LONG VARCHAR,  -- cartridge description (free text)
&quot;RM_ENABLED&quot; INTEGER,  -- a 0 or 1 integer flag to exclude or include the cartridge from the Sponger processing chain
&quot;RM_OPTIONS&quot; ANY,  -- cartridge specific options
&quot;RM_PID&quot; INTEGER IDENTITY,
PRIMARY KEY (&quot;RM_PATTERN&quot;, &quot;RM_TYPE&quot;)
);
</pre>
    </div>
<br />
    
      <a name="virtuosospongeroverviewcartinvo" />
    <h4>14.9.9.3. Cartridge Invocation</h4>
      <p>The Virtuoso SPARQL processor supports IRI dereferencing via the Sponger. If a SPARQL query
references non-default graph URIs, the Sponger goes out (via HTTP) to sponge the data source URIs and
inserts the extracted RDF data into the local RDF quad store. The Sponger invokes the appropriate
cartridge for the data source type to produce RDF instance data. If none of the registered cartridges
are capable of handling the received content type, the Sponger will attempt to obtain RDF instance
data via the in-built WebDAV metadata extractor.</p>
      <p>Sponger cartridges are invoked as follows:</p>
      <p>When the SPARQL processor dereferences a URI, it plays the role of an HTTP user agent
(client) that makes a content type specific request to an HTTP server via the HTTP request&#39;s Accept
headers. The following then occurs:</p>
      <ul>
        <li>If the content type returned is RDF then no further transformation is needed and
the process stops. For instance, when consuming an (X)HTML document with a GRDDL profile, the profile
URI points to a data provider that simply returns RDF instance data.</li>
        <li>If the content type is not RDF (i.e. application/rdf+xml or text/rdf+n3 ), for
instance &#39;text/plain&#39;, the Sponger looks in the Cartridge Registry iterating over every record for
which the RM_ENABLED flag is true, with the look-up sequence ordered on the RM_ID column values.
For each record, the processor tries matching the content type or URL against the RM_PATTERN value
and, if there is match, the function specified in RM_HOOK column is called. If the function doesn&#39;t
exist, or signals an error, the SPARQL processor looks at next record.
          <ul>
            <li>If the hook returns zero, the next cartridge is tried. (A cartridge function
can return zero if it believes a subsequent cartridge in the chain is capable of extracting more
RDF data.)</li>
            <li>If the result returned by the hook is negative, the Sponger is instructed
that no RDF was generated and the process stops. </li>
            <li>If the hook result is positive, the Sponger is informed that structured
data was retrieved and the process stops.</li>
          </ul>
        </li>
        <li>If none of the cartridges match the source data signature (content type or URL),
the ODS-Briefcase WebDAV metadata extractor and RDF generator is called.</li>
      </ul>
      <p>
      <strong>Meta-Cartridges</strong>
    </p>
      <p>The above describes the RDF generation process for &#39;primary&#39; Sponger cartridges. Virtuoso
also supports another cartridge type - a &#39;meta-cartridge&#39;. Meta-cartridges act as post-processors in
the cartridge pipeline, augmenting entity descriptions in an RDF graph with additional information
gleaned from &#39;lookup&#39; data sources and web services. Meta-cartridges are described in more detail in
a later section.</p>
      <table class="figure" border="0" cellpadding="0" cellspacing="0">
    <tr>
     <td>
          <img alt="Meta-Cartridges" src="../images/ui/spong1.png" />
     </td>
    </tr>
    <tr>
        <td>Figure: 14.9.9.3.1. Meta-Cartridges</td>
    </tr>
    </table>
<br />

    
      <a name="virtuosospongercatrbundled" />
    <h4>14.9.9.4. Cartridges Bundled with Virtuoso</h4>
      
        <a name="virtuosospongercatrbundledrdfvad" />
    <h5>14.9.9.4.1. RDF Mappers VAD</h5>
        <p>Virtuoso supplies a number of prewritten cartridges for extracting RDF data from a
variety of popular Web resources and file types. The cartridges are bundled as part of the rdf_mappers
VAD (Virtuoso Application Distribution).</p>
        <p>To see which cartridges are available, look at the &#39;RDF Cartridges&#39; screen in
Conductor. This can be reached through the Linked Data -&gt; Sponger -&gt; Extractor Cartridges and Meta Cartridges menu items.</p>
        <table class="figure" border="0" cellpadding="0" cellspacing="0">
    <tr>
     <td>
          <img alt="RDF Cartridges" src="../images/ui/spong2.png" />
     </td>
    </tr>
    <tr>
        <td>Figure: 14.9.9.4.1.1. RDF Cartridges</td>
    </tr>
    </table>
        <p>To check which version of the rdf_mappers VAD is installed, or to upgrade it,
refer to Conductor&#39;s &#39;VAD Packages&#39; screen, reachable through the &#39;System Admin&#39; &gt; &#39;Packages&#39;
menu items.</p>
        <p>The latest VADs for the closed source releases of Virtuoso can be
<a href="http://download.openlinksw.com/download/">downloaded</a> from the downloads area on the OpenLink website. Select either the &#39;DBMS (WebDAV) Hosted&#39; or
&#39;File System Hosted&#39; product format from the &#39;Distributed Collaborative Applications&#39; section,
depending on whether you want the Virtuoso application to use WebDAV or native filesystem storage.
VADs for Virtuoso Open Source edition (VOS) are available for
<a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VOSDownload">download</a> from
the VOS Wiki.</p>
<br />
      
        <a name="virtuosospongercatrbundledexample" />
    <h5>14.9.9.4.2. Example Source Code</h5>
        <p>For developers wanting example cartridge code, the most authoritative reference is
the rdf_mappers VAD source code itself. This is included as part of the VOS distribution. After
downloading and unpacking the sources, the script used to create the cartridges, and the associated
stylesheets can be found in:</p>
        <ul>
          <li>&lt;vos root&gt;/binsrc/rdf_mappers/rdf_mappers.sql</li>
          <li>&lt;vos root&gt;/binsrc/rdf_mappers/xslt/*.xsl</li>
        </ul>
        <p>Alternatively, you can look at the actual cartridge implementations installed in your
Virtuoso instance by inspecting the cartridge hook function used by a particular cartridge. This is
easily identified from the &#39;Cartridge name&#39; field of Conductor&#39;s &#39;RDF Cartridges&#39; screen, after
selecting the cartridge of interest. The hook function code can be viewed from the &#39;Schema Objects&#39;
screen under the &#39;Database&#39; menu, by locating the function in the &#39;DB&#39; &gt; &#39;Procedures&#39; folder.
Stylesheets used by the cartridges are installed in the WebDAV folder DAV/VAD/rdf_mappers/xslt.
This can be explored using Conductor&#39;s WebDAV interface. The actual rdf_mappers.sql file installed
with your system can also be found in the DAV/VAD/rdf_mappers folder.</p>
<br />
    <br />
    
      <a name="virtuosospongercatrbundledcusgtomcart" />
    <h4>14.9.9.5. Custom Cartridge</h4>
      <p>Virtuoso comes well supplied with a variety of Sponger cartridges and GRDDL filters.
When then is it necessary to write your own cartridge?</p>
      <p>In the main, writing a new cartridge should only be necessary to generate RDF from
a REST-style Web service not supported by an existing cartridge, or to customize the output from
an existing cartridge to your own requirements. Apart from these circumstances, the existing
Sponger infrastructure should meet most of your needs. This is particularly the case for
document resources.</p>
     
       <a name="virtuosospongerdocres" />
    <h5>14.9.9.5.1. Document Resources</h5>
       <p>We use the term document resource to identify content which is not being returned
from a Web service. Normally it can broadly be conceived as some form of document, be it a text
based entity or some form of file, for instance an image file.</p>
       <p>In these cases, the document either contains RDF, which can be extracted directly,
or it holds metadata in a supported format which can be transformed to RDF using an existing
filter.</p>
       <p>The following cases should all be covered by the existing Sponger cartridges:</p>
         <ul>
           <li>embedded or linked RDF</li>
           <li>RDFa, eRDF and other popular microformats extractable directly or via GRDDL</li>
           <li>popular syndication formats (RSS 2.0 , Atom, OPML , OCS , XBEL)</li>
         </ul>
<br />
     
       <a name="virtuosospongergrddl" />
    <h5>14.9.9.5.2. GRDDL</h5>
       <p>GRDDL (Gleaning Resource Descriptions from Dialects of Languages) is mechanism for deriving
RDF data from XML documents and in particular XHTML pages. Document authors may associate transformation
algorithms, typically expressed in XSLT, with their documents to transform embedded metadata into RDF.</p>
       <p>The rdf_mappers VAD installs a number of GRDDL filters for transforming popular microformats
(such as RDFa, eRDF or hCalendar) into RDF. The available filters can be viewed, or configured, in
Conductor&#39;s &#39;GRDDL Filters for XHTML&#39; screen. Navigate to the &#39;RDF Cartridges&#39; screen using the
&#39;RDF&#39; &gt; &#39;RDF Cartridges&#39; menu items, then SELECT the &#39;GRDDL Mappings&#39; tab to display the &#39;GRDDL Filters
for XHTML&#39; screen. GRDDL filters are held in the WebDAV folder /DAV/VAD/rdf_cartridges/xslt/ alongside
other XSLT templates. The Conductor interface allows you to add new GRDDL filters should you so wish.</p>
       <p>For an introduction to GRDDL, try the <a href="http://www.w3.org/TR/grddl-primer/">GRDDL Primer</a>. To underline GRDDL&#39;s utility, the primer
includes an example of transforming Excel spreadsheet data, saved as XML, into RDF.</p>
       <p>A comprehensive <a href="http://esw.w3.org/topic/CustomRdfDialects">list of stylesheets</a>
for transforming HTML and non-HTML XML dialects is maintained
on the ESW Wiki. The list covers a range of microformats, syndication formats and feedlists.</p>
     <br />
     <p>To see which Web Services are already catered for, view the list of cartridges in Conductor&#39;s &#39;RDF Cartridges&#39; screen.</p>
    <br />
    
      <a name="virtuosospongercreatecustcartr" />
    <h4>14.9.9.6. Creating Custom Cartridges</h4>
      <p>The Sponger is fully extensible by virtue of its pluggable cartridge architecture. New data formats can
be sponged by creating new cartridges. While OpenLink is active in adding cartridges for new data sources,
you are free to develop your own custom cartridges. Entity extractors can be built using Virtuoso PL,
C/C++, Java or any other external language supported by Virtuoso&#39;s Server Extension API. Of course,
Virtuoso&#39;s own entity extractors are written in Virtuoso PL.</p>
      
        <a name="virtuosospongercreatecustcartran" />
    <h5>14.9.9.6.1. The Anatomy of a Cartridge</h5>
        <p>
      <strong>Cartridge Hook Prototype</strong>
    </p>
        <p>Every Virtuoso PL hook function used to plug a custom Sponger cartridge into the Virtuoso
SPARQL engine must have a parameter list with the following parameters (the names of the parameters are
not important, but their order and presence are):</p>
        <ul>
          <li>
        <strong>in graph_iri varchar</strong>: the IRI of the graph being retrieved/crawled</li>
          <li>
        <strong>in new_origin_uri varchar</strong>: the URL of the document being retrieved</li>
          <li>
        <strong>in dest varchar</strong>: the destination/target graph IRI</li>
          <li>
        <strong>inout content any</strong>: the content of the retrieved document</li>
          <li>
        <strong>inout async_queue any</strong>: if the PingService initialization parameter
has been configured in the [SPARQL] section of the virtuoso.ini file, this is a pre-allocated asynchronous
queue to be used to call the ping service</li>
          <li>
        <strong>inout ping_service any</strong>: the URL of a ping service, as assigned
to the PingService parameter in the [SPARQL] section of the virtuoso.ini configuration file.
PingTheSemanticWeb is an <a href="virtuososponger.html#virtuosospongerefping">example</a> of a such a service.</li>
          <li>
        <strong>inout api_key any</strong>: a string value specific to a given cartridge,
contained in the RC_KEY column of the DB.DBA.SYS_RDF_CARTRIDGES table. The value can be a single
string or a serialized array of strings providing cartridge specific data.</li>
          <li>
        <strong>inout opts any</strong>: cartridge specific options held in a Virtuoso/PL
vector which acts as an array of key-value pairs.</li>
        </ul>
        <p>
      <strong>Return Value</strong>
    </p>
        <p>If the hook procedure returns zero the next cartridge will be tried. If the result is negative
the sponging process stops, instructing the SPARQL engine that nothing was retrieved. If the result is
positive the process stops, this time instructing the SPARQL engine
that RDF data was successfully retrieved.</p>
        <p>If your cartridge should need to test whether other cartridges are configured to handle a
particular data source, the following extract taken from the RDF_LOAD_CALAIS hook procedure illustrates
how you might do this:</p>
<div>
      <pre class="programlisting">
if (xd is not null)
       {
  -- Sponging successful. Load sponged data in Virtuoso quad store
  DB.DBA.RM_RDF_LOAD_RDFXML (xd, new_origin_uri, coalesce (dest, graph_iri));
  flag := 1;
  }

declare ord any;
ord := (SELECT RM_ID FROM DB.DBA.SYS_RDF_MAPPERS WHERE
	  RM_HOOK = &#39;DB.DBA.RDF_LOAD_CALAIS&#39;);
for SELECT RM_PATTERN FROM DB.DBA.SYS_RDF_MAPPERS WHERE
  RM_ID &gt; ord and RM_TYPE = &#39;URL&#39; and RM_ENABLED = 1 ORDER BY RM_ID do
  {
  if (regexp_match (RM_PATTERN, new_origin_uri) is not null)
    -- try next candidate cartridge
    flag := 0;
  }
return flag;
</pre>
    </div>
        <p>
      <strong>Specifying the Target Graph</strong>
    </p>
        <p>Two cartridge hook function parameters contain graph IRIs, graph_iri and dest. graph_iri
identifies an input graph being crawled. dest holds the IRI specified in any input:grab-destination
pragma defined to control the SPARQL processor&#39;s IRI dereferencing. The pragma overrides the default
behaviour and forces all retrieved triples to be stored in a single graph, irrespective of their graph
of origin.</p>
        <p>So, under some circumstances depending on how the Sponger has been invoked and whether
it is being used to crawl an existing RDF graph, or derive RDF data from a non-RDF data source,
dest may be null.</p>
        <p>Consequently, when loading sponged RDF data into the quad store, cartridges typically
specify the graph to receive the data using the coalesce function which returns the first non-null
parameter. e.g.</p>
<div>
      <pre class="programlisting">
DB.DBA.RDF_LOAD_RDFXML (xd, new_origin_uri, coalesce (dest, graph_iri));
</pre>
    </div>
        <p>Here xd is an RDF/XML string holding the sponged RDF.</p>
        <p>
      <strong>Specifying &amp; Retrieving Cartridge Specific Options</strong>
    </p>
        <p>The hook function prototype allows cartridge specific data to be passed to a cartridge
through the RM_OPTIONS parameter, a Virtuoso/PL vector which acts as a heterogeneous array.</p>
        <p>In the following example, two options are passed, &#39;add-html-meta&#39; and &#39;get-feeds&#39;
with both values set to &#39;no&#39;.</p>
<div>
      <pre class="programlisting">
insert soft DB.DBA.SYS_RDF_MAPPERS (
  RM_PATTERN, RM_TYPE, RM_HOOK, RM_KEY, RM_DESCRIPTION, RM_OPTIONS
)
values (
  &#39;(text/html)|(text/xml)|(application/xml)|(application/rdf.xml)&#39;,
  &#39;MIME&#39;, &#39;DB.DBA.RDF_LOAD_HTML_RESPONSE&#39;, null, &#39;xHTML&#39;,
  vector (&#39;add-html-meta&#39;, &#39;no&#39;, &#39;get-feeds&#39;, &#39;no&#39;)
);
</pre>
    </div>
        <p>The RM_OPTIONS vector can be handled as an array of key-value pairs using the
get_keyword function. get_keyword performs a case sensitive search for the given keyword at
every even index of the given array. It returns the element following the keyword, i.e.
the keyword value.</p>
        <p>Using get_keyword, any options passed to the cartridge can be retrieved
using an approach similar to that below:</p>
<div>
      <pre class="programlisting">
create procedure DB.DBA.RDF_LOAD_HTML_RESPONSE (
  in graph_iri varchar, in new_origin_uri varchar, in dest varchar,
  inout ret_body any, inout aq any, inout ps any, inout _key any,
  inout opts any )
  {
  declare get_feeds, add_html_meta;
  ...
  get_feeds := add_html_meta := 0;
  if (isarray (opts) and 0 = mod (length(opts), 2))
  {
    if (get_keyword (&#39;get-feeds&#39;, opts) = &#39;yes&#39;)
      get_feeds := 1;
    if (get_keyword (&#39;add-html-meta&#39;, opts) = &#39;yes&#39;)
      add_html_meta := 1;
  }
  ...
</pre>
    </div>
        <p>
      <strong>XSLT - The Fulchrum</strong>
    </p>
        <p>XSLT is the fulchrum of all OpenLink supplied cartridges. It provides the most convenient
means of converting structured data extracted from web content by a cartridge&#39;s Entity Extractor into RDF.</p>
        <p>
      <strong>Virtuoso&#39;s XML Infrastructure &amp; Tools</strong>
    </p>
        <p>Virtuoso&#39;s XML support and XSLT support are covered in detail in the on-line documentation.
Virtuoso includes a highly capable XML parser and supports XPath, XQuery, XSLT and XML Schema validation.</p>
        <p>Virtuoso supports extraction of XML documents from SQL datasets. A SQL long varchar, long xml
or xmltype column in a database table can contain XML data as text or in a binary serialized format.
 A string representing a well-formed XML entity can be converted into an entity object representing
the root node.</p>
        <p>While Sponger cartridges will not normally concern themselves with handling XML extracted
from SQL data, the ability to convert a string into an in-memory XML document is used extensively.
The function xtree_doc(string) converts a string into such a document and returns a reference to the
document&#39;s root. This document together with an appropriate stylesheet forms the input for
the transformation of the extracted entities to RDF using XSLT. The input string to xtree_doc
generally contains structured content derived from a web service.</p>
        <p>
      <strong>Virtuoso XSLT Support</strong>
    </p>
        <p>Virtuoso implements XSLT 1.0 transformations as SQL callable functions. The xslt() Virtuoso/PL function
applies a given stylesheet to a given source XML document and returns the transformed document. Virtuoso
provides a way to extend the abilities of the XSLT processor by creating user defined XPath functions.
The functions xpf_extension() and xpf_extension_remove() allow addition and removal of XPath extension
functions.</p>
        <p>
      <strong>General Cartridge Pipeline</strong>
    </p>
        <p>The broad pipeline outlined here reflects the steps common to most cartridges:</p>
          <ul>
            <li>Redirect from the requested URL to a Web service which returns XML</li>
            <li>Stream the content into an in-memory XML document</li>
            <li>Convert it to the required RDF/XML, expressed in the chosen ontology, using XSLT</li>
            <li>Encode the RDF/XML as UTF-8</li>
            <li>Load the RDF/XML into the quad store</li>
          </ul>
        <p>The <a href="http://musicbrainz.org/">MusicBrainz</a> cartridge typifies this approach. MusicBrainz is a community music
metadatabase which captures information about artists, their recorded works, and the relationships
between them. Artists always have a unique ID, so the URL
http://musicbrainz.org/artist/4d5447d7-c61c-4120-ba1b-d7f471d385b9.html takes you directly to entries
for John Lennon.</p>
        <p>If you were to look at this page in your browser, you would see that the information about
the artist contains no RDF data. However, the cartridge is configured to intercept requests to URLs of
the form http://musicbrainz.org/([^/]*)/([^.]*) and redirect to the cartridge to sponge all the
available information on the given artist, release, track or label.</p>
        <p>The cartridge extracts entities by redirecting to the MusicBrainz XML Web Service using
as the basis for the initial query the item ID, e.g. an artist or label ID, extracted from the original
URL. Stripped to its essentials, the core of the cartridge is:</p>
<div>
      <pre class="programlisting">
webservice_uri := sprintf (&#39;http://musicbrainz.org/ws/1/%s/%s?type=xml&amp;inc=%U&#39;,
					kind, id, inc);
content := RDF_HTTP_URL_GET (webservice_uri, &#39;&#39;, hdr, &#39;GET&#39;, &#39;Accept: */*&#39;);
xt := xtree_doc (content);
...
xd := DB.DBA.RDF_MAPPER_XSLT (registry_get (&#39;_rdf_mappers_path_&#39;) || &#39;xslt/mbz2rdf.xsl&#39;, xt);
...
xd := serialize_to_UTF8_xml (xd);
DB.DBA.RM_RDF_LOAD_RDFXML (xd, new_origin_uri, coalesce (dest, graph_iri));
</pre>
    </div>
        <p>In the above outline, RDF_HTTP_URL_GET sends a query to the MusicBrainz web service,
using query parameters appropriate for the original request, and retrieves the response using
HTTP GET.</p>
        <p>The returned XML is parsed into an in-memory parse tree by xtree_doc. Virtuoso/PL
function RDF_MAPPER_XSLT is a simple wrapper around the function xslt which sets the current user
to dba before returning an XML document transformed by an XSLT stylesheet, in this case mbz2rdf.xsl.
Function serialize_to_UTF8_xml changes the character set of the in-memory XML document to UTF8.
Finally, RM_RDF_LOAD_RDFXML is a wrapper around RDF_LOAD_RDFXML which parses the content of an
RDF/XML string into a sequence of RDF triples and loads them into the quad store. XSLT stylesheets
are usually held in the DAV/VAD/rdf_mappers/xslt folder of Virtuoso&#39;s WebDAV store.
registry_get(&#39;rdf_mappers_path&#39;) returns the RDF Mappers VAD path, &#39;DAV/VAD/rdf_mappers&#39;, from the
Virtuoso registry.</p>
        <p>
      <strong>Error Handling with Exit Handlers</strong>
    </p>
        <p>Virtuoso condition handlers determine the behaviour of a Virtuoso/PL procedure when a
condition occurs. You can declare one or more condition handlers in a Virtuoso/PL procedure for
general SQL conditions or specific SQLSTATE values. If a statement in your procedure raises an
SQLEXCEPTION condition and you declared a handler for the specific SQLSTATE or SQLEXCEPTION
condition the server passes control to that handler. If a statement in your Virtuoso/PL procedure
raises an SQLEXCEPTION condition, and you have not declared a handler for the specific SQLSTATE
or the SQLEXCEPTION condition, the server passes the exception to the calling procedure (if any).
If the procedure call is at the top-level, then the exception is signaled to the calling client.</p>
        <p>A number of different condition handler types can be declared (see the <a href="http://docs.openlinksw.com/virtuoso/handlingplcondit.html">Virtuoso reference documentation</a>
for more details.) Of these, exit handlers are probably all you will need. An example is shown below
which handles any SQLSTATE. Commented out is a debug statement which outputs the message describing
the SQLSTATE.</p>
<div>
      <pre class="programlisting">
create procedure DB.DBA.RDF_LOAD_SOCIALGRAPH (in graph_iri varchar, ...)
  {
  declare qr, path, hdr any;
  ...
  declare exit handler for sqlstate &#39;*&#39;
{
    -- dbg_printf (&#39;%s&#39;, __SQL_MESSAGE);
    return 0;
};
  ...
  -- data extraction and mapping successful
  return 1;
}
</pre>
    </div>
        <p>Exit handlers are used extensively in the Virtuoso supplied cartridges. They are useful
for ensuring graceful failure when trying to convert content which may not conform to your expectations.
The RDF_LOAD_FEED_SIOC procedure (which is used internally by several cartridges) shown below uses this
approach:</p>
<div>
      <pre class="programlisting">
-- /* convert the feed in rss 1.0 format to sioc */
create procedure DB.DBA.RDF_LOAD_FEED_SIOC (in content any, in iri varchar, in graph_iri varchar, in is_disc int := &#39;&#39;)
    {
  declare xt, xd any;
  declare exit handler for sqlstate &#39;*&#39;
    {
      goto no_sioc;
};
  xt := xtree_doc (content);
  xd := DB.DBA.RDF_MAPPER_XSLT (
      registry_get (&#39;_rdf_mappers_path_&#39;) || &#39;xslt/feed2sioc.xsl&#39;, xt,
      vector (&#39;base&#39;, graph_iri, &#39;isDiscussion&#39;, is_disc));
  xd := serialize_to_UTF8_xml (xd);
  DB.DBA.RM_RDF_LOAD_RDFXML (xd, iri, graph_iri);
  return 1;
no_sioc:
  return 0;
}
</pre>
    </div>
        <p>
      <strong>Loading RDF into the Quad Store</strong>
    </p>
        <p>
      <strong>RDF_LOAD_RDFXML &amp; TTLP</strong>
    </p>
        <p>The two main Virtuoso/PL functions used by the cartridges for loading RDF data into the
Virtuoso quad store are DB.DBA.TTLP and DB.DBA.RDF_LOAD_RDFXML. Multithreaded versions of these functions,
DB.DBA.TTLP_MT and DB.DBA.RDF_LOAD_RDFXML_MT, are also available.</p>
        <p>RDF_LOAD_RDFXML parses the content of an RDF/XML string as a sequence of RDF triples and
loads then into the quad store. TTLP parses TTL (Turtle or N3) and places its triples into quad
storage. Ordinarily, cartridges use RDF_LOAD_RDFXML. However there may be occasions where you want
to insert statements written as TTL, rather than RDF/XML, in which case you should use TTLP.</p>
  <div class="tip">
      <div class="tiptitle">See Also:</div>
    <ul>
      <li>
          <a href="rdfinsertmethods.html#rdfinsertmethodsapifunct">Loading RDF using API functions</a>
        </li>
    </ul>
  </div>
        <p>
      <strong>Attribution</strong>
    </p>
        <p>Many of the OpenLink supplied cartridges actually use RM_RDF_LOAD_RDFXML to load data
into the quad store. This is a thin wrapper around RDF_LOAD_RDFXML which includes in the generated
graph an indication of the external ontologies being used. The attribution takes the form:</p>
<div>
      <pre class="programlisting">
&lt;ontologyURI&gt; a opl:DataSource .
&lt;spongedResourceURI&gt; rdfs:isDefinedBy &lt;ontologyURI&gt; .
&lt;ontologyURI&gt; opl:hasNamespacePrefix &quot;&lt;ontologyPrefix&gt;&quot; .
</pre>
    </div>
        <p>where prefix opl: denotes the ontology http://www.openlinksw.com/schema/attribution#.</p>
        <p>
      <strong>Deleting Existing Graphs</strong>
    </p>
        <p>Before loading sponged RDF data into a graph, you may want to delete any existing graph
with the same URI. To do so, select the &#39;RDF&#39; &gt; &#39;List of Graphs&#39; menu commands in Conductor, then use
the &#39;Delete&#39; command for the appropriate graph. Alternatively, you can use one of the following SQL
commands:</p>
<div>
      <pre class="programlisting">
SPARQL CLEAR GRAPH
-- or
DELETE FROM DB.DBA.RDF_QUAD WHERE G = DB.DBA.RDF_MAKE_IID_OF_QNAME (graph_iri)
</pre>
    </div>
        <p>
      <strong>Proxy Service Data Expiration</strong>
    </p>
        <p>When the Proxy Service is invoked by a user agent, the Sponger records the expiry date
of the imported data in the table DB.DBA.SYS_HTTP_SPONGE. The data invalidation rules conform to those
of traditional HTTP clients (Web browsers). The data expiration time is determined based on subsequent
data fetches of the same resource. The first data retrieval records the &#39;expires&#39; header. On subsequent
fetches, the current time is compared to the expiration time stored in the local cache. If HTTP &#39;expires&#39;
header data isn&#39;t returned by the source data server, the Sponger will derive its own expiration time by
evaluating the &#39;date&#39; header and &#39;last-modified&#39; HTTP headers.</p>
      <br />
      
        <a name="virtuosospongercreatecustcartrontolg" />
    <h5>14.9.9.6.2. Ontology Mapping</h5>
        <p>After extracting entities from a web resource and converting them to an in-memory XML
document, the entities must be transformed to the target ontology using XSLT and an appropriate stylesheet.
A typical call sequence would be:</p>
<div>
      <pre class="programlisting">
xt := xtree_doc (content);
...
xd := DB.DBA.RDF_MAPPER_XSLT (registry_get (&#39;_rdf_mappers_path_&#39;) || &#39;xslt/mbz2rdf.xsl&#39;, xt);
</pre>
    </div>
        <p>Because of the wide variation in the data mapped by cartridges, it is not possible to present
a typical XSL stylesheet outline. The Examples section presented later includes detailed extracts from the
MusicBrainz? cartridge&#39;s stylesheet which provide a good example of how to map to an ontology. Rather than
attempting to be an XSLT tutorial, the material which follows offers some general guidelines.</p>
        <p>
      <strong>Passing Parameters to the XSLT Processor</strong>
    </p>
        <p>Virtuoso&#39;s XSLT processor will accept default values for global parameters from the optional
third argument of the xslt() function. This argument, if specified, must be a vector of parameter names
and values of the form vector(name1, value1,... nameN, valueN), where name1 ... nameN must be of type
varchar, and value1 ... valueN may be of any Virtuoso datatype, but may not be null.</p>
        <p>This extract from the Crunchbase cartridge shows how parameters may be passed to the XSLT
processor. The function RDF_MAPPER_XSLT (in xslt varchar, inout xt any, in params any := null) passes
the parameters vector directly to xslt().</p>
<div>
      <pre class="programlisting">
xt := DB.DBA.RDF_MAPPER_XSLT (
registry_get (&#39;_rdf_mappers_path_&#39;) || &#39;xslt/crunchbase2rdf.xsl&#39;, xt,
vector (&#39;baseUri&#39;, coalesce (dest, graph_iri), &#39;base&#39;, base, &#39;suffix&#39;, suffix)
);
</pre>
    </div>
        <p>The corresponding stylesheet crunchbase2rdf.xsl retrieves the parameters baseUri, base and suffix as follows:</p>
<div>
      <pre class="programlisting">
...
&lt;xsl:output method=&quot;xml&quot; indent=&quot;yes&quot; /&gt;
  &lt;xsl:variable name=&quot;ns&quot;&gt;http://www.crunchbase.com/&lt;/xsl:variable&gt;
  &lt;xsl:param name=&quot;baseUri&quot; /&gt;
  &lt;xsl:param name=&quot;base&quot;/&gt;
  &lt;xsl:param name=&quot;suffix&quot;/&gt;
  &lt;xsl:template name=&quot;space-name&quot;&gt;
...
</pre>
    </div>
        <p>
      <strong>An RDF Description Template</strong>
    </p>
        <p>
      <strong>Defining A Generic Resource Description Wrapper</strong>
    </p>
        <p>Many of the OpenLink cartridges create a resource description formed to a common &quot;wrapper&quot;
template which describes the relationship between the (usually) non-RDF source resource being sponged
and the RDF description generated by the Sponger. The wrapper is appropriate for resources which can
broadly be conceived as documents. It provides a generic minimal description of the source document,
but also links to the much more detailed description provided by the Sponger. So, instead of just
emitting a resource description, the Sponger factors the container into the generated graph constituting
the RDF description.</p>
        <p>The template is depicted below:</p>
        <table class="figure" border="0" cellpadding="0" cellspacing="0">
    <tr>
     <td>
          <img alt="Template" src="../images/ui/spong3.png" />
     </td>
    </tr>
    <tr>
        <td>Figure: 14.9.9.6.2.1. Template</td>
    </tr>
    </table>
        <p>To generate an RDF description corresponding to the wrapper template, a stylesheet containing
the following block of instructions is used. This extract is taken from the eBay cartridge&#39;s stylesheet,
ebay2rdf.xsl. Many of the OpenLink cartridges follow a similar pattern.</p>
<div>
      <pre class="programlisting">
    &lt;xsl:param name=&quot;baseUri&quot;/&gt;
...
    &lt;xsl:variable name=&quot;resourceURL&quot;&gt;
	&lt;xsl:value-of select=&quot;$baseUri&quot;/&gt;
    &lt;/xsl:variable&gt;
...
    &lt;xsl:template match=&quot;/&quot;&gt;
	&lt;rdf:RDF&gt;
	    &lt;rdf:Description rdf:about=&quot;{$resourceURL}&quot;&gt;
		&lt;rdf:type rdf:resource=&quot;Document&quot;/&gt;
		&lt;rdf:type rdf:resource=&quot;Document&quot;/&gt;
		&lt;rdf:type rdf:resource=&quot;Container&quot;/&gt;
		&lt;sioc:container_of rdf:resource=&quot;{vi:proxyIRI ($resourceURL)}&quot;/&gt;
		&lt;foaf:primaryTopic rdf:resource=&quot;{vi:proxyIRI ($resourceURL)}&quot;/&gt;
		&lt;dcterms:subject rdf:resource=&quot;{vi:proxyIRI ($resourceURL)}&quot;/&gt;
	    &lt;/rdf:Description&gt;
	    &lt;rdf:Description rdf:about=&quot;{vi:proxyIRI ($resourceURL)}&quot;&gt;
		&lt;rdf:type rdf:resource=&quot;Item&quot;/&gt;
		&lt;sioc:has_container rdf:resource=&quot;{$resourceURL}&quot;/&gt;
		&lt;xsl:apply-templates/&gt;
	    &lt;/rdf:Description&gt;
	&lt;/rdf:RDF&gt;
    &lt;/xsl:template&gt;
...
</pre>
    </div>
        <p>
      <strong>Using SIOC as a Generic Container Model</strong>
    </p>
        <p>The generic resource description wrapper just described uses SIOC to establish the
container/contained relationship between the source resource and the generated graph. Although the most
important classes for the generic wrapper are obviously Container and Item, SIOC provides a generic data
model of containers, items, item types, and associations between items which can be combined with other
 vocabularies such as FOAF and Dublin Core.</p>
        <p>SIOC defines a number of other classes, such as User, UserGroup, Role, Site, Forum and
Post. A separate SIOC types module (T-SIOC) extends the SIOC Core ontology by defining subclasses and
subproperties of SIOC terms. Subclasses include: AddressBook, BookmarkFolder, Briefcase, EventCalendar,
ImageGallery, Wiki, Weblog, BlogPost, Wiki plus many others.</p>
        <p>OpenLink Data Spaces (ODS) uses SIOC extensively as a data space &quot;glue&quot; ontology to
describe the base data and containment hierarchy of all the items managed by ODS applications
(Data Spaces). For example, ODS-Weblog is an application of type sioc:Forum. Each ODS-Weblog
application instance contains blogs of type sioct:Weblog. Each blog is a sioc:container_of posts
of type sioc:Post.</p>
        <p>Generally, when deciding how to describe resources handled by your own custom cartridge,
SIOC provides a useful framework for the description which complements the SIOC-based container model
adopted throughout the ODS framework.</p>
        <p>
      <strong>Naming Conventions for Sponger Generated Descriptions</strong>
    </p>
        <p>As can be seen from the stylesheet extract just shown, the URI of the resource
description generated by the Sponger to describe the sponged resource is given by the
function {vi:proxyIRI ($resourceURL)} where resourceURL is the URL of the original resource
being sponged. proxyIRI is an XPath extension function defined in rdf_mappers.sql as</p>
<div>
      <pre class="programlisting">
xpf_extension (&#39;http://www.openlinksw.com/virtuoso/xslt/:proxyIRI&#39;, &#39;DB.DBA.RDF_SPONGE_PROXY_IRI&#39;);
</pre>
    </div>
        <p>which maps to the Virtuoso/PL procedure DB.DBA.RDF_SPONGE_PROXY_IRI. This procedure in
turn generates a resource description URI which typically takes the form:
http://&lt;hostName:port&gt;/about/html/http/&lt;resourceURL&gt;#this</p>
    <br />
      
        <a name="virtuosospongercreatecustcartrrgst" />
    <h5>14.9.9.6.3. Registering &amp; Configuring Cartridges</h5>
        <p>Once you have developed a cartridge, you must register it in the Cartridge Registry
to have the SPARQL processor recognize and use it. You should have compiled your cartridge hook
function first by issuing a &quot;create procedure DB.DBA.RDF_LOAD_xxx ...&quot; command through one of
Virtuoso&#39;s SQL interfaces. You can create the required Cartridge Registry entry either by adding
a row to the SYS_REF_MAPPERS table directly using SQL, or by using the Conductor UI.</p>
        
        <a name="virtuosospongercreatecustcartrrgstis" />
    <h6>Using SQLs</h6>
        <p>If you choose register your cartridge using SQL, possibly as part of a Virtuoso/PL
script, the required SQL will typically mirror one of the following INSERT commands.</p>
        <p>Below, a cartridge for OpenCalais is being installed which will be tried when
the MIME type of the data being sponged is one of text/plain, text/xml or text/html.
(The definition of the SYS_RDF_MAPPERS table was introduced earlier in section
&#39;Cartridge Registry&#39;.)</p>
<div>
      <pre class="programlisting">
insert soft DB.DBA.SYS_RDF_MAPPERS (
  RM_PATTERN, RM_TYPE, RM_HOOK, RM_KEY, RM_DESCRIPTION, RM_ENABLED)
values (
  &#39;(text/plain)|(text/xml)|(text/html)&#39;, &#39;MIME&#39;, &#39;DB.DBA.RDF_LOAD_CALAIS&#39;,
  null, &#39;Opencalais&#39;, 1);
</pre>
    </div>
        <p>As an alternative to matching on the content&#39;s MIME type,
candidate cartridges to be tried in the conversion pipeline can be identified by matching the
data source URL against a URL pattern stored in the cartridge&#39;s entry in the Cartridge Registry.</p>
<div>
      <pre class="programlisting">
insert soft DB.DBA.SYS_RDF_MAPPERS (
  RM_PATTERN, RM_TYPE, RM_HOOK, RM_KEY, RM_DESCRIPTION, RM_OPTIONS)
values (
  &#39;(http://api.crunchbase.com/v/1/.*)|(http://www.crunchbase.com/.*)&#39;, &#39;URL&#39;,
  &#39;DB.DBA.RDF_LOAD_CRUNCHBASE&#39;, null, &#39;CrunchBase&#39;, null);
</pre>
    </div>
        <p>The value of RM_ID to set depends on where in the cartridge invocation order you want
to position a particular cartridge. RM_ID should be set lower than 10028 to ensure the cartridge
is tried before the ODS-Briefcase (WebDAV) metadata extractor, which is always the last mapper to
be tried if no preceding cartridge has been successful.</p>
<div>
      <pre class="programlisting">
UPDATE DB.DBA.SYS_RDF_MAPPERS
SET RM_ID = 1000
WHERE RM_HOOK = &#39;DB.DBA.RDF_LOAD_BIN_DOCUMENT&#39;;
</pre>
    </div>
        <br />
        
        <a name="virtuosospongercreatecustcartrrgstcn" />
    <h6>Using Conductor</h6>
        <p>Cartridges can be added manually using the &#39;Add&#39; panel of the &#39;RDF Cartridges&#39; screen.</p>
        <table class="figure" border="0" cellpadding="0" cellspacing="0">
    <tr>
     <td>
          <img alt="RDF Cartridges" src="../images/ui/spong4.png" />
     </td>
    </tr>
    <tr>
        <td>Figure: 14.9.9.6.3.1. RDF Cartridges</td>
    </tr>
    </table>
        <br />
        
        <a name="virtuosospongercreatecustcartrrgstit" />
    <h6>Installing Stylesheets</h6>
        <p>Although you could place your cartridge stylesheet in any folder configured to be accessible
by Virtuoso, the simplest option is to upload them to the DAV/VAD/rdf_mappers/xslt folder using the
WebDAV browser accessible from the Conductor UI.</p>
        <table class="figure" border="0" cellpadding="0" cellspacing="0">
    <tr>
     <td>
          <img alt="WebDAV browser" src="../images/ui/spong6.png" />
     </td>
    </tr>
    <tr>
        <td>Figure: 14.9.9.6.3.1. WebDAV browser</td>
    </tr>
    </table>
        <p>Should you wish to locate your stylesheets elsewhere, ensure
that the DirsAllowed setting in the virtuoso.ini file is configured appropriately.</p>
        <br />
        
        <a name="virtuosospongercreatecustcartrrgstap" />
    <h6>Setting API Key</h6>        
         <p>Some Cartridges require and API account and/or API Key to be 
provided for accessing the required service. This can be done from the Linked Data -&gt; Sponger tab of the 
Conductor by selecting the cartridge from the list provided, entering the API Account and API Key 
in the dialog at the bottom of the page and click update to save, as indicated in the screenshot 
below:</p>
     <table class="figure" border="0" cellpadding="0" cellspacing="0">
    <tr>
     <td>
          <img alt="Registering API Key" src="../images/ui/cartrapikey.png" />
     </td>
    </tr>
    <tr>
        <td>Figure: 14.9.9.6.3.1. Registering API Key</td>
    </tr>
    </table>
     <p>For example, for the service Flickr developers must register
to obtain a key. See http://developer.yahoo.com/flickr/. In order
to cater for services which require an application key, the Cartridge Registry
SYS_RDF_MAPPERS table includes an RM_KEY column to store any key required for a
particular service. This value is passed to the service&#39;s cartridge through the
_key parameter of the cartridge hook function.</p>
         <p>Alternatively a cartridge can store a key value in the virtuoso.ini
configuration file and retrieve it in the hook function.</p>       
         <br />
         
           <a name="virtuosospongercreatecustcartrrgstflickr" />
    <h6>Flickr Cartridge</h6> 
           <p>This example shows an extract from the Flickr cartridge hook function
DB.DBA.RDF_LOAD_FLICKR_IMG and the use of an API key. Also, commented out, is a call to
cfg_item_value() which illustrates how the API key could instead be stored and retrieved
from the SPARQL section of the virtuoso.ini file.
         </p>
<div>
      <pre class="programlisting">
create procedure DB.DBA.RDF_LOAD_FLICKR_IMG (
in graph_iri varchar, in new_origin_uri varchar, in dest varchar,
inout _ret_body any, inout aq any, inout ps any, inout _key any,
inout opts any )
{
declare xd, xt, url, tmp, api_key, img_id, hdr, exif any;
declare exit handler for sqlstate &#39;*&#39;
{
 return 0;
};
tmp := sprintf_inverse (new_origin_uri,
  &#39;http://farm%s.static.flickr.com/%s/%s_%s.%s&#39;, 0);
img_id := tmp[2];
api_key := _key;
--cfg_item_value (virtuoso_ini_path (), &#39;SPARQL&#39;, &#39;FlickrAPIkey&#39;);
if (tmp is null or length (tmp) &lt;&gt; 5 or not isstring (api_key))
  return 0;
url :=  sprintf(&#39;http://api.flickr.com/services/rest/?method=flickr.photos.getInfo&amp;photo_id=%s&amp;api_key=%s&#39;,img_id, api_key);
tmp := http_get (url, hdr);
</pre>
    </div>
        <br />
    <br />
      
        <a name="virtuosospongercreatecustcartrexmp" />
    <h5>14.9.9.6.4. MusicBrainz Example: A Music Metadatabase</h5>
        <p>To illustrate some of the material presented so far, we&#39;ll delve
deeper into the <a href="http://musicbrainz.org/">MusicBrainz</a> cartridge mentioned earlier.</p>
        <p>
      <strong>MusicBrainz XML Web Service</strong>
    </p>
        <p>The cartridge extracts data through the <a href="http://musicbrainz.org/doc/XMLWebService">MusicBrainz XML Web Service</a> using, as the basis
for the initial query, an item type and MBID (MusicBrainz ID) extracted from the original URI submitted
to the RDF proxy. A range of item types are supported including artist, release and track.</p>
        <p>Using the album &quot;Imagine&quot; by John Lennon as an example, a standard HTML description of
the album (which has an MBID of f237e6a0-4b0e-4722-8172-66f4930198bc) can be retrieved direct from
MusicBrainz using the URL:</p>
<div>
      <pre class="programlisting">
http://musicbrainz.org/release/f237e6a0-4b0e-4722-8172-66f4930198bc.html
</pre>
    </div>
        <p>Alternatively, information can be extracted in XML form through the web service.
A description of the tracks on the album can be obtained with the query:</p>
<div>
      <pre class="programlisting">
http://musicbrainz.org/ws/1/release/f237e6a0-4b0e-4722-8172-66f4930198bc?type=xml&amp;inc=tracks
</pre>
    </div>
        <p>The XML returned by the web service is shown below (only the first two tracks
are shown for brevity):</p>
<div>
      <pre class="programlisting">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
  &lt;metadata xmlns=&quot;http://musicbrainz.org/ns/mmd-1.0#&quot;
   xmlns:ext=&quot;http://musicbrainz.org/ns/ext-1.0#&quot;&gt;
    &lt;release id=&quot;f237e6a0-4b0e-4722-8172-66f4930198bc&quot; type=&quot;Album Official&quot; &gt;
      &lt;title&gt;Imagine&lt;/title&gt;
        &lt;text-representation language=&quot;ENG&quot; script=&quot;Latn&quot;/&gt;
        &lt;asin&gt;B0000457L2&lt;/asin&gt;
        &lt;track-list&gt;
          &lt;track id=&quot;b88bdafd-e675-4c6a-9681-5ea85ab99446&quot;&gt;
            &lt;title&gt;Imagine&lt;/title&gt;
            &lt;duration&gt;182933&lt;/duration&gt;
          &lt;/track&gt;
          &lt;track id=&quot;b38ce90d-3c47-4ccd-bea2-4718c4d34b0d&quot;&gt;
            &lt;title&gt;Crippled Inside&lt;/title&gt;
            &lt;duration&gt;227906&lt;/duration&gt;
          &lt;/track&gt;
	  . . .
        &lt;/track-list&gt;
      &lt;/release&gt;
  &lt;/metadata&gt;
</pre>
    </div>
        <p>Although, as shown above, MusicBrainz defines its own <a href="http://musicbrainz.org/doc/MusicBrainzXMLMetaData">XML Metadata Format</a> to represent
music metadata, the MusicBrainz sponger converts the raw data to a subset of the <a href="http://musicontology.com/">Music Ontology</a>,
an RDF vocabulary which aims to provide a set of core classes and properties for describing music
on the Semantic Web. Part of the subset used is depicted in the following RDF graph (representing
in this case a John Cale album).</p>
        <table class="figure" border="0" cellpadding="0" cellspacing="0">
    <tr>
     <td>
          <img alt="RDF graph" src="../images/ui/spong7.png" />
     </td>
    </tr>
    <tr>
        <td>Figure: 14.9.9.6.4.1. RDF graph</td>
    </tr>
    </table>
        <p>With the prefix mo: denoting the Music Ontology at http://purl.org/ontology/mo/, it can be
seen that artists are represented by instances of class mo:Artist, their albums, records etc. by instances
of class mo:Release and tracks on these releases by class mo:Track. The property foaf:made links an
artist and his/her releases. Property mo:track links a release with the tracks it contains</p>
        <p>
      <strong>RDF Output</strong>
    </p>
        <p>An RDF description of the album can be obtained by sponging the same URL, i.e. by submitting it to the Sponger&#39;s proxy interface using the URL:</p>
<div>
      <pre class="programlisting">
http://demo.openlinksw.com/about/rdf/http://musicbrainz.org/release/f237e6a0-4b0e-4722-8172-66f4930198bc.html
</pre>
    </div>
        <p>The extract below shows part of the (reorganized) RDF output returned by the Sponger
for &quot;Imagine&quot;. Only the album&#39;s title track is included.</p>
<div>
      <pre class="programlisting">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt;
&lt;rdf:RDF xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;
 xmlns:rdfs=&quot;http://www.w3.org/2000/01/rdf-schema#&quot;&gt;

&lt;rdf:Description
 rdf:about=&quot;http://musicbrainz.org/release/f237e6a0-4b0e-4722-8172-66f4930198bc.html&quot;&gt;
  &lt;rdf:type rdf:resource=&quot;http://xmlns.com/foaf/0.1/Document&quot;/&gt;
&lt;/rdf:Description&gt;

&lt;rdf:Description
 rdf:about=&quot;http://musicbrainz.org/release/f237e6a0-4b0e-4722-8172-66f4930198bc.html&quot;&gt;
  &lt;foaf:primaryTopic xmlns:foaf=&quot;http://xmlns.com/foaf/0.1/&quot;
   rdf:resource=&quot;http://demo.openlinksw.com/about/rdf/http://musicbrainz.org/release/f237e6a0-4b0e-4722-8172-66f4930198bc.html#this&quot;/&gt;
&lt;/rdf:Description&gt;

&lt;rdf:Description rdf:about=&quot;http://purl.org/ontology/mo/&quot;&gt;
  &lt;rdf:type rdf:resource=&quot;http://www.openlinksw.com/schema/attribution#DataSource&quot;/&gt;
&lt;/rdf:Description&gt;
...
&lt;rdf:Description
 rdf:about=&quot;http://musicbrainz.org/release/f237e6a0-4b0e-4722-8172-66f4930198bc.html&quot;&gt;
  &lt;rdfs:isDefinedBy rdf:resource=&quot;http://purl.org/ontology/mo/&quot;/&gt;

&lt;/rdf:Description&gt;
...
&lt;!-- Record description --&gt;
&lt;rdf:Description
 rdf:about=&quot;http://demo.openlinksw.com/about/rdf/http://musicbrainz.org/release/f237e6a0-4b0e-4722-8172-66f4930198bc.html#this&quot;&gt;
  &lt;rdf:type rdf:resource=&quot;http://purl.org/ontology/mo/Record&quot;/&gt;
&lt;/rdf:Description&gt;

&lt;rdf:Description
 rdf:about=&quot;http://demo.openlinksw.com/about/rdf/http://musicbrainz.org/release/f237e6a0-4b0e-4722-8172-66f4930198bc.html#this&quot;&gt;
  &lt;dc:title xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot;&gt;Imagine&lt;/dc:title&gt;
&lt;/rdf:Description&gt;

&lt;rdf:Description
 rdf:about=&quot;http://demo.openlinksw.com/about/rdf/http://musicbrainz.org/release/f237e6a0-4b0e-4722-8172-66f4930198bc.html#this&quot;&gt;
  &lt;mo:release_status xmlns:mo=&quot;http://purl.org/ontology/mo/&quot; rdf:resource=&quot;http://purl.org/ontology/mo/official&quot;/&gt;
&lt;/rdf:Description&gt;

&lt;rdf:Description
 rdf:about=&quot;http://demo.openlinksw.com/about/rdf/http://musicbrainz.org/release/f237e6a0-4b0e-4722-8172-66f4930198bc.html#this&quot;&gt;
  &lt;mo:release_type xmlns:mo=&quot;http://purl.org/ontology/mo/&quot;
   rdf:resource=&quot;http://purl.org/ontology/mo/album&quot;/&gt;
&lt;/rdf:Description&gt;
&lt;!-- Title track description --&gt;
&lt;rdf:Description
 rdf:about=&quot;http://demo.openlinksw.com/about/rdf/http://musicbrainz.org/release/f237e6a0-4b0e-4722-8172-66f4930198bc.html#this&quot;&gt;
  &lt;mo:track xmlns:mo=&quot;http://purl.org/ontology/mo/&quot;
   rdf:resource=&quot;http://demo.openlinksw.com/about/rdf/http://musicbrainz.org/track/b88bdafd-e675-4c6a-9681-5ea85ab99446.html#this&quot;/&gt;
&lt;/rdf:Description&gt;
&lt;rdf:Description
 rdf:about=&quot;http://demo.openlinksw.com/about/rdf/http://musicbrainz.org/track/b88bdafd-e675-4c6a-9681-5ea85ab99446.html#this&quot;&gt;
  &lt;rdf:type rdf:resource=&quot;http://purl.org/ontology/mo/Track&quot;/&gt;
&lt;/rdf:Description&gt;

&lt;rdf:Description
 rdf:about=&quot;http://demo.openlinksw.com/about/rdf/http://musicbrainz.org/track/b88bdafd-e675-4c6a-9681-5ea85ab99446.html#this&quot;&gt;
  &lt;dc:title xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot;&gt;Imagine&lt;/dc:title&gt;
&lt;/rdf:Description&gt;

&lt;rdf:Description
 rdf:about=&quot;http://demo.openlinksw.com/about/rdf/http://musicbrainz.org/track/b88bdafd-e675-4c6a-9681-5ea85ab99446.html#this&quot;&gt;
  &lt;mo:track_number xmlns:mo=&quot;http://purl.org/ontology/mo/&quot;&gt;1&lt;/mo:track_number&gt;
&lt;/rdf:Description&gt;

&lt;rdf:Description
 rdf:about=&quot;http://demo.openlinksw.com/about/rdf/http://musicbrainz.org/track/b88bdafd-e675-4c6a-9681-5ea85ab99446.html#this&quot;&gt;
  &lt;mo:duration xmlns:mo=&quot;http://purl.org/ontology/mo/&quot; rdf:datatype=&quot;http://www.w3.org/2001/XMLSchema#integer&quot;&gt;182933&lt;/mo:duration&gt;
&lt;/rdf:Description&gt;
&lt;/rdf:RDF&gt;
</pre>
    </div>
        <p>
      <strong>Cartridge Hook Function</strong>
    </p>
        <p>The cartridge&#39;s hook function is listed below. It is important to note that MusicBrainz
 supports a variety of query types, each of which returns a different set of information, depending
on the item type being queried. Full details can be found on the MusicBrainz? site. The sponger
cartridge is capable of handling all the query types supported by MusicBrainz? and is intended to
be used in a drill-down scenario, as would be the case when using an RDF browser such as the
<a href="http://ode.openlinksw.com/">OpenLink Data Explorer (ODE)</a>. This example focuses primarily on the types release and track.</p>
<div>
      <pre class="programlisting">
create procedure DB.DBA.RDF_LOAD_MBZ (
  in graph_iri varchar, in new_origin_uri varchar, in dest varchar,
  inout _ret_body any, inout aq any, inout ps any, inout _key any,
  inout opts any)
{
  declare kind, id varchar;
  declare tmp, incs any;
  declare uri, cnt, hdr, inc, xd, xt varchar;
  tmp := regexp_parse (&#39;http://musicbrainz.org/([^/]*)/([^\.]+)&#39;, new_origin_uri, 0);
  declare exit handler for sqlstate &#39;*&#39;
  {
    -- dbg_printf (&#39;%s&#39;, __SQL_MESSAGE);
    return 0;
  };
  if (length (tmp) &lt; 6)
    return 0;

  kind := subseq (new_origin_uri, tmp[2], tmp[3]);
  id :=   subseq (new_origin_uri, tmp[4], tmp[5]);
  incs := vector ();
  if (kind = &#39;artist&#39;)
    {
      inc := &#39;aliases artist-rels label-rels release-rels track-rels url-rels&#39;;
      incs :=
    vector (
	&#39;sa-Album&#39;, &#39;sa-Single&#39;, &#39;sa-EP&#39;, &#39;sa-Compilation&#39;, &#39;sa-Soundtrack&#39;,
	&#39;sa-Spokenword&#39;, &#39;sa-Interview&#39;, &#39;sa-Audiobook&#39;, &#39;sa-Live&#39;, &#39;sa-Remix&#39;, &#39;sa-Other&#39;
	, &#39;va-Album&#39;, &#39;va-Single&#39;, &#39;va-EP&#39;, &#39;va-Compilation&#39;, &#39;va-Soundtrack&#39;,

	&#39;va-Spokenword&#39;, &#39;va-Interview&#39;, &#39;va-Audiobook&#39;, &#39;va-Live&#39;, &#39;va-Remix&#39;, &#39;va-Other&#39;
	);
    }
  else if (kind = &#39;release&#39;)
    inc := &#39;artist counts release-events discs tracks artist-rels label-rels release-rels track-rels url-rels track-level-rels labels&#39;;
  else if (kind = &#39;track&#39;)
    inc := &#39;artist releases puids artist-rels label-rels release-rels track-rels url-rels&#39;;
  else if (kind = &#39;label&#39;)
    inc := &#39;aliases artist-rels label-rels release-rels track-rels url-rels&#39;;
  else
    return 0;
  if (dest is null)
    DELETE FROM DB.DBA.RDF_QUAD WHERE G = DB.DBA.RDF_MAKE_IID_OF_QNAME (graph_iri);
  DB.DBA.RDF_LOAD_MBZ_1 (graph_iri, new_origin_uri, dest, kind, id, inc);
  DB.DBA.TTLP (sprintf (&#39;&lt;%S&gt; &lt;http://xmlns.com/foaf/0.1/primaryTopic&gt; &lt;%S&gt; .\n&lt;%S&gt; a &lt;http://xmlns.com/foaf/0.1/Document&gt; .&#39;,
  	new_origin_uri, DB.DBA.RDF_SPONGE_PROXY_IRI (new_origin_uri), new_origin_uri),
  	&#39;&#39;, graph_iri);
  foreach (any inc1 in incs) do
    {
      DB.DBA.RDF_LOAD_MBZ_1 (graph_iri, new_origin_uri, dest, kind, id, inc1);
    }
  return 1;
};
</pre>
    </div>
        <p>The hook function uses a subordinate procedure RDF_LOAD_MBZ_1:</p>
<div>
      <pre class="programlisting">
create procedure DB.DBA.RDF_LOAD_MBZ_1 (in graph_iri varchar, in new_origin_uri varchar,
   in dest varchar, in kind varchar, in id varchar, in inc varchar)
{
  declare uri, cnt, xt, xd, hdr any;
  uri := sprintf (&#39;http://musicbrainz.org/ws/1/%s/%s?type=xml&amp;inc=%U&#39;, kind, id, inc);
  cnt := RDF_HTTP_URL_GET (uri, &#39;&#39;, hdr, &#39;GET&#39;, &#39;Accept: */*&#39;);
  xt := xtree_doc (cnt);
  xd := DB.DBA.RDF_MAPPER_XSLT (registry_get (&#39;_rdf_mappers_path_&#39;) || &#39;xslt/mbz2rdf.xsl&#39;, xt,
        vector (&#39;baseUri&#39;, new_origin_uri));
  xd := serialize_to_UTF8_xml (xd);
  DB.DBA.RM_RDF_LOAD_RDFXML (xd, new_origin_uri, coalesce (dest, graph_iri));
};
</pre>
    </div>
        <p>
      <strong>XSLT Stylesheet</strong>
    </p>
        <p>The key sections of the MusicBrainz XSLT template relevant to this example are
listed below. Only the sections relating to an artist, his releases, or the tracks on those
releases, are shown.</p>
<div>
      <pre class="programlisting">
&lt;!DOCTYPE xsl:stylesheet [
&lt;!ENTITY xsd &quot;http://www.w3.org/2001/XMLSchema#&quot;&gt;
&lt;!ENTITY rdf &quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
&lt;!ENTITY rdfs &quot;http://www.w3.org/2000/01/rdf-schema#&quot;&gt;
&lt;!ENTITY mo &quot;http://purl.org/ontology/mo/&quot;&gt;
&lt;!ENTITY foaf &quot;http://xmlns.com/foaf/0.1/&quot;&gt;
&lt;!ENTITY mmd &quot;http://musicbrainz.org/ns/mmd-1.0#&quot;&gt;
&lt;!ENTITY dc &quot;http://purl.org/dc/elements/1.1/&quot;&gt;
]&gt;
&lt;xsl:stylesheet version=&quot;1.0&quot;
    xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;
    xmlns:vi=&quot;http://www.openlinksw.com/virtuoso/xslt/&quot;
    xmlns:rdf=&quot;&quot;
    xmlns:rdfs=&quot;&quot;
    xmlns:foaf=&quot;&quot;
    xmlns:mo=&quot;&quot;
    xmlns:mmd=&quot;&quot;
    xmlns:dc=&quot;&quot;
    &gt;

    &lt;xsl:output method=&quot;xml&quot; indent=&quot;yes&quot; /&gt;
    &lt;xsl:variable name=&quot;base&quot; select=&quot;&#39;http://musicbrainz.org/&#39;&quot;/&gt;
    &lt;xsl:variable name=&quot;uc&quot;&gt;ABCDEFGHIJKLMNOPQRSTUVWXYZ&lt;/xsl:variable&gt;
    &lt;xsl:variable name=&quot;lc&quot;&gt;abcdefghijklmnopqrstuvwxyz&lt;/xsl:variable&gt;
    &lt;xsl:template match=&quot;/mmd:metadata&quot;&gt;
	&lt;rdf:RDF&gt;
	    &lt;xsl:apply-templates /&gt;
	&lt;/rdf:RDF&gt;
    &lt;/xsl:template&gt;

    ...

    &lt;xsl:template match=&quot;mmd:artist[@type=&#39;Person&#39;]&quot;&gt;
	&lt;mo:MusicArtist rdf:about=&quot;{vi:proxyIRI (concat($base,&#39;artist/&#39;,@id,&#39;.html&#39;))}&quot;&gt;
	    &lt;foaf:name&gt;&lt;xsl:value-of select=&quot;mmd:name&quot;/&gt;&lt;/foaf:name&gt;
	    &lt;xsl:for-each select=&quot;mmd:release-list/mmd:release|mmd:relation-list[@target-type=&#39;Release&#39;]/mmd:relation/mmd:release&quot;&gt;
		&lt;foaf:made rdf:resource=&quot;{vi:proxyIRI (concat($base,&#39;release/&#39;,@id,&#39;.html&#39;))}&quot;/&gt;
	    &lt;/xsl:for-each&gt;
	&lt;/mo:MusicArtist&gt;
	&lt;xsl:apply-templates /&gt;
    &lt;/xsl:template&gt;

    &lt;xsl:template match=&quot;mmd:release&quot;&gt;
	&lt;mo:Record rdf:about=&quot;{vi:proxyIRI (concat($base,&#39;release/&#39;,@id,&#39;.html&#39;))}&quot;&gt;
	    &lt;dc:title&gt;&lt;xsl:value-of select=&quot;mmd:title&quot;/&gt;&lt;/dc:title&gt;
	    &lt;mo:release_type rdf:resource=&quot;{translate (substring-before (@type, &#39; &#39;),
                                                          $uc, $lc)}&quot;/&gt;
	    &lt;mo:release_status rdf:resource=&quot;{translate (substring-after (@type, &#39; &#39;), $uc,
                                                  $lc)}&quot;/&gt;
	    &lt;xsl:for-each select=&quot;mmd:track-list/mmd:track&quot;&gt;
		&lt;mo:track rdf:resource=&quot;{vi:proxyIRI (concat($base,&#39;track/&#39;,@id,&#39;.html&#39;))}&quot;/&gt;

	    &lt;/xsl:for-each&gt;
	&lt;/mo:Record&gt;
	&lt;xsl:apply-templates select=&quot;mmd:track-list/mmd:track&quot;/&gt;
    &lt;/xsl:template&gt;

    &lt;xsl:template match=&quot;mmd:track&quot;&gt;
	&lt;mo:Track rdf:about=&quot;{vi:proxyIRI (concat($base,&#39;track/&#39;,@id,&#39;.html&#39;))}&quot;&gt;
	    &lt;dc:title&gt;&lt;xsl:value-of select=&quot;mmd:title&quot;/&gt;&lt;/dc:title&gt;
	    &lt;mo:track_number&gt;&lt;xsl:value-of select=&quot;position()&quot;/&gt;&lt;/mo:track_number&gt;
	    &lt;mo:duration rdf:datatype=&quot;integer&quot;&gt;
             &lt;xsl:value-of select=&quot;mmd:duration&quot;/&gt;
           &lt;/mo:duration&gt;
	    &lt;xsl:if test=&quot;artist[@id]&quot;&gt;
		&lt;foaf:maker rdf:resource=&quot;{vi:proxyIRI (concat ($base, &#39;artist/&#39;,
                                          artist/@id, &#39;.html&#39;))}&quot;/&gt;
	    &lt;/xsl:if&gt;
	    &lt;mo:musicbrainz rdf:resource=&quot;{vi:proxyIRI (concat ($base, &#39;track/&#39;, @id, &#39;.html&#39;))}&quot;/&gt;
	&lt;/mo:Track&gt;
    &lt;/xsl:template&gt;

    ...

    &lt;xsl:template match=&quot;text()&quot;/&gt;
&lt;/xsl:stylesheet&gt;
</pre>
    </div>
      <br />
      
        <a name="virtuosospongercreatecartentextmapcont" />
    <h5>14.9.9.6.5. Entity Extractor &amp; Mapper Component</h5>

<p>
Used to extract RDF from a Web Data Source the Virtuoso Sponger Cartridge RDF Extractor consumes services from: Virtuoso PL, C/C++, Java
based RDF Extractors</p>
<p>The RDF mappers provide a way to extract metadata from non-RDF documents such as HTML pages,
images Office documents etc. and pass to SPARQL sponger (crawler which retrieve missing
source graphs). For brevity further in this article the &quot;RDF mapper&quot; we simply will call &quot;mapper&quot;.
</p>
<p>The mappers consist of PL procedure (hook) and extractor, where extractor itself can be built
using PL, C or any external language supported by Virtuoso server.</p>
<p>Once the mapper is developed it must be plugged into the SPARQL engine by adding a record
in the table DB.DBA.SYS_RDF_MAPPERS.</p>
<p>If a SPARQL query instructs the SPARQL processor to retrieve target graph into local storage,
then the SPARQL sponger will be invoked. If the target graph IRI represents a dereferenceable URL
then content will be retrieved using content negotiation. The next step is the content type
to be detected:</p>
<ul>
<li>If RDF and no further transformation such as GRDDL is needed, then the process would stop.</li>
<li>If such as &#39;text/plain&#39; and is not known to have metadata, then the SPARQL sponger will
look in the DB.DBA.SYS_RDF_MAPPERS table by order of RM_ID and for every matching URL or MIME
type pattern (depends on column RM_TYPE) will call the mapper hook.
  <ul>
    <li>If hook returns zero the next mapper will be tried;</li>
    <li>If result is negative the process would stop instructing the SPARQL nothing was retrieved;</li>
    <li>If result is positive the process would stop instructing the SPARQL that metadata was retrieved.</li>
  </ul>
</li>
</ul>

  <a name="virtuosospongercartridgesextractorpl" />
    <h6>Virtuoso/PL based Extractors</h6>
<p>
      <strong>PL hook requirements:</strong>
    </p>
<p>Every PL function used to plug a mapper into SPARQL engine must have following parameters in
the same order:</p>
<ul>
<li>in graph_iri varchar: the graph IRI which is currently retrieved</li>
<li>in new_origin_uri varchar: the URL of the document retrieved</li>
<li>in destination varchar: the destination graph IRI</li>
<li>inout content any: the content of the document retrieved by SPARQL sponger </li>
<li>inout async_queue any: an asynchronous queue, can be used to push something to execute
on background if needed.</li>
<li>inout ping_service any: the value of [SPARQL] - PingService INI parameter, could be used
to configure a service notification such as pingthesemanticweb.com</li>
<li>inout api_key any: a plain text id single key value or serialized vector of key structure,
basically the value of RM_KEY column of the DB.DBA.SYS_RDF_MAPPERS table.</li>
</ul>
<p>Note: the names of the parameters are not important, but their order and presence are!</p>
<p>
      <strong>Example Implementation:</strong>
    </p>
<p>In the example script below we implement a basic mapper, which maps a text/plain mime type to an
imaginary ontology, which extends the class Document from FOAF with properties &#39;txt:UniqueWords&#39;
and &#39;txt:Chars&#39;, where the prefix &#39;txt:&#39; we specify as &#39;urn:txt:v0.0:&#39;.</p>
<div>
      <pre class="programlisting">
use DB;

create procedure DB.DBA.RDF_LOAD_TXT_META
 (
  in graph_iri varchar,
  in new_origin_uri varchar,
  in dest varchar,
  inout ret_body any,
  inout aq any,
  inout ps any,
  inout ser_key any
  )
{
  declare words, chars int;
  declare vtb, arr, subj, ses, str any;
  declare ses any;
  -- if any error we just say nothing can be done
  declare exit handler for sqlstate &#39;*&#39;
    {
      return 0;
    };
  subj := coalesce (dest, new_origin_uri);
  vtb := vt_batch ();
  chars := length (ret_body);

  -- using the text index procedures we get a list of words
  vt_batch_feed (vtb, ret_body, 1);
  arr := vt_batch_strings_array (vtb);

  -- the list has &#39;word&#39; and positions array, so we must divide by 2
  words := length (arr) / 2;
  ses := string_output ();

  -- we compose a N3 literal
  http (sprintf (&#39;&lt;%s&gt; &lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#type&gt; &lt;http://xmlns.com/foaf/0.1/Document&gt; .\n&#39;, subj), ses);
  http (sprintf (&#39;&lt;%s&gt; &lt;urn:txt:v0.0:UniqueWords&gt; &quot;%d&quot; .\n&#39;, subj, words), ses);
  http (sprintf (&#39;&lt;%s&gt; &lt;urn:txt:v0.0:Chars&gt; &quot;%d&quot; .\n&#39;, subj, chars), ses);
  str := string_output_string (ses);

  -- we push the N3 text into the local store
  DB.DBA.TTLP (str, new_origin_uri, subj);
  return 1;
};

DELETE FROM DB.DBA.SYS_RDF_MAPPERS WHERE RM_HOOK = &#39;DB.DBA.RDF_LOAD_TXT_META&#39;;

INSERT SOFT DB.DBA.SYS_RDF_MAPPERS (RM_PATTERN, RM_TYPE, RM_HOOK, RM_KEY, RM_DESCRIPTION)
VALUES (&#39;(text/plain)&#39;, &#39;MIME&#39;, &#39;DB.DBA.RDF_LOAD_TXT_META&#39;, null, &#39;Text Files (demo)&#39;);

-- here we set order to some large number so don&#39;t break existing mappers
update DB.DBA.SYS_RDF_MAPPERS
SET RM_ID = 2000
WHERE RM_HOOK = &#39;DB.DBA.RDF_LOAD_TXT_META&#39;;
</pre>
    </div>
<p>To test the mapper we just use /sparql endpoint with option &#39;Retrieve remote RDF data
for all missing source graphs&#39; to execute:</p>
<div>
      <pre class="programlisting">
SELECT *
FROM &lt;URL-of-a-txt-file&gt;
WHERE { ?s ?p ?o }
</pre>
    </div>
<p>It is important that the SPARQL_UPDATE role to be granted to &quot;SPARQL&quot; account in order
to allow local repository update via sponge feature.</p>
<p>
      <strong>Authentication in Sponger</strong>
    </p>
<p>To enable usage of user defined authentication, there are added more parameters to the
/proxy/rdf and /sparql endpoints. So to use it, the RDF browser and iSPARQL should send following
url parameters:</p>
<ul>
<li>for /proxy/rdf endpoint:
<div>
          <pre class="programlisting">
&#39;login=&lt;account name&gt;&#39;
</pre>
        </div>
</li>
<li>for /sparql endpoint:
<div>
          <pre class="programlisting">
get-login=&lt;account name&gt;
</pre>
        </div>
</li>
</ul>
<br />
<a name="virtuosospongerrdfmappersregistry" />
    <h6>Registry</h6>
<p>The table DB.DBA.SYS_RDF_MAPPERS is used as registry for registering RDF mappers.</p>
<div>
      <pre class="programlisting">
create table DB.DBA.SYS_RDF_MAPPERS (
    RM_ID integer identity,         -- mapper ID, designate order of execution
    RM_PATTERN varchar,             -- a REGEX pattern to match URL or MIME type
    RM_TYPE varchar default &#39;MIME&#39;, -- what property of the current resource to match: MIME or URL are supported at present
    RM_HOOK varchar,                -- fully qualified PL function name e.q. DB.DBA.MY_MAPPER_FUNCTION
    RM_KEY  long varchar,           -- API specific key to use
    RM_DESCRIPTION long varchar,    -- Mapper description, free text
    RM_ENABLED integer default 1,   -- a flag 0 or 1 integer to include or exclude the given mapper from processing chain
    primary key (RM_TYPE, RM_PATTERN))
;
</pre>
    </div>
<p>The current way to register/update/unregister a mapper is just a DML statement e.g.
NSERT/UPDATE/DELETE.</p>
<br />
<a name="virtuosospongerrdfmappersexec" />
    <h6>Execution order and processing</h6>
<p>When SPARQL retrieves a resource with unknown content it will look in the mappers registry
and will loop over every record having RM_ENABLED flag true. The sequence of look-up is based on
ordering by RM_ID column. For every record it will either try matching the MIME type or URL against
RM_PATTERN value and if there is match the function specified in RM_HOOK column will be called.
If the function doesn&#39;t exists or signal an error the SPARQL will look at next record.</p>
<p>When it stops looking? It will stop if value returned by mapper function is positive or
negative number, if the return is negative processing stops with meaning no RDF was supplied,
if return is positive the meaning is that RDF data was extracted, if zero integer is returned
then SPARQL will look for next mapper. The mapper function also can return zero if it is expected
next mapper in the chain to get more RDF data.</p>
<p>If none of the mappers matches the signature (MIME type nor URL) the built-in WebDAV
metadata extractor will be called.</p>
<br />
<a name="virtuosospongerrdfmappersextfunc" />
    <h6>Extension function</h6>
<p>The mapper function is a PL stored procedure with following signature:</p>
<div>
      <pre class="programlisting">
THE_MAPPER_FUNCTION_NAME (
        in graph_iri varchar,
        in origin_uri varchar,
        in destination_uri varchar,
        inout content varchar,
        inout async_notification_queue any,
        inout ping_service any,
        inout keys any
        )
{
   -- do processing here
   -- return -1, 0 or 1 (as explained above in Execution order and processing section)
}
;
</pre>
    </div>
<p>
      <strong>Parameters</strong>
    </p>
<ul>
<li>graph_iri - the target graph IRI</li>
<li>origin_uri - the current URI of processing</li>
<li>destination_uri - get:destination value</li>
<li>content - the resource content</li>
<li>async_notification_queue - if INI parameter PingService is specified in SPARQL
section in the INI file, this is a pre-allocated asynchronous queue to be used to call
ping service</li>
<li>ping_service - the URL of the ping service configured in SPARQL section in the
INI in PingService parameter</li>
<li>keys - a string value contained in the RM_KEY column for given mapper, can be
single string or serialized array, generally can be used as mapper specific data.</li>
</ul>
<p>
      <strong>Return value</strong>
    </p>
<ul>
<li>0 - no data was retrieved or some next matching mapper must extract more data</li>
<li>1 - data is retrieved, stop looking for other mappers</li>
<li>-1 - no data is retrieved, stop looking for more data</li>
</ul>
<br />
<a name="virtuosospongerrdfmapperspackage" />
    <h6>RDF Mappers package content</h6>
<p>The Virtuoso supply as a rdf_mappers_dav VAD package a cartridge for extracting RDF data
from certain popular Web resources and file types. It can be installed (if not already) using
VAD_INSTALL function, see the VAD chapter in documentation on how to do that.</p>
<p>
      <strong>HTTP-in-RDF</strong>
    </p>
<p>Maps the HTTP request response to HTTP Vocabulary in RDF, see http://www.w3.org/2006/http#.</p>
<p>This mapper is disabled by default. If it&#39;s enabled , it must be first in order of execution.</p>
<p>Also it always will return 0, which means any other mapper should push more data.</p>
<p>
      <strong>HTML</strong>
    </p>
<p>This mapper is composite, it looking for metadata which can specified in a HTML pages as
follows:</p>
<ul>
<li>Embedded/linked RDF
  <ul>
    <li>scan for meta in RDF
<div>
              <pre class="programlisting">
&lt;link rel=&quot;meta&quot; type=&quot;application/rdf+xml&quot;
</pre>
            </div>
          </li>
    <li>RDF embedded in xHTML (as markup or inside XML comments)</li>
      </ul>
</li>
<li>Micro-formats
  <ul>
    <li>GRDDL - GRDDL Data Views: RDF expressed in XHTML and XML: http://www.w3.org/2003/g/data-view#</li>
    <li>eRDF - http://purl.org/NET/erdf/profile</li>
    <li>RDFa</li>
    <li>hCard - http://www.w3.org/2006/03/hcard</li>
    <li>hCalendar - http://dannyayers.com/microformats/hcalendar-profile</li>
    <li>hReview - http://dannyayers.com/micromodels/profiles/hreview</li>
    <li>relLicense - CC license: http://web.resource.org/cc/schema.rdf</li>
    <li>Dublin Core (DCMI) - http://purl.org/dc/elements/1.1/</li>
    <li>geoURL - http://www.w3.org/2003/01/geo/wgs84_pos#</li>
    <li>Google Base - OpenLink Virtuoso specific mapping</li>
    <li>Ning Metadata </li>
      </ul>
</li>
<li>Feeds extraction
  <ul>
    <li>RSS/RDF - SIOC &amp; AtomOWL</li>
    <li>RSS 1.0 - RSS/RDF, SIOC &amp; AtomOWL</li>
    <li>Atom 1.0 - RSS/RDF, SIOC &amp; AtomOWL</li>
  </ul>
</li>
<li>xHTML metadata transformation using FOAF (foaf:Document) and Dublin Core
properties (dc:title, dc:subject etc.)</li>
</ul>
<p>The HTML page mapper will look for RDF data in order as listed above, it will try to extract
metadata on each step and will return positive flag if any of the above step give a RDF data. In
case where page URL matches some of other RDF mappers listed in registry it will return 0 so
next mapper to extract more data. In order to function properly, this mapper must be executed
before any other specific mappers.</p>
<p>
      <strong>Flickr URLs</strong>
    </p>
<p>This mapper extracts metadata of the Flickr images, using Flickr REST API. To function
properly it must have configured key. The Flickr mapper extracts metadata using: CC license,
Dublin Core, Dublin Core Metadata Terms, GeoURL, FOAF, EXIF: http://www.w3.org/2003/12/exif/ns/ ontology.
</p>
<p>
      <strong>Amazon URLs</strong>
    </p>
<p>This mapper extracts metadata for Amazon articles, using Amazon REST API. It needs a Amazon
API key in order to be functional.</p>
<p>
      <strong>eBay URLs</strong>
    </p>
<p>Implements eBay REST API for extracting metadata of eBay articles, it needs a key and user
name to be configured in order to work.</p>
<p>
      <strong>Open Office (OO) documents</strong>
    </p>
<p>The OO documents contains metadata which can be extracted using UNZIP, so this extractor
needs Virtuoso unzip plugin to be configured on the server.</p>
<p>
      <strong>Yahoo traffic data URLs</strong>
    </p>
<p>Implements transformation of the result of Yahoo traffic data to RDF.
</p>
<p>
      <strong>iCal files</strong>
    </p>
<p>Transform iCal files to RDF as per http://www.w3.org/2002/12/cal/ical# .</p>
<p>
      <strong>Binary content, PDF, PowerPoint</strong>
    </p>
<p>The unknown binary content, PDF and MS PowerPoint files can be transformed to RDF using
Aperture framework (http://aperture.sourceforge.net/). This mapper needs Virtuoso with Java hosting
support, Aperture framework and MetaExtractor.class installed on the host system in order to work.</p>
<p>The Aperture framework &amp; MetaExtractor.class must be installed on the system before to
install the RDF mappers package. If the package is already installed, then to activate this mapper
you can just re-install the VAD.</p>
<p>
      <strong>Setting-up Virtuoso with Java hosting to run Aperture framework</strong>
    </p>
<ul>
<li>Install a Virtuoso binary which includes built-in Java hosting support (The executable name will
indicate whether the required hosting support is built in - a suitably enabled executable will include
javavm in the name, for example virtuoso-javavm-t, rather than virtuoso-t).</li>
<li>Download the Aperture framework from http://aperture.sourceforge.net.</li>
<li>Unpack the contents of the framework&#39;s lib directory into an &#39;aperture&#39; subdirectory of the
Virtuoso working directory, i.e. of the directory containing the database and virtuoso.ini files.</li>
<li>Ensure the Virtuoso working directory includes a &#39;lib&#39; subdirectory containing the file
MetaExtractor.class. (At the current time MetaExtractor.class in not included in the rdf_mappers VAD.
Please contact OpenLink Technical Support to obtain a copy.)</li>
<li>In the [Parameters] section of the virtuoso.ini configuration file:
<ul>
  <li>Add the line (linebreaks have been inserted for clarity):
<div>
              <pre class="programlisting">
JavaClasspath = lib:aperture/DFKIUtils2.jar:aperture/JempBox-0.2.0.jar:aperture/activation-1.0.2-upd2.jar:aperture/aduna-commons-xml-2.0.jar:
aperture/ant-compression-utils-1.7.1.jar:aperture/aperture-1.2.0.jar:aperture/aperture-examples-1.2.0.jar:aperture/aperture-test-1.2.0.jar:
aperture/applewrapper-0.2.jar:aperture/bcmail-jdk14-132.jar:aperture/bcprov-jdk14-132.jar:aperture/commons-codec-1.3.jar:aperture/commons-httpclient-3.1.jar:
aperture/commons-lang-2.3.jar:aperture/demork-2.1.jar:aperture/flickrapi-1.0.jar:aperture/fontbox-0.2.0-dev.jar:aperture/htmlparser-1.6.jar:
aperture/ical4j-1.0-beta4.jar:aperture/infsail-0.1.jar:aperture/jacob-1.10.jar:aperture/jai_codec-1.1.3.jar:aperture/jai_core-1.1.3.jar:aperture/jaudiotagger-1.0.8.jar:
aperture/jcl104-over-slf4j-1.5.0.jar:aperture/jpim-0.1-aperture-1.jar:aperture/junit-3.8.1.jar:aperture/jutf7-0.9.0.jar:aperture/mail-1.4.jar:
aperture/metadata-extractor-2.4.0-beta-1.jar:aperture/mstor-0.9.11.jar:aperture/nrlvalidator-0.1.jar:aperture/openrdf-sesame-2.2.1-onejar-osgi.jar:
aperture/osgi.core-4.0.jar:aperture/pdfbox-0.7.4-dev-20071030.jar:aperture/poi-3.0.2-FINAL-20080204.jar:aperture/poi-scratchpad-3.0.2-FINAL-20080204.jar:
aperture/rdf2go.api-4.6.2.jar:aperture/rdf2go.impl.base-4.6.2.jar:aperture/rdf2go.impl.sesame20-4.6.2.jar:aperture/rdf2go.impl.util-4.6.2.jar:
aperture/slf4j-api-1.5.0.jar:aperture/slf4j-jdk14-1.5.0.jar:aperture/unionsail-0.1.jar:aperture/winlaf-0.5.1.jar
</pre>
            </div>
</li>
  <li>Ensure DirsAllowed includes directories /tmp, (or the temporary directory for the host
operating system), lib and aperture.</li>
          </ul>
        </li>
<li>Start the Virtuoso server with java hosting support</li>
<li>Configure the cartridge either by installing the rdf_mappers VAD or, if the VAD is already
installed, by executing procedure DB.DBA.RDF_APERTURE_INIT.</li>
<li>During the VAD installation process, RDF_APERTURE_INIT() configures the Aperture cartridge. If
you look in the list of available cartridges under the RDF &gt; Sponger tab in Conductor, you should see
an entry for &#39;Binary Files&#39;.</li>
      </ul>
<p>To check the cartridge has been configured, connect with Virtuoso&#39;s ISQL tool:</p>
<ul>
<li>Issue the command:
<div>
          <pre class="programlisting">
SQL&gt; SELECT udt_is_available(&#39;APERTURE.DBA.MetaExtractor&#39;);
</pre>
        </div>
</li>
<li>Copy a test PDF document to the Virtuoso working directory, then execute:
<div>
          <pre class="programlisting">
SQL&gt; SELECT APERTURE.DBA.&quot;MetaExtractor&quot;().getMetaFromFile (&#39;some_pdf_in_server_working_dir.pdf&#39;, 0);

... some RDF data should be returned ...
</pre>
        </div>
</li>
         </ul>
<p>You should now be able to sponge all document types supported by the Aperture framework, (using
one of the standard Sponger invocation mechanisms, for instance with a URL of the form
http://localhost:8890/about/rdf/http://targethost/targetfile.pdf), subject to the MIME type pattern
filters configured for the cartridge in the Conductor UI. By default the Aperture cartridge is
registered to match MIME types (application/octet-stream)|(application/pdf)|(application/mspowerpoint).
To sponge all the MIME types Aperture is capable of handling, changed the MIME type pattern to
&#39;application/.*&#39;.</p>
<p>Important: The installation guidelines presented above have been verified on Mac OS X with
Aperture 1.2.0. Some adjustment may be needed for different operating systems or versions of Aperture.</p>
<p>
      <strong>Examples &amp; tutorials</strong>
    </p>
<p>How to write own RDF mapper? Look at Virtuoso tutorial on this subject
http://demo.openlinksw.com/tutorial/rdf/rd_s_1/rd_s_1.vsp .
</p>
<br />
     <br />
    <br />
      
      <a name="virtuosospongercreatecustcartrxslt" />
    <h4>14.9.9.7. Meta-Cartridges</h4>
        <p>So far the discussion has centered on &#39;primary&#39; cartridges. However,
Virtuoso supports an alternative type of cartridge, a &#39;meta-cartridge&#39;. The way a
meta-cartridge operates is essentially the same as a primary cartridge, that is it
has a cartridge hook function with the same signature and its inserts data into the
quad store through entity extraction and ontology mapping as before. Where meta-cartridges
differ from primary cartridges is in their intent and their position in the cartridge
invocation pipeline.</p>
        <p>The purpose of meta-cartridges is to enrich graphs produced by other (primary)
cartridges. They serve as general post-processors to add additional information about selected
entities in an RDF graph. For instance, a particular meta-cartridge might be designed to search
for entities of type &#39;umbel:Country&#39; in a given graph, and then add additional statements about
each country it finds, where the information contained in these statements is retrieved from the
web service targeted by the meta-cartridge. One such example might be a &#39;World Bank&#39; meta-cartridge
which adds information relating to a country&#39;s GDP, its exports of goods and services as a percentage
of GDP etc; retrieved using the <a href="http://developer.worldbank.org/docs/">World Bank web service API</a>.
In order to benefit from the World Bank meta-cartridge, any primary cartridge which might generate instance data relating to countries should
ensure that each country instance it handles is also described as being of rdf:type &#39;umbel:Country&#39;.
Here, the <a href="http://wiki.umbel.org/index.php/Welcome">UMBEL</a> (Upper Mapping and Binding Exchange Layer) ontology is used as a data-source-agnostic
classification system. It provides a core set of 20,000+ subject concepts which act as &quot;a fixed set of
reference points in a global knowledge space&quot;. The use of UMBEL in this way serves to decouple
meta-cartridges from primary cartridges and data source specific ontologies.</p>
        <p>Virtuoso includes two default meta-cartridges which use
UMBEL and <a href="http://www.opencalais.com/">OpenCalais</a> to augment source graphs.</p>
        <p>
      <strong>Registration</strong>
    </p>
        <p>Meta-cartridges must be registered in the RDF_META_CARTRIDGES table, which fulfills a role
similar to the SYS_RDF_MAPPERS table used by primary cartridges. The structure of the table, and the
meaning and use of its columns, are similar to SYS_RDF_MAPPERS. The meta-cartridge hook function
signature is identical to that for primary cartridges.</p>
        <p>The RDF_META_CARTRIDGES table definition is as follows:</p>
<div>
      <pre class="programlisting">
create table DB.DBA.RDF_META_CARTRIDGES (
MC_ID INTEGER IDENTITY,		-- meta-cartridge ID. Determines the order of the
                           	   meta-cartridge&#39;s invocation in the Sponger
                                 processing chain
MC_SEQ INTEGER IDENTITY,
MC_HOOK VARCHAR,			-- fully qualified Virtuoso/PL function name
MC_TYPE VARCHAR,
MC_PATTERN VARCHAR, 		-- a REGEX pattern to match resource URL or
					   MIME type
MC_KEY VARCHAR,			-- API specific key to use
MC_OPTIONS ANY,			-- meta-cartridge specific options
MC_DESC LONG VARCHAR, 		-- meta-cartridge description (free text)
MC_ENABLED INTEGER		-- a 0 or 1 integer flag to exclude or include
					   meta-cartridge from Sponger processing chain
);
</pre>
    </div>
        <p>(At the time of writing there is no Conductor UI for registering meta-cartridges, they must be
registered using SQL. A Conductor interface for this task will be added in due course.)</p>
       <p>
      <strong>Invocation</strong>
    </p>
        <p>Meta-cartridges are invoked through the post-processing hook procedure RDF_LOAD_POST_PROCESS
which is called, for every document retrieved, after RDF_LOAD_RDFXML loads sponged data into the quad
store.</p>
        <p>Cartridges in the meta-cartridge registry (RDF_META_CARTRIDGES) are configured to match a given
MIME type or URI pattern. Matching meta-cartridges are invoked in order of their MC_SEQ value. Ordinarily
a meta-cartridge should return 0, in which case the next meta-cartridge in the post-processing chain will
be invoked. If it returns 1 or -1, the post-processing stops and no further meta-cartridges are invoked.</p>
        <p>The order of processing by the Sponger cartridge pipeline is thus:</p>
        <ol>
      <li>Try to get RDF in the form of TTL or RDF/XML. If RDF is retrieved if go to step 3</li>
      <li>Try generating RDF through the Sponger primary cartridges as before</li>
      <li>Post-process the RDF using meta-cartridges in order of their MC_SEQ value. If a meta-cartridge returns 1 or -1, stop the post-processing chain.</li>
    </ol>
        <p>Notice that meta-cartridges may be invoked even if primary cartridges are not.</p>
      
        <a name="virtuosospongercreatecustcartrexfm" />
    <h5>14.9.9.7.1. Example - A Campaign Finance Meta-Cartridge for Freebase</h5>
        <p>
      <strong>Note</strong>
    </p>
        <p>The example which follows builds on a Freebase Sponger cartridge developed prior to the announcement of Freebase&#39;s
support for generating Linked Data through the endpoint http://rdf.freebase.com/ . The OpenLink cartridge
has since evolved to reflect these changes. A snapshot of the Freebase cartridge and stylesheet compatible
with this example can be found <a href="virtuososponger.html#virtuosospongerfreeb">here</a>.</p>
        <p>
      <a href="http://www.freebase.com/">Freebase</a> is an open community database of the world&#39;s information which serves facts
and statistics rather than articles. Its designers see this difference in emphasis from article-oriented
databases as beneficial for developers wanting to use Freebase facts in other websites and applications.</p>
        <p>Virtuoso includes a Freebase cartridge in the rdf_mappers VAD. The aim of the example cartridge presented here is to provide a lightweight
meta-cartridge that is used to conditionally add triples to graphs generated by the Freebase cartridge,
if Freebase is describing a U.S. senator.</p>
        <p>
      <strong>New York Times Campaign Finance (NYTCF) API</strong>
    </p>
        <p>The <a href="http://developer.nytimes.com/docs/campaign_finance_api?authChecked=1">New York Times Campaign Finance (NYTCF) API</a> allows you to retrieve contribution and
expenditure data based on United States Federal Election Commission filings. You can retrieve totals
for a particular presidential candidate, see aggregates by ZIP code or state, or get details on a
particular donor.</p>
        <p>The API supports a number of query types. To keep this example from being overly long,
the meta-cartridge supports just one of these - a query for the candidate details. An example query
and the resulting output follow:</p>
        <p>
      <strong>Query:</strong>
    </p>
<div>
      <pre class="programlisting">
http://api.nytimes.com/svc/elections/us/v2/president/2008/finances/candidates/obama,barack.xml?api-key=xxxx
</pre>
    </div>
        <p>Result:</p>
<div>
      <pre class="programlisting">
&lt;result_set&gt;
 &lt;status&gt;OK&lt;/status&gt;
 &lt;copyright&gt;
  Copyright (c) 2008 The New York Times Company. All Rights Reserved.
 &lt;/copyright&gt;
 &lt;results&gt;
  &lt;candidate&gt;
    &lt;candidate_name&gt;Obama, Barack&lt;/candidate_name&gt;
    &lt;committee_id&gt;C00431445&lt;/committee_id&gt;
    &lt;party&gt;D&lt;/party&gt;
    &lt;total_receipts&gt;468841844&lt;/total_receipts&gt;
    &lt;total_disbursements&gt;391437723.5&lt;/total_disbursements&gt;
    &lt;cash_on_hand&gt;77404120&lt;/cash_on_hand&gt;
    &lt;net_individual_contributions&gt;426902994&lt;/net_individual_contributions&gt;
    &lt;net_party_contributions&gt;150&lt;/net_party_contributions&gt;
    &lt;net_pac_contributions&gt;450&lt;/net_pac_contributions&gt;
    &lt;net_candidate_contributions&gt;0&lt;/net_candidate_contributions&gt;
    &lt;federal_funds&gt;0&lt;/federal_funds&gt;
    &lt;total_contributions_less_than_200&gt;222694981.5&lt;/total_contributions_less_than_200&gt;
    &lt;total_contributions_2300&gt;76623262&lt;/total_contributions_2300&gt;
    &lt;net_primary_contributions&gt;46444638.81&lt;/net_primary_contributions&gt;
    &lt;net_general_contributions&gt;30959481.19&lt;/net_general_contributions&gt;
    &lt;total_refunds&gt;2058240.92&lt;/total_refunds&gt;
    &lt;date_coverage_from&gt;2007-01-01&lt;/date_coverage_from&gt;
    &lt;date_coverage_to&gt;2008-08-31&lt;/date_coverage_to&gt;
  &lt;/candidate&gt;
 &lt;/results&gt;
&lt;/result_set&gt;
</pre>
    </div>
        <p>
      <strong>Sponging Freebase</strong>
    </p>
        <p>
      <strong>Using OpenLink Data Explorer</strong>
    </p>
        <p>The following instructions assume you have the <a href="http://ode.openlinksw.com/">OpenLink Data Explorer (ODE)</a> browser extension installed in your browser.</p>
        <p>An HTML description of Barack Obama can be obtained directly from Freebase by pasting the
 following URL into your browser: http://www.freebase.com/view/en/barack_obama</p>
        <p>To view RDF data sponged from this page, select &#39;Linked Data Sources&#39; from the browser&#39;s
&#39;View&#39; menu. An OpenLink Data Explorer interface will load in a new tab.</p>
        <p>Clicking on the &#39;Barack Obama&#39; link under the &#39;Person&#39; category displayed by ODE sponges
RDF data using the Freebase cartridge. Click the &#39;down arrow&#39; adjacent to the &#39;Barack Obama&#39; link to
explore the retrieved data.</p>
        <p>Assuming your Virtuoso instance is running on port 8890 on localhost, the list of data caches displayed
by ODE should include: http://localhost:8890/about/html/http/www.freebase.com/view/en/barack_obama#this</p>
        <p>The information displayed in the rest of the page relates to the entity instance identified by this URI. The prefix http://localhost:8890/about/html/http/ prepended to the
original URI indicates that the Sponger Proxy Service has been invoked. The Sponger creates an associated
entity instance (identified by the above URI with the #this suffix) which holds sponged information
about the original entity.</p>
        <p>
      <strong>Using the Command Line</strong>
    </p>
        <p>As an alternative to ODE, you can sponge from the command line with the command:</p>
<div>
      <pre class="programlisting">
curl -H &quot;Accept: text/xml&quot; &quot;http://localhost:8890/about/html/http/www.freebase.com/view/en/barack_obama&quot;
</pre>
    </div>
        <p>To view the results, you can use Conductor&#39;s browser-based SPARQL interface (e.g.
http://localhost:8890/sparql) to query the resulting graph generated by the Sponger,
http://www.freebase.com/view/en/barack_obama.</p>
        <p>
      <strong>Installing the Meta-Cartridge</strong>
    </p>
        <p>To register the meta-cartridge, a procedure similar to the following can be used:</p>
<div>
      <pre class="programlisting">
create procedure INSTALL_RDF_LOAD_NYTCF ()
{
  -- delete any previous NYTCF cartridge installed as a primary cartridge
  DELETE FROM SYS_RDF_MAPPERS WHERE RM_HOOK = &#39;DB.DBA.RDF_LOAD_NYTCF&#39;;
  -- register in the meta-cartridge post-processing chain
  INSERT SOFT DB.DBA.RDF_META_CARTRIDGES (MC_PATTERN, MC_TYPE, MC_HOOK,
    MC_KEY, MC_DESC, MC_OPTIONS)
    VALUES (
    &#39;http://www.freebase.com/view/.*&#39;,
    &#39;URL&#39;, &#39;DB.DBA.RDF_LOAD_NYTCF&#39;, &#39;2c1d95a62e5fxxxxx&#39;, &#39;Freebase NYTCF&#39;,
    vector ());
};
</pre>
    </div>
        <p>Looking at the list of cartridges in Conductor&#39;s &#39;RDF Cartridges&#39; screen, you will
see that the Freebase cartridge is configured by default to sponge URIs which match the pattern
&quot;http://www.freebase.com/view/.*&quot; The meta-cartridge is configured to match on the same URI pattern.</p>
        <p>To use the Campaign Finance API, you must register and request an API key. The script
above shows an invalid key. Replace it with your own key before executing the procedure.</p>
        <p>
      <strong>NYTCF Meta-Cartridge Functions</strong>
    </p>
        <p>The meta-cartridge function definitions are listed below. They can be executed by
pasting them into Conductor&#39;s iSQL interface.</p>
<div>
      <pre class="programlisting">
-- New York Times: Campaign Finance Web Service
-- See http://developer.nytimes.com/docs/campaign_finance_api

-- DB.DBA.RDF_NYTCF_LOOKUP is in effect a lightweight lookup cartridge that is used
-- to conditionally add triples to graphs generated by the Wikipedia and
-- Freebase cartridges. These cartridges call on RDF_NYTCF_LOOKUP when
-- handling an entity of rdf:type yago:Congressman109955781. The NYTCF lookup
-- cartridge (aka a metacartridge) is used to return campaign finance data
-- for the candidate in question retrieved from the New York Times Campaign
-- Finance web service.
create procedure DB.DBA.RDF_NYTCF_LOOKUP(
  in candidate_id any, 		-- id of candidate
  in graph_iri varchar,		-- graph into which the additional campaign finance triples should be loaded
  in api_key varchar		-- NYT finance API key
)
{
  declare version, campaign_type, year any;
  declare nyt_url, hdr, tmp any;
  declare xt, xd any;

  -- Common parameters - The NYT API only supports the following values at present:
  version := &#39;v2&#39;;
  campaign_type := &#39;president&#39;;
  year := &#39;2008&#39;;

  -- Candidate summaries
  -- nyt_url := sprintf(&#39;http://api.nytimes.com/svc/elections/us/%s/%s/%s/finances/totals.xml?api-key=%s&#39;,
  --	version, campaign_type, year, api_key);

  -- Candidate details
  nyt_url := sprintf(&#39;http://api.nytimes.com/svc/elections/us/%s/%s/%s/finances/candidates/%s.xml?api-key=%s&#39;,
  	version, campaign_type, year, candidate_id, api_key);

  tmp := http_client_ext (nyt_url, headers=&gt;hdr, proxy=&gt;connection_get (&#39;sparql-get:proxy&#39;));
  if (hdr[0] not like &#39;HTTP/1._ 200 %&#39;)
    signal (&#39;22023&#39;, trim(hdr[0], &#39;\r\n&#39;), &#39;DB.DBA.RDF_LOAD_NYTCF_LOOKUP&#39;);
  xd := xtree_doc (tmp);

  -- baseUri specifies what the generated RDF description is about
  -- &lt;rdf:Description rdf:about=&quot;{baseUri}&quot;&gt;
  -- Example baseUri&#39;s:
  -- http://localhost:8890/about/rdf/http://www.freebase.com/view/en/barack_obama#this
  -- http://localhost:8890/about/rdf/http://www.freebase.com/view/en/hillary_rodham_clinton#this
  declare path any;
  declare lang, k, base_uri varchar;

  if (graph_iri like &#39;http://rdf.freebase.com/ns/%.%&#39;)
    base_uri := graph_iri;
  else
    {
      path := split_and_decode (graph_iri, 0, &#39;%\0/&#39;);
      k := path [length(path) - 1];
      lang := path [length(path) - 2];

      base_uri := sprintf (&#39;http://rdf.freebase.com/ns/%U.%U&#39;, lang, k);
    }

  xt := DB.DBA.RDF_MAPPER_XSLT (registry_get (&#39;_rdf_mappers_path_&#39;) || &#39;xslt/nytcf2rdf.xsl&#39;, xd,
      	vector (&#39;baseUri&#39;, base_uri));
  xd := serialize_to_UTF8_xml (xt);
  DB.DBA.RDF_LOAD_RDFXML (xd, &#39;&#39;, graph_iri);
}
;

create procedure DB.DBA.RDF_MQL_RESOURCE_IS_SENATOR (
  in fb_graph_uri varchar	-- URI of graph containing Freebase resource
)
{
  -- Check if the resource described by Freebase is a U.S. senator. Only then does it make sense to query for campaign finance
  -- data from the NYT data space.
  --
  -- To test for senators, we start by looking for two statements in the Freebase cartridge output, similar to:
  --
  -- &lt;rdf:Description rdf:about=&quot;http://localhost:8890/about/rdf/http://www.freebase.com/view/en/hillary_rodham_clinton#this&quot;&gt;
  --   &lt;rdf:type rdf:resource=&quot;http://xmlns.com/foaf/0.1/Person&quot;/&gt;
  --   &lt;rdfs:seeAlso rdf:resource=&quot;http://en.wikipedia.org/wiki/Hillary_Rodham_Clinton&quot;/&gt;
  --   ...
  -- where the graph generated by the Sponger will be &lt;http://www.freebase.com/view/en/hillary_rodham_clinton&gt;
  --
  -- To test whether a resource is a senator:
  -- 1) Check whether the Freebase resource is of rdf:type foaf:Person
  -- 2) Extract the person_name from the Wikipedia URI referenced by rdfs:seeAlso
  -- 3) Use the extracted person_name to build a URI to DBpedia&#39;s description of the person.
  -- 4) Query the DBpedia description to see if the person is of rdf:type yago:Senator110578471
  declare xp, xt, tmp any;
  declare qry varchar;			-- SPARQL query
  declare qry_uri varchar;		-- query URI
  declare qry_res varchar;		-- query result
  declare dbp_resource_name varchar;	-- Equivalent resource name in DBpedia
  declare fb_resource_uri varchar; 	-- Freebase resource URI
  declare path any;
  declare lang, k varchar;

  declare exit handler for sqlstate &#39;*&#39; {
    return 0;
  };

  if (fb_graph_uri like &#39;http://rdf.freebase.com/ns/%.%&#39;)
    fb_resource_uri := fb_graph_uri;
  else
{
      path := split_and_decode (fb_graph_uri, 0, &#39;%\0/&#39;);
      if (length (path) &lt; 2)
	return 0;

      k := path [length(path) - 1];
      lang := path [length(path) - 2];

      fb_resource_uri := sprintf (&#39;http://rdf.freebase.com/ns/%U.%U&#39;, lang, k);
    }

  -- 1) Check whether the Freebase resource is a politician from united_states
  {
    declare stat, msg varchar;
    declare mdata, rset any;

    qry := sprintf (&#39;sparql ask from &lt;%s&gt; where { &lt;%s&gt; &lt;http://rdf.freebase.com/ns/people.person.profession&gt; &lt;http://rdf.freebase.com/ns/en.politician&gt; ; &lt;http://rdf.freebase.com/ns/people.person.nationality&gt; &lt;http://rdf.freebase.com/ns/en.united_states&gt; . }&#39;, fb_graph_uri, fb_resource_uri);
    exec (qry, stat, msg, vector(), 1, mdata, rset);
    if (length(rset) = 0 or rset[0][0] &lt;&gt; 1)
      return 0;
  }

  return 1;
}
;

create procedure DB.DBA.RDF_LOAD_NYTCF_META (in graph_iri varchar, in new_origin_uri varchar,  in dest varchar,
    inout _ret_body any, inout aq any, inout ps any, inout _key any, inout opts any)
{
  declare candidate_id, candidate_name any;
  declare api_key any;
  declare indx, tmp any;
  declare ord int;

declare exit handler for sqlstate &#39;*&#39;
{
 return 0;
};

  if (not DB.DBA.RDF_MQL_RESOURCE_IS_SENATOR (new_origin_uri))
    return 0;

  -- TO DO: hardcoded for now
  -- Need a mechanism to specify API key for meta-cartridges
  -- Could retrieve from virtuoso.ini?
api_key := _key;

  -- NYT API supports a candidate_id in one of two forms:
  -- candidate_id ::= {candidate_ID} | {last_name [,first_name]}
  -- first_name is optional. If included, there should be no space after the comma.
  --
  -- However, because this meta cartridge supplies additional triples for the
  -- Wikipedia or Freebase cartridges, only the second form of candidate_id is
  -- supported. i.e. We extract the candidate name, rather than a numeric
  -- candidate_ID (FEC committee ID) from the Wikipedia or Freebase URL.
  --
  -- It&#39;s assumed that the source URI includes the candidate&#39;s first name.
  -- If it is omitted, the NYT API will return information about *all* candidates
  -- with that last name - something we don&#39;t want.

  indx := strstr(graph_iri, &#39;www.freebase.com/view/en/&#39;);
  if (indx is not null)
  {
    -- extract candidate_id from Freebase URI
    tmp := sprintf_inverse(subseq(graph_iri, indx), &#39;www.freebase.com/view/en/%s&#39;, 0);
    if (length(tmp) &lt;&gt; 1)
  return 0;
    candidate_name := tmp[0];
  }
  else
  {
    indx := strstr(graph_iri, &#39;wikipedia.org/wiki/&#39;);
    if (indx is not null)
    {
      -- extract candidate_id from Wikipedia URI
      tmp := sprintf_inverse(subseq(graph_iri, indx), &#39;wikipedia.org/%s&#39;, 0);
      if (length(tmp) &lt;&gt; 1)
        return 0;
      candidate_name := tmp[0];
    }
    else
      {
	tmp := sprintf_inverse(graph_iri, &#39;http://%s.freebase.com/ns/%s/%s&#39;, 0);
	if (length (tmp) &lt;&gt; 3)
	  tmp := sprintf_inverse(graph_iri, &#39;http://%s.freebase.com/ns/%s.%s&#39;, 0);
	if (length (tmp) &lt;&gt; 3)
	  return 0;
	candidate_name := tmp[2];
      }
  }


  -- split candidate_name into its component parts
  --   candidate_name is assumed to be firstname_[middlename_]*lastname
  --   e.g. hillary_rodham_clinton (Freebase), Hillary_clinton (Wikipedia)
  {
    declare i, _end, len int;
    declare names, tmp_name varchar;

    names := vector ();
    tmp_name := candidate_name;
    len := length (tmp_name);
    while (1)
    {
      _end := strchr(tmp_name, &#39;_&#39;);
      if (_end is not null)
      {
        names := vector_concat (names, vector(subseq(tmp_name, 0, _end)));
        tmp_name := subseq(tmp_name, _end + 1);
      }
      else
      {
        names := vector_concat(names, vector(tmp_name));
        goto done;
      }
    }
done:
    if (length(names) &lt; 2)
      return 0;
    -- candidate_id ::= lastname,firstname
    candidate_id := sprintf(&#39;%s,%s&#39;, names[length(names)-1], names[0]);
  }

  DB.DBA.RDF_NYTCF_LOOKUP(candidate_id, coalesce (dest, graph_iri), api_key);
  return 0;
}
;
</pre>
    </div>
        <p>
      <strong>NYTCF Meta-Cartridge Stylesheet</strong>
    </p>
        <p>The XSLT stylesheet, nyctf2rdf.xsl, used by the meta-cartridge to transform the base
Campaign Finance web service output to RDF is shown below. RDF_NYCTF_LOOKUP() assumes the stylesheet
is located alongside the other stylesheets provided by the rdf_mappers VAD in the Virtuoso WebDAV
folder DAV/VAD/rdf_mappers/xslt. You should create nyctf2rdf.xsl here from the following listing.
The WebDAV Browser interface in Conductor provides the easiest means to upload the stylesheet.</p>
<div>
      <pre class="programlisting">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!DOCTYPE xsl:stylesheet [
&lt;!ENTITY rdf &quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
&lt;!ENTITY nyt &quot;http://www.nytimes.com/&quot;&gt;
]&gt;
&lt;xsl:stylesheet version=&quot;1.0&quot;
    xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;
    xmlns:vi=&quot;http://www.openlinksw.com/virtuoso/xslt/&quot;
    xmlns:rdf=&quot;&quot;
    xmlns:nyt=&quot;&quot;
    &gt;
    &lt;xsl:output method=&quot;xml&quot; indent=&quot;yes&quot; /&gt;
    &lt;xsl:template match=&quot;/result_set/status&quot;&gt;
      &lt;xsl:if test=&quot;text() = &#39;OK&#39;&quot;&gt;
        &lt;xsl:apply-templates mode=&quot;ok&quot; select=&quot;/result_set/results/candidate&quot;/&gt;
      &lt;/xsl:if&gt;
    &lt;/xsl:template&gt;

    &lt;xsl:template match=&quot;candidate&quot; mode=&quot;ok&quot;&gt;
      &lt;rdf:Description rdf:about=&quot;{vi:proxyIRI($baseUri)}&quot;&gt;
	  &lt;nyt:candidate_name&gt;&lt;xsl:value-of select=&quot;candidate_name&quot;/&gt;&lt;/nyt:candidate_name&gt;
	  &lt;nyt:committee_id&gt;&lt;xsl:value-of select=&quot;committee_id&quot;/&gt;&lt;/nyt:committee_id&gt;
	  &lt;nyt:party&gt;&lt;xsl:value-of select=&quot;party&quot;/&gt;&lt;/nyt:party&gt;
	  &lt;nyt:total_receipts&gt;&lt;xsl:value-of select=&quot;total_receipts&quot;/&gt;&lt;/nyt:total_receipts&gt;
	  &lt;nyt:total_disbursements&gt;
	    &lt;xsl:value-of select=&quot;total_disbursements&quot;/&gt;
	  &lt;/nyt:total_disbursements&gt;
	  &lt;nyt:cash_on_hand&gt;&lt;xsl:value-of select=&quot;cash_on_hand&quot;/&gt;&lt;/nyt:cash_on_hand&gt;
	  &lt;nyt:net_individual_contributions&gt;
	    &lt;xsl:value-of select=&quot;net_individual_contributions&quot;/&gt;
         &lt;/nyt:net_individual_contributions&gt;
	  &lt;nyt:net_party_contributions&gt;
	    &lt;xsl:value-of select=&quot;net_party_contributions&quot;/&gt;
	  &lt;/nyt:net_party_contributions&gt;
	  &lt;nyt:net_pac_contributions&gt;
	    &lt;xsl:value-of select=&quot;net_pac_contributions&quot;/&gt;
	  &lt;/nyt:net_pac_contributions&gt;
	  &lt;nyt:net_candidate_contributions&gt;
	    &lt;xsl:value-of select=&quot;net_candidate_contributions&quot;/&gt;
	  &lt;/nyt:net_candidate_contributions&gt;
	  &lt;nyt:federal_funds&gt;&lt;xsl:value-of select=&quot;federal_funds&quot;/&gt;&lt;/nyt:federal_funds&gt;
	  &lt;nyt:total_contributions_less_than_200&gt;
	    &lt;xsl:value-of select=&quot;total_contributions_less_than_200&quot;/&gt;
	  &lt;/nyt:total_contributions_less_than_200&gt;
	  &lt;nyt:total_contributions_2300&gt;
	    &lt;xsl:value-of select=&quot;total_contributions_2300&quot;/&gt;
	  &lt;/nyt:total_contributions_2300&gt;
	  &lt;nyt:net_primary_contributions&gt;
	    &lt;xsl:value-of select=&quot;net_primary_contributions&quot;/&gt;
	  &lt;/nyt:net_primary_contributions&gt;
	  &lt;nyt:net_general_contributions&gt;
	    &lt;xsl:value-of select=&quot;net_general_contributions&quot;/&gt;
	  &lt;/nyt:net_general_contributions&gt;
	  &lt;nyt:total_refunds&gt;&lt;xsl:value-of select=&quot;total_refunds&quot;/&gt;&lt;/nyt:total_refunds&gt;
	  &lt;nyt:date_coverage_from rdf:datatype=&quot;date&quot;&gt;
	    &lt;xsl:value-of select=&quot;date_coverage_from&quot;/&gt;
	  &lt;/nyt:date_coverage_from&gt;
	  &lt;nyt:date_coverage_to rdf:datatype=&quot;date&quot;&gt;
           &lt;xsl:value-of select=&quot;date_coverage_to&quot;/&gt;
          &lt;/nyt:date_coverage_to&gt;
      &lt;/rdf:Description&gt;
    &lt;/xsl:template&gt;
    &lt;xsl:template match=&quot;text()|@*&quot;/&gt;
&lt;/xsl:stylesheet&gt;
</pre>
    </div>
        <p>The stylesheet uses the prefix nyt: (http://www.nytimes.com) for the predicates of
the augmenting triples. This has been used purely for illustration - you may prefer to define your
own ontology for RDF data derived from New York Times APIs.</p>
        <p>
      <strong>Testing the Meta-Cartridge</strong>
    </p>
        <p>After creating the required Virtuoso/PL functions and installing the stylesheet, you
should be able to test the meta-cartridge by sponging a Freebase page as described earlier using
ODE or the command line. For instance:</p>
          <ul>
          <li>http://www.freebase.com/view/en/barack_obama , or </li>
          <li>http://www.freebase.com/view/en/hillary_rodham_clinton</li>
          </ul>
        <p>You should see campaign finance data added to the graph created by the Sponger in the form of triples with predicates starting http://www.nytimes.com/xxx, e.g. http://www.nytimes.com/net_primary_contribution.</p>
        <p>
      <strong>How The Meta-Cartridge Works</strong>
    </p>
        <p>The comments in the meta-cartridge code detail how the cartridge works. In brief:</p>
        <p>Given the URI of the graph being created by the Freebase cartridge,
RDF_MQL_RESOURCE_IS_SENATOR checks if the resource described by Freebase is a U.S. senator.
Only then does it make sense to query for campaign finance data from the NYTCF data space.</p>
        <p>To test for senators, the procedure starts by looking for two statements in the Freebase cartridge output similar to:</p>
<div>
      <pre class="programlisting">
&lt;rdf:Description rdf:about=&quot;http://localhost:8890/about/rdf/http://www.freebase.com/view/en/barack_obama#this&quot;&gt;
  &lt;rdf:type rdf:resource=&quot;http://xmlns.com/foaf/0.1/Person&quot;/&gt;
  &lt;rdfs:seeAlso rdf:resource=&quot;http://en.wikipedia.org/wiki/Barack_Obama&quot;/&gt;
  ...
</pre>
    </div>
        <p>where the graph generated by the Sponger will be</p>
<div>
      <pre class="programlisting">
&lt;http://www.freebase.com/view/en/barack_obama&gt;
</pre>
    </div>
        <p>To test whether a resource is a senator, RDF_MQL_RESOURCE_IS_SENATOR</p>
    <ul>
      <li>Checks whether the Freebase resource is of rdf:type foaf:Person</li>
      <li>Extracts the person&#39;s name from the Wikipedia URI referenced by rdfs:seeAlso</li>
      <li>Uses the extracted name to build a URI to DBpedia&#39;s description of the person. </li>
      <li>Queries the DBpedia description to see if the person is of rdf:type yago:Senator110578471 (
<a href="http://www.mpi-inf.mpg.de/~suchanek/downloads/yago/">YAGO</a> is a semantic knowledge base which provides a core set of concepts which in turn are used by DBpedia.)</li>
    </ul>
        <p>Only if this is the case is the RDF_NYTCF_LOOKUP routine called to query for and return campaign finance data for the candidate. The form of the query and the resulting XML output from the Campaign Finance service were presented earlier.</p>
      <br />
    <br />
    
       <a name="virtuosospongequeue" />
    <h4>14.9.9.8. Sponger Queue API</h4>
        
         <a name="virtuosospongequeuefn" />
    <h5>14.9.9.8.1. Functions</h5>	
         <ul>
           <li>
        <strong>DB.DBA.RDF_SPONGER_QUEUE_ADD</strong>: This function is available when 
           rdf cartridges vad is installed.
<div>
          <pre class="programlisting">
DB.DBA.RDF_SPONGER_QUEUE_ADD  (url, options);	
</pre>
        </div>           
             <ul>
               <li>
            <strong>url</strong>: the URI to sponge </li>
               <li>
            <strong>options</strong>: an array usually typical sponger pragmas, for ex:
<div>
              <pre class="programlisting">
vector (&#39;get:soft&#39;,  &#39;soft&#39;,  &#39;refresh_free_text&#39;,  1);	
</pre>
            </div>               	
               	</li>
             </ul>
           </li>
         </ul>
       <br /> 
        
         <a name="virtuosospongequeuerwebs" />
    <h5>14.9.9.8.2. REST Web service</h5>	
         <p>The Sponger REST Web service has the following characteristics:</p>
         <ul>
           <li>endpoint: http://cname/about/service</li>
           <li>parameters:
             <ul>
               <li>op=add: type of operation, for now addition to the queue is supported</li>
               <li>uris=[json array]: an array of URIs to be added to the sponger queue, the format is JSON array, for example:
<div>
              <pre class="programlisting">
 { &quot;uris&quot;:[&quot;http://www.amazon.co.uk/Hama-Stylus-Input-Apple-iPad/dp/B003O0OM0C&quot;, &quot;http://www.amazon.co.uk/Krusell-GAIA-Case-Apple-iPad/dp/B003QHXWWC&quot; ] }	
</pre>
            </div>               	
               </li>
             </ul>           	
           </li>
         </ul>         
         <p>The service will return a json encoded result of the number of items added, for example:</p>
<div>
      <pre class="programlisting">
{ &quot;result&quot;:2 }	
</pre>
    </div>  
         <p>In case of error a JSON with error text will be returned and http status 500.</p>       
         <strong>cURL example</strong>
         <ol>
      <li>Assume file.txt which contains URL encoded JSON string:
<div>
          <pre class="programlisting">
uris=%7B%20%22uris%22%3A%5B%22http%3A%2F%2Fwww.amazon.co.uk%2FHama-Stylus-Input-Apple-iPad%2Fdp%2FB003O0OM0C%22%2C%20%22http%3A%2F%2Fwww.amazon.co.uk%2FKrusell-GAIA-Case-Apple-iPad%2Fdp%2FB003QHXWWC%22%20%5D%20%7D	
</pre>
        </div>
           </li>
      <li>Execute the following command:
<div>
          <pre class="programlisting">
curl -i -d@file.txt http://cname/about/service?op=add
HTTP/1.1 200 OK
Server: Virtuoso/06.02.3129 (Darwin) i686-apple-darwin10.0.0  VDB
Connection: Keep-Alive
Date: Thu, 05 May 2011 12:06:24 GMT
Accept-Ranges: bytes
Content-Type: applcation/json; charset=&quot;UTF-8&quot;
Content-Length: 14

{ &quot;result&quot;:2 }	
</pre>
        </div>
           </li>
    </ol>
       <br />             	
    <br />
    
    <a name="virtuosospongerelatedfunc" />
    <h4>14.9.9.9. Virtuoso functions usage examples</h4>
    
      <a name="virtuosospongerelatedfuncstring" />
    <h5>14.9.9.9.1. String Functions</h5>
        <p>
    <strong>
        <a href="fn_sprintf_inverse.html">sprintf_inverse</a>
    </strong>
    </p>
<div>
      <pre class="programlisting">
tmp := sprintf_inverse (new_origin_uri, &#39;http://farm%s.static.flickr.com/%s/%s_%s.%s&#39;, 0);
img_id := tmp[2];
</pre>
    </div>
        <p>
    <strong>
        <a href="fn_split_and_decode.html">split_and_decode</a>
    </strong>
    </p>
<div>
      <pre class="programlisting">
request_hdr := headers[0];
response_hdr := headers[1];
host := http_request_header (request, &#39;Host&#39;);
tmp := split_and_decode (request_hdr[0], 0, &#39;\0\0 &#39;);

http_method := tmp[0];
url := tmp[1];
protocol_version := substring (tmp[2], 6, 8);
tmp := rtrim (response_hdr[0], &#39;\r\n&#39;);
tmp := split_and_decode (response_hdr[0], 0, &#39;\0\0 &#39;);
</pre>
    </div>
      <br />
      
      <a name="virtuosospongerelatedfuncrurl" />
    <h5>14.9.9.9.2. Retrieving URLs</h5>
        <p>
    <strong>
        <a href="fn_http_get.html">http_get</a>
    </strong>
    </p>
<div>
      <pre class="programlisting">
url := sprintf(&#39;http://api.flickr.com/services/rest/?i&quot;??
	method=flickr.photos.getInfo&amp;photo_id=%s&amp;api_key=%s&#39;, img_id, api_key);
tmp := http_get (url, hdr);
if (hdr[0] not like &#39;HTTP/1._ 200 %&#39;)
  signal (&#39;22023&#39;, trim(hdr[0], &#39;\r\n&#39;), &#39;RDFXX&#39;);
xd := xtree_doc (tmp);
</pre>
    </div>
        <p>
      <strong>DB.DBA.RDF_HTTP_URL_GET</strong>
    </p>
        <p>A wrapper around http_get. Retrieves a URL using the specified HTTP method
(defaults to GET). The function can handle proxies, redirects (up to fifteen) and HTTPS.</p>
<div>
      <pre class="programlisting">
uri := sprintf (&#39;http://musicbrainz.org/ws/1/%s/%s?type=xml&amp;inc=%U&#39;,
	kind, id, inc);
cnt := RDF_HTTP_URL_GET (uri, &#39;&#39;, hdr, &#39;GET&#39;, &#39;Accept: */*&#39;);
xt := xtree_doc (cnt);
xd := DB.DBA.RDF_MAPPER_XSLT (registry_get (&#39;_rdf_mappers_path_&#39;) || &#39;xslt/mbz2rdf.xsl&#39;, xt, vector (&#39;baseUri&#39;, new_origin_uri));
</pre>
    </div>
        <p>
    <strong>
        <a href="fn_http_request_header.html">http_request_header</a>
    </strong>
    </p>
<div>
      <pre class="programlisting">
content := RDF_HTTP_URL_GET (rdf_url, new_origin_uri, hdr, &#39;GET&#39;,
		&#39;Accept: application/rdf+xml, text/rdf+n3, */*&#39;);
ret_content_type := http_request_header (hdr, &#39;Content-Type&#39;, null, null);
</pre>
    </div>
      <br />
      
      <a name="virtuosospongerelatedfunchnxml" />
    <h5>14.9.9.9.3. Handling Non-XML Response Content</h5>
        <p>
      <strong>json_parse</strong>: Parses JSON content into a tree.</p>
<div>
      <pre class="programlisting">
url := sprintf (&#39;http://www.freebase.com/api/service/mqlread?queries=%U&#39;, qr);
  content := http_get (url, hdr);
  tree := json_parse (content);
  tree := get_keyword (&#39;ROOT&#39;, tree);
  tree := get_keyword (&#39;result&#39;, tree);
</pre>
    </div>
      <br />
      
      <a name="virtuosospongerelatedfuncwrarb" />
    <h5>14.9.9.9.4. Writing Arbitrarily Long Text</h5>
        <p>
    <strong>
        <a href="fn_http.html">http</a>
    </strong>
    </p>
<div>
      <pre class="programlisting">
-- Writing N3 to a string output stream using function http(), parsing the N3 into a graph, then loading the graph into the quad store.
ses := string_output ();
http (&#39;@prefix opl: &lt;http://www.openlinksw.com/schema/attribution#&gt; .\n&#39;, ses);
http (&#39;@prefix rdfs: &lt;http://www.w3.org/2000/01/rdf-schema#&gt; .\n&#39;, ses);
    ...
DB.DBA.TTLP (ses, base, graph);
DB.DBA.RDF_LOAD_RDFXML (strg, base, graph);
</pre>
    </div>
        <p>
    <strong>
        <a href="fn_string_output.html">string_output</a>
    </strong>
    </p>
<div>
      <pre class="programlisting">
ses := string_output ();
cnt := http_get (sprintf (&#39;http://download.finance.yahoo.com/d/quotes.csv?s=%U&amp;f=nsbavophg&amp;e=.csv&#39;,
    symbol));
arr := rdfm_yq_parse_csv (cnt);
http (&#39;&lt;quote stock=&quot;NASDAQ&quot;&gt;&#39;, ses);
foreach (any q in arr) do
  {
    http_value (q[0], &#39;company&#39;, ses);
    http_value (q[1], &#39;symbol&#39;, ses);
    ...
  }
  http (&#39;&lt;/quote&gt;&#39;, ses);
  content := string_output_string (ses);
  xt := xtree_doc (content);
</pre>
    </div>
        <p>
    <strong>
        <a href="fn_string_output_string.html">string_output_string</a>
    </strong>
    </p>
      <br />
      
      <a name="virtuosospongerelatedfuncxmlxslt" />
    <h5>14.9.9.9.5. XML &amp; XSLT</h5>
        <p>
    <strong>
        <a href="fn_xtree_doc.html">xtree_doc</a>
    </strong>
    </p>
<div>
      <pre class="programlisting">
content := RDF_HTTP_URL_GET (uri, &#39;&#39;, hdr, &#39;GET&#39;, &#39;Accept: */*&#39;);
xt := xtree_doc (content);
</pre>
    </div>
       <p>
    <strong>
        <a href="fn_xpath_eval.html">xpath_eval</a>
    </strong>
    </p>
<div>
      <pre class="programlisting">
profile := cast (xpath_eval (&#39;/html/head/@profile&#39;, xt) as varchar);
</pre>
    </div>
        <p>
    <strong>
        <a href="fn_xslt.html">DB.DBA.RDF_MAPPER_XSLT</a>
    </strong>
    </p>
<div>
      <pre class="programlisting">
tmp := http_get (url);
xd := xtree_doc (tmp);
xt := DB.DBA.RDF_MAPPER_XSLT (
	registry_get (&#39;_rdf_mappers_path_&#39;) || &#39;xslt/atom2rdf.xsl&#39;,
	xd, vector (&#39;baseUri&#39;, coalesce (dest, graph_iri)));
</pre>
    </div>
      <br />
      
      <a name="virtuosospongerelatedfunccharserconv" />
    <h5>14.9.9.9.6. Character Set Conversion</h5>
        <p>
    <strong>
        <a href="fn_serialize_to_UTF8_xml.html">serialize_to_UTF8_xml</a>
    </strong>
    </p>
<div>
      <pre class="programlisting">
xt := DB.DBA.RDF_MAPPER_XSLT (
	registry_get (&#39;_rdf_mappers_path_&#39;) || &#39;xslt/crunchbase2rdf.xsl&#39;,
	xt, vector (&#39;baseUri&#39;, coalesce (dest, graph_iri), &#39;base&#39;, base,
	&#39;suffix&#39;, suffix));
xd := serialize_to_UTF8_xml (xt);
DB.DBA.RM_RDF_LOAD_RDFXML (xd, new_origin_uri, coalesce (dest, graph_iri));
</pre>
    </div>
      <br />
      
      <a name="virtuosospongerelatedfuncloaddata" />
    <h5>14.9.9.9.7. Loading Data Into the Quad Store</h5>
        <p>
    <strong>
        <a href="fn_rdf_load_rdfxml.html">DB.DBA.RDF_LOAD_RDFXML</a>
    </strong>
    </p>
<div>
      <pre class="programlisting">
content := RDF_HTTP_URL_GET (uri, &#39;&#39;, hdr, &#39;GET&#39;, &#39;Accept: */*&#39;);
xt := xtree_doc (content);
xd := DB.DBA.RDF_MAPPER_XSLT (
	registry_get (&#39;_rdf_mappers_path_&#39;) || &#39;xslt/mbz2rdf.xsl&#39;,
	xt, vector (&#39;baseUri&#39;, new_origin_uri));
xd := serialize_to_UTF8_xml (xd);
DB.DBA.RM_RDF_LOAD_RDFXML (xd, new_origin_uri, coalesce (dest, graph_iri));
</pre>
    </div>
        <p>
    <strong>
        <a href="fn_ttlp.html">DB.DBA.TTLP</a>
    </strong>
    </p>
<div>
      <pre class="programlisting">
sess := string_output ();
	  . . .
http (sprintf (&#39;&lt;http://dbpedia.org/resource/%s&gt;
	&lt;http://xbrlontology.com/ontology/finance/stock_market#hasCompetitor&gt;
	&lt;http://dbpedia.org/resource/%s&gt; .\n&#39;,
	symbol, x), sess);
http (sprintf (&#39;&lt;http://dbpedia.org/resource/%s&gt;
	&lt;http://www.w3.org/2000/01/rdf-schema#isDefinedBy&gt;
	&lt;http://finance.yahoo.com/q?s=%s&gt; .\n&#39;,
	 x, x), sess);
content := string_output_string (sess);
DB.DBA.TTLP (content, new_origin_uri, coalesce (dest, graph_iri));
</pre>
    </div>
  <div class="tip">
      <div class="tiptitle">See Also:</div>
    <ul>
      <li>
          <a href="rdfinsertmethods.html#rdfinsertmethodsapifunct">Loading RDF using API functions</a>
        </li>
    </ul>
  </div>
      <br />
      
        <a name="virtuosospongerelatedfuncdebugpoutput" />
    <h5>14.9.9.9.8. Debug Output</h5>
        <p>
    <strong>
        <a href="fn_dbg_obj_print.html">dbg_obj_print</a>
    </strong>
    </p>
<div>
      <pre class="programlisting">
dbg_obj_print (&#39;try all grddl mappings here&#39;);
</pre>
    </div>
      <br />
    <br />
    
      <a name="virtuosospongeref" />
    <h4>14.9.9.10. References</h4>
      <ul>
        <li>RDF Primer: http://www.w3.org/TR/2004/REC-rdf-primer-20040210/</li>
        <li>RDF/XML Syntax Specification: http://www.w3.org/TR/rdf-syntax-grammar/</li>
        <li>GRDDL Primer: http://www.w3.org/TR/grddl-primer/</li>
      </ul>
      
        <a name="virtuosospongerefping" />
    <h5>14.9.9.10.1. PingTheSemanticWeb RDF Notification Service</h5>
        <p>
      <a href="http://www.pingthesemanticweb.com/">PingtheSemanticWeb</a> (PTSW) is a repository for RDF documents. The PTSW web service
archives the location of recently created or updated RDF documents on the Web. It is intended
for use by crawlers or other types of software agents which need to know when and where the
latest updated RDF documents can be found. They can request a list of recently updated documents
as a starting location to crawl the Semantic Web.</p>
        <p>You may find this service useful for publicizing your own RDF content. Content authors can
notify PTSW that an RDF document has been created or updated by pinging the service with the URL of
the document. The Sponger supports this facility through the async_queue and ping_service parameters
of the cartridge hook function, where the ping_service parameter contains the ping service URL as
configured in the SPARQL section of the virtuoso.ini file:</p>
<div>
      <pre class="programlisting">
[SPARQL]
...
PingService = http://rpc.pingthesemanticweb.com/
...
</pre>
    </div>
        <p>The configured ping service can be called using an asynchronous request and
the RDF_SW_PING procedure as illustrated below. </p>
<div>
      <pre class="programlisting">
create procedure DB.DBA.RDF_LOAD_HTML_RESPONSE (
  in graph_iri varchar, in new_origin_uri varchar, in dest varchar,
  inout ret_body any, inout async_queue any, inout ping_service any,
  inout _key any, inout opts any )
{
  ...
  if ( ... and async_queue is not null)
    aq_request (async_queue, &#39;DB.DBA.RDF_SW_PING&#39;,
                vector (ping_service, new_origin_uri));
</pre>
    </div>
        <p>For more details refer to section <a href="ASYNCEXECMULTITHREAD.html">Asynchronous Execution and Multithreading in Virtuoso/PL</a>
    </p>
      <br />
      
        <a name="virtuosospongeremname" />
    <h5>14.9.9.10.2. Main Namespaces used by OpenLink Cartridges</h5>
        <p>A list of the main namespaces / ontologies used by OpenLink-provided Sponger cartridges
is given below. Some of these ontologies may prove useful when creating your own cartridges.</p>
        <ul>
          <li>- http://www.openlinksw.com/virtuoso/xslt/</li>
          <li>- http://www.openlinksw.com/schemas/XHTML# </li>
          <li>rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns# </li>
          <li>rdfs: http://www.w3.org/2000/01/rdf-schema# </li>
          <li>dc: http://purl.org/dc/elements/1.1/</li>
          <li>dcterms: http://purl.org/dc/terms/</li>
          <li>foaf: http://xmlns.com/foaf/0.1/</li>
          <li>sioc: http://rdfs.org/sioc/ns# </li>
          <li>sioct: http://rdfs.org/sioc/types# </li>
          <li>skos: http://www.w3.org/2004/02/skos/core# </li>
          <li>bibo: http://purl.org/ontology/bibo/</li>
        </ul>
      <br />
      
        <a name="virtuosospongerfreeb" />
    <h5>14.9.9.10.3. Freebase Cartridge &amp; Stylesheet</h5>
        <p>Snapshots of the Freebase cartridge and stylesheet compatible with the meta-cartridge
example presented earlier in this document can be found below.</p>
        <p>
      <strong>DB.DBA.RDF_LOAD_MQL:</strong>
    </p>
<div>
      <pre class="programlisting">
--no_c_escapes-
create procedure DB.DBA.RDF_LOAD_MQL (in graph_iri varchar, in new_origin_uri varchar,  in dest varchar,
    inout _ret_body any, inout aq any, inout ps any, inout _key any, inout opts any)
{
  declare qr, path, hdr any;
  declare tree, xt, xd, types any;
  declare k, cnt, url, sa varchar;

  hdr := null;
  sa := &#39;&#39;;
  declare exit handler for sqlstate &#39;*&#39;
  {
    -- dbg_printf (&#39;%s&#39;, __SQL_MESSAGE);
    return 0;
  };

  path := split_and_decode (new_origin_uri, 0, &#39;%\0/&#39;);
  if (length (path) &lt; 1)
    return 0;
  k := path [length(path) - 1];
  if (path [length(path) - 2] = &#39;guid&#39;)
    k := sprintf (&#39;&quot;id&quot;:&quot;/guid/%s&quot;&#39;, k);
  else
    {
    if (k like &#39;#%&#39;)
        k := sprintf (&#39;&quot;id&quot;:&quot;%s&quot;&#39;, k);
  else
      {
	sa := DB.DBA.RDF_MQL_GET_WIKI_URI (k);
    k := sprintf (&#39;&quot;key&quot;:&quot;%s&quot;&#39;, k);
  }
  }
  qr := sprintf (&#39;{&quot;ROOT&quot;:{&quot;query&quot;:[{%s, &quot;type&quot;:[]}]}}&#39;, k);
  url := sprintf (&#39;http://www.freebase.com/api/service/mqlread?queries=%U&#39;, qr);
  cnt := http_get (url, hdr);
  tree := json_parse (cnt);
  xt := get_keyword (&#39;ROOT&#39;, tree);
  if (not isarray (xt))
    return 0;
  xt := get_keyword (&#39;result&#39;, xt);
  types := vector ();
  foreach (any tp in xt) do
    {
      declare tmp any;
      tmp := get_keyword (&#39;type&#39;, tp);
      types := vector_concat (types, tmp);
    }
  --types := get_keyword (&#39;type&#39;, xt);
  DELETE FROM DB.DBA.RDF_QUAD WHERE g =  iri_to_id(new_origin_uri);
  foreach (any tp in types) do
{
      qr := sprintf (&#39;{&quot;ROOT&quot;:{&quot;query&quot;:{%s, &quot;type&quot;:&quot;%s&quot;, &quot;*&quot;:[]}}}&#39;, k, tp);
      url := sprintf (&#39;http://www.freebase.com/api/service/mqlread?queries=%U&#39;, qr);
      cnt := http_get (url, hdr);
      --dbg_printf (&#39;%s&#39;, cnt);
      tree := json_parse (cnt);
      xt := get_keyword (&#39;ROOT&#39;, tree);
      xt := DB.DBA.MQL_TREE_TO_XML (tree);
      --dbg_obj_print (xt);
      xt := DB.DBA.RDF_MAPPER_XSLT (registry_get (&#39;_rdf_mappers_path_&#39;) || &#39;xslt/mql2rdf.xsl&#39;, xt,
      	vector (&#39;baseUri&#39;, coalesce (dest, graph_iri), &#39;wpUri&#39;, sa));
      sa := &#39;&#39;;
      xd := serialize_to_UTF8_xml (xt);
--      dbg_printf (&#39;%s&#39;, xd);
  DB.DBA.RM_RDF_LOAD_RDFXML (xd, new_origin_uri, coalesce (dest, graph_iri));
    }
  return 1;
}
</pre>
    </div>
        <p>
      <strong>mql2rdf.xsl:</strong>
    </p>
<div>
      <pre class="programlisting">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!--
 -
 -  $Id: rdfandsparql.xml,v 1.95.2.47 2011/10/26 00:21:16 source Exp $
 -
 -  This file is part of the OpenLink Software Virtuoso Open-Source (VOS)
 -  project.
 -
 -  Copyright (C) 1998-2008 OpenLink Software
 -
 -  This project is free software; you can redistribute it and/or modify it
 -  under the terms of the GNU General Public License as published by the
 -  Free Software Foundation; only version 2 of the License, dated June 1991.
 -
 -  This program is distributed in the hope that it will be useful, but
 -  WITHOUT ANY WARRANTY; without even the implied warranty of
 -  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 -  General Public License for more details.
 -
 -  You should have received a copy of the GNU General Public License along
 -  with this program; if not, write to the Free Software Foundation, Inc.,
 -  51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
--&gt;
&lt;!DOCTYPE xsl:stylesheet [
&lt;!ENTITY rdf &quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
&lt;!ENTITY bibo &quot;http://purl.org/ontology/bibo/&quot;&gt;
&lt;!ENTITY xsd  &quot;http://www.w3.org/2001/XMLSchema#&quot;&gt;
&lt;!ENTITY foaf &quot;http://xmlns.com/foaf/0.1/&quot;&gt;
&lt;!ENTITY sioc &quot;http://rdfs.org/sioc/ns#&quot;&gt;
]&gt;
&lt;xsl:stylesheet version=&quot;1.0&quot;
    xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;
    xmlns:vi=&quot;http://www.openlinksw.com/virtuoso/xslt/&quot;
    xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;
    xmlns:rdfs=&quot;http://www.w3.org/2000/01/rdf-schema#&quot;
    xmlns:sioc=&quot;&quot;
    xmlns:bibo=&quot;&quot;
    xmlns:foaf=&quot;&quot;
    xmlns:skos=&quot;http://www.w3.org/2004/02/skos/core#&quot;
    xmlns:dcterms= &quot;http://purl.org/dc/terms/&quot;
    xmlns:mql=&quot;http://www.freebase.com/&quot;&gt;

    &lt;xsl:output method=&quot;xml&quot; indent=&quot;yes&quot; /&gt;

    &lt;xsl:param name=&quot;baseUri&quot; /&gt;
    &lt;xsl:param name=&quot;wpUri&quot; /&gt;

    &lt;xsl:variable name=&quot;ns&quot;&gt;http://www.freebase.com/&lt;/xsl:variable&gt;

    &lt;xsl:template match=&quot;/&quot;&gt;
	&lt;rdf:RDF&gt;
	    &lt;xsl:if test=&quot;/results/ROOT/result/*&quot;&gt;
		&lt;rdf:Description rdf:about=&quot;{$baseUri}&quot;&gt;
		    &lt;rdf:type rdf:resource=&quot;Document&quot;/&gt;
		    &lt;rdf:type rdf:resource=&quot;Document&quot;/&gt;
		    &lt;rdf:type rdf:resource=&quot;Container&quot;/&gt;
		    &lt;sioc:container_of rdf:resource=&quot;{vi:proxyIRI($baseUri)}&quot;/&gt;
		    &lt;foaf:primaryTopic rdf:resource=&quot;{vi:proxyIRI($baseUri)}&quot;/&gt;
		    &lt;dcterms:subject rdf:resource=&quot;{vi:proxyIRI($baseUri)}&quot;/&gt;
		&lt;/rdf:Description&gt;
		&lt;rdf:Description rdf:about=&quot;{vi:proxyIRI($baseUri)}&quot;&gt;
		    &lt;rdf:type rdf:resource=&quot;Item&quot;/&gt;
		    &lt;sioc:has_container rdf:resource=&quot;{$baseUri}&quot;/&gt;
		    &lt;xsl:apply-templates select=&quot;/results/ROOT/result/*&quot;/&gt;
		    &lt;xsl:if test=&quot;$wpUri != &#39;&#39;&quot;&gt;
			&lt;rdfs:seeAlso rdf:resource=&quot;{$wpUri}&quot;/&gt;
		    &lt;/xsl:if&gt;
		&lt;/rdf:Description&gt;
	    &lt;/xsl:if&gt;
	&lt;/rdf:RDF&gt;
    &lt;/xsl:template&gt;

    &lt;xsl:template match=&quot;*[starts-with(.,&#39;http://&#39;) or starts-with(.,&#39;urn:&#39;)]&quot;&gt;
	&lt;xsl:element namespace=&quot;{$ns}&quot; name=&quot;{name()}&quot;&gt;
	    &lt;xsl:attribute name=&quot;rdf:resource&quot;&gt;
		&lt;xsl:value-of select=&quot;vi:proxyIRI (.)&quot;/&gt;
	    &lt;/xsl:attribute&gt;
	&lt;/xsl:element&gt;
    &lt;/xsl:template&gt;

    &lt;xsl:template match=&quot;*[starts-with(.,&#39;/&#39;)]&quot;&gt;
	&lt;xsl:if test=&quot;local-name () = &#39;type&#39; and . like &#39;%/person&#39;&quot;&gt;
	    &lt;rdf:type rdf:resource=&quot;Person&quot;/&gt;
	&lt;/xsl:if&gt;
	&lt;xsl:if test=&quot;local-name () = &#39;type&#39;&quot;&gt;
	    &lt;sioc:topic&gt;
		&lt;skos:Concept rdf:about=&quot;{vi:proxyIRI (concat ($ns, &#39;view&#39;, .))}&quot;/&gt;
	    &lt;/sioc:topic&gt;
	&lt;/xsl:if&gt;

	&lt;xsl:element namespace=&quot;{$ns}&quot; name=&quot;{name()}&quot;&gt;
	    &lt;xsl:attribute name=&quot;rdf:resource&quot;&gt;
		&lt;xsl:value-of select=&quot;vi:proxyIRI(concat ($ns, &#39;view&#39;, .))&quot;/&gt;
	    &lt;/xsl:attribute&gt;
	&lt;/xsl:element&gt;
    &lt;/xsl:template&gt;

    &lt;xsl:template match=&quot;*[* and ../../*]&quot;&gt;
	&lt;xsl:element namespace=&quot;{$ns}&quot; name=&quot;{name()}&quot;&gt;
	    &lt;xsl:attribute name=&quot;rdf:parseType&quot;&gt;Resource&lt;/xsl:attribute&gt;
	    &lt;xsl:apply-templates select=&quot;@*|node()&quot;/&gt;
	&lt;/xsl:element&gt;
    &lt;/xsl:template&gt;

    &lt;xsl:template match=&quot;*&quot;&gt;
	&lt;xsl:if test=&quot;* or . != &#39;&#39;&quot;&gt;
		&lt;xsl:choose&gt;
		    &lt;xsl:when test=&quot;name()=&#39;image&#39;&quot;&gt;
			&lt;foaf:depiction rdf:resource=&quot;{vi:mql-image-by-name (.)}&quot;/&gt;
		    &lt;/xsl:when&gt;
		    &lt;xsl:otherwise&gt;
			&lt;xsl:element namespace=&quot;{$ns}&quot; name=&quot;{name()}&quot;&gt;
			    &lt;xsl:if test=&quot;name() like &#39;date_%&#39;&quot;&gt;
				&lt;xsl:attribute name=&quot;rdf:datatype&quot;&gt;dateTime&lt;/xsl:attribute&gt;
			    &lt;/xsl:if&gt;
			    &lt;xsl:apply-templates select=&quot;@*|node()&quot;/&gt;
			&lt;/xsl:element&gt;
		    &lt;/xsl:otherwise&gt;
		&lt;/xsl:choose&gt;
	&lt;/xsl:if&gt;
    &lt;/xsl:template&gt;
&lt;/xsl:stylesheet&gt;
</pre>
    </div>
      <br />
    <br />
  <a name="rdfspongerprogrammerguidepython" />
    <h4>14.9.9.11. Using Python to perform Virtuoso Sponging</h4>
  <p>This section contains the generic steps to use Python language to extend the Virtuoso Sponger.</p>
    <ol>
      <li>Build the latest Python hosting module. It will introduce a new function python_exec ()
<p>The parameters of python_exec are :</p>
<ul>
  <li>string containing a python code, it should define one or more functions, see remarks below</li>
  <li>string containing name of function to be called</li>
  <li>list of parameters for the function </li>
  </ul>
<p>For Example:</p>
<div>
          <pre class="programlisting">
python_exec (file_to_string (&#39;spoonge.py&#39;), &#39;rdf4uri&#39;, &#39;http://url..&#39;, &#39;http://base...&#39;);
</pre>
        </div>
<p>The above means call the rdf4uri (&#39;http://url..&#39;, &#39;http://base...&#39;) function from spoonge.py file. 
It is importnat to know that python_exec is restricted to DBA only group and that the python source 
should not have __main__ or this to be restricted in python code to not be called . 
Any print etc. for stdout/stderr will go on server console if server is on foreground. 
Can be used for debug for example but not for real work. </p>
<p>The function is supposed to return just single string, don&#39;t try to return multiple results, 
this will not work in this revision. 
</p>
</li>
      <li>Setup the Virtuoso server INI to include python module:
<div>
          <pre class="programlisting">
...
[Plugins]
LoadPath = ../lib
Load1    = Hosting, hosting_python.so
...
</pre>
        </div>      	
      </li>
      <li>Download and install the rdflib package from http://www.rdflib.net/
Note before to build, disable Zope interface in rdflib as this not work with C-API correctly. 
Or make sure Python has no Zope interfaces installed. 
To disable the zope in rdflib, just comment out following in &lt;rdflibhome&gt;/rdflib/__init__.py:
<div>
          <pre class="programlisting">
 36 #from rdflib.interfaces import IIdentifier, classImplements
 37 #classImplements(URIRef, IIdentifier)
 38 #classImplements(BNode, IIdentifier)
 39 #classImplements(Literal, IIdentifier)	
</pre>
        </div>
<p>Then do:</p>
<div>
          <pre class="programlisting">
perl setup.py build
perl setup.py --user install	
</pre>
        </div>
      </li>
      <li>Get an example of python code for sponger like: http://www.ebusiness-unibw.org/wiki/Python4Spongers 
and make sure you disable the last lines which not suitable for calling inside Sponger:
<div>
          <pre class="programlisting">
...
#if __name__ == &#39;__main__&#39;:
#	rdf_xml = rdf4uri(uri=&#39;http://www.amazon.com/Apple-touch-Generation-NEWEST-MODEL/dp/B002M3SOBU/&#39;)
#	print rdf_xml
</pre>
        </div>
<p>Store the python code in sponge.py in server working directory. 
Make sure this directory is allowed to read in DirsAllowed INI setting.</p>
</li>
      <li>Create a procedure and register with Sponger: 
<div>
          <pre class="programlisting">
-- THIS IS FOR DEMO PURPOSE ONLY 

-- for demo purposes we delete all other cartridges registrations to see effect from only this cartridge
delete from DB.DBA.SYS_RDF_MAPPERS;
delete from DB.DBA.RDF_META_CARTRIDGES;

-- register cartridge 
insert soft DB.DBA.SYS_RDF_MAPPERS (RM_PATTERN, RM_TYPE, RM_HOOK, RM_KEY, RM_DESCRIPTION)
	values (&#39;(http://.*amazon.[^/]+/[^/]+/dp/[^/]+(/.*)?)&#39;, &#39;URL&#39;, &#39;DB.DBA.RDF_LOAD_PYTHON_AMAZON_ARTICLE&#39;, null, &#39;Amazon articles&#39;);

-- the cartridge stored procedure itself 
create procedure DB.DBA.RDF_LOAD_PYTHON_AMAZON_ARTICLE (in graph_iri varchar, in new_origin_uri varchar,  in dest varchar,
    inout _ret_body any, inout aq any, inout ps any, inout _key any, inout opts any)
{
  declare result any;
  -- we check first python hosting is capable to run code
  if (__proc_exists (&#39;python_exec&#39;, 2) is null)
    return 0;
  -- handle any error
  declare exit handler for sqlstate &#39;*&#39;
    {
      -- log the error 
      DB.DBA.RM_RDF_SPONGE_ERROR (current_proc_name (), graph_iri, dest, __SQL_MESSAGE); 	
      return 0;
    };
  -- call the python code
  result := python_exec (file_to_string (&#39;sponge.py&#39;), &#39;rdf4uri&#39;, new_origin_uri);
  -- in case of python error we will get integer zero, so we check 
  if (not isstring (result))
    return 0;
  -- for demo purpose we delete all from this graph
  delete from DB.DBA.RDF_QUAD where G = DB.DBA.RDF_MAKE_IID_OF_QNAME (graph_iri);
  -- load the results
  DB.DBA.RDF_LOAD_RDFXML (result, new_origin_uri, coalesce (dest, graph_iri), 0);
  return 1;
}
;	
</pre>
        </div>      	
</li>
      <li>Test the Sponger code like this:
<div>
          <pre class="programlisting">
sparql define get:soft &quot;soft&quot; select * from &lt;http://www.amazon.com/Apple-touch-Generation-NEWEST-MODEL/dp/B002M3SOBU/&gt; { ?s ?p ?o };	
</pre>
        </div>      	
</li>
    </ol>
  <br />
<br />
<a name="virtuosospongersampleuses" />
    <h3>14.9.10. Sponger Usage Examples</h3>
<ul>
	<li>
        <a href="virtuososponger.html#virtuosospongerusageprocessorex">SPARQL Processor Usage Example</a>
      </li>
	<li>
        <a href="virtuososponger.html#virtuosospongerusageproxyex2">RDF Proxy Service Example</a>
      </li>
	<li>
        <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtDeployingLinkedDataGuide_BrowsingNorthwindRdfView#AncMozToc2">Browsing &amp; Exploring Linked Data View Example Using ODE</a>
      </li>
	<li>
        <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtDeployingLinkedDataGuide_BrowsingNorthwindRdfView#AncMozToc3">Browsing &amp; Exploring Linked Data View Example Using iSPARQL</a>
      </li>
	<li>
        <a href="rdfinsertmethods.html#rdfinsertmethodplapissimpleexample">Basic Sponger Cartridge Example</a>
      </li>
  <li>
        <a href="virtuososponger.html#virtuosospongerusagebriefex">HTTP Example for Extracting Metadata using CURL</a>
      </li>
  <li>
        <a href="virtuososponger.html#virtuosospongercartridgetypesmetarestexamples">RESTFul Interaction Examples</a>
      </li>
  <li>
        <a href="sect5_virtuosospongercreatecustcartrrgstflickr.html">Flickr Cartridge Example</a>
      </li>
  <li>
        <a href="virtuososponger.html#virtuosospongercreatecustcartrexmp">MusicBrainz Metadatabase Example</a>
      </li>
</ul>
<br />	
<table border="0" width="90%" id="navbarbottom">
    <tr>
        <td align="left" width="33%">
          <a href="rdfinsertmethods.html" title="RDF Insert Methods in Virtuoso">Previous</a>
          <br />RDF Insert Methods in Virtuoso</td>
     <td align="center" width="34%">
          <a href="rdfandsparql.html">Chapter Contents</a>
     </td>
        <td align="right" width="33%">
          <a href="virtuosospongerfacetinstall.html" title="Virtuoso Faceted Browser Installation and configuration">Next</a>
          <br />Virtuoso Faceted Browser Installation and configuration</td>
    </tr>
    </table>
  </div>
  <div id="footer">
    <div>Copyright© 1999 - 2009 OpenLink Software All rights reserved.</div>
   <div id="validation">
    <a href="http://validator.w3.org/check/referer">
        <img src="http://www.w3.org/Icons/valid-xhtml10" alt="Valid XHTML 1.0!" height="31" width="88" />
    </a>
    <a href="http://jigsaw.w3.org/css-validator/">
        <img src="http://jigsaw.w3.org/css-validator/images/vcss" alt="Valid CSS!" height="31" width="88" />
    </a>
   </div>
  </div>
 </body>
</html>