<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>FOAF Posts</title>
  <link rel="alternate" type="text/html" href="http://bnode.org/blog/foaf" />
  <link rel="self" type="application/atom+xml" href="http://bnode.org/blog/atom1/foaf.atom.atom" />
  <id>http://bnode.org/res/channel/foaf</id>
  <updated>2009-01-07T20:20Z</updated>
  <author>
    <name>Benjamin Nowack</name>
  </author>
  <generator uri="http://semsol.com/" version="0.2.0">SemSol</generator>

  <entry>
    <title>Knowee - (The beginning of) a semantic social web address book</title>
    <link rel="alternate" type="text/html" hreflang="en" href="http://bnode.org/blog/2009/01/07/knowee-the-beginning-of-a-semantic-social-web-address-book"/>
    <id>http://bnode.org/blog/2009/01/07/knowee-the-beginning-of-a-semantic-social-web-address-book</id>
    <published>2009-01-07T20:20Z</published>
    <updated>2011-06-28T17:02:22Z</updated>
    <author>
      <name>Benjamin Nowack</name>
    </author>
    <summary>Knowee is a web address book that lets you integrate distributed social graph fragments. A new version is online at knowee.net.</summary>
    <category term="diso"/>
    <category term="foaf"/>
    <category term="knowee"/>
    <category term="microformats"/>
    <category term="noserub"/>
    <category term="opensocial"/>
    <category term="rdf"/>
    <category term="semanticweb"/>
    <category term="social graph"/>
    <category term="social web"/>
    <category term="sparql"/>
    <category term="sweo"/>
    <category term="trice"/>
    <content type="xhtml" xml:lang="en">
      <div xmlns="http://www.w3.org/1999/xhtml">
Heh, this was planned as a one-week hack but somehow turned into a full re-write that took the complete December. Yesterday, I finally managed to tame the semantic bot army and today I've added a basic RDF editor. A sponsored version is now online at <a href="http://knowee.net/">knowee.net</a>, a code bundle for self-hosting will be made available at <a href="http://knowee.org/">knowee.org</a> tomorrow.<br />


<h4>What is Knowee?</h4>
Knowee started as a <a href="http://www.w3.org/blog/SWEO/2007/03/06/community_project_support">SWEO project</a>. Given the insane number of online social networks we all joined, together with the increasing amount of machine-readable &amp;quot;social data&amp;quot; sources, we dreamed of a distributed address book, where the owner doesn't have to manually maintain contact data, but instead <a href="http://allinthehead.com/retro/323/dont-import-subscribe">simply subscribes</a> to remote sources. The address book could then update itself automatically. And -in full <a href="http://www.w3.org/2001/sw/">SemWeb</a> spirit- you'd get access to your consolidated social graph for re-purposing. There are several open-source projects in this area, most notably <a href="http://noserub.org/">NoseRub</a> and <a href="http://diso-project.org/">DiSo</a>. Knowee is aiming at interoperability with these solutions.<br />
<img src="http://bnode.org/media/knowee/knowee_concept.gif" title="knowee concept" alt="knowee concept" />
 <br />

<h4>Ingredients</h4>
For a webby address book, we need to pick some data formats, vocabularies, data exchange mechanisms, and the general app infrastructure: <br />
<ul><li><strong>PHP + MySQL</strong>: Knowee is based on the ubiquitous LAMP stack. It tries to keep things simple, you don't need system-level access for third-party components or cron jobs.</li>
<li><strong>RDF</strong>: Knowee utilizes the Resource Description Framework. RDF gives us a very simple model (triples), lots of different formats (JSON, HTML, XML, ...), and free, low-cost extensibility. </li>
<li><strong>FOAF, OpenSocial, microformats, Feeds</strong>: FOAF is the leading RDF vocabulary for social information. Feeds (RSS, Atom) are the lowest common denominator for exchanging non-static information. <a href="http://www.opensocial.org/">OpenSocial</a> and <a href="http://microformats.org/">microformats</a> are more than just schemas, but the respective communities maintain very handy term sets, too. Knowee uses <a href="http://bnode.org/blog/2008/12/16/opensocial-in-rdf">equivalent</a> <a href="http://bnode.org/blog/2008/11/10/poshrdf-rdf-extraction-from-microformats-and-ad-hoc-markup">representations</a> in RDF.</li>
<li><strong>SPARQL</strong>: SPARQL is the W3C-recommended <a href="http://www.w3.org/TR/rdf-sparql-query/">Query language</a> and <a href="http://www.w3.org/TR/rdf-sparql-protocol/">API</a> for the Semantic Web.</li>
<li><strong>OpenID</strong>: OpenID addresses Identity and Authentication requirements.
</li></ul>
I'm still working on a solution for access control, the current Knowee version is limited to public data and simple, password-based access restrictions. <a href="http://oauth.net/">OAuth</a> is surely worth a look, although Knowee's use case is a little different and may be fine with just OpenID  + sessions. Another option could be the impressive <a href="http://www.w3.org/2008/09/msnws/papers/foaf+ssl.html">FOAF+SSL</a> proposal, I'm not sure if they'll manage to provide a pure-PHP implementation for non-SSL-enabled hosts, though.<br />
<br />

<h4>Features / Getting Started</h4>
This is a quick walk-through to introduce the current version.<br />

