<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: BNodes Out!</title>
	<atom:link href="http://blog.iandavis.com/2007/03/bnodes-out/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.iandavis.com/2007/03/bnodes-out</link>
	<description>blog.iandavis.com</description>
	<lastBuildDate>Wed, 04 Nov 2009 14:19:37 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=3.0-alpha</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Chimezie</title>
		<link>http://blog.iandavis.com/2007/03/bnodes-out/comment-page-1#comment-372</link>
		<dc:creator>Chimezie</dc:creator>
		<pubDate>Wed, 28 Mar 2007 10:35:09 +0000</pubDate>
		<guid isPermaLink="false">http://iandavis.com/blog2/?p=983#comment-372</guid>
		<description>I&#039;ve reluctantly come around to the same conclusions around BNodes: they cause more harm than good.  *Ahem* SPARQL</description>
		<content:encoded><![CDATA[<p>I&#8217;ve reluctantly come around to the same conclusions around BNodes: they cause more harm than good.  *Ahem* SPARQL</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Henry Story</title>
		<link>http://blog.iandavis.com/2007/03/bnodes-out/comment-page-1#comment-376</link>
		<dc:creator>Henry Story</dc:creator>
		<pubDate>Tue, 27 Mar 2007 10:22:51 +0000</pubDate>
		<guid isPermaLink="false">http://iandavis.com/blog2/?p=983#comment-376</guid>
		<description>Another thought that occurred to me. If you don&#039;t want bnodes, then you should quickly ask for a SPARQL enhancement, so that they can incorporate the N3 :- sign. Otherwise writing SPARQL queries is going to be a little tedious.

This is because you want to write things like


&lt;kkk&gt; :rel [ :- &amp;lturn:bnode:xyz&gt;;
                  a foaf:Person;
                  foaf:mbox &lt;mailto:joe@eg.com&gt; ] .

instead of

&lt;kkk&gt; :rel &lt;urn:bnode:xyz&gt; .
&lt;urn:bnode:xyz&gt; a foaf:Person;
                         foaf:mbox &lt;mailto:joe@eg.com&gt; .

The :- keyword (timbl also proposed &#039;is&#039;) just gives a name to the blank node. It&#039;s semantically equivalent to owl:sameAs,
on an infering DB, but most DBs won&#039;t be inferring. But it allows the human reader to see the structure of the graph a lot more easily, especially as the graph gets larger. Perhaps one can think of it as the equivalent of the rdf/xml &#039;about&#039; attribute.

Henry</description>
		<content:encoded><![CDATA[<p>Another thought that occurred to me. If you don&#8217;t want bnodes, then you should quickly ask for a SPARQL enhancement, so that they can incorporate the N3 :- sign. Otherwise writing SPARQL queries is going to be a little tedious.</p>
<p>This is because you want to write things like</p>
<p>&lt;kkk&gt; :rel [ :- &amp;lturn:bnode:xyz&gt;;<br />
                  a foaf:Person;<br />
                  foaf:mbox &lt;mailto:joe@eg.com&gt; ] .</p>
<p>instead of</p>
<p>&lt;kkk&gt; :rel &lt;urn:bnode:xyz&gt; .<br />
&lt;urn:bnode:xyz&gt; a foaf:Person;<br />
                         foaf:mbox &lt;mailto:joe@eg.com&gt; .</p>
<p>The :- keyword (timbl also proposed &#8216;is&#8217;) just gives a name to the blank node. It&#8217;s semantically equivalent to owl:sameAs,<br />
on an infering DB, but most DBs won&#8217;t be inferring. But it allows the human reader to see the structure of the graph a lot more easily, especially as the graph gets larger. Perhaps one can think of it as the equivalent of the rdf/xml &#8216;about&#8217; attribute.</p>
<p>Henry</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tony Hammond</title>
		<link>http://blog.iandavis.com/2007/03/bnodes-out/comment-page-1#comment-375</link>
		<dc:creator>Tony Hammond</dc:creator>
		<pubDate>Tue, 27 Mar 2007 10:00:12 +0000</pubDate>
		<guid isPermaLink="false">http://iandavis.com/blog2/?p=983#comment-375</guid>
		<description>Have to pipe up here and mention the YADS data model that I had earlier proposed and still maintain over here:

    http://nurture.nature.com/tony/yads/

Blurb reads as such: &quot;YADS implements a simple, safe and predictable recursive data model for describing resource collections. The aim is to assist in programming complex resource descriptions across multiple applications and to foster interoperability between them.&quot;

So, the YADS model makes extensive use of bNodes to manage hierarchies of &quot;fat&quot; resources - i.e. resource islands, a resource decorated with properties. The bNodes are only used as a mechanism for managing containment. There is certainly no intention to globally reference the bNode &quot;resource&quot;. I guess one could say that the actual resources managed by YADS (those accorded a URI) are qualified (witth properties) *in context*. That is in the context of the complete YADS description. The &quot;fat&quot; resource managed by the bNode does not have or need a permanent global identifier.

Seems to me that bNodes perform a very useful function. Yes, I am aware of the &quot;smushing&quot; problem but I think this is a red herring. bNodes give us the possibility of creating local &quot;clumpiness&quot; within the general RDF graph. If everything is reduced to global resources then the RDF graph will remain flat and homogenous and generally unspeakably uninteresting. IMHO. Like the primitive universe with no synthesis of elements and especially the heavier elements. Just a primordial soup.

I think Danny is also &quot;spot on&quot; when he talks about the cost of minting URIs. As a publisher we are all too aware that URIs are expensive to maintain. This is why scholarly publishing in particular has invested considerable effort in developing the DOI (Digital Object Identifier - http://doi.org/) as a solution to maintaining persistent reference linking (see also CrossRef - http://crossref.org/). Even disposable URIs have an associated cost to mint. I guess top of my head the only no-cost solution to minting URIs would be data: URIs because there is no naming authority to contend with. (I&#039;m not sure about the ethics of using someone else&#039;s DNS name in a tag: URI.)

In sum, bNodes are useful. Less is more.</description>
		<content:encoded><![CDATA[<p>Have to pipe up here and mention the YADS data model that I had earlier proposed and still maintain over here:</p>
<p>    <a href="http://nurture.nature.com/tony/yads/" rel="nofollow">http://nurture.nature.com/tony/yads/</a></p>
<p>Blurb reads as such: &#8220;YADS implements a simple, safe and predictable recursive data model for describing resource collections. The aim is to assist in programming complex resource descriptions across multiple applications and to foster interoperability between them.&#8221;</p>
<p>So, the YADS model makes extensive use of bNodes to manage hierarchies of &#8220;fat&#8221; resources &#8211; i.e. resource islands, a resource decorated with properties. The bNodes are only used as a mechanism for managing containment. There is certainly no intention to globally reference the bNode &#8220;resource&#8221;. I guess one could say that the actual resources managed by YADS (those accorded a URI) are qualified (witth properties) *in context*. That is in the context of the complete YADS description. The &#8220;fat&#8221; resource managed by the bNode does not have or need a permanent global identifier.</p>
<p>Seems to me that bNodes perform a very useful function. Yes, I am aware of the &#8220;smushing&#8221; problem but I think this is a red herring. bNodes give us the possibility of creating local &#8220;clumpiness&#8221; within the general RDF graph. If everything is reduced to global resources then the RDF graph will remain flat and homogenous and generally unspeakably uninteresting. IMHO. Like the primitive universe with no synthesis of elements and especially the heavier elements. Just a primordial soup.</p>
<p>I think Danny is also &#8220;spot on&#8221; when he talks about the cost of minting URIs. As a publisher we are all too aware that URIs are expensive to maintain. This is why scholarly publishing in particular has invested considerable effort in developing the DOI (Digital Object Identifier &#8211; <a href="http://doi.org/)" rel="nofollow">http://doi.org/)</a> as a solution to maintaining persistent reference linking (see also CrossRef &#8211; <a href="http://crossref.org/)" rel="nofollow">http://crossref.org/)</a>. Even disposable URIs have an associated cost to mint. I guess top of my head the only no-cost solution to minting URIs would be data: URIs because there is no naming authority to contend with. (I&#8217;m not sure about the ethics of using someone else&#8217;s DNS name in a tag: URI.)</p>
<p>In sum, bNodes are useful. Less is more.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Henry Story</title>
		<link>http://blog.iandavis.com/2007/03/bnodes-out/comment-page-1#comment-374</link>
		<dc:creator>Henry Story</dc:creator>
		<pubDate>Tue, 27 Mar 2007 07:27:09 +0000</pubDate>
		<guid isPermaLink="false">http://iandavis.com/blog2/?p=983#comment-374</guid>
		<description>perhaps we need a bnode urn :-)

urn:bnode:sflsdjflskdjflksdjf


Great podcast with Nova Spivak btw.</description>
		<content:encoded><![CDATA[<p>perhaps we need a bnode urn <img src='http://blog.iandavis.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>urn:bnode:sflsdjflskdjflksdjf</p>
<p>Great podcast with Nova Spivak btw.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: iand</title>
		<link>http://blog.iandavis.com/2007/03/bnodes-out/comment-page-1#comment-373</link>
		<dc:creator>iand</dc:creator>
		<pubDate>Mon, 26 Mar 2007 23:14:23 +0000</pubDate>
		<guid isPermaLink="false">http://iandavis.com/blog2/?p=983#comment-373</guid>
		<description>Henry, the problem isn&#039;t the large number of resources, bnode or otherwise, but that by their very nature bnodes can only be handled via indirection.

From my work at Talis, and from conversations with many people putting RDF to work, being able to diff and patch RDF graphs is very very important. You just can&#039;t do that sensibly with the endless indirection that bnodes require. With named nodes (URIs or literals) it&#039;s trivial.

I also don&#039;t think your example is any more difficult with a URI vs a bnode. True, it&#039;s easier to write down in N3 using bnodes, but it&#039;s almost the same markup for RDF/XML. Also, just because it&#039;s written down as a blank node doesn&#039;t mean it has to be parsed that way into a triple store - the parser could substitute generated URIs and nothing would break, no meaning would be lost.</description>
		<content:encoded><![CDATA[<p>Henry, the problem isn&#8217;t the large number of resources, bnode or otherwise, but that by their very nature bnodes can only be handled via indirection.</p>
<p>From my work at Talis, and from conversations with many people putting RDF to work, being able to diff and patch RDF graphs is very very important. You just can&#8217;t do that sensibly with the endless indirection that bnodes require. With named nodes (URIs or literals) it&#8217;s trivial.</p>
<p>I also don&#8217;t think your example is any more difficult with a URI vs a bnode. True, it&#8217;s easier to write down in N3 using bnodes, but it&#8217;s almost the same markup for RDF/XML. Also, just because it&#8217;s written down as a blank node doesn&#8217;t mean it has to be parsed that way into a triple store &#8211; the parser could substitute generated URIs and nothing would break, no meaning would be lost.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Henry Story</title>
		<link>http://blog.iandavis.com/2007/03/bnodes-out/comment-page-1#comment-371</link>
		<dc:creator>Henry Story</dc:creator>
		<pubDate>Mon, 26 Mar 2007 20:35:21 +0000</pubDate>
		<guid isPermaLink="false">http://iandavis.com/blog2/?p=983#comment-371</guid>
		<description>Removing bnodes won&#039;t remove the problem that bnodes are meant to solve, namely smushing, as you will later be forced to smush uris instead of bnodes, and just have a huge number of uris instead. So the problem remains.

Having said that bnodes should be avoided if good uris can be found. And often with a little web site organisation uris can be created for people for example. It certainly helps a lot to have dereferenceable urls. Exchanging bnodes for URNs does not seem to give one much, apart from the trouble of having to mint urns.

There is a good case for bnodes. Imagine you tag something with &quot;bank&quot;. You want to say something like

&lt;/page.html&gt; :tagging &lt;http://tagger.com/bblfish/tag/10002&gt;.
&lt;http://tagger.com/bblfish/tag/10002&gt; :by &lt;http://bblfish.net/people/card#me&gt;;
                                                         :tag [ a skos:Concept;
                                                                  skos:label â€œbankâ€ ] .

Here you say that you are tagging something with a concept, but you don&#039;t yet know which concept it is.
Perhaps later that tag can be nailed down as being a  and then the blank node will be given a URI.

This helps keep things indeterminate while they are.</description>
		<content:encoded><![CDATA[<p>Removing bnodes won&#8217;t remove the problem that bnodes are meant to solve, namely smushing, as you will later be forced to smush uris instead of bnodes, and just have a huge number of uris instead. So the problem remains.</p>
<p>Having said that bnodes should be avoided if good uris can be found. And often with a little web site organisation uris can be created for people for example. It certainly helps a lot to have dereferenceable urls. Exchanging bnodes for URNs does not seem to give one much, apart from the trouble of having to mint urns.</p>
<p>There is a good case for bnodes. Imagine you tag something with &#8220;bank&#8221;. You want to say something like</p>
<p>&lt;/page.html&gt; :tagging &lt;http://tagger.com/bblfish/tag/10002&gt;.<br />
&lt;http://tagger.com/bblfish/tag/10002&gt; :by &lt;http://bblfish.net/people/card#me&gt;;<br />
                                                         :tag [ a skos:Concept;<br />
                                                                  skos:label â€œbankâ€ ] .</p>
<p>Here you say that you are tagging something with a concept, but you don&#8217;t yet know which concept it is.<br />
Perhaps later that tag can be nailed down as being a  and then the blank node will be given a URI.</p>
<p>This helps keep things indeterminate while they are.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: iand</title>
		<link>http://blog.iandavis.com/2007/03/bnodes-out/comment-page-1#comment-370</link>
		<dc:creator>iand</dc:creator>
		<pubDate>Mon, 26 Mar 2007 15:30:31 +0000</pubDate>
		<guid isPermaLink="false">http://iandavis.com/blog2/?p=983#comment-370</guid>
		<description>I should have added ...and makes our applications simpler to build and use</description>
		<content:encoded><![CDATA[<p>I should have added &#8230;and makes our applications simpler to build and use</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: iand</title>
		<link>http://blog.iandavis.com/2007/03/bnodes-out/comment-page-1#comment-369</link>
		<dc:creator>iand</dc:creator>
		<pubDate>Mon, 26 Mar 2007 14:52:56 +0000</pubDate>
		<guid isPermaLink="false">http://iandavis.com/blog2/?p=983#comment-369</guid>
		<description>Richard, I don&#039;t think we should change RDF, but it might be interesting to define a subset that still has the expressivity that we need to get things done.</description>
		<content:encoded><![CDATA[<p>Richard, I don&#8217;t think we should change RDF, but it might be interesting to define a subset that still has the expressivity that we need to get things done.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Richard Cyganiak</title>
		<link>http://blog.iandavis.com/2007/03/bnodes-out/comment-page-1#comment-368</link>
		<dc:creator>Richard Cyganiak</dc:creator>
		<pubDate>Mon, 26 Mar 2007 14:35:50 +0000</pubDate>
		<guid isPermaLink="false">http://iandavis.com/blog2/?p=983#comment-368</guid>
		<description>Semantically, a bNode is the same as a throwaway URI. Both have their advantages. Throwaway URIs can be linked to, and you can simplify your data model by forbidding bNodes. On the other hand, URIs should be kept stable, and keeping URIs stable has a cost. Using bNodes avoids it in cases where you don&#039;t want to incur this cost.

I&#039;m not entirely convinced that bNodes should be removed from RDF. But avoiding them for practical reasons is usually a good idea.</description>
		<content:encoded><![CDATA[<p>Semantically, a bNode is the same as a throwaway URI. Both have their advantages. Throwaway URIs can be linked to, and you can simplify your data model by forbidding bNodes. On the other hand, URIs should be kept stable, and keeping URIs stable has a cost. Using bNodes avoids it in cases where you don&#8217;t want to incur this cost.</p>
<p>I&#8217;m not entirely convinced that bNodes should be removed from RDF. But avoiding them for practical reasons is usually a good idea.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: iand</title>
		<link>http://blog.iandavis.com/2007/03/bnodes-out/comment-page-1#comment-367</link>
		<dc:creator>iand</dc:creator>
		<pubDate>Mon, 26 Mar 2007 11:01:04 +0000</pubDate>
		<guid isPermaLink="false">http://iandavis.com/blog2/?p=983#comment-367</guid>
		<description>Danny, Minting new URI&#039;s instead of bnode IDs probably doesn&#039;t cost anything at all of you use document fragments for the URIs. They&#039;re even locally scoped.

I did think of one thing that bnodes give you over using a URI: they are guaranteed to be safely handled when smushing documents, i.e. that can be used to prevent accidental merging that could occur when the same URI were inadvertently used in two documents. But we smush documents containing a mix of URIs and bnodes all the time and this has never really presented itself as a problem, so I think it&#039;s only a minor advantage.

The other thing to consider is that in every RDBMS implementation of RDF I have seen bnodes are converted to URIs internally so they can be stored in the subject column of a triple table.</description>
		<content:encoded><![CDATA[<p>Danny, Minting new URI&#8217;s instead of bnode IDs probably doesn&#8217;t cost anything at all of you use document fragments for the URIs. They&#8217;re even locally scoped.</p>
<p>I did think of one thing that bnodes give you over using a URI: they are guaranteed to be safely handled when smushing documents, i.e. that can be used to prevent accidental merging that could occur when the same URI were inadvertently used in two documents. But we smush documents containing a mix of URIs and bnodes all the time and this has never really presented itself as a problem, so I think it&#8217;s only a minor advantage.</p>
<p>The other thing to consider is that in every RDBMS implementation of RDF I have seen bnodes are converted to URIs internally so they can be stored in the subject column of a triple table.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
