http://www.openlinksw.com:443/blog/kidehen@openlinksw.com/blog/
Kingsley Idehen's Blog Data Space
I have seen the future and it's full of Linked Data! :-)
kidehen@openlinksw.com
kidehen@openlinksw.com
2024-03-29T12:14:36Z
Virtuoso Universal Server 08.03.3327
http://www.openlinksw.com:443/weblog/public/images/vbloglogo.gif
SPARQL Guide for the Perl Developer
http://www.openlinksw.com:443/blog/kidehen@openlinksw.com/blog/?date=2011-01-25#1655
2011-01-25T16:05:17Z
2011-01-26T18:11:13-05:00
<h3>What?</h3> <p>A simple guide usable by any <a class="auto-href" href="http://dbpedia.org/resource/Perl" id="link-id0x1bdcab80">Perl</a> developer seeking to exploit <a class="auto-href" href="http://dbpedia.org/resource/SPARQL" id="link-id0x17b447e8">SPARQL</a> without hassles.</p> <h3>Why?</h3> <p>SPARQL is a powerful query language, results serialization format, and an HTTP based <a href="http://dbpedia.org/resource/Data">data</a> access protocol from the W3C. It provides a mechanism for accessing and integrating data across <a href="http://en.wikipedia.org/wiki/Deductive_database" id="link-id0x1cc76540">Deductive Database Systems</a> (colloquially referred to as triple or quad stores in <a class="auto-href" href="http://dbpedia.org/resource/Semantic_Web" id="link-id0x1d944d78">Semantic Web</a> and <a class="auto-href" href="http://dbpedia.org/resource/Linked_Data" id="link-id0x1c7a87c8">Linked Data</a> circles) -- database systems (or data spaces) that manage proposition oriented records in 3-tuple (triples) or 4-tuple (quads) form. </p> <h3>How?</h3> <p>SPARQL queries are actually HTTP payloads (typically). Thus, using a RESTful client-server interaction pattern, you can dispatch calls to a SPARQL compliant data server and receive a payload for local processing.</p> <h4>Steps:</h4> <ol> <li>Determine which SPARQL endpoint you want to access e.g. <a href="http://dbpedia.org/sparql" id="link-id0x1d476520">DBpedia</a> or a local <a class="auto-href" href="http://virtuoso.openlinksw.com" id="link-id0x1bcfe140">Virtuoso</a> instance (typically: http://localhost:8890/sparql). </li> <li>If using Virtuoso, and you want to populate its quad store using SPARQL, assign "<a href="http://docs.openlinksw.com/virtuoso/rdfsparql.html#rdfsupportedprotocolendpointuri" id="link-id0x1c7630b8">SPARQL_SPONGE</a>" privileges to user "SPARQL" (this is basic control, more sophisticated WebID based ACLs are available for controlling SPARQL access).</li> </ol> <h4>Script:</h4> <pre> # # Demonstrating use of a single query to populate a # Virtuoso Quad Store via Perl. # # # HTTP <a href="http://dbpedia.org/resource/Uniform_Resource_Locator" id="link-id0x1d6465e8">URL</a> is constructed accordingly with CSV query results format as the default via mime type. # use CGI qw/:standard/; use LWP::UserAgent; use Data::Dumper; use Text::CSV_XS; sub sparqlQuery(@args) { my $query=shift; my $baseURL=shift; my $format=shift; %params=( "default-graph" => "", "should-sponge" => "soft", "query" => $query, "debug" => "on", "timeout" => "", "format" => $format, "save" => "display", "fname" => "" ); @fragments=(); foreach $k (keys %params) { $fragment="$k=".CGI::escape($params{$k}); push(@fragments,$fragment); } $query=join("&", @fragments); $sparqlURL="${baseURL}?$query"; my $ua = LWP::UserAgent->new; $ua->agent("MyApp/0.1 "); my $req = HTTP::Request->new(GET => $sparqlURL); my $res = $ua->request($req); $str=$res->content; $csv = Text::CSV_XS->new(); foreach $line ( split(/^/, $str) ) { $csv->parse($line); @bits=$csv->fields(); push(@rows, [ @bits ] ); } return \@rows; } # Setting Data Source Name (DSN) $dsn="http://dbpedia.org/resource/DBpedia"; # Virtuoso pragmas for instructing SPARQL engine to perform an HTTP GET using the IRI in # FROM clause as Data Source URL en route to DBMS # record Inserts. $query="DEFINE get:soft \"replace\"\n # Generic (non Virtuoso specific SPARQL # Note: this will not add records to the # DBMS SELECT DISTINCT * FROM <$dsn> WHERE {?s ?p ?o}"; $data=sparqlQuery($query, "http://localhost:8890/sparql/", "text/csv"); print "Retrieved data:\n"; print Dumper($data); </pre> <h4>Output</h4> <pre> Retrieved data: $VAR1 = [ [ 's', 'p', 'o' ], [ 'http://dbpedia.org/resource/DBpedia', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', 'http://www.w3.org/2002/07/owl#Thing' ], [ 'http://dbpedia.org/resource/DBpedia', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', 'http://dbpedia.org/ontology/Work' ], [ 'http://dbpedia.org/resource/DBpedia', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', 'http://dbpedia.org/class/yago/Software106566077' ], ... </pre> <h3>Conclusion</h3> <p> CSV was chosen over XML (re. output format) since this is about a "no-brainer installation and utilization" guide for a Perl developer that already knows how to use Perl for HTTP based data access within HTML. SPARQL just provides an added bonus to URL dexterity (delivered via <a class="auto-href" href="http://dbpedia.org/resource/Uniform_Resource_Identifier" id="link-id0x1d29da98">URI</a> abstraction) with regards to constructing Data Source Names or Addresses.</p> <h3>Related</h3> <ul> <li> <a href="http://cpansearch.perl.org/src/TOBYINK/RDF-Query-Client-0.103/README" id="link-id0x1c279130">RDF::Query::Client Guide</a> </li> <li> <a href="http://www.openlinksw.com/dataspace/kidehen@openlinksw.com/weblog/kidehen@openlinksw.com%27s%20BLOG%20%5B127%5D/1653" id="link-id0x1cf307f0">SPARQL Guide for the Perl Developer</a> </li> <li> <a href="http://www.openlinksw.com/dataspace/kidehen@openlinksw.com/weblog/kidehen@openlinksw.com%27s%20BLOG%20%5B127%5D/1652" id="link-id0x1b0ffb28">SPARQL Guide for the PHP Developer</a> </li> <li> <a href="http://www.openlinksw.com/dataspace/kidehen@openlinksw.com/weblog/kidehen@openlinksw.com%27s%20BLOG%20%5B127%5D/1651" id="link-id0x1a8c5ae0">SPARQL Guide for the Python Developer</a> </li> <li> <a href="http://www.openlinksw.com/dataspace/kidehen@openlinksw.com/weblog/kidehen@openlinksw.com%27s%20BLOG%20%5B127%5D/1648" id="link-id0x1b86ad28">SPARQL Guide for the Ruby Developer</a> </li> <li> <a href="http://www.openlinksw.com/dataspace/kidehen@openlinksw.com/weblog/kidehen@openlinksw.com%27s%20BLOG%20%5B127%5D/1646" id="link-id0x1c7af188">Simple Guide for using SPARQL with Virtuoso</a> </li> <li> <a href="http://www.delicious.com/kidehen/sparql_tutorial" id="link-id0x1ac1ba48">General SPARQL Tutorial Collection</a> </li> <li> <a href="http://www.delicious.com/kidehen/virtuoso_sparql_tutorial" id="link-id0x1c7be660">Virtuoso Specific SPARQL Tutorial Collection</a> </li> <li> <a href="http://www.openlinksw.com/dataspace/kidehen@openlinksw.com/weblog/kidehen@openlinksw.com%27s%20BLOG%20%5B127%5D/1567" id="link-id0x1c52b438">The URI, URL, and Linked Data Meme's Generic HTTP URI</a>. </li> </ul>
SPARQL Guide for the Javascript Developer
http://www.openlinksw.com:443/blog/kidehen@openlinksw.com/blog/?date=2011-01-21#1653
2011-01-21T19:59:49Z
2011-01-26T18:10:28-05:00
<h3>What?</h3> <p>A simple guide usable by any Javascript developer seeking to exploit <a class="auto-href" href="http://dbpedia.org/resource/SPARQL" id="link-id0x17b447e8">SPARQL</a> without hassles.</p> <h3>Why?</h3> <p>SPARQL is a powerful query language, results serialization format, and an HTTP based <a href="http://dbpedia.org/resource/Data">data</a> access protocol from the W3C. It provides a mechanism for accessing and integrating data across <a href="http://en.wikipedia.org/wiki/Deductive_database" id="link-id0x1cc76540">Deductive Database Systems</a> (colloquially referred to as triple or quad stores in <a class="auto-href" href="http://dbpedia.org/resource/Semantic_Web" id="link-id0x1d944d78">Semantic Web</a> and <a class="auto-href" href="http://dbpedia.org/resource/Linked_Data" id="link-id0x1c7a87c8">Linked Data</a> circles) -- database systems (or data spaces) that manage proposition oriented records in 3-tuple (triples) or 4-tuple (quads) form. </p> <h3>How?</h3> <p>SPARQL queries are actually HTTP payloads (typically). Thus, using a RESTful client-server interaction pattern, you can dispatch calls to a SPARQL compliant data server and receive a payload for local processing.</p> <h4>Steps:</h4> <ol> <li>Determine which SPARQL endpoint you want to access e.g. <a href="http://dbpedia.org/sparql" id="link-id0x1d476520">DBpedia</a> or a local <a class="auto-href" href="http://virtuoso.openlinksw.com" id="link-id0x1bcfe140">Virtuoso</a> instance (typically: http://localhost:8890/sparql). </li> <li>If using Virtuoso, and you want to populate its quad store using SPARQL, assign "<a href="http://docs.openlinksw.com/virtuoso/rdfsparql.html#rdfsupportedprotocolendpointuri" id="link-id0x1c7630b8">SPARQL_SPONGE</a>" privileges to user "SPARQL" (this is basic control, more sophisticated WebID based ACLs are available for controlling SPARQL access).</li> </ol> <h4>Script:</h4> <pre> /* Demonstrating use of a single query to populate a # Virtuoso Quad Store via Javascript. */ /* HTTP <a href="http://dbpedia.org/resource/Uniform_Resource_Locator" id="link-id0x1bc27a18">URL</a> is constructed accordingly with JSON query results format as the default via mime type. */ function sparqlQuery(query, baseURL, format) { if(!format) format="application/json"; var params={ "default-graph": "", "should-sponge": "soft", "query": query, "debug": "on", "timeout": "", "format": format, "save": "display", "fname": "" }; var querypart=""; for(var k in params) { querypart+=k+"="+encodeURIComponent(params[k])+"&"; } var queryURL=baseURL + '?' + querypart; if (window.XMLHttpRequest) { xmlhttp=new XMLHttpRequest(); } else { xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.open("GET",queryURL,false); xmlhttp.send(); return JSON.parse(xmlhttp.responseText); } /* setting Data Source Name (DSN) */ var dsn="http://dbpedia.org/resource/DBpedia"; /* Virtuoso pragma "DEFINE get:soft "replace" instructs Virtuoso SPARQL engine to perform an HTTP GET using the IRI in FROM clause as Data Source URL with regards to DBMS record inserts */ var query="DEFINE get:soft \"replace\"\nSELECT DISTINCT * FROM <"+dsn+"> WHERE {?s ?p ?o}"; var data=sparqlQuery(query, "/sparql/"); </pre> <h4>Output</h4> <p> Place the snippet above into the <script/> section of an HTML document to see the <a href="http://twitpic.com/3s2vs3/full" id="link-id0x1cff2288">query result</a>. </p> <h3>Conclusion</h3> <p> JSON was chosen over XML (re. output format) since this is about a "no-brainer installation and utilization" guide for a Javascript developer that already knows how to use Javascript for HTTP based data access within HTML. SPARQL just provides an added bonus to URL dexterity (delivered via <a class="auto-href" href="http://dbpedia.org/resource/Uniform_Resource_Identifier" id="link-id0x1d29da98">URI</a> abstraction) with regards to constructing Data Source Names or Addresses.</p> <h3>Related</h3> <ul> <li> <a href="http://www.openlinksw.com/dataspace/kidehen@openlinksw.com/weblog/kidehen@openlinksw.com%27s%20BLOG%20%5B127%5D/1652" id="link-id0x1b0ffb28">SPARQL Guide for the PHP Developer</a> </li> <li> <a href="http://www.openlinksw.com/dataspace/kidehen@openlinksw.com/weblog/kidehen@openlinksw.com%27s%20BLOG%20%5B127%5D/1651" id="link-id0x1a8c5ae0">SPARQL Guide for the Python Developer</a> </li> <li> <a href="http://www.openlinksw.com/dataspace/kidehen@openlinksw.com/weblog/kidehen@openlinksw.com%27s%20BLOG%20%5B127%5D/1648" id="link-id0x1b86ad28">SPARQL Guide for the Ruby Developer</a> </li> <li> <a href="http://www.openlinksw.com/dataspace/kidehen@openlinksw.com/weblog/kidehen@openlinksw.com%27s%20BLOG%20%5B127%5D/1646" id="link-id0x1c7af188">Simple Guide for using SPARQL with Virtuoso</a> </li> <li> <a href="http://www.delicious.com/kidehen/sparql_tutorial" id="link-id0x1ac1ba48">General SPARQL Tutorial Collection</a> </li> <li> <a href="http://www.delicious.com/kidehen/virtuoso_sparql_tutorial" id="link-id0x1c7be660">Virtuoso Specific SPARQL Tutorial Collection</a> </li> <li> <a href="http://www.openlinksw.com/dataspace/kidehen@openlinksw.com/weblog/kidehen@openlinksw.com%27s%20BLOG%20%5B127%5D/1567" id="link-id0x1c52b438">The URI, URL, and Linked Data Meme's Generic HTTP URI</a>. </li> </ul>
SPARQL Guide for the PHP Developer
http://www.openlinksw.com:443/blog/kidehen@openlinksw.com/blog/?date=2011-01-20#1652
2011-01-20T21:25:49Z
2011-01-25T10:36:58-05:00
<h3>What?</h3> <p>A simple guide usable by any <a class="auto-href" href="http://dbpedia.org/resource/PHP_programming_language" id="link-id0x1bdca7b8">PHP</a> developer seeking to exploit <a class="auto-href" href="http://dbpedia.org/resource/SPARQL" id="link-id0x1c894338">SPARQL</a> without hassles.</p> <h3>Why?</h3> <p>SPARQL is a powerful query language, results serialization format, and an HTTP based <a href="http://dbpedia.org/resource/Data">data</a> access protocol from the W3C. It provides a mechanism for accessing and integrating data across <a href="http://en.wikipedia.org/wiki/Deductive_database" id="link-id0x1c319af0">Deductive Database Systems</a> (colloquially referred to as triple or quad stores in <a class="auto-href" href="http://dbpedia.org/resource/Semantic_Web" id="link-id0x1d944d78">Semantic Web</a> and <a class="auto-href" href="http://dbpedia.org/resource/Linked_Data" id="link-id0x1c7a87c8">Linked Data</a> circles) -- database systems (or data spaces) that manage proposition oriented records in 3-tuple (triples) or 4-tuple (quads) form. </p> <h3>How?</h3> <p>SPARQL queries are actually HTTP payloads (typically). Thus, using a RESTful client-server interaction pattern, you can dispatch calls to a SPARQL compliant data server and receive a payload for local processing e.g. local object binding re. PHP.</p> <h4>Steps:</h4> <ol> <li> From your command line execute: aptitude search '^PHP26', to verify PHP is in place </li> <li>Determine which SPARQL endpoint you want to access e.g. <a href="http://dbpedia.org/sparql" id="link-id0x1d476520">DBpedia</a> or a local <a class="auto-href" href="http://virtuoso.openlinksw.com" id="link-id0x1bcfe140">Virtuoso</a> instance (typically: http://localhost:8890/sparql). </li> <li>If using Virtuoso, and you want to populate its quad store using SPARQL, assign "<a href="http://docs.openlinksw.com/virtuoso/rdfsparql.html#rdfsupportedprotocolendpointuri" id="link-id0x1c7630b8">SPARQL_SPONGE</a>" privileges to user "SPARQL" (this is basic control, more sophisticated WebID based ACLs are available for controlling SPARQL access).</li> </ol> <h4>Script:</h4> <pre> #!/usr/bin/env php <?php # # Demonstrating use of a single query to populate a # Virtuoso Quad Store via PHP. # # HTTP <a href="http://dbpedia.org/resource/Uniform_Resource_Locator" id="link-id0x1ce1d6d8">URL</a> is constructed accordingly with JSON query results format in mind. function sparqlQuery($query, $baseURL, $format="application/json") { $params=array( "default-graph" => "", "should-sponge" => "soft", "query" => $query, "debug" => "on", "timeout" => "", "format" => $format, "save" => "display", "fname" => "" ); $querypart="?"; foreach($params as $name => $value) { $querypart=$querypart . $name . '=' . urlencode($value) . "&"; } $sparqlURL=$baseURL . $querypart; return json_decode(file_get_contents($sparqlURL)); }; # Setting Data Source Name (DSN) $dsn="http://dbpedia.org/resource/DBpedia"; #Virtuoso pragmas for instructing SPARQL engine to perform an HTTP GET #using the IRI in FROM clause as Data Source URL $query="DEFINE get:soft \"replace\" SELECT DISTINCT * FROM <$dsn> WHERE {?s ?p ?o}"; $data=sparqlQuery($query, "http://localhost:8890/sparql/"); print "Retrieved data:\n" . json_encode($data); ?> </pre> <h4>Output</h4> <pre> Retrieved data: {"head": {"link":[],"vars":["s","p","o"]}, "results": {"distinct":false,"ordered":true, "bindings":[ {"s": {"type":"<a class="auto-href" href="http://dbpedia.org/resource/Uniform_Resource_Identifier" id="link-id0x1ca44a98">uri</a>","value":"http:\/\/dbpedia.org\/resource\/DBpedia"},"p": {"type":"uri","value":"http:\/\/www.w3.org\/1999\/02\/22-rdf-syntax-ns#type"},"o": {"type":"uri","value":"http:\/\/www.w3.org\/2002\/07\/owl#Thing"}}, {"s": {"type":"uri","value":"http:\/\/dbpedia.org\/resource\/DBpedia"},"p": {"type":"uri","value":"http:\/\/www.w3.org\/1999\/02\/22-rdf-syntax-ns#type"},"o": {"type":"uri","value":"http:\/\/dbpedia.org\/ontology\/Work"}}, {"s": {"type":"uri","value":"http:\/\/dbpedia.org\/resource\/DBpedia"},"p": {"type":"uri","value":"http:\/\/www.w3.org\/1999\/02\/22-rdf-syntax-ns#type"},"o": {"type":"uri","value":"http:\/\/dbpedia.org\/class\/yago\/Software106566077"}}, ... </pre> <h3>Conclusion</h3> <p> JSON was chosen over XML (re. output format) since this is about a "no-brainer installation and utilization" guide for a PHP developer that already knows how to use PHP for HTTP based data access. SPARQL just provides an added bonus to URL dexterity (delivered via URI abstraction) with regards to constructing Data Source Names or Addresses.</p> <h3>Related</h3> <ul> <li> <a href="http://www.openlinksw.com/dataspace/kidehen@openlinksw.com/weblog/kidehen@openlinksw.com%27s%20BLOG%20%5B127%5D/1651" id="link-id0x1a8c5ae0">SPARQL Guide for the Python Developer</a> </li> <li> <a href="http://www.openlinksw.com/dataspace/kidehen@openlinksw.com/weblog/kidehen@openlinksw.com%27s%20BLOG%20%5B127%5D/1648" id="link-id0x1b86ad28">SPARQL Guide for the Ruby Developer</a> </li> <li> <a href="http://www.openlinksw.com/dataspace/kidehen@openlinksw.com/weblog/kidehen@openlinksw.com%27s%20BLOG%20%5B127%5D/1646" id="link-id0x1c7af188">Simple Guide for using SPARQL with Virtuoso</a> </li> <li> <a href="http://www.delicious.com/kidehen/sparql_tutorial" id="link-id0x1ac1ba48">General SPARQL Tutorial Collection</a> </li> <li> <a href="http://www.delicious.com/kidehen/virtuoso_sparql_tutorial" id="link-id0x1c7be660">Virtuoso Specific SPARQL Tutorial Collection</a> </li> <li> <a href="http://www.openlinksw.com/dataspace/kidehen@openlinksw.com/weblog/kidehen@openlinksw.com%27s%20BLOG%20%5B127%5D/1567" id="link-id0x1c52b438">The URI, URL, and Linked Data Meme's Generic HTTP URI</a>. </li> </ul>
SPARQL Guide for Python Developer
http://www.openlinksw.com:443/blog/kidehen@openlinksw.com/blog/?date=2011-01-19#1651
2011-01-19T17:13:30Z
2011-01-25T10:35:46-05:00
<h3>What?</h3> <p>A simple guide usable by any <a class="auto-href" href="http://dbpedia.org/resource/Python_programming_language" id="link-id0x1bdca7b8">Python</a> developer seeking to exploit <a class="auto-href" href="http://dbpedia.org/resource/SPARQL" id="link-id0x1c894338">SPARQL</a> without hassles.</p> <h3>Why?</h3> <p>SPARQL is a powerful query language, results serialization format, and an HTTP based <a href="http://dbpedia.org/resource/Data">data</a> access protocol from the W3C. It provides a mechanism for accessing and integrating data across <a href="http://en.wikipedia.org/wiki/Deductive_database" id="link-id0x1c319af0">Deductive Database Systems</a> (colloquially referred to as triple or quad stores in <a class="auto-href" href="http://dbpedia.org/resource/Semantic_Web" id="link-id0x1d944d78">Semantic Web</a> and <a class="auto-href" href="http://dbpedia.org/resource/Linked_Data" id="link-id0x1c7a87c8">Linked Data</a> circles) -- database systems (or data spaces) that manage proposition oriented records in 3-tuple (triples) or 4-tuple (quads) form. </p> <h3>How?</h3> <p>SPARQL queries are actually HTTP payloads (typically). Thus, using a RESTful client-server interaction pattern, you can dispatch calls to a SPARQL compliant data server and receive a payload for local processing e.g. local object binding re. Python.</p> <h4>Steps:</h4> <ol> <li> From your command line execute: aptitude search '^python26', to verify Python is in place </li> <li>Determine which SPARQL endpoint you want to access e.g. <a href="http://dbpedia.org/sparql" id="link-id0x1d476520">DBpedia</a> or a local <a class="auto-href" href="http://virtuoso.openlinksw.com" id="link-id0x1bcfe140">Virtuoso</a> instance (typically: http://localhost:8890/sparql). </li> <li>If using Virtuoso, and you want to populate its quad store using SPARQL, assign "<a href="http://docs.openlinksw.com/virtuoso/rdfsparql.html#rdfsupportedprotocolendpointuri" id="link-id0x1c7630b8">SPARQL_SPONGE</a>" privileges to user "SPARQL" (this is basic control, more sophisticated WebID based ACLs are available for controlling SPARQL access).</li> </ol> <h4>Script:</h4> <pre> #!/usr/bin/env python # # Demonstrating use of a single query to populate a # Virtuoso Quad Store via Python. # import urllib, json # HTTP <a class="auto-href" href="http://dbpedia.org/resource/Uniform_Resource_Locator" id="link-id0x1bd91cf0">URL</a> is constructed accordingly with JSON query results format in mind. def sparqlQuery(query, baseURL, format="application/json"): params={ "default-graph": "", "should-sponge": "soft", "query": query, "debug": "on", "timeout": "", "format": format, "save": "display", "fname": "" } querypart=urllib.urlencode(params) response = urllib.urlopen(baseURL,querypart).read() return json.loads(response) # Setting Data Source Name (DSN) dsn="http://dbpedia.org/resource/DBpedia" # Virtuoso pragmas for instructing SPARQL engine to perform an HTTP GET # using the IRI in FROM clause as Data Source URL query="""DEFINE get:soft "replace" SELECT DISTINCT * FROM <%s> WHERE {?s ?p ?o}""" % dsn data=sparqlQuery(query, "http://localhost:8890/sparql/") print "Retrieved data:\n" + json.dumps(data, sort_keys=True, indent=4) # # End </pre> <h4>Output</h4> <pre> Retrieved data: { "head": { "link": [], "vars": [ "s", "p", "o" ] }, "results": { "bindings": [ { "o": { "type": "<a class="auto-href" href="http://dbpedia.org/resource/Uniform_Resource_Identifier" id="link-id0x1b1470b8">uri</a>", "value": "http://www.w3.org/2002/07/owl#Thing" }, "p": { "type": "uri", "value": "http://www.w3.org/1999/02/22-rdf-syntax-ns#type" }, "s": { "type": "uri", "value": "http://dbpedia.org/resource/DBpedia" } }, ... </pre> <h3>Conclusion</h3> <p> JSON was chosen over XML (re. output format) since this is about a "no-brainer installation and utilization" guide for a Python developer that already knows how to use Python for HTTP based data access. SPARQL just provides an added bonus to URL dexterity (delivered via URI abstraction) with regards to constructing Data Source Names or Addresses.</p> <h3>Related</h3> <ul> <li> <a href="http://www.openlinksw.com/dataspace/kidehen@openlinksw.com/weblog/kidehen@openlinksw.com%27s%20BLOG%20%5B127%5D/1648" id="link-id0x1c9e26b0">SPARQL Guide for the Ruby Developer</a> </li> <li> <a href="http://www.openlinksw.com/dataspace/kidehen@openlinksw.com/weblog/kidehen@openlinksw.com%27s%20BLOG%20%5B127%5D/1646" id="link-id0x1c7af188">Simple Guide for using SPARQL with Virtuoso</a> </li> <li> <a href="http://www.delicious.com/kidehen/sparql_tutorial" id="link-id0x1ac1ba48">General SPARQL Tutorial Collection</a> </li> <li> <a href="http://www.delicious.com/kidehen/virtuoso_sparql_tutorial" id="link-id0x1c7be660">Virtuoso Specific SPARQL Tutorial Collection</a> </li> <li> <a href="http://www.openlinksw.com/dataspace/kidehen@openlinksw.com/weblog/kidehen@openlinksw.com%27s%20BLOG%20%5B127%5D/1567" id="link-id0x1c52b438">The URI, URL, and Linked Data Meme's Generic HTTP URI</a>. </li> </ul>
SPARQL for the Ruby Developer
http://www.openlinksw.com:443/blog/kidehen@openlinksw.com/blog/?date=2011-01-18#1648
2011-01-18T19:48:34Z
2011-01-25T10:17:12.000002-05:00
<h3>What?</h3> <p>A simple guide usable by any <a class="auto-href" href="http://dbpedia.org/resource/Ruby_programming_language" id="link-id0x1bb88908">Ruby</a> developer seeking to exploit <a class="auto-href" href="http://dbpedia.org/resource/SPARQL" id="link-id0x1ae67500">SPARQL</a> without hassles.</p> <h3>Why?</h3> <p>SPARQL is a powerful query language, results serialization format, and an HTTP based <a href="http://dbpedia.org/resource/Data">data</a> access protocol from the W3C. It provides a mechanism for accessing and integrating data across <a href="http://en.wikipedia.org/wiki/Deductive_database" id="link-id0x1bc61d88">Deductive Database Systems</a> (colloquially referred to as triple or quad stores in <a class="auto-href" href="http://dbpedia.org/resource/Semantic_Web" id="link-id0x1cc11420">Semantic Web</a> and <a class="auto-href" href="http://dbpedia.org/resource/Linked_Data" id="link-id0x1b2e7780">Linked Data</a> circles) -- database systems (or data spaces) that manage proposition oriented records in 3-tuple (triples) or 4-tuple (quads) form. </p> <h3>How?</h3> <p>SPARQL queries are actually HTTP payloads (typically). Thus, using a RESTful client-server interaction pattern, you can dispatch calls to a SPARQL compliant data server and receive a payload for local processing e.g. local object binding re. Ruby. </p> <h4>Steps:</h4> <ol> <li> From your command line execute: aptitude search '^ruby', to verify Ruby is in place </li> <li>Determine which SPARQL endpoint you want to access e.g. <a href="http://dbpedia.org/sparql" id="link-id0x1d476520">DBpedia</a> or a local <a class="auto-href" href="http://virtuoso.openlinksw.com" id="link-id0x1bcfe140">Virtuoso</a> instance (typically: http://localhost:8890/sparql). </li> <li>If using Virtuoso, and you want to populate its quad store using SPARQL, assign "<a href="http://docs.openlinksw.com/virtuoso/rdfsparql.html#rdfsupportedprotocolendpointuri" id="link-id0x1c7630b8">SPARQL_SPONGE</a>" privileges to user "SPARQL" (this is basic control, more sophisticated WebID based ACLs are available for controlling SPARQL access).</li> </ol> <h4>Script:</h4> <pre> #!/usr/bin/env ruby # # Demonstrating use of a single query to populate a # Virtuoso Quad Store. # require 'net/http' require 'cgi' require 'csv' # # We opt for CSV based output since handling this format is straightforward in Ruby, by default. # HTTP <a class="auto-href" href="http://dbpedia.org/resource/Uniform_Resource_Locator" id="link-id0x1acee348">URL</a> is constructed accordingly with CSV as query results format in mind. def sparqlQuery(query, baseURL, format="text/csv") params={ "default-graph" => "", "should-sponge" => "soft", "query" => query, "debug" => "on", "timeout" => "", "format" => format, "save" => "display", "fname" => "" } querypart="" params.each { |k,v| querypart+="#{k}=#{CGI.escape(v)}&" } sparqlURL=baseURL+"?#{querypart}" response = Net::HTTP.get_response(<a class="auto-href" href="http://dbpedia.org/resource/Uniform_Resource_Identifier" id="link-id0x1d24dfd8">URI</a>.parse(sparqlURL)) return CSV::parse(response.body) end # Setting Data Source Name (DSN) dsn="http://dbpedia.org/resource/DBpedia" #Virtuoso pragmas for instructing SPARQL engine to perform an HTTP GET #using the IRI in FROM clause as Data Source URL query="DEFINE get:soft \"replace\" SELECT DISTINCT * FROM <#{dsn}> WHERE {?s ?p ?o} " #Assume use of local installation of Virtuoso #otherwise you can change URL to that of a public endpoint #for example DBpedia: http://dbpedia.org/sparql data=sparqlQuery(query, "http://localhost:8890/sparql/") puts "Got data:" p data # # End </pre><h4>Output</h4> <pre> Got data: [["s", "p", "o"], ["http://dbpedia.org/resource/DBpedia", "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", "http://www.w3.org/2002/07/owl#Thing"], ["http://dbpedia.org/resource/DBpedia", "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", "http://dbpedia.org/ontology/Work"], ["http://dbpedia.org/resource/DBpedia", "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", "http://dbpedia.org/class/yago/Software106566077"], ... </pre> <h3>Conclusion</h3> <p> <a href="http://en.wikipedia.org/wiki/Comma-separated_values" id="link-id0x1cac8420">CSV</a> was chosen over XML (re. output format) since this is about a "no-brainer installation and utilization" guide for a Ruby developer that already knows how to use Ruby for HTTP based data access. SPARQL just provides an added bonus to URL dexterity (delivered via URI abstraction) with regards to constructing Data Source Names or Addresses.</p> <h3>Related</h3> <ul> <li> <a href="http://www.taxonconcept.org/how-to/ruby-code-examples/how-do-i-use-ruby-to-query-a-sparql-endpoint.html" id="link-id0x1aa83678">SPARQL and Ruby SPARQL Client Library Example</a> </li> <li> <a href="http://www.openlinksw.com/dataspace/kidehen@openlinksw.com/weblog/kidehen@openlinksw.com%27s%20BLOG%20%5B127%5D/1646" id="link-id0x1c7af188">Simple Guide for using SPARQL with Virtuoso</a> </li> <li> <a href="http://www.delicious.com/kidehen/sparql_tutorial" id="link-id0x1ac1ba48">General SPARQL Tutorial Collection</a> </li> <li> <a href="http://www.delicious.com/kidehen/virtuoso_sparql_tutorial" id="link-id0x1c7be660">Virtuoso Specific SPARQL Tutorial Collection</a> </li> <li> <a href="http://www.openlinksw.com/dataspace/kidehen@openlinksw.com/weblog/kidehen@openlinksw.com%27s%20BLOG%20%5B127%5D/1567" id="link-id0x1c52b438">The URI, URL, and Linked Data Meme's Generic HTTP URI</a>. </li> </ul>
Simple Virtuoso Installation & Utilization Guide for SPARQL Users (Update 5)
http://www.openlinksw.com:443/blog/kidehen@openlinksw.com/blog/?date=2011-01-16#1647
2011-01-16T07:06:21Z
2011-01-19T10:43:35-05:00
<h3>What is <a class="auto-href" href="http://dbpedia.org/resource/SPARQL" id="link-id0x1ab60ac0">SPARQL</a>?</h3> <p>A declarative query language from the W3C for querying structured propositional <a href="http://dbpedia.org/resource/Data">data</a> (in the form of 3-<a href="http://en.wikipedia.org/wiki/Tuple" id="link-id0x1b1e0010">tuple</a> [triples] or 4-tuple [quads] records) stored in a <a href="http://en.wikipedia.org/wiki/Deductive_database" id="link-id0x1cf8af98">deductive database</a> (colloquially referred to as triple or quad stores in <a class="auto-href" href="http://dbpedia.org/resource/Semantic_Web" id="link-id0x1caf5050">Semantic Web</a> and <a class="auto-href" href="http://dbpedia.org/resource/Linked_Data" id="link-id0x19d781b8">Linked Data</a> parlance).</p> <p>SPARQL is inherently platform independent. Like <a class="auto-href" href="http://dbpedia.org/resource/SQL" id="link-id0x1b879140">SQL</a>, the query language and the backend database engine are distinct. Database clients capture SPARQL queries which are then passed on to compliant backend databases.</p> <h3>Why is it important?</h3> <p>Like SQL for relational databases, it provides a powerful mechanism for accessing and joining data across one or more data partitions (named graphs identified by IRIs). The aforementioned capability also enables the construction of sophisticated Views, Reports (HTML or those produced in native form by desktop productivity tools), and data streams for other services.</p> <p>Unlike SQL, SPARQL includes result serialization formats and an HTTP based wire protocol. Thus, the ubiquity and sophistication of HTTP is integral to SPARQL i.e., client side applications (user agents) only need to be able to perform an HTTP GET against a <a class="auto-href" href="http://dbpedia.org/resource/Uniform_Resource_Locator" id="link-id0x1ba287e8">URL</a> en route to exploiting the power of SPARQL.</p> <h3>How do I use it, generally?</h3> <ol> <li>Locate a SPARQL endpoint (<a href="http://dbpedia.org/sparql" id="link-id0x1d7436b0">DBpedia</a>, <a href="http://lod.openlinksw.com/sparql" id="link-id0x1bf20690">LOD Cloud Cache</a>, <a href="http://semantic.data.gov" id="link-id0x1a8ebc28">Data.Gov</a>, <a href="http://linkeddata.uriburner.com/sparql" id="link-id0x1be93070">URIBurner</a>, <a href="http://www.delicious.com/kidehen/sparql_endpoint" id="link-id0x1cce9b40">others</a>), or;</li> <li>Install a SPARQL compliant database server (quad or triple store) on your desktop, workgroup server, data center, or cloud (e.g., <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtuosoEC2AMI" id="link-id0x1cd697a0">Amazon EC2 AMI</a>)</li> <li>Start the database server</li> <li>Execute SPARQL Queries via the <a href="http://lod.openlinksw.com/sparql" id="link-id0x1b99d790">SPARQL endpoint.</a> </li> </ol> <h3>How do I use SPARQL with <a class="auto-href" href="http://virtuoso.openlinksw.com" id="link-id0x1c9adc80">Virtuoso</a>?</h3> <p>What follows is a very simple guide for using SPARQL against your own instance of Virtuoso:</p> <ol> <li>Software Download and Installation</li> <li>Data Loading from Data Sources exposed at Network Addresses (e.g. HTTP URLs) using very simple methods</li> <li>Actual SPARQL query execution via SPARQL endpoint.</li> </ol> <h3>Installation Steps</h3> <ol> <li> Download <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VOSDownload" id="link-id0x1b795100">Virtuoso Open Source</a> or <a href="http://download.openlinksw.com/virtwiz/virtuoso.php" id="link-id0x1cce46f0">Virtuoso Commercial</a> Editions </li> <li> Run installer (if using Commercial edition of Windows Open Source Edition, otherwise follow build guide) </li> <li> Follow post-installation guide and verify installation by typing in the command: virtuoso -? (if this fails check you've followed installation and setup steps, then verify environment variables have been set) </li> <li> Start the Virtuoso server using the command: virtuoso-start.sh </li> <li> Verify you have a connection to the Virtuoso Server via the command: isql localhost (assuming you're using default DB settings) or the command: isql localhost:1112 (assuming demo database) or goto your browser and type in: http://<virtuoso-server-host-name>:[port]/conductor (e.g. http://localhost:8889/conductor for default DB or http://localhost:8890/conductor if using Demo DB) </li> <li> Go to SPARQL endpoint which is typically -- http://<virtuoso-server-host-name>:[port]/sparql </li> <li> Run a quick sample query (since the database always has system data in place): select distinct * where {?s ?p ?o} limit 50 .</li> </ol> <h3>Troubleshooting</h3> <ol> <li>Ensure environment settings are set and functional -- if using Mac OS X or Windows, so you don't have to worry about this, just start and stop your Virtuoso server using native OS services applets</li> <li>If using the Open Source Edition, follow the <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VOSMake#Getting%20Started" id="link-id0x1bfa7548">getting started guide</a> -- it covers PATH and startup directory location re. starting and stopping Virtuoso servers.</li> <li>Sponging (HTTP GETs against external Data Sources) within SPARQL queries is disabled by default. You can enable this feature by assigning "<a href="http://docs.openlinksw.com/virtuoso/rdfsparql.html#rdfsupportedprotocolendpointuri" id="link-id0x1d566270">SPARQL_SPONGE</a>" privileges to user "SPARQL". Note, more sophisticated security exists via <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtAuthPolicyFOAFSSL" id="link-id0x1a3c9eb8">WebID based ACLs</a>. </li> </ol> <h3>Data Loading Steps</h3> <ol> <li> Identify an RDF based structured data source of interest -- a file that contains 3-tuple / triples available at an address on a public or private HTTP based network </li> <li>Determine the Address (URL) of the RDF data source</li> <li>Go to your Virtuoso SPARQL endpoint and type in the following SPARQL query: DEFINE GET:SOFT "replace" SELECT DISTINCT * FROM <RDFDataSourceURL> WHERE {?s ?p ?o} </li> <li> All the triples in the RDF resource (data source accessed via URL) will be loaded into the Virtuoso Quad Store (using RDF Data Source URL as the internal quad store Named Graph IRI) as part of the SPARQL query processing pipeline. </li> </ol> <p> Note: the data source URL doesn't even have to be RDF based -- which is where the Virtuoso <a class="auto-href" href="http://virtuoso.openlinksw.com/Whitepapers/html/VirtSpongerWhitePaper.html" id="link-id0x1d1a0978">Sponger</a> Middleware comes into play (download and install the <a href="http://s3.amazonaws.com/opldownload/uda/vad-packages/6.1/virtuoso/rdf_mappers_dav.vad" id="link-id0x1d0e1530">VAD installer package</a> first) since it delivers the following features to Virtuoso's SPARQL engine: </p> <ol> <li> Transformation of data from non RDF data sources (file content, hypermedia resources, <a href="http://dbpedia.org/resource/World_Wide_Web">web</a> services output etc..) into RDF based 3-tuples (triples)</li> <li> Cache Invalidation Scheme Construction -- thus, subsequent queries (without the define get:soft "replace" pragma will not be required bar when you forcefully want to override cache).</li> <li> If you have very large data sources like DBpedia etc. from CKAN, simply use our <a href="http://www.openlinksw.com/dataspace/dav/wiki/Main/VirtBulkRDFLoader" id="link-id0x1d19b4b0">bulk loader</a> . </li> </ol> <h3>SPARQL Endpoint Discovery</h3> <p>Public SPARQL endpoints are emerging at an ever increasing rate. Thus, we've setup up a DNS lookup service that provides access to a large number of SPARQL endpoints. Of course, this doesn't cover all existing endpoints, so if our endpoint is missing please ping <a class="auto-href" href="http://myopenlink.net/dataspace/person/kidehen#this" id="link-id0x1d634848">me</a>.</p> <p>Here are a collection of commands for using DNS-SD to discover SPARQL endpoints:</p> <ol> <li>dns-sd -B _sparql._tcp sparql.openlinksw.com -- browse for services instances</li> <li>dns-sd -Z _sparql._tcp sparql.openlinksw.com -- output results in Zone File format</li> <li></li> </ol> <h3>Related</h3> <ol> <li> <a href="http://www.ensta.fr/~diam/ruby/online/ruby-doc-stdlib/libdoc/net/http/rdoc/index.html" id="link-id0x1b156610">Using HTTP from Ruby</a> -- you can just make <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VOSSparqlProtocol" id="link-id0x1d024d60">SPARQL Protocol URLs</a> re. SPARQL</li> <li> <a href="http://sparql.rubyforge.org/client/" id="link-id0x1cd43a48">Using SPARQL Endpoints via Ruby</a> -- Ruby example using DBpedia endpoint</li> <li> <a href="http://wikis.openlinksw.com/dataspace/owiki/wiki/OATWikiWeb/InteractiveSparqlQueryBuilder" id="link-id0x1b9d2190">Interactive SPARQL Query By Example (QBE) tool</a> -- provides a graphical user interface (as is common in SQL realm re. query building against <a class="auto-href" href="http://dbpedia.org/resource/Relational_database_management_system" id="link-id0x1bfffb70">RDBMS</a> engines) that works with any SPARQL endpoint </li> <li> <a href="http://www.openlinksw.com/dataspace/dav/wiki/Main/VirtRDFInsert" id="link-id0x1ab63de0">Other methods of loading RDF data into Virtuoso</a> </li> <li> <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSponger" id="link-id0x1ca248e0">Virtuoso Sponger</a> -- architecture and how it turns a wide variety of non RDF data sources into SPARQL accessible data </li> <li> <a href="http://ode.openlinksw.com/example.html" id="link-id0x1be34758">Using OpenLink Data Explorer</a> (ODE) to populate Virtuoso -- locate a resource of interest; click on a bookmarklet or use <a class="auto-href" href="http://dbpedia.org/resource/Context_%28language_use%29" id="link-id0x1ca84af0">context</a> menus (if using ODE extensions for Firefox, Safari, or Chrome); and you'll have SPARQL accessible data automatically inserted into your Virtuoso instance. </li> <li> <a href="http://www.openlinksw.com/dataspace/kidehen@openlinksw.com/weblog/kidehen@openlinksw.com%27s%20BLOG%20%5B127%5D/1295" id="link-id0x1c9060f0">W3C's SPARQLing Data Access Ingenuity</a> -- an older generic SPARQL introduction post </li> <li> <a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSPARQLRef" id="link-id0x1cf1e298">Collection of SPARQL Query Examples </a>-- GoodRelations (Product Offers), <a class="auto-href" href="http://dbpedia.org/resource/Friend_of_a_friend" id="link-id0x1c0445d0">FOAF</a> (Profiles), <a class="auto-href" href="http://dbpedia.org/resource/SIOC" id="link-id0x1b785e48">SIOC</a> (Data Spaces -- <a href="http://ods.openlinksw.com/dataspace/dav/wiki/ODS/ODSAtomOWLRefExampleBlog" id="link-id0x1b6c9f78">Blogs</a>, <a href="http://ods.openlinksw.com/dataspace/dav/wiki/ODS/ODSAtomOWLRefExampleWiki" id="link-id0x1c188280">Wikis</a>, <a href="http://ods.openlinksw.com/dataspace/dav/wiki/ODS/ODSAtomOWLRefExampleBookmarks" id="link-id0x1a9a8f98">Bookmarks</a>, <a href="http://ods.openlinksw.com/dataspace/dav/wiki/ODS/ODSAtomOWLRefExampleFeeds" id="link-id0x1720c658">Feed Collections</a>, <a href="http://ods.openlinksw.com/dataspace/dav/wiki/ODS/ODSAtomOWLRefExampleGallery" id="link-id0x1cdba348">Photo Galleries</a>, <a href="http://ods.openlinksw.com/dataspace/dav/wiki/ODS/ODSAtomOWLRefExampleBriefcase" id="link-id0x1c8f1148">Briefcase/DropBox</a>, <a href="http://ods.openlinksw.com/dataspace/dav/wiki/ODS/ODSAtomOWLRefExampleAddressbook" id="link-id0x1b5eb7e0">AddressBook</a>, <a href="http://ods.openlinksw.com/dataspace/dav/wiki/ODS/ODSAtomOWLRefExampleCalendar" id="link-id0x1c575120">Calendars</a>, <a href="http://ods.openlinksw.com/dataspace/dav/wiki/ODS/ODSAtomOWLRefExampleDiscussions" id="link-id0x1c73be98">Discussion Forums</a>) </li> <li> <a href="http://lod.openlinksw.com/demo_queries/" id="link-id0x1b08aa00">Collection of Live SPARQL Queries against LOD Cloud Cache</a> -- simple and advanced queries. </li> </ol>
Response to: Whole Data Post (Update 3)
http://www.openlinksw.com:443/blog/kidehen@openlinksw.com/blog/?date=2008-08-15#1413
2008-08-15T13:06:12Z
2008-08-15T18:31:48-04:00
<p>This post is in response to <a href="http://www.furia.com" id="link-id107907b8">Glenn McDonald</a>'s post titled: <a href="http://www.furia.com/page.cgi?type=log&id=308" id="link-id13dcf2d0">Whole Data</a>, where he highlights a number of issues relating to "<a href="http://dbpedia.org/resource/Semantic_Web" id="link-id1016c1f0">Semantic Web</a>" marketing communications and overall messaging, from his perspective.</p> <p> By coincidence, Glenn and I presented at this month's Cambridge <a href="http://dbpedia.org/resource/Semantic_Web" id="link-idd526f48">Semantic Web</a> Gathering.</p> <p>I've provided a dump of Glenn's issues and my responses below:</p> <h3>Issue - RDF</h3> <ul> <li>Ingenious <a href="http://dbpedia.org/resource/Data">data</a> decomposition idea, but: </li> <li>too low-level; the assembly language of data, where we need Java or <a href="http://dbpedia.org/resource/Ruby_programming_language" id="link-id103f3dd0">Ruby</a> </li> <li>"resource" is not the issue; there's no such thing as "metadata", it's all data; "meta" is a perspective </li> <li>lists need to be effortless, not painful and obscure </li> <li>nodes need to be represented, not just implied; they need types and literals in a more pervasive, integrated way. </li> </ul> <h4>Response:</h4> <p>RDF is a Graph based Data Model it stands for Resource Description Framework. The Metadata data angle comes from it's <a href="http://dbpedia.org/resource/Meta_Content_Framework" id="link-id1690df60">Meta Content Framework (MCF)</a> origins. You can express and serialize data based on the RDF Data Model using: Turtle, N3, TriX, N-Triples, and RDF/XML.</p> <h3>Issue - <a href="http://dbpedia.org/resource/SPARQL" id="link-id10234b38">SPARQL</a> (and Freebase's MQL)</h3> <p>These are just appeasement: <br />- old query paradigm: fishing in dark water with superstitiously tied lures; only works well in carefully stocked lakes <br />- we don't ask questions by defining answer shapes and then hoping they're dredged up whole.</p> <h4>Response:</h4> <p> <a href="http://dbpedia.org/resource/SPARQL" id="link-id16e45e50">SPARQL</a>, <a href="http://www.freebase.com/view/freebase/api" id="link-id13e7d468">MQL</a>, and <a href="http://msdn.microsoft.com/en-us/library/bb387145.aspx" id="link-id1516fbd8">Entity-SQL</a> are Graph Model oriented Query Languages. Query Languages always accompany Database Engines. <a href="http://dbpedia.org/resource/SQL" id="link-id13f8c100">SQL</a> is the Relational Model equivalent. </p> <h3>Issue - <a href="http://dbpedia.org/resource/Linked_Data" id="link-id171dee68">Linked Data</a> </h3> <p>Noble attempt to ground the abstract, but: <br />- <a href="http://dbpedia.org/resource/Uniform_Resource_Identifier" id="link-id1576d5f8">URI</a> dereferencing/namespace/<a href="http://dbpedia.org/resource/Open_world_assumption" id="link-id15f50180">open-world</a> issues focus too much technical attention on cross-source cases where the human issues dwarf the technical ones anyway <br />- <a href="http://dbpedia.org/resource/Friend_of_a_friend" id="link-id105df458">FOAF</a> query over the people in this room? forget it. <br />- link asymmetry doesn't scale <br />- identity doesn't scale <br />- generating RDF from non-graph sources: more appeasement, right where the win from actually converting could be biggest! </p> <h4>Response:</h4> <p>Innovative use of HTTP to deliver "<a href="http://dbpedia.org/resource/Reference_%28computer_science%29" id="link-id13eeab20">Data Access by Reference</a>" to the <a href="http://dbpedia.org/resource/Linked_Data" id="link-id13492610">Linked Data</a> <a href="http://dbpedia.org/resource/Giant_Global_Graph" id="link-id105dfc10">Web</a>.</p> <p>When you have a Data Model, Database Engine, and Query Language, the next thing you need is a Data Access mechanism that provides "<a href="http://dbpedia.org/resource/Reference_(computer_science)" id="link-id100ef2c0">Data Access by Reference</a>". <a href="http://dbpedia.org/resource/Open_Database_Connectivity" id="link-id16692e88">ODBC</a> and <a href="http://dbpedia.org/resource/Java_Database_Connectivity" id="link-id1699b970">JDBC</a> (amongst others) provide "<a href="http://dbpedia.org/resource/Reference_(computer_science)" id="link-id16034b48">Data Access by Reference</a>" via Data Source Names. <a href="http://dbpedia.org/resource/Linked_Data" id="link-id16690118">Linked Data</a> is about the same thing (URIs are Data Source Names) with the following differences:</p> <ul> <li>Naming is scoped to the <a href="http://dbpedia.org/resource/Entity" id="link-id1195dc48">entity</a> level rather than container level</li> <li>HTTP's use within the data source naming scheme expands the referencability of the Named <a href="http://dbpedia.org/resource/Entity" id="link-id10485760">Entity</a> Descriptions beyond traditional confines such as applications, operating systems, and database engines. </li> </ul> <h3> Issue - <a href="http://dbpedia.org/resource/Giant_Global_Graph" id="link-id104684d0">Giant Global Graph</a> </h3> <p>Hugely motivating and powerful idea, worthy of a superhero (Graphius!), but: <br />- giant and global parts are too hard, and starting global makes every problem harder <br />- local projects become unmanageable in global <a href="http://dbpedia.org/resource/Context_%28language_use%29" id="link-id12497088">context</a> (Cyc, Freebase data-modeling lists...). And my thus my plea, again. Forget "semantic" and "<a href="http://dbpedia.org/resource/World_Wide_Web">web</a>", let's fix the database tech first: <br />- node/arc data-model, path-based exploratory query-model <br />- data-graph applications built easily on top of this common model; building them has to be easy, because if it's hard, they'll be bad <br />- given good database tech, good web data-publishing tech will be trivial! <br />- given good tools for graphs, the problems of uniting them will be only as hard as they have to be.</p> <h4>Response:</h4> <p> <a href="http://dbpedia.org/resource/Giant_Global_Graph" id="link-id144466d8">Giant Global Graph</a> is just another moniker for a "Web of <a href="http://dbpedia.org/resource/Linked_Data" id="link-id15c2c738">Linked Data</a>" or "<a href="http://dbpedia.org/resource/Linked_Data" id="link-id14e73520">Linked Data</a> <a href="http://dbpedia.org/resource/Giant_Global_Graph" id="link-id10aef200">Web</a>".</p> <p>Multi-Model Database technology that meshes the best of the Graph & Relational Models exist. In a nutshell, this is what <a href="http://virtuoso.openlinksw.com" id="link-id13492e10">Virtuoso</a> is all about and it's existed for a very long time :-)</p> <p> <a href="http://virtuoso.openlinksw.com" id="link-id105a4f58">Virtuoso</a> is also a Virtual DBMS engine (so you can see Heterogeneous Relational Data via Graph Model <a href="http://dbpedia.org/resource/Context_%28language_use%29" id="link-id15845110">Context</a> Lenses). Naturally, it is also a <a href="http://dbpedia.org/resource/Linked_Data" id="link-id109e2c78">Linked Data</a> Deployment platform (or <a href="http://dbpedia.org/resource/Linked_Data" id="link-id1086d650">Linked Data</a> Sever). </p> <p>The issue isn't the "<a href="http://dbpedia.org/resource/Semantic_Web" id="link-id107f1ba8">Semantic Web</a>" moniker per se., it's about how <a href="http://dbpedia.org/resource/Linked_Data" id="link-id0xba72818">Linked Data</a> (foundation layer of <a href="http://dbpedia.org/resource/Semantic_Web" id="link-id101dbf50">Semantic Web</a>) gets introduced to users. As I said during the MIT Gathering: "The Web is experienced via Web Browsers primarily, so any enhancement to the Web must be exposed via traditional Web Browsers", which is why we've opted to simply add "View <a href="http://dbpedia.org/resource/Linked_Data">Linked Data</a> Sources" to the existing set of common Browser options that includes:</p> <ol> <li>View page in rendered form (default)</li> <li>View page source (i.e., how you see the markup behind the page)</li> </ol> <p>By exposing the Linked Data <a href="http://dbpedia.org/resource/Giant_Global_Graph" id="link-id15a04b70">Web</a> option as described above, you enable the Web user to knowingly transition from the traditional Rendered (X)HTML page view to the Linked Data View (i.e., structured data behind the page). This simple "User Interaction" tweak makes the notion of exploiting a Structured Web becomes somewhat clearer.</p> <p>The Linked Data <a href="http://dbpedia.org/resource/Giant_Global_Graph" id="link-id10a187d0">Web</a> isn't a panacea. It's just an addition to the existing Web that enrichens the things you can do with the Web. It's predominance, like any application feature, will be subject to the degrees to which it delivers tangible value or matrializes internal and external opportunity costs.</p> <p>Note: The Web isn't ubiquitous today becuase all it's users groked HTML Markup. It's ubquitity is a function of opportunity costs: there simply came a point in the Web boostrap when nobody could afford the opportunity costs associated with being off the Web. The same thing will play out with Linked Data and the broader <a href="http://dbpedia.org/resource/Semantic_Web" id="link-id10a97330">Semantic Web</a> vision.</p> <b>Links:</b> <ol> <li> <a href="http://virtuoso.openlinksw.com/presentations/Creating_Deploying_Exploiting_Linked_Data2/Creating_Deploying_Exploiting_Linked_Data2_TimBL_v3.html(15)" id="link-id137fc560">Linked Data Journey part of my Linked Data Planet Presentation Remix</a>(from slides 15 to 22 - which include bits from <a href="http://www.w3.org/People/Berners-Lee/card#i" id="link-id1048a968">TimBL</a>'s presentation)</li> <li> <a href="http://ode.openlinksw.com" id="link-id1667df98">OpenLink Data Explorer</a> </li> <li> <a href="http://ode.openlinksw.com/example.html" id="link-id137ee860">OpenLink Data Explorer Screenshots and examples</a>.</li> </ol>
Linked Data Illustrated and a Virtuoso Functionality Reminder
http://www.openlinksw.com:443/blog/kidehen@openlinksw.com/blog/?date=2008-04-28#1342
2008-04-28T17:32:47Z
2008-04-28T14:47:06.000001-04:00
<a href="http://myopenlink.net/dataspace/person/danieljohnlewis#this" id="link-id156ceb30">Daniel Lewis</a> has put together a nice <a href="http://vanirsystems.com/danielsblog/2008/04/27/linked-data-the-role-of-the-data-server/" id="link-id10456040">collection of Linked Data related posts</a> that illustrate the fundamentals of the <a href="http://dbpedia.org/resource/Linked_Data" id="link-id1033f6f0">Linked Data</a> <a href="http://dbpedia.org/resource/Giant_Global_Graph" id="link-id106fa168">Web</a> and the vital role that <a href="http://virtuoso.openlinksw.com" id="link-id10141c20">Virtuoso</a> plays as a deployment platform. Remember, <a href="http://virtuoso.openlinksw.com" id="link-id10301e38">Virtuoso</a> was architected in 1998 (see <a href="http://virtuoso.openlinksw.com/wiki/main/Main/VOSHistory" id="link-id10c44088">Virtuoso History</a>) in anticipation of the eventual <a href="http://dbpedia.org/resource/Internet" id="link-id1383a1e8">Internet</a>, <a href="http://dbpedia.org/resource/Intranet" id="link-id1028e770">Intranet</a>, and <a href="http://dbpedia.org/resource/Extranet" id="link-id14b07b40">Extranet</a> level requirements for a different kind of Server. At the time of <a href="http://virtuoso.openlinksw.com" id="link-id14ad24a8">Virtuoso</a>'s inception, many thought our desire to build a multi-protocol, multi-model, and multi-purpose, virtual and native <a href="http://dbpedia.org/resource/Data" id="link-id108dac48">data</a> server was sheer craziness, but we pressed on (courtesy of our vision and technical capabilities). Today, we have a very sophisticated <a href="http://dbpedia.org/resource/Virtuoso_Universal_Server" id="link-id14a65d48">Universal Server</a> Platform (in Open Source and Commercial forms) that is naturally equipped to do the following via very simple interfaces: <ul> - Produce <a href="http://dbpedia.org/resource/Resource_Description_Framework" id="link-id11fb1170">RDF</a> <a href="http://dbpedia.org/resource/Linked_Data" id="link-id10871da8">Linked Data</a> from non <a href="http://dbpedia.org/resource/Resource_Description_Framework" id="link-id156ec3d0">RDF</a> <a href="http://dbpedia.org/resource/Data" id="link-id10f0ca38">Data</a> Sources (Heterogeneous <a href="http://dbpedia.org/resource/SQL" id="link-id15133078">SQL</a>, XML, <a href="http://dbpedia.org/resource/World_Wide_Web">Web</a> Services)</ul> <ul> - Provide highly scalable <a href="http://dbpedia.org/resource/Resource_Description_Framework" id="link-id10585940">RDF</a> <a href="http://dbpedia.org/resource/Data" id="link-id15151e10">Data</a> Management via a Quad Store (<a href="http://dbpedia.org/resource/DBpedia" id="link-id1530d640">DBpedia</a> is an example of a live demonstration)</ul> <ul> - Sophisticated Deployment of <a href="http://dbpedia.org/resource/Linked_Data" id="link-id10141c80">Linked Data</a> that exploits the power of <a href="http://dbpedia.org/resource/SPARQL" id="link-id1064fa18">SPARQL</a> </ul> <ul> - Powerful WebDAV innovations that simplify read-write mode interaction with <a href="http://dbpedia.org/resource/Linked_Data" id="link-id1396ff68">Linked Data</a> </ul> <ul> - Use Web <a href="http://dbpedia.org/resource/Federated_database_system" id="link-id108256e8">Data Virtualization</a> to address the pain and frustration associated with Web <a href="http://dbpedia.org/resource/Data" id="link-id147e65f8">Data</a> Silos (e.g. <a href="http://dbpedia.org/resource/OpenLink_Data_Spaces" id="link-idffaf078">OpenLink Data Spaces</a> layer stop <a href="http://virtuoso.openlinksw.com" id="link-id14ae8fe8">Virtuoso</a> that delivers <a href="http://dbpedia.org/resource/OpenLink_Data_Spaces" id="link-id0xa0fb5e40">Personal Data Spaces</a> / Unified Storage in the Clouds) </ul> <ul> - Deliver a <a href="http://dbpedia.org/resource/Linked_Data" id="link-id10869700">Linked Data</a> development and deployment platform to .<a href="http://dbpedia.org/resource/.NET_Framework" id="link-id1514cac0">NET</a> (<a href="http://dbpedia.org/resource/Visual_Basic" id="link-id10c107a8">VB</a>, <a href="http://dbpedia.org/resource/C_(programming_language)" id="link-id101f3c68">C</a>#) , Java, <a href="http://dbpedia.org/resource/PHP" id="link-id106e4710">PHP</a>, <a href="http://dbpedia.org/resource/Ruby_programming_language" id="link-id10277448">Ruby</a>, <a href="http://dbpedia.org/resource/Perl" id="link-id10a75748">Perl</a>, <a href="http://dbpedia.org/resource/Python_programming_language" id="link-id12fdb118">Python</a>, '<a href="http://dbpedia.org/resource/C_(programming_language)" id="link-id10c9d9e0">C</a>', <a href="http://dbpedia.org/resource/C%2B%2B" id="link-id10392400">C++</a>, and other developers </ul> <ul>- More...</ul>
Linked Data enabling PHP Applications
http://www.openlinksw.com:443/blog/kidehen@openlinksw.com/blog/?date=2008-04-10#1334
2008-04-10T18:09:49Z
2008-04-10T14:12:47-04:00
<p> <a href="http://myopenlink.net/dataspace/person/danieljohnlewis#this" id="link-id10820610">Daniel lewis</a> has penned a variation of post about <a href="http://vanirsystems.com/danielsblog/2008/04/10/simplified-adding-wordpress-blogs-into-the-linked-data-web-using-virtuoso/" id="link-id10827948">Linked Data enabling PHP applications</a> such as: <a href="http://dbpedia.org/resource/WordPress" id="link-id10426278">Wordpress</a>, <a href="http://dbpedia.org/resource/PhpBB" id="link-id13f431c0">phpBB3</a>, <a href="http://dbpedia.org/resource/MediaWiki" id="link-id10dd8760">MediaWiki</a> etc.</p> <p>Daniel simplifies my post by using diagrams to depict the different paths for <a href="http://dbpedia.org/resource/PHP" id="link-id10adcc08">PHP</a> based applications exposing <a href="http://dbpedia.org/resource/Linked_Data" id="link-id107b4e60">Linked Data</a> - especially those that already provide a significant amount of the content that drives <a href="http://dbpedia.org/resource/World_Wide_Web" id="link-id13b0ab48">Web</a> 2.0.</p> <p>If all the content in <a href="http://dbpedia.org/resource/World_Wide_Web" id="link-id0x1d499470">Web</a> 2.0 <a href="http://dbpedia.org/resource/Information" id="link-id12bd3b10">information</a> resources are distillable into discrete <a href="http://dbpedia.org/resource/Data" id="link-id10962060">data</a> objects endowed with <a href="http://dbpedia.org/resource/Hypertext_Transfer_Protocol" id="link-id176a30e8">HTTP</a> based IDs (URIs), with zero "<a href="http://www.openlinksw.com/weblog/public/search.vspx?blogid=127&q=rdf%20tax&type=text&output=html" id="link-id1098bcd8">RDF handcrafting Tax</a>", what do we end up with? A <a href="http://dbpedia.org/resource/Giant_Global_Graph" id="link-id1372ce88">Giant Global Graph</a> of <a href="http://dbpedia.org/resource/Linked_Data" id="link-id0xa29f0658">Linked Data</a>; the <a href="http://dbpedia.org/resource/World_Wide_Web">Web</a> as a Database.</p> <p>So, what used to apply exclusively, within enterprise settings re. <a href="http://dbpedia.org/resource/Oracle_Database" id="link-id12d91448">Oracle</a>, <a href="http://dbpedia.org/resource/IBM_DB2" id="link-id13dd27d8">DB2</a>, <a href="http://dbpedia.org/resource/IBM_Informix" id="link-id108e6b98">Informix</a>, <a href="http://dbpedia.org/resource/Ingres" id="link-id13383708">Ingres</a>, <a href="http://dbpedia.org/resource/Sybase" id="link-idfed8aa8">Sybase</a>, <a href="http://dbpedia.org/resource/Microsoft_SQL_Server" id="link-id10b8b190">Microsoft SQL Server</a>, <a href="http://dbpedia.org/resource/MySQL" id="link-id13066ea8">MySQL</a>, PostrgeSQL, Progress Open Edge, <a href="http://dbpedia.org/resource/Firebird_database_server" id="link-id104f0a78">Firebird</a>, and others, now applies to the Web. The Web becomes the "<a href="http://dbpedia.org/resource/federated_database_system" id="link-id105a5340">Distributed Database</a> Bus" that connects database records across disparate databases (or <a href="http://dbpedia.org/resource/Data" id="link-id0xc706c68">Data</a> Spaces). These databases manage and expose records that are remotely accessible "by reference" via <a href="http://dbpedia.org/resource/Hypertext_Transfer_Protocol" id="link-id0x1c8f7fe0">HTTP</a>.</p> <p>As I've stated at every opportunity in the past, Web 2.0 is the greatest thing that every happened to the <a href="http://dbpedia.org/resource/Semantic_Web" id="link-id13d65278">Semantic Web</a> vision :-) Without the "<a href="http://www.openlinksw.com/weblog/public/search.vspx?blogid=127&q=Web%202.0%20%20conundrum&type=text&output=html" id="link-id100d16d0">Web 2.0 Data Silo Conundrum</a>" we wouldn't have the cry for "<a href="http://dbpedia.org/resource/Data">Data</a> Portability" that brings a lot of clarity to some fundamental Web 2.0 limitations that end-users ultimately find unacceptable.</p> <p> In the late '80s, the <a href="http://dbpedia.org/resource/SQL" id="link-idff4f0d0">SQL</a> <a href="http://dbpedia.org/resource/SQL_Access_Group" id="link-id138fbd40">Access Group</a> (now part of <a href="http://dbpedia.org/resource/X/Open" id="link-id104ee010">X</a>/<a href="http://dbpedia.org/resource/X/Open" id="link-id0xac9eab8">Open</a>) addressed a similar problem with <a href="http://dbpedia.org/resource/Relational_database_management_system" id="link-id106d2008">RDBMS</a> silos within the enterprise that lead to the SAG <a href="http://dbpedia.org/resource/Call_Level_Interface" id="link-id105d45d0">CLI</a> which is exists today as Open Database Connectivity.</p> <p>In a sense we now have WODBC (Web Open Database Connectivity), comprised of Web Services based CLIs and/or traditional back-end DBMS CLIs (<a href="http://dbpedia.org/resource/Open_Database_Connectivity" id="link-id13f58708">ODBC</a>, <a href="http://dbpedia.org/resource/Java_Database_Connectivity" id="link-id10aa81e0">JDBC</a>, <a href="http://dbpedia.org/resource/ADO.NET" id="link-id5fddb68">ADO</a>.<a href="http://dbpedia.org/resource/ADO.NET" id="link-id0x9f085a10">NET</a>, OLE-DB, or Native), Query Language (<a href="http://dbpedia.org/resource/SPARQL" id="link-id10adb5c8">SPARQL</a> Query Language), and a Wire Protocol (<a href="http://dbpedia.org/resource/Hypertext_Transfer_Protocol">HTTP</a> based <a href="http://www.w3.org/TR/rdf-sparql-protocol/" id="link-id126fa068">SPARQL Protocol</a>) delivering Web infrastructure equivalents of <a href="http://dbpedia.org/resource/SQL" id="link-id0x1d0a5fc8">SQL</a> and RDA, but much better, and with much broader scope for delivering profound value due to the Web's inherent openness. Today's <a href="http://dbpedia.org/resource/PHP" id="link-id0xc88ed68">PHP</a>, <a href="http://dbpedia.org/resource/Python_programming_language" id="link-id10a70530">Python</a>, <a href="http://dbpedia.org/resource/Ruby_programming_language" id="link-id13d9da18">Ruby</a>, <a href="http://dbpedia.org/resource/Tcl" id="link-id10a3c2a8">Tcl</a>, <a href="http://dbpedia.org/resource/Perl" id="link-id13e1b6f0">Perl</a>, <a href="http://dbpedia.org/resource/ASP.NET" id="link-id10810388">ASP</a>.<a href="http://dbpedia.org/resource/ASP.NET" id="link-id0xa22ce378">NET</a> developer is the enterprise <a href="http://dbpedia.org/resource/4GL" id="link-id1396a500">4GL</a> developer of yore, without enterprise confinement. We could even be talking about <a href="http://dbpedia.org/resource/5GL" id="link-id1077f250">5GL</a> development once the <a href="http://dbpedia.org/resource/Linked_Data">Linked Data</a> interaction is meshed with dynamic languages (delivering higher levels of abstraction at the language and data interaction levels). Even the underlying schemas and basic design will evolve from <a href="http://dbpedia.org/resource/Closed_world_assumption" id="link-id10b280c8">Closed World</a> (solely) to a mesh of Closed & <a href="http://dbpedia.org/resource/Open_world_assumption" id="link-id104b9978">Open World</a> view schemas.</p>
Birds of a Feather Flock Together - Mac OS X & Rails
http://www.openlinksw.com:443/blog/kidehen@openlinksw.com/blog/?date=2006-10-20#1065
2006-10-20T23:55:40Z
2006-10-22T19:21:17.000001-04:00
<p>A very cool v<a href="http://www.apple.com/education/whymac/compsci/video.html">ideo promo for Ruby on Rails and Mac OS X</a>, or should I say: 37 Signals & Apple :-) Either way, very cool!</p> <p>BTW - We have just released a collection of <a href="http://rubyforge.org/projects/odbc-rails/">High-Performance Data Providers for ActiveRecord</a>. Our providers deliver </p> <blockquote>Consistent Functionality</blockquote> to RoR developers across <a href="http://virtuoso.openlinksw.com/wiki/main/">Virtuoso</a>, Oracle, SQL Server, Sybase, DB2, Ingres, Informix, and others without compromising performance or cross platform portability.
SPARQL Parameterized Queries (Virtuoso using SPARQL in SQL)
http://www.openlinksw.com:443/blog/kidehen@openlinksw.com/blog/?date=2006-05-11#973
2006-05-11T18:54:47Z
2006-06-22T08:56:58-04:00
<h2>SPARQL with SQL (Inline) </h2> <p>Virtuoso extends its SQL3 implementation with syntax for integrating SPARQL into queries and subqueries.Thus, as part of a SQL SELECT query or subquery, one can write the SPARQL keyword and a SPARQL query as part of query text processed by Virtuoso's SQL Query Processor.</p> <h4>Example 1 (basic) : </h4> <p>Using Virtuoso's Command line or the Web Based ISQL utility type in the following (note: "SQL>" is the command line prompt for the native ISQL utility): </p> <pre>SQL> sparql select distinct ?p where { graph ?g { ?s ?p ?o } };</pre> <p>Which will return the following: </p> <blockquote> <pre> p varchar ---------- http://example.org/ns#b http://example.org/ns#d http://xmlns.com/foaf/0.1/name http://xmlns.com/foaf/0.1/mbox ... </pre> </blockquote> <h4>Example 2 (a subquery variation):</h4> <pre>SQL> select distinct subseq (p, strchr (p, '#')) as fragment from (sparql select distinct ?p where { graph ?g { ?s ?p ?o } } ) as all_predicates where p like '%#%' ;</pre> <blockquote> <pre> fragment varchar ---------- #query #data #name #comment ...</pre> </blockquote> <h3>Parameterized Queries:</h3> <p>You can pass parameters to a SPARQL query using a Virtuoso-specific syntax extension. '??' or '$?' indicates a positional parameter similar to '?' in standard SQL. '??' can be used in graph patterns or anywhere else where a SPARQL variable is accepted. The value of a parameter should be passed in SQL form, i.e. this should be a number or an untyped string. An IRI ID can not be passed, but an absolute IRI can. Using this notation, a dynamic SQL capable client (ODBC, JDBC, ADO.NET, OLEDB, XMLA, or others) can execute parametrized SPARQL queries using parameter binding concepts that are common place in dynamic SQL. Which implies that existing SQL applications and development environments (PHP, Ruby, Python, Perl, VB, C#, Java, etc.) are capable of issuing SPARQL queries via their existing SQL bound data access channels against RDF Data stored in Virtuoso. </p> <p>Note: This is the Virtuoso equivalent of a <a href="http://seaborne.blogspot.com/2006/05/parameterized-queries_07.html">recently published example using Jena </a>(a Java based RDF Triple Store).</p> <h3>Example:</h3> <p>Create a Virtuoso Function by execting the following: </p> <pre>SQL> create function param_passing_demo (); { declare stat, msg varchar; declare mdata, rset any; exec ('sparql select ?s where { graph ?g { ?s ?? ?? }}', stat, msg, vector ('http://www.w3.org/2001/sw/DataAccess/tests/data/Sorting/sort-0#int1', 4 ), -- Vector of two parameters 10, -- Max. result-set rows mdata, -- Variable for handling result-set metadata rset -- Variable for handling query result-set ); return rset[0][0]; } </pre> Test new "param_passing_demo" function by executing the following: <br /> <pre>SQL> select param_passing_demo (); </pre> <p>Which returns: </p> <blockquote> <pre> callret VARCHAR _______________________________________________________________________________</pre> <pre>http://www.w3.org/2001/sw/DataAccess/tests/data/Sorting/sort-0#four</pre> <pre>1 Rows. -- 00000 msec.</pre> </blockquote> <h3>Â </h3> <h3>Using SPARQL in SQL Predicates:</h3> <p>A SPARQL ASK query can be used as an argument of the SQL EXISTS predicate.</p> <pre>create function sparql_ask_demo () returns varchar { if (exists (sparql ask where { graph ?g { ?s ?p 4}})) return 'YES'; else return 'NO'; }; </pre> <p> <br /> Test by executing: </p> <pre>SQL> select sparql_ask_demo (); </pre> <p>Which returns:</p> <pre>_________________________ YES</pre>
New XTech web site, and why we don't sell presentation space
http://www.openlinksw.com:443/blog/kidehen@openlinksw.com/blog/?date=2006-03-14#939
2006-03-14T21:24:26Z
2006-06-22T08:56:58-04:00
<p> <a href="http://times.usefulinc.com/2006/03/14-xtech">New XTech web site, and why we don't sell presentation space</a>: "</p> <p>My too-long absence from writing much here can be ascribed to two, differently pleasant, activities. First, a fantastic vacation in Cuba, and second, the redesign and launch of the <a href="http://xtech06.usefulinc.com/">XTech web site</a>.</p> <p>Of the first, come to my place for dinner and I'll bore you at length about how amazing it was. Of the second, I'd like to bore you right now!</p> <p>Thanks to Ruby on Rails and a few late nights, the XTech site now has these new features:</p> <ul> <li> <a href="http://xtech06.usefulinc.com/schedule">Full conference schedule</a> (apart from 6 Mozilla talks I'm still nailing down)</li> <li> <a href="http://xtech06.usefulinc.com/">A blog</a>. With go-faster Atom 1.0 stripes and everything!</li> <li>Details on the newly-added <a href="http://xtech06.usefulinc.com/content/ajax">Ajax Developers' Day</a>.</li> </ul> <p>A few more details on the Ajax Developers' Day. As I mentioned before, when putting together the schedule we felt there was a lot of excellent content still missed out (I'm still feeling guilty at having rejected proposals from many good friends and excellent speakers). So, we put together an extra day at the beginning of the conference where we could go further into detail on Ajax technologies.</p> <p>This day, featuring speakers such as Simon Willison from Yahoo!, XML expert Kurt Cagle and OpenLaszlo's Max Carlson, will allow those working on Ajax projects--either deployment or toolkits--to meet, discuss best practice and move forward on new ideas. Although it's a day-long event, we didn't want to make the price tag as high as a full-day tutorial, so you can <a href="http://xtech06.usefulinc.com/content/registration">register</a> for the cost of a half-day tutorial.</p> <h4>A few implementation details</h4> <p>If that all sounded a little like advertising, here are some technical details worth sharing. The site's CMS is built on Ruby on Rails. Development was done on Linux, with the help of WINE to check out the view from Internet Explorer. The <a href="http://xtech06.usefulinc.com/public/newsletter">newsletter</a> is managed by the absurdly wonderful <a href="http://www.campaignmonitor.com/">CampaignMonitor</a>.</p> <h4>This conference not for sale</h4> <p>Before I went on vacation, there was some debate in various quarters about paid-for plenary and keynote slots in conferences. Though I hope it is obvious, I wanted to state where I, and thus the XTech conference, stand on this issue.</p> <p>It has always been my policy to maintain a strict separation between the commercial and editorial aspects of XTech. Although each year there's always a company who thinks they can buy a speaking slot, I never let this happen. The content of the conference is formed by editorial selection by the programme committee, who take the scores from the peer review panel as their primary guide.</p> <p>Aside from what I hope shows in the excellent quality of the talks and generally interesting keynotes (yes, we get it wrong occasionally!), there are two effects on the conference.</p> <ul> <li>Sponsors are that much more respected. When a sponsor respects the delegates' time and intelligence, but still attends, you know they're serious about engagement with attendees.<br /> </li> <li>A higher portion of the conference cost is in the registration fees than for some other conferences. We're still trying to keep the costs as low as we can, but we're not prepared to compromise the quality of the schedule by letting vendors buy talk time. </li> </ul>I hope this explains a little of my position. As a stance, it often creates more issues for me than it solves, but I believe it preserves XTech's reputation as a conference where you can hear some of the best no-fluff presentations on web technology.<br />" <p>(Via <a href="http://times.usefulinc.com/">Edd Dumbill's Weblog: Behind the Times</a>.)</p>
Google Ups Web 2.0 Ante with Web Services edition of AdWords
http://www.openlinksw.com:443/blog/kidehen@openlinksw.com/blog/?date=2005-01-28#673
2005-01-28T23:36:17Z
2006-06-22T08:56:58-04:00
<p>Google has just unveiled a <a href="http://www.openlinksw.com/blog/~kidehen/index.vspx?id=373">Web 2.0</a> initiative in the form of a <a href="http://www.google.com/apis/adwords/">Web Services interface for its AdWords service</a>. You can now programmatically interact with Google's keyword based advertising service using <a href="http://answers.com/main/ntquery?dym=0&cid=984588381&method=6">SOAP</a> calls (with service <a href="http://answers.com/main/ntquery?dym=2&cid=396232605&method=6">signature</a> described using <a href="http://answers.com/main/ntquery?s=wsdl">WSDL</a>).</p> <p>An immediate implication is that you can generate Google AdWords based adds using any development environment (<a href="http://docs.openlinksw.com/virtuoso/sqlprocedures.html">Virtuoso's SQL Stored Procedure Language</a>, any .NET bound language, Java, C/C++, PHP, Ruby, Perl, Python, TCL etc.) that supports SOAP, WSDL, and I would presume <a href="http://answers.com/main/ntquery?s=ws-security">WS-Security</a>.</p> <p>An even more interesting offshoot of this initiative from Google, is the fact that it could bring a degree of clarity to the issue of multi-protocol and multi-purpose servers (what I call <a href=" http://en.wikipedia.org/wiki/Universal_server">Universal Servers</a> e.g. <a href="http://virtuoso.openlinksw.com">OpenLink Virtuoso</a>). For instance, you could manage AdWords campaigns across product portfolios using Triggers (the SQL database kind) or Notification Services.</p>
eBay Will Someday Buy Oracle?
http://www.openlinksw.com:443/blog/kidehen@openlinksw.com/blog/?date=2003-07-07#202
2003-07-07T20:51:56Z
2006-06-22T08:56:58-04:00
<p><a href="http://slashdot.org/article.pl?sid=03/07/04/1955241">O'Reilly on the Commoditization of Software</a> </p> <p>Certinaly an interesting proposition, or should I say vision, but I don't think this proposition does justice to some of the valid insights contained in this recent <a href="http://www.idg.se/ArticlePages/idgnet.asp?id=4635">IDG interview </a>with <a href="http://tim.oreilly.com/">Tim O'Reilly</a>. Here are some of Tim's quotes:</p> <blockquote dir="ltr" style="MARGIN-RIGHT: 0px"> <p><em>"Nobody is pointing out something that I think is way more significant: all of the killer apps of the Internet era: Amazon (.com, Inc), Google (Inc.), and Maps.yahoo.com. They run on Linux or FreeBSD, but they're not apps in the way that people have traditionally thought of applications, so they just don't get considered. Amazon is built with Perl on top of Linux. It's basically a bunch of open source hackers, but they're working for a company that's as fiercely proprietary as any proprietary software company."</em></p></blockquote> <p dir="ltr">Solutions are always more important that the technology that makes up the solutions from a business development perspective. The trouble is that the constituent parts of a solution ultimately affect the longevity of the solution (the future adaptability of the solution), hence the middleware and components segments of the software industry.</p> <blockquote dir="ltr" style="MARGIN-RIGHT: 0px"> <p dir="ltr"><em>"With eBay it's even clearer. The fact is, it's the critical mass of marketplace buyers and sellers and all the information that people have put in that marketplace as a repository."<br /><br />"So I think we're going to find more and more places where that happens, where somebody gets a critical mass of customers and data and that becomes their source of value. On that basis, I will predict that -- this is an outrageous prediction -- but eBay will buy Oracle someday. The value will have moved so much to people who are not now seen as software suppliers."</em></p></blockquote> <p>In reading this article that I can only assume that Tim does realize the inevitable; computing is, and always will be about data -- creation, transformation, dissemination, and exploitation. That said, you don't maximize the opportunities that such a realization accords by acquiring the largest vendor of database software. </p> <p>The largest database vendor doesn't imply dominance in any of the following areas:</p> <ol> <li>Data Creation </li> <li>Data Storage</li> <li>Data Access</li> <li>Data Dissemination</li> <li>Data Exploitation</li></ol> <p>I see the Internet as the Database (comprising various forms), and the Web as a dominant database segment within Internet realm. Every Internet Point of Presence is really a point of Data interaction; Creation, Storage, Access, Dissemination, and Exploitation.</p> <p>eBay can acquire a license from Oracle or any other database vendor and still be sucessful, and all they need to do is come to the actual realization that like Amazon and Google they could become a very important Executable and Semantic Web platform by finally understanding that their home page isn't that important, it's the interactions with the site that matter. All of this is certainly achievable without acquiring Oracle.</p> <p>In short, this applies to any organization that seeks to incorporate the Internet into their operational strategy (Business Development, Customer Services, Intranets, Extranets etc.). I am inclined to believe that Sofware Commoditization (which has been with us for a very long time) is the new moniker for "its all about data" or to quote <a href="http://www.intertwingly.net/blog/index.rss">Sam Ruby</a>, "It's just data".</p>
Quest For Common Syndication
http://www.openlinksw.com:443/blog/kidehen@openlinksw.com/blog/?date=2003-06-24#180
2003-06-24T21:15:03Z
2006-06-22T08:56:58-04:00
<p dir="ltr"><a href="http://scriptingnews.userland.com/backissues/2003/06/24#When:3:47:37AM">Quest For Common Syndication</a> </p> <p dir="ltr">Under normal circumstances this would be a very scary propositon - weblogs have reached hype status, and this means 800 pound gorillas are approaching the patch!. Why should we create our own blogsphere FUD.</p> <p dir="ltr">Well things work differently in the blogspehere, and it leads to wonderful opportunities for like minded individuals to put their vast array of skills to constructive use. My hunch is that this effort -syndication format standardization- will be sorted out quickly, and even act as a showcase for the collaborative prowess of Blogs and Wikis. Take a look at the blog snippet below (I urge you to follow the Wiki link).</p> <blockquote dir="ltr" style="MARGIN-RIGHT: 0px"> <p><a href="http://www.intertwingly.net/blog/1472.html">Sam Ruby is leading</a> an effort to create a new weblog format and API. There's <a href="http://www.intertwingly.net/wiki/pie/">a Wiki</a> that's open for all to contribute to, and an impressive <a href="http://intertwingly.net/wiki/pie/RoadMap">list</a> of people who support the work. [via <a href="http://www.scripting.com/">Scripting News</a>]</p></blockquote> <p dir="ltr">I hope this is one of many similar efforts that usher in the next phase of the Web (the Semantic one of course!).</p> <p dir="ltr"> </p>
Blogs vs Wikis
http://www.openlinksw.com:443/blog/kidehen@openlinksw.com/blog/?date=2003-06-16#133
2003-06-16T16:51:40Z
2006-06-22T08:56:58-04:00
<A href="http://www.intertwingly.net/blog/1469.html">Blogs vs Wikis</A> <A href="http://x180.net/Blog/Conferences/NFJS/Milwaukee03Review.html">Bob Martin</A>: <EM>Blogs are for hearing about what an individual says about something. Wikis are for seeing what a community thinks about something.</EM> [via <A href="http://www.intertwingly.net/blog/">Sam Ruby</A>] <DIV></DIV>
Blogs vs Wikis
http://www.openlinksw.com:443/blog/kidehen@openlinksw.com/blog/?date=2003-06-16#278
2003-06-16T16:51:40Z
2006-06-22T08:56:58-04:00
<A href="http://www.intertwingly.net/blog/1469.html">Blogs vs Wikis</A> <A href="http://x180.net/Blog/Conferences/NFJS/Milwaukee03Review.html">Bob Martin</A>: <EM>Blogs are for hearing about what an individual says about something. Wikis are for seeing what a community thinks about something.</EM> [via <A href="http://www.intertwingly.net/blog/">Sam Ruby</A>] <DIV></DIV>
The Future of Internet Explorer
http://www.openlinksw.com:443/blog/kidehen@openlinksw.com/blog/?date=2003-05-27#334
2003-05-27T18:50:13Z
2006-06-22T08:56:58-04:00
<p><a href="http://www.slightlybent.com/200305archive001.asp#1053867954001">The Future of Internet Explorer</a> I Just said something to <a title="Sam Ruby" href="http://www.intertwingly.net/blog/1432.html" target="_blank">Sam Ruby</a> in a comment that has caused me to stop and think. We are currently seeing all kinds of supposedly leaked information and screenshots of MS's next operating system, Longhorn. This is not due out till the end of 2004 or the beginning of 2005. A full 1 1/2 to 2 years away. Where are all the leaked screenshots and Information on the next version of Internet Explorer? Is there a next version? I read somewhere the other day that the IE team was actually smaller than the MS Works team. given that IE owns 95% of the browser market and MS Works owns, what?, of the office suite market, this seems a little more strange. </p> <p><em>Not strange at all, that's how Monopolies operate. They do not have any embracing to do right now (in other words there is nothing to kill in this market place). </em></p> <p>I have over 150 weblogs I monitor through my new reader and a good portion of them are MS employees (becuase I work in a MS enviroment). To the best of my knowledge, not one of them is from the IE team. All this has lead me to ask if IE is dead. If so, is it because MS doesn't see any point in developing it further or could they be worried that any further development would be viewed as anti-competitive? </p> <p><em>The problem here is no direction, many of the larger companies live of the innovation of smaller companies. The like to say, "Ah"! "We'll have one of those in the future sometime...", and then crush smaller company if the FUD (Fear Uncertainty Doubt) doesn't bury the perceived threat (anything that is generating revenue that they aren't taxing; bottom-line). </em></p> <p><em>Well while the cat's away the mice will play, Mozilla is getting stronger and better by the minute. So there may just be a reason for IE to come back to its <u>destructive life</u>.</em></p> <p>[via <a href="http://www.slightlybent.com/default.asp">Slightly Bent</a>]</p> <p><em></em></p>
The Future of Internet Explorer
http://www.openlinksw.com:443/blog/kidehen@openlinksw.com/blog/?date=2003-05-27#62
2003-05-27T18:50:13Z
2006-06-22T08:56:58-04:00
<P><A href="http://www.slightlybent.com/200305archive001.asp#1053867954001">The Future of Internet Explorer</A> I Just said something to <A title="Sam Ruby" href="http://www.intertwingly.net/blog/1432.html" target=_blank>Sam Ruby</A> in a comment that has caused me to stop and think. We are currently seeing all kinds of supposedly leaked information and screenshots of MS's next operating system, Longhorn. This is not due out till the end of 2004 or the beginning of 2005. A full 1 1/2 to 2 years away. Where are all the leaked screenshots and Information on the next version of Internet Explorer? Is there a next version? I read somewhere the other day that the IE team was actually smaller than the MS Works team. given that IE owns 95% of the browser market and MS Works owns, what?, of the office suite market, this seems a little more strange. </P> <P><EM>Not strange at all, that's how Monopolies operate. They do not have any embracing to do right now (in other words there is nothing to kill in this market place). </EM></P> <P>I have over 150 weblogs I monitor through my new reader and a good portion of them are MS employees (becuase I work in a MS enviroment). To the best of my knowledge, not one of them is from the IE team. All this has lead me to ask if IE is dead. If so, is it because MS doesn't see any point in developing it further or could they be worried that any further development would be viewed as anti-competitive? </P> <P><EM>The problem here is no direction, many of the larger companies live of the innovation of smaller companies. The like to say, "Ah"! "We'll have one of those in the future sometime...", and then crush smaller company if the FUD (Fear Uncertainty Doubt) doesn't bury the perceived threat (anything that is generating revenue that they aren't taxing; bottom-line). </EM></P> <P><EM>Well while the cat's away the mice will play, Mozilla is getting stronger and better by the minute. So there may just be a reason for IE to come back to its <U>destructive life</U>.</EM></P> <P>[via <A href="http://www.slightlybent.com/default.asp">Slightly Bent</A>]</P> <P><EM></EM> </P> <DIV></DIV>
<a href="http://dotnetweblogs.com/britchie/posts/3920.aspx">.NET Languages Everywhere</a>
http://www.openlinksw.com:443/blog/kidehen@openlinksw.com/blog/?date=2003-05-16#30
2003-05-16T22:23:07Z
2006-06-22T08:56:58-04:00
<A href="http://dotnetweblogs.com/britchie/posts/3920.aspx">.NET Languages Everywhere</A> <P>More .NET languages are popping up everyday. I've put together one of the most extensive lists of languages and posted it <A href="http://www12.brinkster.com/brianr/languages.aspx">here</A>. </P> <P>Its pulled from many sources including: <A href="http://www.asp.net/Default.aspx?tabindex=8&tabid=40"><FONT face=Verdana size=2>.NET Languages</FONT></A><FONT face=Verdana size=2> (ASP.NET), </FONT><A href="http://www.cetus-links.org/oo_dotnet.html#oo_dotnet_netlang"><FONT face=Verdana size=2>Cetus</FONT></A>, <A href="http://www.gotdotnet.com/community/resources/Default.aspx?ResourceTypeDropDownList=Language+vendors"><FONT face=Verdana size=2>Language Vendors</FONT></A><FONT face=Verdana size=2> (MS GotDotNET), </FONT><A href="http://www.gotdotnet.com/team/lang/"><FONT face=Verdana size=2>.NET Language Group</FONT></A><FONT face=Verdana size=2> (MS GotDotNET), </FONT><A href="http://msdn.microsoft.com/vstudio/partners/language/default.asp"><FONT face=Verdana size=2>Visual Studio Partners: Language Vendors</FONT></A><FONT face=Verdana size=2> (MS), </FONT><FONT face=Verdana size=2><A href="http://www.go-mono.com/mailing-lists.html">Mono-list</A>, </FONT><FONT face=Verdana size=2><A href="http://www.google.com/">Google</A>, </FONT><FONT face=Verdana size=2><A href="http://sourceforge.net/">SourceForge.net</A></FONT></P> <UL> <LI><FONT face=Verdana size=2>Ada </FONT> <UL> <LI class=sub><A href="http://www.usafa.af.mil/dfcs/bios/mcc_html/a_sharp.html"><FONT face=Verdana size=2>A# - port of Ada to .NET</FONT></A><FONT face=Verdana size=2> (Dr. Martin C. Carlisle) </FONT></LI></UL> <LI><FONT face=Verdana size=2>APL </FONT> <UL> <LI class=sub><A href="http://www.dyadic.com/"><FONT face=Verdana size=2>Dyalog.Net - Dyalog APL</FONT></A><FONT face=Verdana size=2> (Dyadic) </FONT></LI></UL> <LI><FONT face=Verdana size=2>AsmL </FONT> <UL> <LI><A href="http://research.microsoft.com/fse/asml/"><FONT face=Verdana size=2>Abstract State Machine Language</FONT></A><FONT face=Verdana size=2> (MS Research)</FONT></LI></UL> <LI><FONT face=Verdana size=2>Visual Basic </FONT> <UL> <LI class=sub><A href="http://msdn.microsoft.com/vbasic/"><FONT face=Verdana size=2>VB.NET</FONT></A><FONT face=Verdana size=2> (MS) </FONT> <LI class=sub><A href="http://www.go-mono.com/mbas.html"><FONT face=Verdana size=2>mbas</FONT></A><FONT face=Verdana size=2> (Mono/Ximian) </FONT></LI></UL> <LI><FONT face=Verdana size=2>C# </FONT> <UL> <LI><A href="http://msdn.microsoft.com/vcsharp/"><FONT face=Verdana size=2>C#</FONT></A><FONT face=Verdana size=2> (MS) </FONT> <LI><A href="http://www.go-mono.com/c-sharp.html"><FONT face=Verdana size=2>mcs</FONT></A><FONT face=Verdana size=2> (Mono/Ximian)</FONT> <LI><FONT face=Verdana size=2><A href="http://www.southern-storm.com.au/portable_net.html">cscc</A> (DotGNU Portable.NET)</FONT></LI></UL> <LI class=sub><FONT face=Verdana size=2>Caml </FONT> <UL> <LI class=sub><A href="http://research.microsoft.com/projects/ilx/fsharp.htm"><FONT face=Verdana size=2>F# (ML and Caml), Abstract IL, ILX</FONT></A><FONT face=Verdana size=2> (MS Research) </FONT></LI></UL> <LI class=sub><FONT face=Verdana size=2>C++ </FONT> <UL> <LI class=sub><A href="http://msdn.microsoft.com/vstudio/techinfo/articles/upgrade/managedext.asp"><FONT face=Verdana size=2>Managed Extensions for C++</FONT></A><FONT face=Verdana size=2> (MS) </FONT> <LI class=sub><A href="http://www.gotdotnet.com/team/cplusplus/"><FONT face=Verdana size=2>Managed and Unmanaged C++</FONT></A><FONT face=Verdana size=2> (GotDotNet) </FONT></LI></UL> <LI class=sub><FONT face=Verdana size=2>Cobol </FONT> <UL> <LI class=sub><A href="http://www.netcobol.com/"><FONT face=Verdana size=2>NetCOBOL - COBOL for .NET</FONT></A><FONT face=Verdana size=2> (Fujitsu) </FONT> <LI class=sub><A href="http://www.microfocus.com/products/netexpress/"><FONT face=Verdana size=2>Net Express</FONT></A><FONT face=Verdana size=2> (Micro Focus) </FONT></LI></UL> <LI><FONT face=Verdana size=2>Delphi </FONT> <UL> <LI class=sub><A href="http://borland.com/dotnet/"><FONT face=Verdana size=2>Borland Delphi and C++Builder Support for .NET</FONT></A><FONT face=Verdana size=2> (Borland) </FONT> <LI class=sub><A href="http://sourceforge.net/projects/delphinet"><FONT face=Verdana size=2>Delphi.NET - interoperability tools</FONT></A><FONT face=Verdana size=2> (Marcus Schmidt) </FONT></LI></UL> <LI class=sub><FONT face=Verdana size=2>Eiffel </FONT> <UL> <LI class=sub><A href="http://www.eiffel.com/"><FONT face=Verdana size=2>Eiffel for .NET</FONT></A><FONT face=Verdana size=2> (Interactive Software Engineering) </FONT></LI></UL> <LI class=sub><FONT face=Verdana size=2>Forth </FONT> <UL> <LI class=sub><A href="http://www.dataman.ro/dforth/"><FONT face=Verdana size=2>Delta Forth .NET</FONT></A><FONT face=Verdana size=2> (Valer BOCAN) </FONT></LI></UL> <LI class=sub><FONT face=Verdana size=2>Fortran </FONT> <UL> <LI class=sub><A href="http://www.lahey.com/dotnet.htm"><FONT face=Verdana size=2>Lahey/Fujitsu Fortran for .NET</FONT></A><FONT face=Verdana size=2> (Lahey Computer Systems, Inc.) </FONT> <LI class=sub><A href="http://www.salfordsoftware.co.uk/compilers/ftn95/dotnet.shtml"><FONT face=Verdana size=2>FTN95 - Fortran for Microsoft .NET</FONT></A><FONT face=Verdana size=2> (Salford Software Ltd.) </FONT></LI></UL> <LI class=sub><FONT face=Verdana size=2>Java </FONT> <UL> <LI class=sub><A href="http://msdn.microsoft.com/vjsharp/"><FONT face=Verdana size=2>Visual J# .NET</FONT></A><FONT face=Verdana size=2> (MS) </FONT> <LI class=sub><A href="http://weblog.ikvm.net/"><FONT face=Verdana size=2>IKVM.NET</FONT></A><FONT face=Verdana size=2> - Java VM for .NET </FONT></LI></UL> <LI class=sub><FONT face=Verdana size=2>JavaScript </FONT></LI> <UL> <LI class=sub><A href="http://www.gotdotnet.com/team/jscript/"><FONT face=Verdana size=2>JScript .NET</FONT></A><FONT face=Verdana size=2> (GotDotNet) </FONT></LI> <LI class=sub><A href="http://janet-js.sourceforge.net/"><FONT face=Verdana size=2>JANET</FONT></A><FONT face=Verdana size=2> - JavaScript-compatible language</FONT></LI></UL> <LI class=sub><FONT face=Verdana size=2>LOGO </FONT> <UL> <LI class=sub><A href="http://monologo.sourceforge.net/"><FONT face=Verdana size=2>MonoLOGO</FONT></A><FONT face=Verdana size=2> (Richard Hestilow) </FONT></LI></UL> <LI class=sub><FONT face=Verdana size=2>Lua <UL> <LI class=sub><A href="http://www.tecgraf.puc-rio.br/~rcerq/luadotnet/"><FONT face=Verdana size=2>Lua.NET: Integrating Lua with Rotor</FONT></A><FONT face=Verdana size=2> (PUC-RIO</FONT> </FONT></LI></UL> <LI class=sub><FONT face=Verdana size=2>Mercury </FONT> <UL> <LI class=sub><A href="http://www.cs.mu.oz.au/research/mercury/dotnet.html"><FONT face=Verdana size=2>Mercury on .NET</FONT></A></LI></UL> <LI class=sub><FONT face=Verdana size=2>Mondrian</FONT> <UL> <LI class=sub><FONT face=Verdana size=2><A href="http://www.mondrian-script.org/"><FONT face=Verdana size=2>Mondrian and Haskell for .NET</FONT></A><FONT face=Verdana size=2> (Nigel Perry) </FONT></FONT></LI></UL> <LI class=sub><FONT face=Verdana size=2>Oberon </FONT> <UL> <LI class=sub><A href="http://www.oberon.ethz.ch/oberon.net/"><FONT face=Verdana size=2>Active Oberon for .net</FONT></A><FONT face=Verdana size=2> (ETH Zuerich) </FONT></LI></UL> <LI class=sub><FONT face=Verdana size=2>Perl </FONT> <UL> <LI class=sub><A href="http://aspn.activestate.com/ASPN/NET/"><FONT face=Verdana size=2>Perl for .NET, PerlNET</FONT></A><FONT face=Verdana size=2> (ActiveState SRL.) </FONT></LI></UL> <LI><FONT face=Verdana size=2>Pascal </FONT> <UL> <LI class=sub><A href="http://www.fit.qut.edu.au/PLAS/ComponentPascal/"><FONT face=Verdana size=2>Component Pascal</FONT></A><FONT face=Verdana size=2> (QUT) </FONT></LI></UL> <LI><FONT face=Verdana size=2>PHP </FONT> <UL> <LI><A href="http://www.akbkhome.com/Projects/PHP_Sharp"><FONT face=Verdana size=2>PHP Sharp</FONT></A></LI></UL> <LI><FONT face=Verdana size=2>Python </FONT> <UL> <LI><A href="http://home.attbi.com/~chetangadgil//DotNetWrapperForPython.htm"><FONT face=Verdana size=2>KOBRA</FONT></A><FONT face=Verdana size=2> </FONT> <LI class=sub><A href="http://starship.python.net/crew/mhammond/dotnet/"><FONT face=Verdana size=2>Open Source Python for .NET</FONT></A><FONT face=Verdana size=2> (Mark Hammond) </FONT></LI></UL> <LI><FONT face=Verdana size=2>Ruby </FONT> <UL> <LI><A href="http://www.geocities.co.jp/SiliconValley-PaloAlto/9251/ruby/nrb.html"><FONT face=Verdana size=2>NetRuby</FONT></A></LI></UL> <LI><FONT face=Verdana size=2>RPG </FONT> <UL> <LI><A href="http://msdn.microsoft.com/vstudio/partners/language/asna.asp"><FONT face=Verdana size=2>ASNA Visual RPG for .NET</FONT></A></LI></UL> <LI><FONT face=Verdana size=2>Scheme </FONT> <UL> <LI class=sub><A href="http://rover.cs.nwu.edu/~scheme/"><FONT face=Verdana size=2>Scheme</FONT></A><FONT face=Verdana size=2> (Northwestern University) </FONT></LI></UL> <LI><FONT face=Verdana size=2>Small Talk </FONT> <UL> <LI><A href="http://www.smallscript.org/"><FONT face=Verdana size=2>S#</FONT></A><FONT face=Verdana size=2> (SmallScript LLC)</FONT></LI></UL> <LI><FONT face=Verdana size=2>SML (Standard Meta Language) </FONT> <UL> <LI class=sub><A href="http://www.cl.cam.ac.uk/Research/TSG/SMLNET/"><FONT face=Verdana size=2>SML.NET</FONT></A><FONT face=Verdana size=2> (MS Research, University of Cambridge) </FONT></LI></UL> <LI><FONT face=Verdana size=2>Visual Basic </FONT> <UL> <LI class=sub><A href="http://msdn.microsoft.com/vbasic/"><FONT face=Verdana size=2>VB.NET</FONT></A><FONT face=Verdana size=2> (MS) </FONT> <LI class=sub><A href="http://www.go-mono.com/mbas.html"><FONT face=Verdana size=2>mbas</FONT></A><FONT face=Verdana size=2> (Mono/Ximian)</FONT></LI></UL></LI></UL> <P class=sub><FONT face=Verdana size=2>I'll try to keep this updated when I run across a new language. If anyone knows of any others, let <A href="about:blankbrianlritchie@hotmail.com">me</A> know.</FONT>[via <A href="http://dotnetweblogs.com/britchie/">Brian Ritchie's Blog</A>]</P> <DIV></DIV>
<a href="http://dotnetweblogs.com/britchie/posts/3920.aspx">.NET Languages Everywhere</a>
http://www.openlinksw.com:443/blog/kidehen@openlinksw.com/blog/?date=2003-05-16#303
2003-05-16T22:23:07Z
2006-06-22T08:56:58-04:00
<A href="http://dotnetweblogs.com/britchie/posts/3920.aspx">.NET Languages Everywhere</A> <P>More .NET languages are popping up everyday. I've put together one of the most extensive lists of languages and posted it <A href="http://www12.brinkster.com/brianr/languages.aspx">here</A>. </P> <P>Its pulled from many sources including: <A href="http://www.asp.net/Default.aspx?tabindex=8&tabid=40"><FONT face=Verdana size=2>.NET Languages</FONT></A><FONT face=Verdana size=2> (ASP.NET), </FONT><A href="http://www.cetus-links.org/oo_dotnet.html#oo_dotnet_netlang"><FONT face=Verdana size=2>Cetus</FONT></A>, <A href="http://www.gotdotnet.com/community/resources/Default.aspx?ResourceTypeDropDownList=Language+vendors"><FONT face=Verdana size=2>Language Vendors</FONT></A><FONT face=Verdana size=2> (MS GotDotNET), </FONT><A href="http://www.gotdotnet.com/team/lang/"><FONT face=Verdana size=2>.NET Language Group</FONT></A><FONT face=Verdana size=2> (MS GotDotNET), </FONT><A href="http://msdn.microsoft.com/vstudio/partners/language/default.asp"><FONT face=Verdana size=2>Visual Studio Partners: Language Vendors</FONT></A><FONT face=Verdana size=2> (MS), </FONT><FONT face=Verdana size=2><A href="http://www.go-mono.com/mailing-lists.html">Mono-list</A>, </FONT><FONT face=Verdana size=2><A href="http://www.google.com/">Google</A>, </FONT><FONT face=Verdana size=2><A href="http://sourceforge.net/">SourceForge.net</A></FONT></P> <UL> <LI><FONT face=Verdana size=2>Ada </FONT> <UL> <LI class=sub><A href="http://www.usafa.af.mil/dfcs/bios/mcc_html/a_sharp.html"><FONT face=Verdana size=2>A# - port of Ada to .NET</FONT></A><FONT face=Verdana size=2> (Dr. Martin C. Carlisle) </FONT></LI></UL> <LI><FONT face=Verdana size=2>APL </FONT> <UL> <LI class=sub><A href="http://www.dyadic.com/"><FONT face=Verdana size=2>Dyalog.Net - Dyalog APL</FONT></A><FONT face=Verdana size=2> (Dyadic) </FONT></LI></UL> <LI><FONT face=Verdana size=2>AsmL </FONT> <UL> <LI><A href="http://research.microsoft.com/fse/asml/"><FONT face=Verdana size=2>Abstract State Machine Language</FONT></A><FONT face=Verdana size=2> (MS Research)</FONT></LI></UL> <LI><FONT face=Verdana size=2>Visual Basic </FONT> <UL> <LI class=sub><A href="http://msdn.microsoft.com/vbasic/"><FONT face=Verdana size=2>VB.NET</FONT></A><FONT face=Verdana size=2> (MS) </FONT> <LI class=sub><A href="http://www.go-mono.com/mbas.html"><FONT face=Verdana size=2>mbas</FONT></A><FONT face=Verdana size=2> (Mono/Ximian) </FONT></LI></UL> <LI><FONT face=Verdana size=2>C# </FONT> <UL> <LI><A href="http://msdn.microsoft.com/vcsharp/"><FONT face=Verdana size=2>C#</FONT></A><FONT face=Verdana size=2> (MS) </FONT> <LI><A href="http://www.go-mono.com/c-sharp.html"><FONT face=Verdana size=2>mcs</FONT></A><FONT face=Verdana size=2> (Mono/Ximian)</FONT> <LI><FONT face=Verdana size=2><A href="http://www.southern-storm.com.au/portable_net.html">cscc</A> (DotGNU Portable.NET)</FONT></LI></UL> <LI class=sub><FONT face=Verdana size=2>Caml </FONT> <UL> <LI class=sub><A href="http://research.microsoft.com/projects/ilx/fsharp.htm"><FONT face=Verdana size=2>F# (ML and Caml), Abstract IL, ILX</FONT></A><FONT face=Verdana size=2> (MS Research) </FONT></LI></UL> <LI class=sub><FONT face=Verdana size=2>C++ </FONT> <UL> <LI class=sub><A href="http://msdn.microsoft.com/vstudio/techinfo/articles/upgrade/managedext.asp"><FONT face=Verdana size=2>Managed Extensions for C++</FONT></A><FONT face=Verdana size=2> (MS) </FONT> <LI class=sub><A href="http://www.gotdotnet.com/team/cplusplus/"><FONT face=Verdana size=2>Managed and Unmanaged C++</FONT></A><FONT face=Verdana size=2> (GotDotNet) </FONT></LI></UL> <LI class=sub><FONT face=Verdana size=2>Cobol </FONT> <UL> <LI class=sub><A href="http://www.netcobol.com/"><FONT face=Verdana size=2>NetCOBOL - COBOL for .NET</FONT></A><FONT face=Verdana size=2> (Fujitsu) </FONT> <LI class=sub><A href="http://www.microfocus.com/products/netexpress/"><FONT face=Verdana size=2>Net Express</FONT></A><FONT face=Verdana size=2> (Micro Focus) </FONT></LI></UL> <LI><FONT face=Verdana size=2>Delphi </FONT> <UL> <LI class=sub><A href="http://borland.com/dotnet/"><FONT face=Verdana size=2>Borland Delphi and C++Builder Support for .NET</FONT></A><FONT face=Verdana size=2> (Borland) </FONT> <LI class=sub><A href="http://sourceforge.net/projects/delphinet"><FONT face=Verdana size=2>Delphi.NET - interoperability tools</FONT></A><FONT face=Verdana size=2> (Marcus Schmidt) </FONT></LI></UL> <LI class=sub><FONT face=Verdana size=2>Eiffel </FONT> <UL> <LI class=sub><A href="http://www.eiffel.com/"><FONT face=Verdana size=2>Eiffel for .NET</FONT></A><FONT face=Verdana size=2> (Interactive Software Engineering) </FONT></LI></UL> <LI class=sub><FONT face=Verdana size=2>Forth </FONT> <UL> <LI class=sub><A href="http://www.dataman.ro/dforth/"><FONT face=Verdana size=2>Delta Forth .NET</FONT></A><FONT face=Verdana size=2> (Valer BOCAN) </FONT></LI></UL> <LI class=sub><FONT face=Verdana size=2>Fortran </FONT> <UL> <LI class=sub><A href="http://www.lahey.com/dotnet.htm"><FONT face=Verdana size=2>Lahey/Fujitsu Fortran for .NET</FONT></A><FONT face=Verdana size=2> (Lahey Computer Systems, Inc.) </FONT> <LI class=sub><A href="http://www.salfordsoftware.co.uk/compilers/ftn95/dotnet.shtml"><FONT face=Verdana size=2>FTN95 - Fortran for Microsoft .NET</FONT></A><FONT face=Verdana size=2> (Salford Software Ltd.) </FONT></LI></UL> <LI class=sub><FONT face=Verdana size=2>Java </FONT> <UL> <LI class=sub><A href="http://msdn.microsoft.com/vjsharp/"><FONT face=Verdana size=2>Visual J# .NET</FONT></A><FONT face=Verdana size=2> (MS) </FONT> <LI class=sub><A href="http://weblog.ikvm.net/"><FONT face=Verdana size=2>IKVM.NET</FONT></A><FONT face=Verdana size=2> - Java VM for .NET </FONT></LI></UL> <LI class=sub><FONT face=Verdana size=2>JavaScript </FONT></LI> <UL> <LI class=sub><A href="http://www.gotdotnet.com/team/jscript/"><FONT face=Verdana size=2>JScript .NET</FONT></A><FONT face=Verdana size=2> (GotDotNet) </FONT></LI> <LI class=sub><A href="http://janet-js.sourceforge.net/"><FONT face=Verdana size=2>JANET</FONT></A><FONT face=Verdana size=2> - JavaScript-compatible language</FONT></LI></UL> <LI class=sub><FONT face=Verdana size=2>LOGO </FONT> <UL> <LI class=sub><A href="http://monologo.sourceforge.net/"><FONT face=Verdana size=2>MonoLOGO</FONT></A><FONT face=Verdana size=2> (Richard Hestilow) </FONT></LI></UL> <LI class=sub><FONT face=Verdana size=2>Lua <UL> <LI class=sub><A href="http://www.tecgraf.puc-rio.br/~rcerq/luadotnet/"><FONT face=Verdana size=2>Lua.NET: Integrating Lua with Rotor</FONT></A><FONT face=Verdana size=2> (PUC-RIO</FONT> </FONT></LI></UL> <LI class=sub><FONT face=Verdana size=2>Mercury </FONT> <UL> <LI class=sub><A href="http://www.cs.mu.oz.au/research/mercury/dotnet.html"><FONT face=Verdana size=2>Mercury on .NET</FONT></A></LI></UL> <LI class=sub><FONT face=Verdana size=2>Mondrian</FONT> <UL> <LI class=sub><FONT face=Verdana size=2><A href="http://www.mondrian-script.org/"><FONT face=Verdana size=2>Mondrian and Haskell for .NET</FONT></A><FONT face=Verdana size=2> (Nigel Perry) </FONT></FONT></LI></UL> <LI class=sub><FONT face=Verdana size=2>Oberon </FONT> <UL> <LI class=sub><A href="http://www.oberon.ethz.ch/oberon.net/"><FONT face=Verdana size=2>Active Oberon for .net</FONT></A><FONT face=Verdana size=2> (ETH Zuerich) </FONT></LI></UL> <LI class=sub><FONT face=Verdana size=2>Perl </FONT> <UL> <LI class=sub><A href="http://aspn.activestate.com/ASPN/NET/"><FONT face=Verdana size=2>Perl for .NET, PerlNET</FONT></A><FONT face=Verdana size=2> (ActiveState SRL.) </FONT></LI></UL> <LI><FONT face=Verdana size=2>Pascal </FONT> <UL> <LI class=sub><A href="http://www.fit.qut.edu.au/PLAS/ComponentPascal/"><FONT face=Verdana size=2>Component Pascal</FONT></A><FONT face=Verdana size=2> (QUT) </FONT></LI></UL> <LI><FONT face=Verdana size=2>PHP </FONT> <UL> <LI><A href="http://www.akbkhome.com/Projects/PHP_Sharp"><FONT face=Verdana size=2>PHP Sharp</FONT></A></LI></UL> <LI><FONT face=Verdana size=2>Python </FONT> <UL> <LI><A href="http://home.attbi.com/~chetangadgil//DotNetWrapperForPython.htm"><FONT face=Verdana size=2>KOBRA</FONT></A><FONT face=Verdana size=2> </FONT> <LI class=sub><A href="http://starship.python.net/crew/mhammond/dotnet/"><FONT face=Verdana size=2>Open Source Python for .NET</FONT></A><FONT face=Verdana size=2> (Mark Hammond) </FONT></LI></UL> <LI><FONT face=Verdana size=2>Ruby </FONT> <UL> <LI><A href="http://www.geocities.co.jp/SiliconValley-PaloAlto/9251/ruby/nrb.html"><FONT face=Verdana size=2>NetRuby</FONT></A></LI></UL> <LI><FONT face=Verdana size=2>RPG </FONT> <UL> <LI><A href="http://msdn.microsoft.com/vstudio/partners/language/asna.asp"><FONT face=Verdana size=2>ASNA Visual RPG for .NET</FONT></A></LI></UL> <LI><FONT face=Verdana size=2>Scheme </FONT> <UL> <LI class=sub><A href="http://rover.cs.nwu.edu/~scheme/"><FONT face=Verdana size=2>Scheme</FONT></A><FONT face=Verdana size=2> (Northwestern University) </FONT></LI></UL> <LI><FONT face=Verdana size=2>Small Talk </FONT> <UL> <LI><A href="http://www.smallscript.org/"><FONT face=Verdana size=2>S#</FONT></A><FONT face=Verdana size=2> (SmallScript LLC)</FONT></LI></UL> <LI><FONT face=Verdana size=2>SML (Standard Meta Language) </FONT> <UL> <LI class=sub><A href="http://www.cl.cam.ac.uk/Research/TSG/SMLNET/"><FONT face=Verdana size=2>SML.NET</FONT></A><FONT face=Verdana size=2> (MS Research, University of Cambridge) </FONT></LI></UL> <LI><FONT face=Verdana size=2>Visual Basic </FONT> <UL> <LI class=sub><A href="http://msdn.microsoft.com/vbasic/"><FONT face=Verdana size=2>VB.NET</FONT></A><FONT face=Verdana size=2> (MS) </FONT> <LI class=sub><A href="http://www.go-mono.com/mbas.html"><FONT face=Verdana size=2>mbas</FONT></A><FONT face=Verdana size=2> (Mono/Ximian)</FONT></LI></UL></LI></UL> <P class=sub><FONT face=Verdana size=2>I'll try to keep this updated when I run across a new language. If anyone knows of any others, let <A href="about:blankbrianlritchie@hotmail.com">me</A> know.</FONT>[via <A href="http://dotnetweblogs.com/britchie/">Brian Ritchie's Blog</A>]</P> <DIV></DIV>