<h5>Login / Signup</h5>
Log in with your (ideally non-XRDS) OpenID and pick a user name.<br />
<br />
<img src="http://bnode.org/media/knowee/openid_login.gif" title="knowee login" alt="knowee login" />
<div class="hr"><hr /></div>

<h5>Account setup</h5>
Knowee only supports a few services so far. Adding new ones is not hard, though. You can enable the <a href="http://code.google.com/apis/socialgraph/">SG API</a> to auto-discover additional accounts. Hit &amp;quot;Proceed&amp;quot; when you're done.<br />
<br />
<a href="http://bnode.org/media/knowee/accounts.gif"><img src="http://bnode.org/media/knowee/accounts_small.gif" title="knowee accounts" alt="knowee accounts" /></a>
<div class="hr"><hr /></div>

<h5>Profile setup</h5>
You can specify whether to make (parts of) your <a href="http://knowee.net/bengee">consolidated profile</a> public or not. During the initial setup process, this screen will be almost empty, you can check back later when the semantic bots have done their job. Hit &amp;quot;Proceed&amp;quot;.<br />
<br />
<a href="http://bnode.org/media/knowee/profile.gif"><img src="http://bnode.org/media/knowee/profile_small.gif" title="knowee profile" alt="knowee profile" /></a>
<div class="hr"><hr /></div>

<h5>Dashboard</h5>
The Dashboard shows your personal activity stream (later versions may include your contacts' activities, too), system information and a couple of shortcuts.
<br />
<a href="http://bnode.org/media/knowee/dashboard.gif"><img src="http://bnode.org/media/knowee/dashboard_small.gif" title="knowee dashboard" alt="knowee dashboard" /></a>
<div class="hr"><hr /></div>

<h5>Contacts</h5>
The contact editor is still work in progress. So far, you can filter the list, add new entries, and edit existing contacts. The RDF editor is still pretty basic (Changes will be saved to a separate RDF graph, but deleted/changed fields may re-appear after synchronization. This needs more work.) The editor is schema-based and supports the vocabularies mentioned above. You'll be able to create your own fields at some later stage.<br />
<br />
It's already possible to import FOAF profiles. Knowee will try to consolidate imported contacts so that you can add data from multiple sources, but then edit the information via a single form. The bot processor is extensible, we'll be able to add additional consolidators at run-time, it only looks at &amp;quot;owl:sameAs&amp;quot; at the moment.
<br />
<a href="http://bnode.org/media/knowee/contacts.gif"><img src="http://bnode.org/media/knowee/contacts_small.gif" title="knowee contacts" alt="knowee contacts" /></a>
<div class="hr"><hr /></div>

<h5>Enabling the SPARQL API</h5>
In the &amp;quot;Settings&amp;quot; section you'll find a form that lets you activate a personal SPARQL API. You can enable/protect read and/or <a href="http://arc.semsol.org/docs/v2/sparql+">write operations</a>. The SPARQL endpoint provides low-level access to all your data, allows you to <a href="http://bit.ly/10aqW">explore your social graph</a>, or lets you create backups of your activity stream.<br />
<br />
<a href="http://bnode.org/media/knowee/api.gif"><img src="http://bnode.org/media/knowee/api_small.gif" title="knowee api" alt="knowee api" /></a>
<a href="http://bnode.org/media/knowee/api2.gif"><img src="http://bnode.org/media/knowee/api2_small.gif" title="knowee api" alt="knowee api" /></a>
<div class="hr"><hr /></div>
That's more or less it for this version. You can always reset or delete your account, and manually delete incorrectly monitored graphs. The <a href="http://knowee.net/">knowee.net system</a> is running on the <a href="http://gogrid.com/">GoGrid</a> cloud, but I'm still tuning things to let the underlying RDF CMS make better use of the multi-server setup. If things go wrong, blame me, not them. Caching is not fully in place yet, and I've limited the installation to 100 accounts. <a href="http://knowee.net/about">Give it a try</a>, I'd be happy about feedback.<br />

      </div>
    </content>
  </entry>

  <entry>
    <title>OpenSocial in RDF</title>
    <link rel="alternate" type="text/html" hreflang="en" href="http://bnode.org/blog/2008/12/16/opensocial-in-rdf"/>
    <id>http://bnode.org/blog/2008/12/16/opensocial-in-rdf</id>
    <published>2008-12-16T16:45Z</published>
    <updated>2008-12-16T18:55:58Z</updated>
    <author>
      <name>Benjamin Nowack</name>
    </author>
    <summary>I've created an RDF converter for the OpenSocial field definitions.</summary>
    <category term="converter"/>
    <category term="foaf"/>
    <category term="opensocial"/>
    <category term="rdf"/>
    <category term="schema"/>
    <category term="semanticweb"/>
    <content type="xhtml" xml:lang="en">
      <div xmlns="http://www.w3.org/1999/xhtml">
I'm currently working on a new release of <a href="http://knowee.org/">Knowee</a>. This is another (long-promised) item on my ToDo list before I can finally concentrate on <a href="http://paggr.com/">paggr</a> (although it took too long already and hopefully won't break my neck. All the planned paid projects for bootstrapping paggr didn't happen, due to frozen budgets and politics. I hope the situation here improves soon.)<br />
<br />
So, while I was trawling the vocabulary market, trying to gather terms for the stuff that Knowee works with (people, their profiles, contacts, accounts, and activities), I remembered <a href="http://opensocial.org/">OpenSocial</a>, the effort to standardize basic interactions between social networking sites. I can use a good amount of <a href="http://foaf-project.org/">FOAF</a>, but OpenSocial has very handy things such as a generic &amp;quot;tags&amp;quot; field and a clean vCard mapping. And it's a super-set of <a href="http://portablecontacts.net/">Portable Contacts</a>, too.<br />
<br />
Today, I wrote a converter that extracts the field definitions from the <a href="http://opensocial-resources.googlecode.com/svn/spec/0.8/opensocial/">JavaScript specification files</a>, together with their labels, comments, domains, and value types. (A little too late, I found out that <a href="http://danbri.org/">Dan Brickley</a> had <a href="http://danbri.org/words/2008/06/26/349">already done</a> part of this a couple of months ago, could have saved me some work, d'oh.)<br />
<br />
I've just added the <a href="http://web-semantics.org/ns/opensocial#">osoc spec</a> to <a href="http://web-semantics.org/ns/">web-semantics.org/ns</a>. I hope it might be of use to others as well. Funnily, the &amp;quot;relationship&amp;quot; term was not part of any of the source files, maybe I still have to invent a property (a foaf:knows equivalent that also works with organizations).

      </div>
    </content>
  </entry>

  <entry>
    <title>Semantic Web by Example: Semantic CrunchBase</title>
    <link rel="alternate" type="text/html" hreflang="en" href="http://bnode.org/blog/2008/07/29/semantic-web-by-example-semantic-crunchbase"/>
    <id>http://bnode.org/blog/2008/07/29/semantic-web-by-example-semantic-crunchbase</id>
    <published>2008-07-29T15:30Z</published>
    <updated>2010-06-03T11:51:04Z</updated>
    <author>
      <name>Benjamin Nowack</name>
    </author>
    <summary>CrunchBase is now available as Linked Data including a SPARQL endpoint and a custom API builder based on SPARQLScript.</summary>
    <category term="arc"/>
    <category term="crunchbase"/>
    <category term="crunchboard"/>
    <category term="dbpedia"/>
    <category term="foaf"/>
    <category term="foafcorp"/>
    <category term="linked data"/>
    <category term="mashups"/>
    <category term="rdf"/>
    <category term="rena"/>
    <category term="semanticweb"/>
    <category term="sparql"/>
    <category term="sparql+"/>
    <category term="sparqlscript"/>
    <category term="trice"/>
    <content type="xhtml" xml:lang="en">
      <div xmlns="http://www.w3.org/1999/xhtml">
<em>Update: Wow, these guys are quick, there is now a full RSS feed for CrunchBoard jobs. I've tweaked the related examples.</em><br />
<div class="hr"><hr /></div>
This post is a bit late (I've even been <a href="http://www.techcrunch.com/2008/07/27/great-apps-using-the-crunchbase-api/">TechCrunch'd</a> already), but I wanted to add some features before I fully announce &amp;quot;<a href="http://cb.semsol.org">Semantic CrunchBase</a>&amp;quot;, a <a href="http://linkeddata.org/">Linked Data</a> version of <a href="http://www.crunchbase.com/">CrunchBase</a>, the free directory of technology companies, people, and investors. CrunchBase recently <a href="http://www.techcrunch.com/2008/07/15/crunchbase-now-has-an-api-so-grab-our-data/">activated</a> an awesome <a href="http://groups.google.com/group/crunchbase-api/web/api-v1-documentation">API</a>, with the invitation to build apps on top of it. This seemed like the ideal opportunity to test <a href="http://arc.semsol.org/">ARC</a> and <a href="http://trice.semsol.org/">Trice</a>, but also to demonstrate some of the things that become possible (or much easier) with SemWeb technology.<br />
<br />

<h4>Turning CrunchBase into a Linked Dataset</h4>
The CB API is based on nicely structured JSON documents which can be retrieved through simple HTTP calls. The data is already interlinked, and each core resource (company, person, product, etc.) has a stable identifier, greatly simplifying the creation of RDF. Ideally, machine-readable representations would be served from crunchbase.com directly (maybe using the nicely evolving <a href="http://github.com/tommorris/rena/tree/master">Rena toolkit</a>), but the SemWeb community has a reputation of scaring away maintainers of potential target apps with complicated terminology and machinery before actually showing convincing benefits, so, at this stage (and given the nice API), it might make more sense to start with a separate site, and to present a selection of added values first.<br />
<br />
For Semantic CrunchBase, I wrote a largely automated JSON2RDF converter, i.e. the initial RDF dataset is not using any known vocabs such as <a href="http://foaf-project.org/">FOAF</a> (or <a href="http://rdfweb.org/foafcorp/intro.html">FOAFCorp</a>). (We can <a href="http://arc.semsol.org/docs/v2/sparql+">INSERT</a> mapping triples later, though.) Keeping most of the attribute names from the source docs (and mainly using just a single namespace) has another advantage besides simplified conversion: CrunchBase API users can more easily experiment with the SPARQL API (see <a href="http://api.crunchbase.com/v/1/company/twitter.js">twitter.json</a> and <a href="http://cb.semsol.org/company/twitter.rdf">twitter.rdf</a> for a direct comparison).<br />
<br />
An important principle in RDF land is the distinction between a <em>resource</em> and a <em>page about a resource</em> (it's very unlikely to hear an RDFer say &amp;quot;<a href="http://google-code-updates.blogspot.com/2008/02/urls-are-people-too.html">URLs are People</a>&amp;quot; ;). This means that we need separate identifiers for e.g. Twitter and the Twitter description. There are different approaches, I decided to use <a href="http://www.w3.org/TR/cooluris/#choosing">(fake-)hash URIs</a> which make embedding machine-readable data directly into the HTML views a bit more intuitive (IMHO):<br />
<ul><li><code><a href="http://cb.semsol.org/company/twitter#self">/company/twitter#self</a></code> <em>denotes</em> the company, </li>
<li>GETing the identifier resolves to <code><a href="http://cb.semsol.org/company/twitter">/company/twitter</a></code> which <em>describes</em> the company. </li>
<li>Direct RDF/XML or RDF/JSON can be retrieved by appending &amp;quot;<a href="http://cb.semsol.org/company/twitter.rdf">.rdf</a>&amp;quot; to the document URIs and/or via Content Negotiation.
</li></ul>
This may sound a bit complicated (and for some reason RDFers love to endlessly discuss this stuff), but luckily, many RDF toolkits handle much of the needed functionality  transparently.<br />
<br />
The instant benefit of having linked data views is the possibility to freely explore the complete CrunchBase graph (e.g. from a company to its investors to their organizations to their relations etc.). However, the CrunchBase team has already done a great job, their UI already supports this functionality quite nicely, the RDF infrastructure doesn't really add anything here, functionality-wise. There <em>is</em> one advantage, but it's not obvious: An RDF-powered app can be extended at any time. On the data-level. Without the need for model changes (because there is none specified). And without the need for table tweaks (the DB schema is generic). We could, for example, enhance the data with <a href="http://crunchboard.com/">CrunchBoard</a> Jobs, <a href="http://dbpedia.org/">DBPedia</a> information, or  profiles retrieved from Google's Social Graph API, without having to change a single script or table. (I switched to RDF as productivity booster some time ago and never looked back. The whole Semantic CrunchBase site took only a few person days to build, and most of the time was spent on writing the importer.) But let's skip the backstage benefits for now.<br />
<br />

<h4>SPARQL - SQL for the Web</h4>
Tim Berners-Lee recently said that the success of the Semantic Web should be measured by the &amp;quot;level of unexpected reuse&amp;quot;. While the HTML-based viewers support a certain level of serendipitous discovery, they only enable resource-by-resource exploration. It is not possible to spot non-predefined patterns such as &amp;quot;serial co-founders&amp;quot;, or &amp;quot;founders of companies recently acquired&amp;quot;. As an API provider, it is rather tricky to anticipate all potential use cases. On the <a href="http://groups.google.com/group/crunchbase-api/topics">CB API mailing list</a>, people are expressing their interest in API methods to retrieve recent investments and acquisitions, or social graph fragments. Those can now only be coded and added by the API maintainers. Enter <a href="http://www.w3.org/TR/rdf-sparql-query/">SPARQL</a>. SPARQL, the protocol and query language for RDF graphs provides just this: flexibility for developers, less work for API providers. Semantic CrunchBase has an <a href="http://cb.semsol.org/sparql">open SPARQL endpoint</a>, but it's also possible to restrict/control the API while still using an RDF interface internally to easily define and activate new API methods. (During the last months I've been working for <a href="http://intellidimension.com/">Intellidimension</a>; they were using an on-request approach for AJAX front-ends. Setting up new API methods was often just a matter of minutes.)<br />
<br />
With SPARQL, it gets easy to retrieve (almost) any piece of information, here is an example query that finds companies that were recently acquired:
<pre class="code">SELECT DISTINCT ?permalink ?name ?year ?month ?code WHERE {
    ?comp cb:exit ?exit ;
          cb:name ?name ;
          cb:crunchbase_url ?permalink .

    ?exit cb:term_code ?code ;
          cb:acquired_year ?year ;
          cb:acquired_month ?month .
}
ORDER BY DESC (?year) DESC (?month)
LIMIT 20
</pre> (<a href="http://cb.semsol.org/sparql?query=SELECT+DISTINCT+%3Fpermalink+%3Fname+%3Fyear+%3Fmonth+%3Fcode+WHERE+%0D%0A{%0D%0A++++%3Fcomp+cb%3Aexit+%3Fexit+%3B+%0D%0A++++++++cb%3Aname+%3Fname+%3B+%0D%0A++++++++cb%3Acrunchbase_url+%3Fpermalink+.%0D%0A%0D%0A++++%3Fexit+cb%3Aterm_code+%3Fcode+%3B%0D%0A++++++++cb%3Aacquired_year+%3Fyear+%3B%0D%0A++++++++cb%3Aacquired_month+%3Fmonth+.%0D%0A}+ORDER+BY+DESC+(%3Fyear)+DESC+(%3Fmonth)%0D%0ALIMIT+20&amp;output=htmltab">Query result as HTML</a>)<br />
<br />
Or what about a comparison between acquisitions in California and New York:
<pre class="code">SELECT DISTINCT COUNT(?link_ca) as ?CA COUNT(?link_ny) as ?NY WHERE {
    ?comp_ca cb:exit ?exit_ca ;
             cb:crunchbase_url ?link_ca ;
             cb:office ?office_ca .
    ?office_ca cb:state_code &amp;quot;CA&amp;quot; .

    ?comp_ny cb:exit ?exit_ny ;
             cb:crunchbase_url ?link_ny ;
             cb:office ?office_ny .
    ?office_ny cb:state_code &amp;quot;NY&amp;quot; .
}<br />
</pre> (<a href="http://cb.semsol.org/sparql?query=SELECT+DISTINCT+COUNT(%3Flink_ca)+as+%3FCA+COUNT(%3Flink_ny)+as+%3FNY+WHERE+%0D%0A{%0D%0A++++%3Fcomp_ca+cb%3Aexit+%3Fexit_ca+%3B+%0D%0A++++++++cb%3Acrunchbase_url+%3Flink_ca+%3B%0D%0A++++++++cb%3Aoffice+%3Foffice_ca+.%0D%0A++++%3Foffice_ca+cb%3Astate_code+%22CA%22+.%0D%0A%0D%0A++++%3Fcomp_ny+cb%3Aexit+%3Fexit_ny+%3B+%0D%0A++++++++cb%3Acrunchbase_url+%3Flink_ny+%3B%0D%0A++++++++cb%3Aoffice+%3Foffice_ny+.%0D%0A++++%3Foffice_ny+cb%3Astate_code+%22NY%22+.%0D%0A}+%0D%0A%0D%0A&amp;output=htmltab">Results</a>)<br />
<br />
These are just some simple examples, but they (hopefully) illustrate how RDF and SPARQL can significantly improve Web app development and community support. But hey, there is more.<br />
<br />

<h4>Semantic Mashups with SPARQLScript</h4>
SPARQL has only just become a W3C recommendation, and the team behind it was smart enough to not add too many features (even the COUNT I used above is not part of the core spec). The community is currently experimenting with <a href="http://esw.w3.org/topic/SPARQL/Extensions">SPARQL extensions</a>, and one particular thing that I'm personally very interested in is the creation of SPARQL-driven mashups through something called <a href="http://arc.semsol.org/docs/v2/sparqlscript">SPARQLScript</a> (full disclosure: I'm the only one playing with it so far, it's not a standard at all). SPARQLScript enables the federation of script block execution across multiple SPARQL endpoints. In other words, you can integrate data from different sources on the fly.<br />
<br />
Imagine you are looking for a job in California at a company that is at a specific funding stage. CrunchBase knows everything about companies, investments, and has structured location data. <a href="http://www.crunchboard.com/">CrunchBoard</a> on the other hand has job descriptions, but only a single field for City and State, and not the filter options to match our needs. This is where Linked Data shines. If we find a way to link from CrunchBoard to CrunchBase, we can use Semantic Web technology to run queries that include both sources. And with SPARQLScript, we can construct and leverage these links. Below is a script that first loads the CrunchBoard feed of current job offers (<s>only the last 15 entries, due to common RSS' limitations/practices, the use of e.g. <a href="http://microformats.org/wiki/hatom">hAtom</a> could allow more data to be pulled in</s>). In a second step, it uses the company name to establish a pattern join between CrunchBoard and CrunchBase, which then allows us to retrieve the list of matching jobs at (at least) stage-A companies with offices in California.<br />
<pre class="code">PREFIX cboard: &amp;lt;http://www.crunchboard.com&amp;gt;
ENDPOINT &amp;lt;http://cb.semsol.org/sparql&amp;gt;
# refresh feed
if (${GET.refresh}) {
 # replaced &amp;lt;http://feeds.feedburner.com/CrunchboardJobs&amp;gt; with full feed
 LOAD &amp;lt;http://www.crunchboard.com/rss/affiliate/crunchboardrss_all.xml&amp;gt;
}
# let's query
$jobs = SELECT DISTINCT ?job_link ?comp_link ?job_title ?comp_name WHERE {
  # source: crunchboard, using full feed now
  GRAPH &amp;lt;http://www.crunchboard.com/rss/affiliate/crunchboardrss_all.xml&amp;gt; {
    ?job rss:link ?job_link ;
         rss:title ?job_title ;
         cboard:company ?comp_name .
  }
  # source: full graph
  ?comp a cb:Company ;
        cb:name ?comp_name ;
        cb:crunchbase_url ?comp_link ;
        cb:office ?office ;
        cb:funding_round ?round .
  ?office cb:state_code &amp;quot;CA&amp;quot; .
  ?round cb:round_code &amp;quot;a&amp;quot; .
}
</pre>

(You can <a href="http://cb.semsol.org/sparql?query=http://cb.semsol.org/sparql?query=PREFIX+cboard%3A+&amp;lt;http%3A%2F%2Fwww.crunchboard.com&amp;gt;%0D%0ASELECT+DISTINCT+%3Fjob_link+%3Fcomp_link+%3Fjob_title+%3Fcomp_name+WHERE+{%0D%0A++%23+source%3A+crunchboard%2C+using+full+feed+now%0D%0A++GRAPH+&amp;lt;http%3A%2F%2Fwww.crunchboard.com%2Frss%2Faffiliate%2Fcrunchboardrss_all.xml&amp;gt;+{%0D%0A++++%3Fjob+rss%3Alink+%3Fjob_link+%3B%0D%0A+++++++++rss%3Atitle+%3Fjob_title+%3B%0D%0A+++++++++cboard%3Acompany+%3Fcomp_name+.%0D%0A++}%0D%0A++%23+source%3A+full+graph%0D%0A++%3Fcomp+a+cb%3ACompany+%3B%0D%0A++++++++cb%3Aname+%3Fcomp_name+%3B%0D%0A++++++++cb%3Acrunchbase_url+%3Fcomp_link+%3B%0D%0A++++++++cb%3Aoffice+%3Foffice+%3B%0D%0A++++++++cb%3Afunding_round+%3Fround+.%0D%0A++%3Foffice+cb%3Astate_code+&amp;quot;CA&amp;quot;+.%0D%0A++%3Fround+cb%3Around_code+&amp;quot;a&amp;quot;+.%0D%0A}%0D%0A&amp;output=htmltab&amp;show_inline=1">test it</a>, this really works.)<br />
<br />
Now that we are knee-deep in SemWeb geekery anyway, we can also add another layer to all of this and<br />
<ul><li>allow parameterized queries so that the preferred state and investment stage can be freely defined,</li>
<li>add a browser-based tool for the collaborative creation of custom API calls</li>
<li>add a template mechanism for human-friendly results</li></ul><br />
I'll write about this &amp;quot;<a href="http://cb.semsol.org/pimp-my-api">Pimp My API</a>&amp;quot; app at Semantic CrunchBase in the next post. Here are some example API calls that were already created with it:
<ul><li>Jobs at companies with <a href="http://cb.semsol.org/api/a98900fa9399?funding_round=seed&amp;state_code=CA">seed-funding, from CA</a> / <a href="http://cb.semsol.org/api/a98900fa9399?funding_round=angel&amp;state_code=NY">Angel-funding, from NY</a> / <a href="http://cb.semsol.org/api/a98900fa9399?funding_round=a&amp;state_code=CA">A-stage funding, from CA</a>.</li>
<li><a href="http://cb.semsol.org/api/140033daa14a?comp_name=Twitter">Competitors of Twitter</a></li>
<li><a href="http://cb.semsol.org/api/140033daa14a?comp_name=Twitter&amp;format=json">Competitors of Twitter, JSON output</a></li>
<li><a href="http://cb.semsol.org/api/7215c82fe6b3?year=2008&amp;month=4">Companies acquired in the last 3 months</a>
</li></ul>
<br />
A lot of fun, more to come.

      </div>
    </content>
  </entry>

  <entry>
    <title>&quot;Online Social Graph Consolidation&quot; webinale Slides</title>
    <link rel="alternate" type="text/html" hreflang="en" href="http://bnode.org/blog/2008/05/29/online-social-graph-consolidation-webinale-slides"/>
    <id>http://bnode.org/blog/2008/05/29/online-social-graph-consolidation-webinale-slides</id>
    <published>2008-05-29T10:20Z</published>
    <updated>2008-05-29T10:30:27Z</updated>
    <author>
      <name>Benjamin Nowack</name>
    </author>
    <summary>Slides from my 2nd webinale 08 talk are online</summary>
    <category term="foaf"/>
    <category term="inference"/>
    <category term="semanticweb"/>
    <category term="social graph"/>
    <category term="sparql"/>
    <category term="webinale"/>
    <category term="xfn"/>
    <content type="xhtml" xml:lang="en">
      <div xmlns="http://www.w3.org/1999/xhtml">
I gave another talk at <a href="http://createordie.de/webinale/index.php">webinale2008</a>, this one was about how SemWeb technology (XFN, RDF, FOAF, SPARQL, Inference) can help with the aggregation, integration, and consolidation of online social graph fragments spread across Web 2.0 services. Again, I tried to keep things demo-ish (using grawiki for Linked Data editing, and knowee for the integration and consolidation), so the slides themselves (<a href="http://www.slideshare.net/bengee/online-social-graph-consolidation">available on slideshare</a>) aren't too spectacular (and in german).<br />
<br />
<div style="width:425px;text-align:left" id="__ss_433505"><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=onlinesocialgraphconsolidierung-1212004097735158-9"http://bnode.org/><param name="allowFullScreen" value="true"http://bnode.org/><param name="allowScriptAccess" value="always"http://bnode.org/><embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=onlinesocialgraphconsolidierung-1212004097735158-9" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;"><a href="http://www.slideshare.net/?src=embed"><img src="http://static.slideshare.net/swf/logo_embd.png" style="border:0px none;margin-bottom:-5px" alt="SlideShare"http://bnode.org/></a> | <a href="http://www.slideshare.net/bengee/online-social-graph-consolidation?src=embed" title="View Online Social Graph Consolidation on SlideShare">View</a> | <a href="http://www.slideshare.net/upload?src=embed">Upload your own</a></div></div>

      </div>
    </content>
  </entry>

  <entry>
    <title>Got some SemWeb DOAP 'n' FOAF?</title>
    <link rel="alternate" type="text/html" hreflang="en" href="http://bnode.org/blog/2007/01/17/got-some-semweb-doap-n-foaf"/>
    <id>http://bnode.org/blog/2007/01/17/got-some-semweb-doap-n-foaf</id>
    <published>2007-01-17T14:40Z</published>
    <updated>2007-01-17T15:22:11Z</updated>
    <author>
      <name>Benjamin Nowack</name>
    </author>
    <summary>Starting to collect RDF descriptions of SemWeb projects at rdfer.com</summary>
    <category term="doap"/>
    <category term="foaf"/>
    <category term="rdfer"/>
    <category term="semanticweb"/>
    <content type="xhtml" xml:lang="en">
      <div xmlns="http://www.w3.org/1999/xhtml">
All baby steps, but I've activated a <a href="http://rdfer.com/create/software">DOAP editor</a>, an RDF/XML loader, and a basic <a href="http://rdfer.com/explore/software"><s>browser</s> store dump</a> at <a href="http://rdfer.com">RDFer.com</a>. Would be great to get some DOAP files describing SemWeb projects in there, and maybe some FOAF files as well. That'd make coding the browsers more fun and a bit more real-world-ish.<br />
Thanks for your help!
      </div>
    </content>
  </entry>

  <entry>
    <title>Merry X-Mas</title>
    <link rel="alternate" type="text/html" hreflang="en" href="http://bnode.org/blog/2006/12/23/merry-x-mas"/>
    <id>http://bnode.org/blog/2006/12/23/merry-x-mas</id>
    <published>2006-12-23T13:25Z</published>
    <updated>2006-12-23T13:31:35Z</updated>
    <author>
      <name>Benjamin Nowack</name>
    </author>
    <summary>FOAF and Snow</summary>
    <category term="foaf"/>
    <category term="semanticweb"/>
    <category term="xmas"/>
    <content type="xhtml" xml:lang="en">
      <div xmlns="http://www.w3.org/1999/xhtml">
<img src="http://bnode.org/media/2006/12/23/foaf_snow.jpg" title="FOAF in the snow" alt="FOAF in the snow" /><br />
See you after the snow ;)
      </div>
    </content>
  </entry>

  <entry>
    <title>Term Shopping for Trackbacks and Projects</title>
    <link rel="alternate" type="text/html" hreflang="en" href="http://bnode.org/blog/2006/12/14/term-shopping-for-trackbacks-and-projects"/>
    <id>http://bnode.org/blog/2006/12/14/term-shopping-for-trackbacks-and-projects</id>
    <published>2006-12-14T16:00Z</published>
    <updated>2006-12-14T16:22:37Z</updated>
    <author>
      <name>Benjamin Nowack</name>
    </author>
    <summary>Describing trackbacks, and projects with basic vocabularies.</summary>
    <category term="dc"/>
    <category term="doap"/>
    <category term="foaf"/>
    <category term="rdf"/>
    <category term="rdfer"/>
    <category term="semanticweb"/>
    <category term="trackback"/>
    <category term="vocabularies"/>
    <content type="xhtml" xml:lang="en">
      <div xmlns="http://www.w3.org/1999/xhtml">
I already mentioned the nice <a href="http://www.w3.org/WAI/ER/HTTP-in-RDF/">HTTP vocab</a> I'm using to describe page views in RDF. I had to add some custom properties to cover things like visits and access hosts, but the main part of the statistics module is built on top of the W3C vocab. The more I work with RDF, the less I feel comfortable with homegrown terms (although they can be handy for prototyping) and thus spend quite some time on the <a href="http://esw.w3.org/topic/VocabularyMarket">vocabulary market</a>. Here are two other use cases I was gladly able to model with existing vocabs. <br />
<br />

<h4>Trackbacks</h4>
<div class="ind10">I wanted to add support for incoming <a href="http://www.sixapart.com/pronet/docs/trackback_spec">trackbacks</a> to SemSol's blog module. Trackbacks consist of 4 parameters:
<ul><li>title (title of the remote post)</li>
<li>excerpt (excerpt of the remote post)</li>
<li>url (permalink of the remote post)</li>
<li>blog_name (name of the remote blog)</li></ul>
Additional local information:
<ul><li>date/time of the trackback (i.e. now)</li>
<li>permalink of the local post (derived from the trackback URL)</li></ul>
After a <a href="http://chatlogs.planetrdf.com/swig/2006-11-23.html#T14-15-14">fruitful IRC chat</a> with <a href="http://www.johnbreslin.com/blog/">John &amp;quot;SIOC&amp;quot; Breslin</a>, I'm now using (something similar to) the following code:
<pre class="code">&amp;lt;$url&amp;gt; a rss:item ;
       an:annotates &amp;lt;$permalink&amp;gt; ;
       dc:title &amp;quot;$title&amp;quot; ;
       dc:description &amp;quot;$excerpt&amp;quot; ;
       dc:date &amp;quot;$now&amp;quot; ;
       dc:source [ dc:title &amp;quot;$blog_name&amp;quot;] .
</pre>
I could have used rss:description instead of Dublin Core's but thought the structure could more easily be extended to local comments this way. Anyway, as you can see, trackbacks can nicely be described with DC, <a href="http://www.w3.org/2000/10/annotation-ns#">Annotea</a>, and RSS 1.0.
</div>
<br />

<h4>Projects, Tools, Applications</h4>
<div class="ind10">The second use case comes from <a href="http://rdfer.com">RDFer.com</a> where I'd like to make some of the project and tools data collected during 2005 available. Additionally, I want to provide easy editing forms to let members describe and annotate RDF software. For SemanticWeb.org, we invented an <code>swo:Application</code> class to separate (developer) tools from (end-user) apps. But while analyzing the dataset, I saw that there are additional resource types which fit under the generic &amp;quot;project&amp;quot; concept, e.g. lists or data dumps. I was already in the middle of making up a whole bunch of classes when I remembered an earlier <a href="http://www.jiscmail.ac.uk/cgi-bin/webadmin?A2=ind0605&amp;L=DC-ARCHITECTURE&amp;P=R1805&amp;D=0&amp;I=-3&amp;T=0">DCMI discussion</a> about the negligible difference between <code>dc:type</code> and <code>rdf:type</code> which referred to <a href="http://dublincore.org/documents/dcmi-terms/#H5">DCMI Type definitions</a>. Long story short, <a href="http://purl.org/dc/dcmitype/">DC Types</a> (dctype) combined with <a href="http://xmlns.com/foaf/0.1/">FOAF</a> (foaf), <a href="http://usefulinc.com/ns/doap#">DOAP</a> (doap), and the <a href="http://www.daml.org/tools/tools-ont#">DAML Tool vocab</a> (tool) can be used to describe a whole range of resources:
<ul><li>general projects (<code>foaf:Project</code>)</li>
<li>software projects (<code>doap:Project</code>, which covers <a href="http://chatlogs.planetrdf.com/rdfig/2004-11-01.html#T15-07-52">non-OS software as well</a>)</li>
<li>resource collections (<code>dctype:Collection</code>, <code>dctype:Dataset</code>)</li>
<li>software products (<code>dctype:Software</code> or <code>dctype:InteractiveResource</code>, these could be used to e.g. attach tool:price properties which would perhaps look a bit odd on projects)</li>
<li>tools (<code>tool:Tool</code>)</li>
<li>online services (<code>dctype:Service</code>)
</li></ul>
Something like <code>dct:isPartOf</code> could perhaps even be used to model sub-projects, but I'm not 100% sure.<br />
<br />
Bottom line, again: no need for new terms, it's (often) all there already.
</div>




      </div>
    </content>
  </entry>

  <entry>
    <title>Proposals: a new RDF collection and an aluminium edition for FOAF</title>
    <link rel="alternate" type="text/html" hreflang="en" href="http://bnode.org/blog/2005/09/19/proposals-a-new-rdf-collection-and-an-aluminium-edition-for-foaf"/>
    <id>http://bnode.org/blog/2005/09/19/proposals-a-new-rdf-collection-and-an-aluminium-edition-for-foaf</id>
    <published>2005-09-19T12:00Z</published>
    <updated>2006-12-01T13:11:53Z</updated>
    <author>
      <name>Benjamin Nowack</name>
    </author>
    <summary>Procrastination</summary>
    <category term="3d"/>
    <category term="foaf"/>
    <category term="semweb"/>
    <category term="shirt"/>
    <content type="xhtml" xml:lang="en">
      <div xmlns="http://www.w3.org/1999/xhtml">
Nothing special to report from my side, just thought I should post <em>something</em> at least once a month. I'm still working on end-user-friendly RDF annotators, a SKOS editor, and started generalizing my RDF store API in order to eventually turn <a href="http://arc.web-semantics.org">ARC</a> into a complete RDF toolkit. CONFOTO is going to be upgraded as well.<br />
<br />
<img src="http://bnode.org/media/2005/09/19/foaflets_alu.jpg" class="plain" title="FOAF- alu edition" alt="FOAF- alu edition" /><br />
<br />
But, of course, no plan without attractive hooks for distraction: The new CONFOTO server came with a merchandise shop, so I re-activated the 3D tool I used for the SemanticWeb.org banner this weekend and tried to design a Geek-Shirt for the upcoming SemWeb events I'm going to attend (Semantic Web Days in Munich, and ISWC in Galway). I think my shop is only available in German, maybe I should have a look at cafepress as well.
And there's still this foaflets scene, anyone interested in making a shirt out of it? (Hm, does the FOAF project have a foaf:tipjar we could use for stuff like that)? However, a free T-Shirt for the first to add <a href="http://planb.nicecupoftea.org/archives/001185.html">David Hasselhoff</a> or another <a href="http://dannyayers.com/archives/2004/12/24/seasonal/">ex-star</a> to the FOAF aluminium (<em>FOAF Lite</em>, ya know) edition.

      </div>
    </content>
  </entry>

  <entry>
    <title>FOAFlets of the Caribbean</title>
    <link rel="alternate" type="text/html" hreflang="en" href="http://bnode.org/blog/2004/11/03/foaflets-of-the-caribbean"/>
    <id>http://bnode.org/blog/2004/11/03/foaflets-of-the-caribbean</id>
    <published>2004-11-03T21:00Z</published>
    <updated>2006-11-30T18:16:01Z</updated>
    <author>
      <name>Benjamin Nowack</name>
    </author>
    <summary>3D FOAFlets created with Bryce5.</summary>
    <category term="3d"/>
    <category term="foaf"/>
    <category term="foaflets"/>
    <category term="semweb"/>
    <content type="xhtml" xml:lang="en">
      <div xmlns="http://www.w3.org/1999/xhtml">
While waiting for the US election results coming in last night, I couldn't really concentrate on programming. So I re-arranged my todo list for the semanticweb.org project a little bit and started playing around with <a href="http://www.daz3d.com/program/bryce/">Bryce5</a>, a 3D renderer for non-3D-people. I'm thinking about using it for the generation of head graphics for some of the portal's editing tools, or for the site logo. Building the test-<a href="http://www.foaf-project.org/">FOAF</a>lets was really easy. A fun tool.<br />
<br />
<img src="http://bnode.org/media/2004/11/03/foaflets_of_the_caribbean.jpg" title="foaflets of the caribbean" alt="foaflets of the caribbean" />
      </div>
    </content>
  </entry>

</feed>
