<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-12669512</id><updated>2012-01-14T04:06:01.277+01:00</updated><category term='Interoperability'/><category term='Community Driven'/><category term='Extensibility'/><category term='GWT'/><category term='Publishing'/><category term='OSGi'/><category term='RDF'/><category term='CSS'/><category term='Annotation Ontology (AO)'/><category term='Genius'/><category term='Genes'/><category term='Semantic Web'/><category term='Traceability'/><category term='UIBinder'/><category term='Collections Ontology'/><category term='Java'/><category term='FOAF'/><category term='Spring Security'/><category term='Generality'/><category term='OpenID'/><category term='Nanopublications'/><category term='Ontology'/><category term='HyQue'/><category term='Annotation Framework (AF)'/><category term='Modularity'/><category term='Eclipse'/><category term='Newtorks'/><category term='Annotation'/><category term='SWAN'/><category term='Grails'/><category term='Domeo'/><category term='Orthogonality'/><category term='OWL'/><category term='Provenance'/><category term='Adequate Documentation'/><category term='HTML5'/><category term='Books'/><title type='text'>HckLab - Working foR evolution</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>54</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-12669512.post-398305248265066533</id><published>2012-01-14T00:59:00.006+01:00</published><updated>2012-01-14T04:06:01.284+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Domeo'/><category scheme='http://www.blogger.com/atom/ns#' term='Annotation'/><title type='text'>Domeo v2 working much faster on Firefox then Chrome</title><content type='html'>Since a week now, I am deeply involved in developing the v.2 of the &lt;a href="http://annotationframework.org/"&gt;Domeo annotation tool&lt;/a&gt;. Domeo is a combination of &lt;a href="http://code.google.com/webtoolkit/"&gt;GWT (Google Web Toolkit)&lt;/a&gt; and JavaScript. I've been mainly working on the infrastructure and, initially, as it is not much UI work, I was testing only on Chrome (16.0.912.75). Sadly, I've&amp;nbsp; noticed several times that my code was not running fast enough and I started to study alternative ways of performing various tasks.&lt;br /&gt;&lt;br /&gt;Then, out of curiosity, I ran the same tests on Firefox and surprise... what was running slow on Chrome was running almost without any latency in FF (6.0.2).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-K2XV8mwkqRM/TxDD6Qg6YuI/AAAAAAAAAIk/jK-e4AcOIpE/s1600/Domeo+2+-+Chrome+and+FF+comparison+-+Jan+2012+-+by+Paolo+Ciccarese.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="210" src="http://4.bp.blogspot.com/-K2XV8mwkqRM/TxDD6Qg6YuI/AAAAAAAAAIk/jK-e4AcOIpE/s640/Domeo+2+-+Chrome+and+FF+comparison+-+Jan+2012+-+by+Paolo+Ciccarese.png" width="610" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The test consists in 18 steps and each of them is adding the same amount of complexity. Looking at the above figure (milliseconds on the Y-axis) you will easily detect what I am talking about. The difference seems way too big.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-398305248265066533?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/398305248265066533/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=398305248265066533' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/398305248265066533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/398305248265066533'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2012/01/domeo-v2-working-much-faster-on-firefox.html' title='Domeo v2 working much faster on Firefox then Chrome'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-K2XV8mwkqRM/TxDD6Qg6YuI/AAAAAAAAAIk/jK-e4AcOIpE/s72-c/Domeo+2+-+Chrome+and+FF+comparison+-+Jan+2012+-+by+Paolo+Ciccarese.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-5771157995591621364</id><published>2011-09-26T15:34:00.010+02:00</published><updated>2011-09-26T18:36:16.895+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Collections Ontology'/><category scheme='http://www.blogger.com/atom/ns#' term='Ontology'/><title type='text'>Collections Ontology v.2... list of persons [1]</title><content type='html'>Back in 2008 I've published a couple of posts explaining my need of creating an ontology for collections:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://hcklab.blogspot.com/2008/12/moving-towards-swan-collections.html"&gt;Moving towards the SWAN Collections Ontology [1]&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://hcklab.blogspot.com/2008/12/moving-towards-swan-collections_31.html"&gt;Moving towards the SWAN Collections Ontology [2]&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;After some months of work with Silvio Peroni we are almost done with &lt;a href="http://code.google.com/p/collections-ontology/"&gt;v.2 of Collections Ontology (CO)&lt;/a&gt; expressed in OWL2.&amp;nbsp; Following is a simple example that illustrates some of the features of CO2. Before that here is how to set up the environment for testing the features yourself. First of all I would suggest you to install &lt;a href="http://protege.stanford.edu/"&gt;&lt;span class="sidebarText"&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/a&gt;&lt;b&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=12669512&amp;amp;postID=5771157995591621364" style="font-weight: normal;"&gt;Protege 4.1&lt;/a&gt; &lt;/b&gt; and to make sure to &lt;a href="http://clarkparsia.com/pellet/protege/"&gt;install the Pellet plugin&lt;/a&gt; for it. &lt;br /&gt;&lt;br /&gt;With Protege up and running, I performed the import of the development version of the Collection Ontology v.2 with URL: &lt;a href="http://collections-ontology.googlecode.com/svn/trunk/collections.owl"&gt;http://collections-ontology.googlecode.com/svn/trunk/collections.owl&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-V6f5Xa2fKo8/Tn_KJChupgI/AAAAAAAAAHc/VzVcj-u3BRE/s1600/Import%2Bof%2BCollections%2BOntology%2Bby%2BPaolo%2BCiccarese.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-V6f5Xa2fKo8/Tn_KJChupgI/AAAAAAAAAHc/VzVcj-u3BRE/s1600/Import%2Bof%2BCollections%2BOntology%2Bby%2BPaolo%2BCiccarese.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;b&gt;Figure 1 - Import of the development version of the Collections Ontology (CO) with Protege&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-EsxayFGH8PE/Tn_OVUFMDSI/AAAAAAAAAHo/vSW6ACxqcWI/s1600/Imported+Collections+Ontology+%2528CO%2529+by+Paolo+Ciccarese.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-EsxayFGH8PE/Tn_OVUFMDSI/AAAAAAAAAHo/vSW6ACxqcWI/s1600/Imported+Collections+Ontology+%2528CO%2529+by+Paolo+Ciccarese.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;b&gt;Figure 2 - Collections Ontology (CO) is imported&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;After that I've created a class &lt;i&gt;person&lt;/i&gt; - note that I haven't reused classes such as foaf:Person to keep the example simple - and the instances in figure 3 in order to model a list of persons (you can download the file here).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-RciVBIPBOAY/Tn_UyPywrOI/AAAAAAAAAHs/Mw2aC4k8zEc/s1600/Collections+Ontology+%2528CO%2529+example+by+Paolo+Ciccarese.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="406" src="http://3.bp.blogspot.com/-RciVBIPBOAY/Tn_UyPywrOI/AAAAAAAAAHs/Mw2aC4k8zEc/s640/Collections+Ontology+%2528CO%2529+example+by+Paolo+Ciccarese.png" width="610" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;b&gt;Figure 3 - Collections Ontology (CO) example instances (ovals)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;After triggering the reasoner, it is immediate to notice inferred properties (figure 4 in light yellow). &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-GYZGwzELcec/Tn_ZIHD0O2I/AAAAAAAAAHw/JV2D33Yr3ds/s1600/ItemOne+in+Protege+after+Pellet+by+Paolo+Ciccarese.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="411" src="http://4.bp.blogspot.com/-GYZGwzELcec/Tn_ZIHD0O2I/AAAAAAAAAHw/JV2D33Yr3ds/s640/ItemOne+in+Protege+after+Pellet+by+Paolo+Ciccarese.png" width="610" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;b&gt;Figure 4 - Inferred types and properties for item instance &lt;i&gt;itemOne&lt;/i&gt;. For instance &lt;i&gt;itemOne&lt;/i&gt; has been defined as instance of &lt;i&gt;item&lt;/i&gt;, the reasoner infers &lt;i&gt;itemOne&lt;/i&gt; (i) is a &lt;i&gt;list&lt;/i&gt; &lt;i&gt;item&lt;/i&gt; (ii) &lt;i&gt;is follwed by&lt;/i&gt; both &lt;i&gt;itemTwo&lt;/i&gt; and &lt;i&gt;itemThree &lt;/i&gt;(iii)&lt;i&gt; is item of &lt;/i&gt;and&lt;i&gt; is first item of&lt;/i&gt; persons.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-0BmHC8BGog8/ToCpLSknUzI/AAAAAAAAAH4/Cgb0WLSiMtg/s1600/Collections+Ontology+%2528CO%2529+Inference+explanation+by+Paolo+Ciccarese.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="290" src="http://4.bp.blogspot.com/-0BmHC8BGog8/ToCpLSknUzI/AAAAAAAAAH4/Cgb0WLSiMtg/s640/Collections+Ontology+%2528CO%2529+Inference+explanation+by+Paolo+Ciccarese.png" width="610" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;b&gt;Figure 5 - Explanation of itemOne type 'list item'&lt;/b&gt; &lt;b&gt;obtaining by clicking the highlighted button&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;We can now proceed with some DL Queries.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Query 1&lt;/b&gt;&lt;br /&gt;For instance we can ask for all the items that have item content (has item content) persons with name "Paolo Ciccarese":&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;item and 'has item content' some (person and (name value "Paolo Ciccarese"))&lt;/b&gt;&lt;/blockquote&gt;In the Protege &lt;a href="http://protegewiki.stanford.edu/wiki/DLQueryTab"&gt;tab named 'DL Query'&lt;/a&gt; we can enter the query above and, if we select on the right side the option 'Individuals' we are going to&amp;nbsp; retrieve one item (itemOne):&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-qY6IQCFJMMM/ToBz_i-JXFI/AAAAAAAAAH0/0UhkfDTrHXo/s1600/DL+Query+1+by+Paolo+Ciccarese.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="334" src="http://3.bp.blogspot.com/-qY6IQCFJMMM/ToBz_i-JXFI/AAAAAAAAAH0/0UhkfDTrHXo/s640/DL+Query+1+by+Paolo+Ciccarese.png" width="610" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Query 2&lt;/b&gt; &lt;br /&gt;We can ask for all the lists where the first person is named 'Paolo Ciccarese' (answer 'persons'):&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;list and 'has first item' some (&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; item and 'has item content' some (person and (name value "Paolo Ciccarese"))&lt;br /&gt;)&lt;/b&gt;&lt;/blockquote&gt;&lt;b&gt;Query 3&lt;/b&gt;&lt;br /&gt;Similarly we can ask more complex queries such as: find all the persons lists where the first item points to a person named 'Paolo Ciccarese' and the last item points to a person named 'Silvio Peroni' (answer 'persons'):&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;list and (&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'has first item' some (item and 'has item content' some&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (person and (name value "Paolo Ciccarese")))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; and&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'has last item' some (item and 'has item content' some&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (person and (name value "Silvio Peroni")))&lt;br /&gt;)&lt;/b&gt;&lt;/blockquote&gt;&lt;b&gt;Query 4 &lt;/b&gt;&lt;br /&gt;Another query can be: give me all the lists where the first person is named 'Paolo Ciccarese' and the second is 'Marco Ocana' (given the transitive nature of the property 'is followed by' the answer is 'persons'):&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;list and (&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'has first item' some (item and &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'has item content' some (person and (name value "Paolo Ciccarese"))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; and&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'is followed by' some (item&amp;nbsp; and&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ('has item content' some(person and(name value "Marco Ocana"))))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;br /&gt;)&lt;/b&gt;&lt;/blockquote&gt;&lt;b&gt;Query 5&lt;/b&gt;&lt;br /&gt;Returns all the lists containing a person named 'Paolo Ciccarese' (answer 'persons'):&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;list and 'has item' some (&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; item and 'has item content' some (person and (name value "Paolo Ciccarese"))&lt;br /&gt;) &lt;/b&gt;&lt;/blockquote&gt;&lt;b&gt;Query 6&lt;/b&gt;&lt;br /&gt;Returns any list where a person named 'Paolo Ciccarese' is followed by a person named 'Silvio Peroni' (answer 'persons'):&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;list and (&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'has item' some (item and&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'has item content' some (person and (name value "Paolo Ciccarese"))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; and&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'is followed by' some (item&amp;nbsp; and&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ('has item content' some(person and(name value "Silvio Peroni"))))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;br /&gt;)&lt;/b&gt;&lt;/blockquote&gt;&lt;b&gt;Query 7&lt;/b&gt;&lt;br /&gt;Returns all the lists where a person named 'Silvio Peroni' is preceeded by a person named 'Paolo Ciccarese' (answer 'persons'):&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;list and (&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'has item' some (item and&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'has item content' some (person and (name value "Silvio Peroni"))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; and&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'is preceded by' some (item&amp;nbsp; and&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ('has item content' some(person and(name value "Paolo Ciccarese"))))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;br /&gt;)&lt;/b&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-5771157995591621364?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/5771157995591621364/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=5771157995591621364' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/5771157995591621364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/5771157995591621364'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2011/09/collections-ontology-v2-list-of-persons.html' title='Collections Ontology v.2... list of persons [1]'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-V6f5Xa2fKo8/Tn_KJChupgI/AAAAAAAAAHc/VzVcj-u3BRE/s72-c/Import%2Bof%2BCollections%2BOntology%2Bby%2BPaolo%2BCiccarese.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-6052926430421556758</id><published>2011-09-22T20:46:00.002+02:00</published><updated>2011-09-22T21:35:57.472+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='HyQue'/><category scheme='http://www.blogger.com/atom/ns#' term='SWAN'/><category scheme='http://www.blogger.com/atom/ns#' term='Nanopublications'/><title type='text'>SWAN, AlzSWAN, HyQue and Nanopublications</title><content type='html'>While developing the SWAN ontology and the SWAN platform (see AlzSWAN for Alzheimer disease) there have always been two open issues: (i) the use of named graphs and (ii) the translation of the textual discourse elements (claims such as: &lt;a href="http://tinyurl.com/4h2am3a"&gt;Intramembranous Aβ could behave as chaperones of other membrane proteins&lt;/a&gt;) into a formal representation made of triples.&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;div id="__ss_7232588" style="width: 425px;"&gt;&lt;b style="display: block; margin: 12px 0pt 4px;"&gt;&lt;a href="http://www.slideshare.net/paolociccarese/alzswan-hyque-and-nanopublications" title="SWAN, HyQue and Nanopublications"&gt;SWAN, HyQue and Nanopublications&lt;/a&gt;&lt;/b&gt; &lt;object height="355" id="__sse7232588" width="425"&gt; &lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=claim1-110311084638-phpapp02&amp;stripped_title=alzswan-hyque-and-nanopublications&amp;userName=paolociccarese" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed name="__sse7232588" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=claim1-110311084638-phpapp02&amp;stripped_title=alzswan-hyque-and-nanopublications&amp;userName=paolociccarese" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt; &lt;/object&gt; &lt;br /&gt;&lt;div style="padding: 5px 0pt 12px;"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/paolociccarese"&gt;Paolo Ciccarese&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;(i) The use of named graphs is a useful way for wrapping some content and specifying its provenance. Basically the idea is to create an 'onion layers' model where each layer has its own provenance. At the time - back in 2006 - I have been investigating the usage of named graphs - and &lt;a href="http://www.hpl.hp.com/techreports/2004/HPL-2004-56.html"&gt;TriX&lt;/a&gt; - for representing SWAN content.&amp;nbsp; However, we decided not to implement such approach because the technological uncertainty in that uncharted territory - of developing an application like SWAN - was already high enough, named graphs usage was not homogeneous across the community and&amp;nbsp; their serialization was not standardized. This meant introducing de-facto reification for some of the SWAN relationships in order to be able to attach the appropriate provenance. As &lt;a href="http://www.w3.org/2011/rdf-wg/wiki/TF-Graphs"&gt;Graphs&lt;/a&gt; are the topic of one of the task forces of the &lt;a href="http://www.w3.org/2011/rdf-wg/wiki/Main_Page"&gt;RDF Working Group&lt;/a&gt; for updating the &lt;a href="http://www.w3.org/standards/techs/rdf#w3c_all"&gt;2004 RDF Recommendations&lt;/a&gt;, I was starting to think of resuming the old plans.&lt;br /&gt;&lt;br /&gt;(ii) The translation of the textual discourse elements into a formal representation made of triples is, for instance, possible through the &lt;a href="http://www.hybrow.org/"&gt;HyBrow&lt;/a&gt; (now &lt;a href="http://nigam.web.stanford.edu/hyque"&gt;HyQue&lt;/a&gt;) approach. Translating narrative into triples is not easy job though. Many already found the SWAN manual creation process of narrative claims very labor intensive. In fact, the SWAN curators have been usually rephrasing each claims/hypothesis to make them simple and self contained (including the minimum necessary context). Translation into triples requires, even more, starting from neat hypothesis and claims. And these are not always that easy to obtain.&lt;br /&gt;&lt;br /&gt;These two SWAN-related issues have been in my thoughts since a while when the Nanopublication [1] concept came out. &lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;A Nanopublication is a "set of annotations that refers to the same statement and contains a minumum set of (community) agreed-upon annotations.  &lt;/b&gt;&lt;/blockquote&gt;The concept itself is simple and in the above linked slideshow you can find a first attempt based on real SWAN data. With respect to the paper, the concept of 'statement' (triple) has to be updated to 'statements' (triples) as one single statement is not always enough to satisfy needs of real use cases.&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;&lt;strike&gt;&amp;nbsp;Statement&lt;/strike&gt; --&amp;gt; statements&lt;/b&gt;&lt;/blockquote&gt;Starting from the above example, we are now trying to formalize a bit better what a Nanopublication architecture would look like... it is work in progress, but if you look at the slides you will get the drift.&lt;br /&gt;&lt;br /&gt;[1] Paul Groth, Andrew Gibson, Jan Velterop. The anatomy of a nanopublication. Information Services and Use (2010). Volume: 30, Issue: 1, Publisher: IOS Press, Pages: 51-56 (&lt;a href="http://www.mendeley.com/research/anatomy-nanopublication-1/#"&gt;on Mendeley&lt;/a&gt;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-6052926430421556758?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/6052926430421556758/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=6052926430421556758' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/6052926430421556758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/6052926430421556758'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2011/09/swan-alzswan-hyque-and-nanopublications.html' title='SWAN, AlzSWAN, HyQue and Nanopublications'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-5024274211900013227</id><published>2011-09-21T22:04:00.002+02:00</published><updated>2011-12-02T04:09:10.465+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GWT'/><category scheme='http://www.blogger.com/atom/ns#' term='CSS'/><category scheme='http://www.blogger.com/atom/ns#' term='UIBinder'/><title type='text'>UIBinder, CssResource and CSS (GWT)</title><content type='html'>Few month ago I blogged about &lt;a href="http://hcklab.blogspot.com/2011/02/classes-uibinder-and-css-gwt.html"&gt;ClientBundle, UIBinder and CSS (GWT)&lt;/a&gt;. I just realized that an important use case was missing. And here it is.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;4) Using CssResource for CSS expressed in the UIBinder.&lt;/b&gt; When creating a UI with the UIBinder it might happen to include some CSS rules in the ui.xml file. &lt;br /&gt;&lt;br /&gt;&lt;pre style="border-left: 3px solid #eee; padding-left: 4px;"&gt;&amp;lt;ui:UiBinder&lt;br /&gt;&amp;nbsp; xmlns:ui='urn:ui:com.google.gwt.uibinder'&lt;br /&gt;&amp;nbsp; xmlns:g='urn:import:com.google.gwt.user.client.ui'&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ui:style&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .outer {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; width: 100%;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/ui:style&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;g:SimplePanel ui:field='sideBar'&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/g:SimplePanel&amp;gt;&lt;br /&gt;&amp;lt;/ui:UiBinder&amp;gt;&lt;/pre&gt;&lt;br /&gt;It is possible to refer to those CSS rules from the GWT code. For doing so we have to declare a 'type' for ui:style:&lt;br /&gt;&lt;br /&gt;&lt;pre style="border-left: 3px solid #eee; padding-left: 4px;"&gt;&amp;lt;ui:UiBinder&lt;br /&gt;&amp;nbsp; xmlns:ui='urn:ui:com.google.gwt.uibinder'&lt;br /&gt;&amp;nbsp; xmlns:g='urn:import:com.google.gwt.user.client.ui'&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ui:style &lt;b&gt;type='org.example.Example.ExStyle'&lt;/b&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .outer {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; width: 100%;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/ui:style&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;g:SimplePanel ui:field='sideBar'&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/g:SimplePanel&amp;gt;&lt;br /&gt;&amp;lt;/ui:UiBinder&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now, in the class&amp;nbsp; org.example.Example, we can reference the CSS rules and use them:&lt;br /&gt;&lt;br /&gt;&lt;pre style="border-left: 3px solid #eee; padding-left: 4px;"&gt;public class Example extends Composite {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; interface Binder extends UiBinder&lt;simplepanel, example=""&gt; { }&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private static final Binder binder = GWT.create(Binder.class);&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;/simplepanel,&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; @UiField SimplePanel sideBar;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;@UiField ExStyle style;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;interface ExStyle extends CssResource {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; String outer();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Example() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; initWidget(binder.createAndBindUi(this));&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sideBar.setStyleName(&lt;b&gt;style.outer()&lt;/b&gt;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; ...&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-5024274211900013227?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/5024274211900013227/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=5024274211900013227' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/5024274211900013227'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/5024274211900013227'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2011/09/uibinder-cssresource-and-css-gwt.html' title='UIBinder, CssResource and CSS (GWT)'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-5182997291705976894</id><published>2011-09-14T20:29:00.003+02:00</published><updated>2011-09-14T20:34:10.114+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Spring Security'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenID'/><category scheme='http://www.blogger.com/atom/ns#' term='Grails'/><title type='text'>Grails 1.3.7, Spring Security and OpenID... with exception</title><content type='html'>Here is the list of steps I performed to set up &lt;a href="http://openid.net/"&gt;OpenID&lt;/a&gt; authentication with Spring Security: &lt;br /&gt;&lt;br /&gt;1) Create Project with Grails 1.3.7&lt;br /&gt;&lt;pre style="border-left: 3px solid #eee; padding-bottom: 4px; padding-left: 4px;"&gt;grails create-project UserManagement &lt;br /&gt;&lt;/pre&gt;The file application.properties will look something like this:&lt;br /&gt;&lt;pre style="border-left: 3px solid #eee; padding-left: 4px;"&gt;app.grails.version=1.3.7&lt;br /&gt;app.name=UsersManagement&lt;br /&gt;app.servlet.version=2.4&lt;br /&gt;app.version=0.1&lt;br /&gt;plugins.hibernate=1.3.7&lt;br /&gt;plugins.tomcat=1.3.7 &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;2) Installing the Spring Security plugin (&lt;a href="http://www.grails.org/plugin/spring-security-core"&gt;website&lt;/a&gt; and &lt;a href="http://grails-plugins.github.com/grails-spring-security-core/docs/manual/"&gt;documentation&lt;/a&gt;)&lt;br /&gt;&lt;pre style="border-left: 3px solid #eee; padding-bottom: 4px; padding-left: 4px;"&gt;grails install-plugin spring-security-core&lt;br /&gt;&lt;/pre&gt;The file application.properties will now look something like this:&lt;br /&gt;&lt;pre style="border-left: 3px solid #eee; padding-left: 4px;"&gt;app.grails.version=1.3.7&lt;br /&gt;app.name=UsersManagement&lt;br /&gt;app.servlet.version=2.4&lt;br /&gt;app.version=0.1&lt;br /&gt;plugins.hibernate=1.3.7&lt;br /&gt;&lt;b&gt;plugins.spring-security-core=1.2.1&lt;/b&gt;&lt;br /&gt;plugins.tomcat=1.3.7&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;3) Creating Controller and template classes&lt;br /&gt;&lt;pre style="border-left: 3px solid #eee; padding-bottom: 4px; padding-left: 4px;"&gt;grails s2-quickstart org.commonsemantics.scigrails.module.users.security User Role&lt;br /&gt;&lt;/pre&gt;You will notice the following new files&lt;br /&gt;&lt;pre style="border-left: 3px solid #eee; padding-left: 4px;"&gt;controllers/LoginController.groovy&lt;br /&gt;controllers/LogoutController.groovy&lt;br /&gt;domain/org.commonsemantics.scigrails.module.users.security.User.groovy&lt;br /&gt;domain/org.commonsemantics.scigrails.module.users.security.Role.groovy&lt;br /&gt;domain/org.commonsemantics.scigrails.module.users.security.UserRole.groovy&lt;br /&gt;views/login/auth.gsp&lt;br /&gt;views/login/denied.gsp&lt;br /&gt;&lt;/pre&gt;The Config.groovy will be updated with the following lines:&lt;br /&gt;&lt;pre style="border-left: 3px solid #eee; padding-left: 4px;"&gt;&lt;b&gt;grails.plugins.springsecurity.userLookup.userDomainClassName&lt;/b&gt; =&lt;br /&gt;      'org.commonsemantics.scigrails.module.users.security.User'&lt;br /&gt;&lt;b&gt;grails.plugins.springsecurity.userLookup.authorityJoinClassName&lt;/b&gt; = &lt;br /&gt;      'org.commonsemantics.scigrails.module.users.security.UserRole'&lt;br /&gt;&lt;b&gt;grails.plugins.springsecurity.authority.className&lt;/b&gt; = &lt;br /&gt;      'org.commonsemantics.scigrails.module.users.security.Role'&lt;br /&gt;&lt;/pre&gt;&lt;i&gt;If you are going to change the package of the above classes, just remember to update the above properties.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;4) Move controllers to the desired package - org.commonsemantics.scigrails.module.users.security&lt;br /&gt;&lt;br /&gt;5) Install the OpenID module (&lt;a href="http://grails.org/plugin/spring-security-openid"&gt;website&lt;/a&gt; and &lt;a href="http://burtbeckwith.github.com/grails-spring-security-openid/docs/manual/index.html"&gt;documentation&lt;/a&gt;)&lt;br /&gt;&lt;pre style="border-left: 3px solid #eee; padding-bottom: 4px; padding-left: 4px;"&gt;grails install-plugin spring-security-openid&lt;br /&gt;&lt;/pre&gt;The file application.properties will now look something like this:&lt;br /&gt;&lt;pre style="border-left: 3px solid #eee; padding-left: 4px;"&gt;app.grails.version=1.3.7&lt;br /&gt;app.name=UsersManagement&lt;br /&gt;app.servlet.version=2.4&lt;br /&gt;app.version=0.1&lt;br /&gt;plugins.hibernate=1.3.7&lt;br /&gt;plugins.spring-security-core=1.2.1&lt;br /&gt;&lt;b&gt;plugins.spring-security-openid=1.0.3&lt;/b&gt;&lt;br /&gt;plugins.tomcat=1.3.7&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;6) Creates OpenId Controller and templates for it.&lt;br /&gt;&lt;pre style="border-left: 3px solid #eee; padding-bottom: 4px; padding-left: 4px;"&gt;grails s2-init-openid&lt;br /&gt;&lt;/pre&gt;This script adds the following files:&lt;br /&gt;&lt;pre style="border-left: 3px solid #eee; padding-left: 4px;"&gt;controllers/OpenIdController.groovy&lt;br /&gt;views/openId/auth.gsp&lt;br /&gt;views/openId/createAccount.gsp&lt;br /&gt;views/openId/linkAccount.gsp&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;7) Move OpenIdController to the desired package - org.commonsemantics.scigrails.module.users.security&lt;br /&gt;&lt;br /&gt;8) Add support for the remember-me checkbox&lt;br /&gt;&lt;pre style="border-left: 3px solid #eee; padding-bottom: 4px; padding-left: 4px;"&gt;grails s2-create-persistent-token &lt;br /&gt;     org.commonsemantics.scigrails.module.users.security.PersistentLogin&lt;br /&gt;&lt;/pre&gt;It adds the file:&lt;br /&gt;&lt;pre style="border-left: 3px solid #eee; padding-left: 4px;"&gt;domain/org.commonsemantics.scigrails.module.users.security.PersistentLogin.groovy&lt;br /&gt;&lt;/pre&gt;The Config.groovy is updated with the following lines:&lt;br /&gt;&lt;pre style="border-left: 3px solid #eee; padding-left: 4px;"&gt;&lt;b&gt;grails.plugins.springsecurity.rememberMe.persistent&lt;/b&gt; = true&lt;br /&gt;&lt;b&gt;grails.plugins.springsecurity.rememberMe.persistentToken.domainClassName&lt;/b&gt; =&lt;br /&gt;     'org.commonsemantics.scigrails.module.users.security.PersistentLogin'&lt;br /&gt;&lt;/pre&gt;&lt;i&gt;Once again, if you are going to change the package of the above classe, just remember to update the correspontend property.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;9) Creating the OpenID domain class&lt;br /&gt;&lt;pre style="border-left: 3px solid #eee; padding-bottom: 4px; padding-left: 4px;"&gt;grails s2-create-openid &lt;br /&gt;     org.commonsemantics.scigrails.module.users.security.OpenID &lt;br /&gt;&lt;/pre&gt;The script creates on file:&lt;br /&gt;&lt;pre style="border-left: 3px solid #eee; padding-left: 4px;"&gt;domain/org.commonsemantics.scigrails.module.users.security.OpenID.groovy&lt;br /&gt;&lt;/pre&gt;The Config.groovy is updated with the following line:&lt;br /&gt;&lt;pre style="border-left: 3px solid #eee; padding-left: 4px;"&gt;&lt;b&gt;grails.plugins.springsecurity.openid.domainClass&lt;/b&gt; =       &lt;br /&gt;     'org.commonsemantics.scigrails.module.users.security.OpenID'&lt;br /&gt;&lt;/pre&gt;&lt;i&gt;Once again, if you are going to change the package of the above classe, just remember to update the correspontend property.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;10) Adding OpenIDs to the User domain class&lt;br /&gt;&lt;br /&gt;The following line of code has to be added to the existing User.groovy class:&lt;br /&gt;&lt;pre style="border-left: 3px solid #eee; padding-left: 4px;"&gt;static hasMany = [openIds: OpenID]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;11) Creating some test users&lt;br /&gt;&lt;br /&gt;As suggested by the documentation we can now create some test users by editing the Bootstrap.groovy file as follows&lt;br /&gt;&lt;pre style="border-left: 3px solid #eee; padding-left: 4px;"&gt;import org.commonsemantics.scigrails.module.users.security.Role&lt;br /&gt;import org.commonsemantics.scigrails.module.users.security.User&lt;br /&gt;import org.commonsemantics.scigrails.module.users.security.UserRole&lt;br /&gt;&lt;br /&gt;class BootStrap {&lt;br /&gt;&lt;br /&gt;    def springSecurityService&lt;br /&gt;&lt;br /&gt;    def init = { servletContext -&amp;gt; &lt;br /&gt;&lt;br /&gt;        String password = springSecurityService.encodePassword('password')&lt;br /&gt;        &lt;br /&gt;        def roleAdmin = new Role(authority: 'ROLE_ADMIN').save() &lt;br /&gt;        def roleUser = new Role(authority: 'ROLE_USER').save()&lt;br /&gt;&lt;br /&gt;        def user = new User(username: 'user', &lt;br /&gt;            password: password, enabled: true).save() &lt;br /&gt;        def admin = new User(username: 'admin', &lt;br /&gt;            password: password, enabled: true).save()&lt;br /&gt;&lt;br /&gt;        UserRole.create user, roleUser &lt;br /&gt;        UserRole.create admin, roleUser &lt;br /&gt;        UserRole.create admin, roleAdmin, true &lt;br /&gt;    } &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;12) Redirect the login requests&lt;br /&gt;&lt;br /&gt;It is now necessary to direct the authentication calls to the new Controller that manages also the OpenIDs. We can add to the UrlMappings.groovy file the following:&lt;br /&gt;&lt;pre style="border-left: 3px solid #eee; padding-left: 4px;"&gt;"/login/auth" {&lt;br /&gt;         controller = 'openId'&lt;br /&gt;         action = 'auth'&lt;br /&gt;      }&lt;br /&gt;      "/login/openIdCreateAccount" {&lt;br /&gt;         controller = 'openId'&lt;br /&gt;         action = 'createAccount'&lt;br /&gt;      }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;13) Running Grails and testing&lt;br /&gt;&lt;pre style="border-left: 3px solid #eee; padding-bottom: 4px; padding-left: 4px;"&gt;grails run-app &lt;br /&gt;&lt;/pre&gt;&lt;pre style="border-left: 3px solid #eee; padding-left: 4px;"&gt;Welcome to Grails 1.3.7 - http://grails.org/&lt;br /&gt;Licensed under Apache Standard License 2.0&lt;br /&gt;...&lt;br /&gt;...&lt;br /&gt;Configuring Spring Security ...&lt;br /&gt;Configuring Spring Security OpenID ...&lt;br /&gt;Server running. Browse to http://localhost:8080/UsersManagement&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;When accessing the page you should see something like this:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-noc0tndHTf0/TnDdUXbvXBI/AAAAAAAAAG0/HUBuTWx0U2k/s1600/Spring%2BSecurity%2BOpenID%2BLogin%2B-%2Bby%2BPaolo%2BCiccarese.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="122" src="http://3.bp.blogspot.com/-noc0tndHTf0/TnDdUXbvXBI/AAAAAAAAAG0/HUBuTWx0U2k/s320/Spring%2BSecurity%2BOpenID%2BLogin%2B-%2Bby%2BPaolo%2BCiccarese.png" title="Spring Security OpenID Login by Paolo Ciccarese" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;I will try it yourself but the authentication did not work for me right away. I logged in with my Google OpenID and I got sent to the screen for creating an account. &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-zhV6WFF1CyE/TnDe9VOqh2I/AAAAAAAAAG8/RuCpAKSqpUI/s1600/Register%2Ba%2Bnew%2Buser%2Bthrough%2BOpenID%2Bby%2BPaolo%2BCiccarese.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="183" src="http://2.bp.blogspot.com/-zhV6WFF1CyE/TnDe9VOqh2I/AAAAAAAAAG8/RuCpAKSqpUI/s400/Register%2Ba%2Bnew%2Buser%2Bthrough%2BOpenID%2Bby%2BPaolo%2BCiccarese.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;I then selected the 'link this OpenID' option.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-jenAUQpriM4/TnDfMqcDA7I/AAAAAAAAAHE/KVwTaBWS8xM/s1600/Link%2Bto%2Bexisting%2Buser%2Bthrough%2BOpenID%2Bby%2BPaolo%2BCiccarese.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="212" width="400" src="http://4.bp.blogspot.com/-jenAUQpriM4/TnDfMqcDA7I/AAAAAAAAAHE/KVwTaBWS8xM/s400/Link%2Bto%2Bexisting%2Buser%2Bthrough%2BOpenID%2Bby%2BPaolo%2BCiccarese.png" /&gt;&lt;/a&gt;&lt;/div&gt;After introducing the testing credential 'user' and 'password' I got a 'user not found' back.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-Qk4N9XNwCbQ/TnDfxXgM2_I/AAAAAAAAAHM/HG3GMcErYDk/s1600/User%2Bnot%2Bfound%2Bthrough%2BOpenID%2Bby%2BPaolo%2BCiccarese.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="250" width="400" src="http://4.bp.blogspot.com/-Qk4N9XNwCbQ/TnDfxXgM2_I/AAAAAAAAAHM/HG3GMcErYDk/s400/User%2Bnot%2Bfound%2Bthrough%2BOpenID%2Bby%2BPaolo%2BCiccarese.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;14) Turning on the logging&lt;br /&gt;&lt;br /&gt;First thing I wanted to see if there were any weird things happening by turning on the logging in the Config.groovy file:&lt;br /&gt;&lt;pre style="border-left: 3px solid #eee; padding-left: 4px;"&gt;debug 'org.springframework.security'&lt;br /&gt;&lt;/pre&gt;No exceptions emerged when repeating the process.&lt;br /&gt;&lt;br /&gt;15) Making sure the User is stored in the DB&lt;br /&gt;&lt;br /&gt;We can inspect the default HSQLDB by adding at the end of Bootstrap.groovy init the following:&lt;br /&gt;&lt;pre style="border-left: 3px solid #eee; padding-left: 4px;"&gt;org.hsqldb.util.DatabaseManager.main()'&lt;br /&gt;&lt;/pre&gt;this will open the in memory database inspector. &lt;i&gt;Just remember that if you close the inspector that will also shutdown your Grails app. &lt;a href="http://act.ualise.com/blogs/continuous-innovation/2009/07/viewing-grails-in-memory-hsqldb/"&gt;Read more about the inspector here&lt;/a&gt; and remember to take out that line once the debugging is done.&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;The users resulted stored in the database.&lt;br /&gt;&lt;br /&gt;16) Making sure the encoding process works correctly&lt;br /&gt;&lt;br /&gt;After editing the Bootstrap.groovy file with:&lt;br /&gt;&lt;pre style="border-left: 3px solid #eee; padding-left: 4px;"&gt;String password = springSecurityService.encodePassword('password')&lt;br /&gt;&lt;b&gt;println 'a ' + password&lt;/b&gt;&lt;br /&gt;def admin = new User(username: 'admin', password: password, &lt;br /&gt;     enabled: true).save(failOnError: true)&lt;br /&gt;&lt;b&gt;println 'b ' + User.findByUsername('admin').password&lt;/b&gt;&lt;br /&gt;&lt;/pre&gt;and a restart, I obtained:&lt;br /&gt;&lt;pre style="border-left: 3px solid #eee; padding-left: 4px;"&gt;a 5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8&lt;br /&gt;b 113459eb7bb31bddee85ade5230d6ad5d8b2fb52879e00a84ff6ae1067a210d3&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;It is clear that the login process is not performing correctly. After investigating I found out that the User domain class includes the methods:&lt;br /&gt;&lt;pre style="border-left: 3px solid #eee; padding-left: 4px;"&gt;def beforeInsert() {&lt;br /&gt;          encodePassword()&lt;br /&gt;     }&lt;br /&gt;&lt;br /&gt;     def beforeUpdate() {&lt;br /&gt;          if (isDirty('password')) {&lt;br /&gt;                encodePassword()&lt;br /&gt;          }&lt;br /&gt;     }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;17) Updating the Bootstrap.groovy file&lt;br /&gt;&lt;br /&gt;As the User domain class is already performing the encoding, we have to edit the Bootstrap.groovy file line:&lt;br /&gt;&lt;pre style="border-left: 3px solid #eee; padding-left: 4px;"&gt;&lt;strike&gt;String password = springSecurityService.encodePassword('password')&lt;/strike&gt;&lt;br /&gt;&lt;/pre&gt;Into&lt;br /&gt;&lt;pre style="border-left: 3px solid #eee; padding-left: 4px;"&gt;String password = 'password'&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;And now the login process works for me. &lt;i&gt;We can now remove org.hsqldb.util.DatabaseManager.main() from the end of the Bootstrap.groovy and maybe comment out the logging (see point #14)&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;18) Remove the unused views and controllers?&lt;br /&gt;&lt;br /&gt;It is not possible to remove any of the generated controllers. As far as I know the only file that can be removed is &lt;br /&gt;&lt;pre style="border-left: 3px solid #eee; padding-left: 4px;"&gt;views/login/auth.gsp&lt;br /&gt;&lt;/pre&gt;as the new auth.gsp file provided by the OpenID plugin is now in use (see point #12).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;You can check out the code as follows&lt;/b&gt;:&lt;br /&gt;&lt;pre style="border-left: 3px solid #eee; padding-left: 4px; background-color: #ddd;"&gt;svn checkout &lt;br /&gt;     https://common-semantics.googlecode.com/svn/tags/UsersManagement20110914  &lt;br /&gt;     UsersManagement&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Resources&lt;/b&gt;&lt;br /&gt;&lt;a href="http://openid.net/"&gt;OpenID website&lt;/a&gt; &lt;br /&gt;&lt;a href="http://www.grails.org/plugin/spring-security-core"&gt;Spring Security Plugin for Grails website&lt;/a&gt;&lt;br /&gt;&lt;a href="http://grails.org/plugin/spring-security-openid"&gt;OpenID Plugin for Spring Security website&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-5182997291705976894?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/5182997291705976894/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=5182997291705976894' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/5182997291705976894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/5182997291705976894'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2011/09/grails-137-spring-security-and-openid.html' title='Grails 1.3.7, Spring Security and OpenID... with exception'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-noc0tndHTf0/TnDdUXbvXBI/AAAAAAAAAG0/HUBuTWx0U2k/s72-c/Spring%2BSecurity%2BOpenID%2BLogin%2B-%2Bby%2BPaolo%2BCiccarese.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-6544327636026169666</id><published>2011-08-30T02:17:00.002+02:00</published><updated>2011-08-30T02:26:43.517+02:00</updated><title type='text'>UIMA, Clerezza, AO and Linked Open Data [1]</title><content type='html'>More than a year ago I started to work on the integration of text mining services with &lt;a href="http://code.google.com/p/domeo/"&gt;DOMEO&lt;/a&gt;, the tool I am building. In DOMEO we try to focus, as much as possible, on annotations that refers to entities defined in controlled vocabularies, ontologies or knowledge bases. In other words entities identified by URIs. Almost naturally, after writing a few connectors to existing text mining services, we realized how nice would have been to have a common way of exposing such services. &lt;br /&gt;&lt;br /&gt;After some investigations, I found &lt;a href="http://incubator.apache.org/clerezza/"&gt;Apache Clerezza&lt;/a&gt; a service platform based on OSGi (Open Services Gateway initiative) which provides a set of functionality for management of semantically linked data accessible through RESTful Web Services and in a secured way. As I am familiar with the OSGi technology, I contacted the responsible for the UIMA integration - &lt;a href="http://twitter.com/#%21/tteofili"&gt;Tommaso Teofili&lt;/a&gt; - right away and we started to exchange ideas. After writing to the &lt;a href="http://tinyurl.com/42rp3ma"&gt;Clerezza mailing list&lt;/a&gt;, I decided to write and contribute some code able to transform UIMA results into &lt;a href="http://code.google.com/p/annotation-ontology/"&gt;Annotation Ontology (AO)&lt;/a&gt; RDF format.&lt;br /&gt;&lt;br /&gt;Working with Antony Scerry (Elsevier) months ago, I learned right away that the hard part was not the code itself but the fact that the UIMA types are extremely flexible. Therefore, even if most existing NLP tools are not returning URIs, when text mining tools do return URIs it is not trivial to capture the URI of the recognized entity. That info can be encoded in whatever way the service developers decide to. That can be a problem when trying to integrate multiple text mining service under a common interface.&lt;br /&gt;&lt;br /&gt;As I did not want to propose something too complicated, Tommaso and I convened that adopting a little convention could make our life easier. After a few discussions, Tommaso introduced a couple of basic entities: ClerezzaBaseAnnotation and ClerezzaBaseEntity. These are both implementing the property 'uri' and ClerezzaBaseEntity is also implementing the property 'label'. When creating new type system descriptors, in order to adopt the proposed convention, it is simply necessary to extend these two types and used them appropriately.&amp;nbsp; As a result, through a patch I wrote, it is now possible, for instance, to map the results to the Annotation Ontology (AO) RDF format without any effort and, therefore, to display your results on the analyzed document through DOMEO.&lt;br /&gt;&lt;br /&gt;Thanks to Tommaso,&amp;nbsp; &lt;a href="http://tinyurl.com/3eehjr5"&gt;my patch&lt;/a&gt; has been integrated in the Clerezza code today. The documentation will be made available soon as well as other code that will allow to easily set up web services for publishing UIMA algorithm.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-6544327636026169666?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/6544327636026169666/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=6544327636026169666' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/6544327636026169666'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/6544327636026169666'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2011/08/uima-clerezza-ao-and-linked-open-data-1.html' title='UIMA, Clerezza, AO and Linked Open Data [1]'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-680191926109702600</id><published>2011-05-26T18:56:00.002+02:00</published><updated>2011-06-12T17:11:33.965+02:00</updated><title type='text'>DOMEO: Linking science and semantics with Annotation Ontology (AO) [1]</title><content type='html'>In the last few months I've been focusing on the development of the SWAN Annotation Tool (recently renamed DOMEO)*. &lt;a href="http://code.google.com/p/domeo/"&gt;DOMEO (Document Metadata Exchange Organizer)&lt;/a&gt;, is an extensible web component enabling users to visually and efficiently create and share ontology-based stand-off annotation metadata on HTML or XML document targets, using the &lt;a href="http://code.google.com/p/annotation-ontology/"&gt;Annotation Ontology&lt;/a&gt; RDF model. The tool supports manual, fully automated, and semi-automated annotation with complete provenance records, as well as personal or community annotation with access authorization and control. DOMEO is one of the pieces of a bigger architecture that we internally call Annotation Framework.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The DOMEO interface&lt;/b&gt;&lt;br /&gt;The idea itself is pretty simple, DOMEO is basically a little browser inside the browser. It allows the user to type a URL, open the correspondent document and annotate it. It is also possible to pass a URL as a parameter so that the tool opens with the page you want annotate already in the content frame. This option is particularly helpful when integrating the tool with other applications or other sections of the Annotation Framework.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-cpJaH8tpX5M/Td6DRgmy6nI/AAAAAAAAAGQ/BUeYQFr1RXc/s1600/Picture+8.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="284" src="http://3.bp.blogspot.com/-cpJaH8tpX5M/Td6DRgmy6nI/AAAAAAAAAGQ/BUeYQFr1RXc/s640/Picture+8.png" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Figure 1: A screenshot of DOMEO. You can notice the address bar where you see the URL of the document displayed below. The document displays the same way it would appear when opened in a new browser window.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;The annotation can be performed manually by the user or automatically by text mining or entity recognition services. The two features are available through the two buttons in the DOMEO toolbar and labeled respectively 'Annotate' and 'Text Mining'. When the option 'Text Mining' is selected, the tool lists all the available text mining or entity recognition services. The user can then decide which one or which ones to run on the loaded document. &lt;br /&gt;&lt;br /&gt;The button 'save' is saving the produced annotation. DOMEO supports a complex versioning system that basically saves items only when necessary, keeps track of the different versions and for each of them records the full provenance data. I will probably explain the versioning and the provenance models in another post.&lt;br /&gt;&lt;br /&gt;* The development of DOMEO is managed and carried out by Dr. Paolo Ciccarese. DOMEO is a  product of the MIND Informatics group - Mass General Hospital. The tool is developed in parallel with the &lt;a href="http://code.google.com/p/annotation-ontology/"&gt;Annotation  Ontology&lt;/a&gt; (AO)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-680191926109702600?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/680191926109702600/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=680191926109702600' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/680191926109702600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/680191926109702600'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2011/05/domeo-linking-science-and-semantics.html' title='DOMEO: Linking science and semantics with Annotation Ontology (AO) [1]'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-cpJaH8tpX5M/Td6DRgmy6nI/AAAAAAAAAGQ/BUeYQFr1RXc/s72-c/Picture+8.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-4772496496137245122</id><published>2011-03-03T17:31:00.003+01:00</published><updated>2011-03-03T17:33:21.944+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='HTML5'/><title type='text'>HTML5: The new 'semantic elements'</title><content type='html'>One of the news in HTML5 consists in the so called 'semantic elements'. The goal of these elements is provide better way for web authors to define the parts of a document and, potentially, to improve accessibility (i.e. screen readers). Some of these elements are: section, nav, article, aside, hgroup, header, and footer. &lt;br /&gt;&lt;br /&gt;Let's say I want to create the main page of a blog. My page is going to have a header and probably a footer. If you look at web pages source code, you will notice that these two elements are present in almost every page in many different variants. The blog you are reading already uses &amp;lt;header&amp;gt; and &amp;lt;footer&amp;gt;. &lt;br /&gt;&lt;br /&gt;The elements &amp;lt;header&amp;gt; and &amp;lt;footer&amp;gt; can be used not only for defining the structure of the main page but also for defining headers and footers of sections, articles and asides.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh4.googleusercontent.com/-F1rE_7tkWx4/TW3G8v2g6MI/AAAAAAAAAGM/DHfnPpX6xOk/s1600/Picture+3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="305" src="https://lh4.googleusercontent.com/-F1rE_7tkWx4/TW3G8v2g6MI/AAAAAAAAAGM/DHfnPpX6xOk/s400/Picture+3.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;If you look at the structure of the blog you are reading, this is pretty much similar to the one depicted in the above figure. The 'nav' areas is correspondent to the 'Blog Archive' and the 'aside' area is collecting my picture, 'label' and 'links'. Using these new elements - together with the new features brought by CSS3 - is certainly a way to avoid the well known 'Div Mania'.&lt;br /&gt;&lt;br /&gt;Once we have a &amp;lt;header&amp;gt;, it is possible to use the element &lt;i&gt;&amp;lt;hgroup&amp;gt;: it represents the heading of a section. The element is used to group a set of h1–h6 elements when the heading has multiple levels, such as subheadings, alternative titles, or taglines&lt;/i&gt;. Also, in the &lt;a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/"&gt;specs&lt;/a&gt;, given the following example, it is stated that the point is to mask the h2 element (which acts as a secondary title) from the outline algorithm.&lt;br /&gt;&lt;pre&gt;&amp;lt;hgroup&amp;gt;&lt;br /&gt;  &amp;lt;h1&amp;gt;The Coolest Application&amp;lt;/h1&amp;gt;&lt;br /&gt;  &amp;lt;h2&amp;gt;Alpha Release&amp;lt;/h2&amp;gt;&lt;br /&gt;&amp;lt;/hgroup&amp;gt;&lt;br /&gt;&lt;/pre&gt;I have to admit, it seems a bit rigid and I feel my code will end up with one element more than usual. I have to force myself in not using &amp;lt;div&amp;gt; or &amp;lt;span&amp;gt; or &amp;lt;p&amp;gt; for things that look more like a subtitle and do something like:&lt;br /&gt;&lt;pre&gt;&amp;lt;header&amp;gt;&lt;br /&gt;  &amp;lt;hgroup&amp;gt;&lt;br /&gt;    &amp;lt;h1&amp;gt;The Coolest Application&amp;lt;/h1&amp;gt;&lt;br /&gt;    &amp;lt;h2&amp;gt;Alpha Release&amp;lt;/h2&amp;gt;&lt;br /&gt;  &amp;lt;/hgroup&amp;gt;&lt;br /&gt;  &amp;lt;p&amp;gt;Description...&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;lt;/header&amp;gt;&lt;br /&gt;&lt;/pre&gt;One thought, the new elements seems still structural - with different level of granularity - and not semantic to me. Maybe structure can be seen as a kind of semantic, but I don't think the name is a good idea as it intersect with the pool of the technologies of the &lt;a href="http://en.wikipedia.org/wiki/Semantic_Web"&gt;Semantic Web&lt;/a&gt;. In other words, saying a chunk of the document is a section does not help machine understanding of the content - besides that it knows where it starts and where it ends - , but if I say the section is a 'http://rdfs.org/sioc/types#BlogPost' we are starting to attach meaning we can leverage. And we can certainly do that with RDFa for example.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-4772496496137245122?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/4772496496137245122/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=4772496496137245122' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/4772496496137245122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/4772496496137245122'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2011/03/html5-new-semantic-elements.html' title='HTML5: The new &apos;semantic elements&apos;'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh4.googleusercontent.com/-F1rE_7tkWx4/TW3G8v2g6MI/AAAAAAAAAGM/DHfnPpX6xOk/s72-c/Picture+3.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-7392962745064391258</id><published>2011-02-28T03:09:00.001+01:00</published><updated>2011-02-28T16:55:46.553+01:00</updated><title type='text'>SWAN Annotation Tool: what is new in build 7</title><content type='html'>Here is a list of some of the new features that I will deploy probably this week. &lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;iframe src="http://player.vimeo.com/video/20438490" width="400" height="300" frameborder="0"&gt;&lt;/iframe&gt;&lt;p&gt;&lt;a href="http://vimeo.com/20438490"&gt;SWAN Annotation Tool: What is new in Build 7&lt;/a&gt; from &lt;a href="http://vimeo.com/paolociccarese"&gt;Paolo Ciccarese&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;The development of the SWAN Annotation Tool is managed and carried out by Dr. Paolo Ciccarese. The fist build of the SWAN Annotation Tool has been developed by Dr. Paolo Ciccarese and Marco Ocana.  The SWAN Annotation Tool is a product of the MIND Informatics group - Mass General Hospital - directed by Tim Clark.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-7392962745064391258?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/7392962745064391258/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=7392962745064391258' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/7392962745064391258'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/7392962745064391258'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2011/02/swan-anntoation-tool-what-is-new-in.html' title='SWAN Annotation Tool: what is new in build 7'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-6387529428568639679</id><published>2011-02-27T01:13:00.001+01:00</published><updated>2011-02-27T01:16:03.016+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GWT'/><category scheme='http://www.blogger.com/atom/ns#' term='CSS'/><title type='text'>ClientBundle, UIBinder and CSS (GWT)</title><content type='html'>In a previous post I was discussing all the possible ways for using image resources with GWT. Another thing you might want to do is dealing with CSS. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;1) Standard use of CSS&lt;/b&gt;. While using GWT you can certainly use the CSS how you would use them for any other application, simply declaring CSS classes in a *.css file and importing it in the webpage of interest. With GWT widgets you will then simply set the style name as follows:&lt;br /&gt;&lt;pre&gt;widget.setStyleName("cssClassName");&lt;br /&gt;&lt;/pre&gt;This approach works, however, if the CSS declaration is missing no exceptions are raised. Also, if you use multiple CSS files as I do, it is always annoying to find the declarations when you need to. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;2) Using the UIBinder.&lt;/b&gt; If you are already using UIBinder, the easiest way to include CSS declarations is to add them to the binder. It is easy and it is safe as the Eclipse plugin is helping you out in finding missing declarations. I always use Eclipse but if you don't I am assuming you'll still find the problems at compile time.&lt;br /&gt;&lt;pre style="border-left:3px solid #eee; padding-left:4px"&gt;&amp;lt;ui:UiBinder&lt;br /&gt;  xmlns:ui='urn:ui:com.google.gwt.uibinder'&lt;br /&gt;  xmlns:g='urn:import:com.google.gwt.user.client.ui'&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;ui:style&amp;gt;&lt;br /&gt;       .outer {&lt;br /&gt;          width: 100%;&lt;br /&gt;       }&lt;br /&gt;    &amp;lt;/ui:style&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;g:VerticalPanel styleName='{style.outer}'&amp;gt;&lt;br /&gt;    &amp;lt;/g:VerticalPanel&amp;gt;&lt;br /&gt;&amp;lt;/ui:UiBinder&amp;gt;&lt;br /&gt;&lt;/pre&gt;The downside of this approach is redundancy. Sometimes I want to use CSS declarations multiple times and, with this approach, I have to repeat them for each single Binder.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3) Using CssResource.&lt;/b&gt; Another alternative consists in doing something similar to what you can do for icons with ImageResource. First I declare the set of declarations of the stylesheet in a file that I name Commons.css:&lt;br /&gt;&lt;pre style="border-left:3px solid #eee; padding-left:4px"&gt;.smallIcon {&lt;br /&gt;    height: 16px;&lt;br /&gt;    width: 16px;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Then, linking the CSS file, I declare the use of the stylesheet as a resource for the application:&lt;br /&gt;&lt;pre style="border-left:3px solid #eee; padding-left:4px"&gt;public class Example implements EntryPoint {&lt;br /&gt;&lt;br /&gt;  public interface Resources extends ClientBundle&lt;br /&gt;  {&lt;br /&gt;     public static final Resources INSTANCE =  GWT.create(Resources.class);&lt;br /&gt; &lt;br /&gt;     public interface Resources extends ClientBundle { &lt;br /&gt;        @Source("org/example/application/client/Commons.css")&lt;br /&gt;        CommonsCss commonsCss();&lt;br /&gt;     }&lt;br /&gt;     &lt;br /&gt;     ...&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Now, where the dots in the above snippet are, I can declare the stylesheet declarations I want to expose to the application:&lt;br /&gt;&lt;pre style="border-left:3px solid #eee; padding-left:4px"&gt;public interface CommonsCss extends CssResource {&lt;br /&gt;     String smallIcon();&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;As the CSS class is named as the method everything works fine. However, sometimes you might want to change the name of the method. Using Java annotations you address that issue as well:&lt;br /&gt;&lt;pre style="border-left:3px solid #eee; padding-left:4px"&gt;public interface CommonsCss extends CssResource {&lt;br /&gt;     @ClassName("smallIcon")&lt;br /&gt;     String smallIconClass();&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Now, we can write something like:&lt;br /&gt;&lt;pre style="border-left:3px solid #eee; padding-left:4px"&gt;Resources resources = Resources.INSTANCE.factory().create();&lt;br /&gt;Image img = new Image();&lt;br /&gt;img.setStyleName(resource.commonsCss.smallIcon());&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;This approach allows you to collect in one single place CSS declarations you need to use in multiple packages in your application. Also you can leverage a good amount of validation in your Java code. You might argue the process can be a bit tedious but I can assure you, for a big GWT application, it can help you saving lots of time later on especially when refactoring the code.&lt;br /&gt;&lt;br /&gt;There are other &lt;a href="http://code.google.com/webtoolkit/doc/latest/DevGuideClientBundle.html"&gt;interesting things to know about the ClientBundles&lt;/a&gt;, but for now I'll stop here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-6387529428568639679?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/6387529428568639679/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=6387529428568639679' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/6387529428568639679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/6387529428568639679'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2011/02/classes-uibinder-and-css-gwt.html' title='ClientBundle, UIBinder and CSS (GWT)'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-7711661832488248487</id><published>2011-02-26T17:41:00.001+01:00</published><updated>2011-02-26T17:41:52.739+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Provenance'/><category scheme='http://www.blogger.com/atom/ns#' term='Ontology'/><title type='text'>Dublin Core and PRISM</title><content type='html'>As I was saying in &lt;a href="http://hcklab.blogspot.com/2011/02/principle-traceability-2-provenance-and.html"&gt;one of my previous posts&lt;/a&gt;, distinguishing the different kinds of contributions is not trivial. However, sometimes is necessary. And this is probably the case of publishers that want to keep track of the exact role of the different contributors to a resource.&lt;br /&gt;&lt;br /&gt;This is the case of &lt;a href="http://tinyurl.com/mwasej"&gt;PRISM (Publishing Requirements for Industry Standard Metadata)&lt;/a&gt;, a metadata vocabulary for managing, post-processing, multi-purposing and aggregating publishing content for magazine and journal publishing. PRISM allows to distinguish between different creators roles: writer, editor, composer, speaker, photographer... you can find the full list in the &lt;a href="http://www.idealliance.org/industry_resources/intelligent_content_informed_workflow/prism/prism/controlled_vocabularies"&gt;The PRISM Controlled Vocabulary Namespace&lt;/a&gt;. PRISM is also using parts of &lt;a href="http://www.dublincore.org/documents/dces/"&gt;Dublin Core Element Set&lt;/a&gt; and &lt;a href="http://dublincore.org/documents/dcmi-terms/"&gt;Dublin Core Terms&lt;/a&gt;, the subset of terms is listed in the document named The &lt;a href="http://www.prismstandard.org/specifications/2.1/%20PRISM_dublin_core_namespaces_2.1.pdf"&gt;PRISM Subset of the Dublin Core Namespace&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The combination of DC and PRISM, for instance for a book, will become in XML something like:&lt;br /&gt;&lt;pre&gt;&amp;lt;dc:creator prism:role=”writer”&amp;gt;John Doe&amp;lt;/dc:creator&amp;gt; &lt;br /&gt;&amp;lt;dc:creator prism:role=”editor”&amp;gt;Paolo Ciccarese&amp;lt;/dc:creator&amp;gt;&lt;br /&gt;&amp;lt;dc:creator prism:role=”graphicDesigner”&amp;gt;Micheal Doe&amp;lt;/dc:creator&amp;gt;&lt;br /&gt;&lt;/pre&gt;In RDF, according to the specifications (paragraph 3.5.2 of the &lt;i&gt;PRISM Subset of the Dublin Core Namespaces: Version 2.1&lt;/i&gt;), this would look like:&lt;br /&gt;&lt;pre&gt;&amp;lt;dc:creator rdf:resource=”contributorrole.xml#writer”&amp;gt;&lt;br /&gt;     John Doe&lt;br /&gt;&amp;lt;/dc:creator&amp;gt;&lt;br /&gt;&amp;lt;dc:creator rdf:resource=”contributorrole.xml#editor”&amp;gt;&lt;br /&gt;     Paolo Ciccarese&lt;br /&gt;&amp;lt;/dc:creator&amp;gt;&lt;br /&gt;&amp;lt;dc:creator rdf:resource=”contributorrole.xml#graphicDesigner”&amp;gt;&lt;br /&gt;     Micheal Doe&lt;br /&gt;&amp;lt;/dc:creator&amp;gt;&lt;br /&gt;&lt;/pre&gt;However, this is not valid RDF for a couple of reasons that you can find yourself through the &lt;a href="http://www.w3.org/RDF/Validator/"&gt;RDF Validator Service&lt;/a&gt;. Dublin Core Element Sets properties used by PRISM and by the PRISM aggregator message are: creator, contributor, description, format (PRISM records restrict values of the dc:format element to those in list of Internet Media Types [MIME]), identifier (for instance DOI), publisher, subject, title, type. Other properties are listed but not as items of the PAM format: language, relation, source.&lt;br /&gt;&lt;br /&gt;For instance, this is how PRISM can deal with identifiers in RDF:&lt;br /&gt;&lt;pre&gt;&amp;lt;dc:identifier&amp;gt;10.1030/03054&amp;lt;/dc:identifier&amp;gt;&lt;br /&gt;&amp;lt;prism:doi&amp;gt;http://dx.doi.org/10.1030/03054&amp;lt;/prism:doi&amp;gt;&lt;br /&gt;&amp;lt;prism:url rdf:resource=”http://dx.doi.org/10.1030/03054”/&amp;gt;&lt;br /&gt;&lt;/pre&gt;Basically, besides the usage of &lt;i&gt;dc:identifier&lt;/i&gt;, PRISM is using the properties &lt;i&gt;prism:doi&lt;/i&gt; - which is declaring more explicitly than dc:creator what the identifier is - and &lt;i&gt;prism:url&lt;/i&gt;. Strangely enough, the property &lt;i&gt;prism:doi&lt;/i&gt; is actually taking as value the DOI proxy URL and not the DOI string. Therefore, I see &lt;i&gt;prism:doi&lt;/i&gt; and &lt;i&gt;prism:url&lt;/i&gt; as redundant properties. You can find some more details on &lt;a href="http://www.crossref.org/CrossTech/2008/02/prismdoi.html"&gt;this old blog post by Tony Hammond&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Moreover, PRISM PAM is making use also of the &lt;a href="http://dublincore.org/documents/dcmi-terms/"&gt;Dublin Core Terms&lt;/a&gt; &lt;i&gt;dct:hasPart&lt;/i&gt; and &lt;i&gt;dct:isPartOf&lt;/i&gt; for detecting for instance images that are part of a document:&lt;br /&gt;&lt;pre&gt;&amp;lt;dcterms:hasPart rdf:resource= ”http://www.myexamples.com/ExamplePhoto.jpg”/&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-7711661832488248487?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/7711661832488248487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=7711661832488248487' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/7711661832488248487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/7711661832488248487'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2011/02/doublin-core-and-prism.html' title='Dublin Core and PRISM'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-73894285801890009</id><published>2011-02-24T20:17:00.003+01:00</published><updated>2011-02-24T20:20:06.635+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Annotation Ontology (AO)'/><category scheme='http://www.blogger.com/atom/ns#' term='Annotation'/><title type='text'>AO: Annotating with one or multiple statements (triples)</title><content type='html'>A few days ago I had a phone discussion with some collaegues (Tudor Groza, Vit Novacek and Cartic Ramakrishnan) on how to use &lt;a href="http://code.google.com/p/annotation-ontology/"&gt;Annotation Ontology (AO)&lt;/a&gt; for attaching something more complex than a single term (identified by a URI) to a document or document fragment. To make it clear I am giving here an idea on how something like that can be already done in AO.&lt;br /&gt;&lt;br /&gt;Let's say I am performing some text-mining on some textual content. It is possible that I don't want simply to associate a term to a span of text but I &lt;a href="http://code.google.com/p/annotation-ontology/wiki/GraphsAnnotations"&gt;want to do something more elaborate&lt;/a&gt;. For example I want to say, analyzing this span of text I obtain the triple &lt;b&gt;&lt;i&gt;GeneG encodes ProteinP&lt;/i&gt;&lt;/b&gt;. How can I do that in AO? For instance I can use a Named Graph and I can say something like in the following picture:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://annotation-ontology.googlecode.com/svn/trunk/images/Annotation%20Ontology%20-%20Annotation%20with%20Graphs%20by%20Paolo%20Ciccarese.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="384" width="456" src="http://annotation-ontology.googlecode.com/svn/trunk/images/Annotation%20Ontology%20-%20Annotation%20with%20Graphs%20by%20Paolo%20Ciccarese.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;b&gt;Figure 1: The dashed ovals are instances of annotation items. Selectors and other details of the actual annotation have been omitted.&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;As you can see we have annotated also the atomic components of my triple. In doing this, while analyzing the assertions belonging to a specific domain I can always trace back to the original text. Also, using a graph as object of my annotation I am going in the direction of the &lt;b&gt;Nanopublication&lt;/b&gt; format, however this will be topic for a future post.&lt;br /&gt;&lt;br /&gt;Given this, you can imagine you can attach the proper provenance to the annotation. If you are a text miner, you might be interested in attaching what software or computational workflow generated such annotation and with what confidence.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://annotation-ontology.googlecode.com/svn/trunk/images/Annotation%20Ontology%20-%20Annotation%20with%20Graphs%202%20by%20Paolo%20Ciccarese.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="382" width="464" src="http://annotation-ontology.googlecode.com/svn/trunk/images/Annotation%20Ontology%20-%20Annotation%20with%20Graphs%202%20by%20Paolo%20Ciccarese.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;You might have noticed the usage of the namespace tm that stand for Text Mining. It is a set of properties I am working on for extending AO to better represent text mining results.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-73894285801890009?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/73894285801890009/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=73894285801890009' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/73894285801890009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/73894285801890009'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2011/02/ao-annotating-with-one-or-multiple.html' title='AO: Annotating with one or multiple statements (triples)'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-554057168453867840</id><published>2011-02-24T01:04:00.019+01:00</published><updated>2011-02-24T04:28:41.439+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Provenance'/><category scheme='http://www.blogger.com/atom/ns#' term='Ontology'/><category scheme='http://www.blogger.com/atom/ns#' term='Traceability'/><title type='text'>Principle: Traceability [2] - Provenance and Doublin Core</title><content type='html'>For people working with Semantic Web technologies, for a long time, provenance has been called &lt;a href="http://dublincore.org/documents/dces/"&gt;Dublin Core Metadata Element Set&lt;/a&gt;, a vocabulary of fifteen properties for &lt;a href="http://dublincore.org/documents/usageguide/elements.shtml"&gt;use in resource description&lt;/a&gt; (as they currently state in the webpage). Let's take, for instance, the following property&lt;i&gt;:&amp;nbsp;&lt;/i&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;'creator'&lt;/i&gt;:&lt;i&gt; an entity primarily responsible for making the content of the resource.  Examples of a Creator include a person, an organization, or a service.  Typically the name of the Creator should be used to indicate the entity&lt;/i&gt;. &lt;/blockquote&gt;You can find the guidelines for the usage of the creator property &lt;a href="http://dublincore.org/documents/usageguide/elements.shtml#creator"&gt;here&lt;/a&gt;. If we consider the RDF format (important for providing a syntactical framework) we can look at the following (RDF/XML) example:&lt;br /&gt;&lt;pre&gt;&amp;lt;?xml version="1.0"?&amp;gt;&lt;br /&gt;&amp;lt;rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"&amp;nbsp;&lt;br /&gt; xmlns:dc="http://purl.org/dc/elements/1.1/"&amp;gt;&amp;nbsp;&lt;br /&gt;  &amp;lt;rdf:Description rdf:about="http://www.w3.org/TR/hcls-swan/"&amp;gt;&lt;br /&gt;   &amp;lt;dc:title&amp;gt;Semantic Web Applications in Neuromedicine (SWAN) Ontology&amp;lt;/dc:title&amp;gt;&lt;br /&gt;   &amp;lt;dc:creator&amp;gt;Paolo Ciccarese&amp;lt;/dc:creator&amp;gt;&lt;br /&gt;   &amp;lt;dc:date&amp;gt;2009-10-20&amp;lt;/dc:date&amp;gt;&lt;br /&gt;   &amp;lt;dc:format&amp;gt;text/html&amp;lt;/dc:format&amp;gt;&lt;br /&gt;   &amp;lt;dc:language&amp;gt;en&amp;lt;/dc:language&amp;gt;&lt;br /&gt;  &amp;lt;/rdf:Description&amp;gt;&lt;br /&gt;&amp;lt;/rdf:RDF&amp;gt;&lt;br /&gt;&lt;/pre&gt;Of the above example I want to focus on the following triple (&lt;a href="http://en.wikipedia.org/wiki/Turtle_%28syntax%29"&gt;Turtle syntax&lt;/a&gt;):&lt;br /&gt;&lt;pre&gt;@prefix rdf: &amp;lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&amp;gt; .&lt;br /&gt;@prefix dc: &amp;lt;http://purl.org/dc/elements/1.1/&amp;gt; .&lt;br /&gt;&lt;br /&gt;&amp;lt;http://www.w3.org/TR/hcls-swan/&amp;gt; dc:creator "Paolo Ciccarese".&lt;br /&gt;&lt;/pre&gt;Now if you take a look of the actual &lt;a href="http://www.w3.org/TR/hcls-swan/"&gt;document I wrote&lt;/a&gt; where I appear as the Editor. It actually happened that somebody else created the file for that note and I've filled in the actual content. This situation is difficult to model using simply Dublin Core Element Set. Probably one way to go is to distinguish between the file and the content.&lt;br /&gt;&lt;br /&gt;Another example. Let's say I want to create a file with a quote from a book or a speech. I create the HTML file (my resource). However, the actual content has been authored by somebody else. How do I represent it with Dublin Core Element Set. Let me give it a try:&lt;br /&gt;&lt;pre&gt;&amp;lt;rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"&amp;nbsp;&lt;br /&gt; xmlns:dcterms="http://purl.org/dc/terms/" &lt;br /&gt; xmlns:dc="http://purl.org/dc/elements/1.1/"&amp;gt;&lt;br /&gt;  &amp;lt;rdf:Description rdf:about="http://www.paolociccarese.info/example/quotes/1"&amp;gt;&lt;br /&gt;   &amp;lt;dc:title&amp;gt;My favourite quote&amp;lt;/dc:title&amp;gt;&lt;br /&gt;   &amp;lt;dc:creator&amp;gt;Paolo Ciccarese&amp;lt;/dc:creator&amp;gt;&lt;br /&gt;   &amp;lt;dc:date&amp;gt;2011-02-23&amp;lt;/dc:date&amp;gt;&lt;br /&gt;   &amp;lt;dc:format&amp;gt;text/html&amp;lt;/dc:format&amp;gt;&lt;br /&gt;   &amp;lt;dc:language&amp;gt;it&amp;lt;/dc:language&amp;gt;&lt;br /&gt;   &amp;lt;dcterms:hasPart&amp;gt;&lt;br /&gt;     &amp;lt;rdf:Description&amp;gt;&lt;br /&gt;       &amp;lt;dc:creator&amp;gt;Dante Alighieri&amp;lt;/dc:creator&amp;gt;&lt;br /&gt;       &amp;lt;dc:description&amp;gt;Lasciate ogni speranza, voi ch'entrate&amp;lt;/dc:description&amp;gt;&lt;br /&gt;     &amp;lt;/rdf:Description&amp;gt;&lt;br /&gt;   &amp;lt;/dcterms:hasPart&amp;gt;&lt;br /&gt;  &amp;lt;/rdf:Description&amp;gt;&lt;br /&gt;&amp;lt;/rdf:RDF&amp;gt;&lt;/pre&gt;As you probably noticed I have not defined a URI for the quote and therefore the generated triples will include a blank node. I can also think of making up a URI like &lt;i&gt;http://www.paolociccarese.info/example/quotes/1#quote&lt;/i&gt; as long as I can make it resolvable. The above snippet does more or less what I wanted to. Now, one thing I don't like is that Dante Alighieri and I are both creators. As a matter of fact, in the quote there is some intellectual property involved, while in the making of the simple HTML page, not so much. However this could lead to problems as drawing the lines is not easy. I could also consider the use of the property &lt;i&gt;contributor&lt;/i&gt; - &lt;a href="http://dublincore.org/documents/usageguide/elements.shtml#contributor"&gt;see the guideline here&lt;/a&gt; -, however I am not sure that is appropriate in the present case.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-554057168453867840?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/554057168453867840/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=554057168453867840' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/554057168453867840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/554057168453867840'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2011/02/principle-traceability-2-provenance-and.html' title='Principle: Traceability [2] - Provenance and Doublin Core'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-1019469772068053128</id><published>2011-02-18T06:16:00.001+01:00</published><updated>2011-02-24T20:21:26.676+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Semantic Web'/><category scheme='http://www.blogger.com/atom/ns#' term='Ontology'/><category scheme='http://www.blogger.com/atom/ns#' term='Traceability'/><title type='text'>Principle: Traceability [1]</title><content type='html'>According to Wikipedia: &lt;br /&gt;&lt;blockquote&gt;&lt;a href="http://en.wikipedia.org/wiki/Traceability"&gt;Traceability&lt;/a&gt; refers to the completeness of the information about every step in a process chain.&amp;nbsp;&lt;/blockquote&gt;I've been working on Clinical Information Systems for quite a while and traceability is a very well-known - even if usually poorly implemented - concept when talking about medical processes and patient data. For instance, for a blood pressure measurement, it is important to know who performed the procedure, where and when but also, if the notes have been written on paper first, who wrote the measures and when, eventually who entered the data in the system, where and when... if the information system is managing structured data,&amp;nbsp; we might want to record the language of the operator who entered the data, the templates she used and so on... The main idea is to keep track of the process details and of all the accountable health care professionals. In the previous list, to make it simple, I voluntarily excluded the medical context - which cuff has been used, was the pressure measured after a meal, after physical activity - which is crucial for reproducibility but opens to multiple other representational issues. You would be amazed on how complicated the model for a blood pressure measurement can become.&lt;br /&gt;&lt;br /&gt;But what is traceability in Semantic Web terms? I guess one way of saying it is through the term Provenance, very popular these days. &lt;br /&gt;&lt;blockquote&gt;&lt;a href="http://en.wikipedia.org/wiki/Provenance"&gt;Provenance&lt;/a&gt;, from the French provenir, "to come from", means the, or the  of something, or the history of the ownership or location of an object.  The term was originally mostly used for works of art, but is now used  in similar senses in a wide range of fields, including science and  computing.&lt;/blockquote&gt;A good alternative definition, more focused on computing and, which takes into account &lt;a href="http://en.wiktionary.org/wiki/processual"&gt;processual&lt;/a&gt; aspects, is provided by the &lt;a href="http://www.w3.org/2005/Incubator/prov/wiki/W3C_Provenance_Incubator_Group_Wiki"&gt;W3C Provenance Incubator Group&lt;/a&gt;: &lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;Provenance&lt;/b&gt; of a resource is a record that describes entities and processes involved in producing and delivering or otherwise influencing that resource. Provenance provides a critical foundation &lt;b&gt;for assessing authenticity, enabling trust, and allowing reproducibility&lt;/b&gt;. Provenance assertions are a form of contextual metadata and can themselves become important records with their own provenance. &lt;/blockquote&gt;In my mind, traceability is still a more generic concept than provenance. For instance, I would consider some of the aspects required for reproducibility part of the traceability and not of the provenance. And this is because I believe it would be easier to standardize '&lt;i&gt;where, when and who&lt;/i&gt;' (what I consider provenance), than '&lt;i&gt;what, why, which, how&lt;/i&gt;' (which represent context that added to provenance gives traceability) that are domain dependent and can become very hard to define. However, the last definition makes me quite happy and I would be glad if the &lt;a href="http://www.w3.org/2005/Incubator/"&gt;incubator&lt;/a&gt; for provenance will translate into an actual &lt;a href="http://www.w3.org/2005/10/Process-20051014/groups.html#GroupsWG"&gt;Working Group&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-1019469772068053128?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/1019469772068053128/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=1019469772068053128' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/1019469772068053128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/1019469772068053128'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2011/02/principle-traceability-1.html' title='Principle: Traceability [1]'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-8397350263692698170</id><published>2011-02-15T20:20:00.002+01:00</published><updated>2011-02-18T03:24:03.800+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Semantic Web'/><category scheme='http://www.blogger.com/atom/ns#' term='Ontology'/><category scheme='http://www.blogger.com/atom/ns#' term='Adequate Documentation'/><title type='text'>Principle: Adequate Documentation [1]</title><content type='html'>This is trivial to understand. The documentation for an ontology is very important for adoption and for data sharing. This works for software as well. One thing I found always awesome regarding Java was the quality of the API documentation, the JavaDocs are cool and easy to generate. For ontologies the reality is a bit more complicated.&lt;br /&gt;&lt;br /&gt;Some ontologies, including some of those I made, are just the pure RDFS/OWL file. Often with no descriptions whatsoever of the classes/properties. The understanding of those ontologies relies totally on the ability of the users to interpret the labels/names correctly. Other ontologies include very fuzzy, sometimes poor, descriptions - &lt;a href="http://xmlns.com/foaf/spec/#term_Document"&gt;"Document: a document. The Document class represents those things which are, broadly conceived, 'documents'."&lt;/a&gt;. The interpretation relies mostly on the users' common sense. To be fair, in recent versions of the &lt;a href="http://xmlns.com/foaf/spec/"&gt;FOAF vocabulary&lt;/a&gt;, the previous definition is accompanied by a note saying: "We do not (currently) distinguish precisely between physical and electronic documents, or  between copies of a work and the abstraction those copies embody. The relationship between  documents and their byte-stream representation needs clarification". And let's be honest, defining what a document is nowadays, in the digital era, is not trivial. Is every file a document?&lt;br /&gt;&lt;br /&gt;In the case of &lt;a href="http://www.obofoundry.org/"&gt;OBO Foundry&lt;/a&gt;, a &lt;a href="http://www.obofoundry.org/crit.shtml"&gt;set of principles&lt;/a&gt; has been defined. Here are some of them:&lt;br /&gt;&lt;blockquote&gt;"&lt;i&gt;The ontologies include textual definitions for all terms&lt;/i&gt;. Many biological and medical terms may be ambiguous, so   terms should be defined so that their precise   meaning within the context of a particular ontology is   clear to a human reader."        &lt;/blockquote&gt;&lt;blockquote&gt;"&lt;i&gt;The ontology is well documented.&lt;/i&gt;"&lt;/blockquote&gt;&lt;br /&gt;The thing is, definitions are a necessary step but that is not enough. When I talk about 'Adequate Documentation' I mean many different things: definitions, examples of use cases, examples of resulting triples, motivations, related projects... In other words,&lt;i&gt;&lt;b&gt; a good amount of shared knowledge about the ontology and the process that generated it&lt;/b&gt;&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;Unfortunately there are no clear rules, I keep trying different ways of translating the most tacit knowledge I can into explicit and I can't say I found the right recipe yet. Definitions can certainly help, I find valuable to include explanations of the ontology building process where motivations behind the different choices are given, explanatory figures, plenty of examples with actual triples, maybe a list of Frequently Asked Questions where the authors can publicly address some of the concerns of real users. All this takes time and effort, and, by personal experience, can also cause collateral damage...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-8397350263692698170?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/8397350263692698170/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=8397350263692698170' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/8397350263692698170'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/8397350263692698170'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2011/02/principle-adequate-documentation-1.html' title='Principle: Adequate Documentation [1]'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-3674696914280155852</id><published>2011-02-13T19:25:00.000+01:00</published><updated>2011-02-13T19:25:44.542+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Orthogonality'/><category scheme='http://www.blogger.com/atom/ns#' term='Provenance'/><category scheme='http://www.blogger.com/atom/ns#' term='Community Driven'/><category scheme='http://www.blogger.com/atom/ns#' term='Ontology'/><category scheme='http://www.blogger.com/atom/ns#' term='Modularity'/><category scheme='http://www.blogger.com/atom/ns#' term='Generality'/><category scheme='http://www.blogger.com/atom/ns#' term='Adequate Documentation'/><category scheme='http://www.blogger.com/atom/ns#' term='Traceability'/><category scheme='http://www.blogger.com/atom/ns#' term='Interoperability'/><category scheme='http://www.blogger.com/atom/ns#' term='Extensibility'/><title type='text'>Which principles drive ontology adoption?</title><content type='html'>Several weeks ago, I started to think of the next version of the &lt;a href="http://code.google.com/p/annotation-ontology/"&gt;Annotation Ontology (AO)&lt;/a&gt;. After one year spent developing the &lt;a href="http://vimeo.com/18510599"&gt;Annotation Framework&lt;/a&gt; and discussing with several colleagues and friends, I certainly have a little list of things I want to improve. Nothing major, mostly a clean up.  &lt;br /&gt;&lt;br /&gt;Before proceeding with the updates, I wanted to better clarify the set of principles I want to follow in developing AO2. These are, in random order: &lt;b&gt;Traceability, Orthogonality, Generality, Interoperability, Modularity, Extensibility, Adequate Documentation, Community Driven&lt;/b&gt;. The reason why I am listing this principles is important, I believe they influence adoption. &lt;br /&gt;&lt;br /&gt;As you might have noticed the number of available ontologies is constantly increasing. If you need to use an ontology, you have to go through the process of revising what is out there, and selecting what you think is most appropriate. How many time have you done that? How many time did you succeed? How many times did you find the right ontology covering exactly what you needed? I am pretty sure that if you are involved in the development of a complex application the answer is something like: I found a few ontologies I could mix and match... I still need to add pieces... and, most importantly, I am not sure I agree on the way some or them are done. Right. Welcome to the Semantic Web I would say. &lt;br /&gt;&lt;br /&gt;I remember the old days - many years ago - when &lt;a href="http://www.dublincore.org/documents/dces/"&gt;Dublin Core Metadata Element Set, Version 1.1 (DC)&lt;/a&gt; was the answer to almost everything. When I started working on &lt;a href="http://www.alzforum.org/res/adh/swan/default.asp"&gt;SWAN (Semantic Web Applications in Neuromedicine) in 2006&lt;/a&gt; I found immediately DC to be insufficient for our needs. For days I've been struggling trying to understand what to do: use DC and being sloppy or create something more appropriate risking isolation and to increase the entropy of the Semantic Web world. &lt;br /&gt;&lt;br /&gt;Well at that time my answer has been the &lt;a href="http://swan.mindinformatics.org/spec/1.2/pav.html"&gt;Provenance, Authoring and Versioning Ontology (PAV)&lt;/a&gt; now available in &lt;a href="http://code.google.com/p/pav-ontology/"&gt;version 2&lt;/a&gt;. The choice, at the time, has been dictated also by practical reasons: if I was using DC for Annotation Properties and I wanted to be OWL DL, I could not use it also for other properties. Since then, PAV has been used in our applications but also in several others developed by people/groups I barely know - sometimes I wish they just would tell me something like: "hey I am using PAV and it's cool" or even "hey I am using PAV and it sucks because...". PAV has also been considered as one of the starting points for the &lt;a href="http://www.w3.org/2005/Incubator/prov/wiki/W3C_Provenance_Incubator_Group_Wiki"&gt;W3C Provenance Incubator Group&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;PAV was not such a bad idea at the end. But it was a risky business. If you are developing an application you need always to keep an eye on what is existing and the other eye on your requirements. This results to be even more complicated because it is hard to find appropriate ontologies and, when you find them, they often don't have &lt;b&gt;adequate documentation&lt;/b&gt; for you to understand that is what you are looking for. Surprise! The&amp;nbsp; lack of &lt;b&gt;shared knowledge about the ontology&lt;/b&gt; does not help it to emerge and does not help adoption... unless, of course, external factors - networking, important supporters, big institutions ... - come into play. And external factors are not little thing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-3674696914280155852?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/3674696914280155852/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=3674696914280155852' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/3674696914280155852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/3674696914280155852'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2011/02/which-principles-drive-ontology.html' title='Which principles drive ontology adoption?'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-6662044117149545824</id><published>2011-02-04T23:02:00.000+01:00</published><updated>2011-02-04T23:02:48.529+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Annotation Ontology (AO)'/><category scheme='http://www.blogger.com/atom/ns#' term='Annotation Framework (AF)'/><category scheme='http://www.blogger.com/atom/ns#' term='Annotation'/><title type='text'>Creating annotation on HTML with the Annotation Framework</title><content type='html'>This is a few weeks old screencast showing how I can visually create annotation on top of an HTML document. The annotation is then serialized in RDF according to the &lt;a href="http://code.google.com/p/annotation-ontology/"&gt;Annotation Ontology (AO)&lt;/a&gt;. &lt;br /&gt;&lt;br/&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;iframe frameborder="0" height="300" src="http://player.vimeo.com/video/18510599" width="400"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;a href="http://vimeo.com/18510599"&gt;Creating manual annotation with the Annotation Framework.&lt;/a&gt; from &lt;a href="http://vimeo.com/paolociccarese"&gt;Paolo Ciccarese&lt;/a&gt; on &lt;a href="http://vimeo.com/"&gt;Vimeo&lt;/a&gt;.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-6662044117149545824?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/6662044117149545824/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=6662044117149545824' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/6662044117149545824'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/6662044117149545824'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2011/02/creating-annotation-on-html-with.html' title='Creating annotation on HTML with the Annotation Framework'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-1544756907909796796</id><published>2011-01-31T01:43:00.000+01:00</published><updated>2011-01-31T01:43:56.760+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Publishing'/><category scheme='http://www.blogger.com/atom/ns#' term='Annotation'/><title type='text'>Annotation and Content Improvement</title><content type='html'>I was recently attending the workshop '&lt;a href="https://sites.google.com/site/beyondthepdf/"&gt;Beyond the PDF&lt;/a&gt;' in San Diego and I noticed multiple times how the concept of 'Annotation' is often intended as a task performed after publication of a physical or digital document. &lt;br /&gt;&lt;br /&gt;I consider &lt;i&gt;Annotation&lt;/i&gt; to be more ubiquitous and important at all stages: before, during and after publication. Also, &lt;i&gt;Annotation&lt;/i&gt; is not only about classic textual document. Images, database records and data-sets can be annotated as well. Even physical objects can be digitally annotated when we create a correspondent digital record or - speaking in terms of ontologies - when we refer to the representation of that particular instance of a certain class.&lt;br /&gt;&lt;br /&gt;Annotation can exist as such forever or can be incorporated back in the original document/resource or a new version of the original document/resource. If you think at the old fashion paper encyclopedia, every year - or bunch of years - the editor was collecting the several annotations to come up with a new edition of the heavy volumes. This was very close to what in the digital world is called versioning. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;In the modern digital world &lt;i&gt;annotation&lt;/i&gt; is everywhere&lt;/b&gt;. Tags attached to a document are &lt;i&gt;annotation&lt;/i&gt;. Leveraging &lt;a href="http://en.wikipedia.org/wiki/Crowdsourcing"&gt;crowdsourcing&lt;/a&gt; makes possible to include the most popular tags as keywords for that document. Delicious users are experiencing this anytime they are in the process to tag a new resource and they receive suggestions of popular or appropriate tags. Reviews of catalog items in Amazon are annotations and the statistical  analysis of such results appears close to the selected item under the  form of stars. To some extents, edits in a Wiki can be seen as &lt;i&gt;annotation&lt;/i&gt; - and could be exported as such - where a user changes the current document content. However,&amp;nbsp; I understand using the term &lt;i&gt;Annotation&lt;/i&gt; for edits might sound a bit of a stretch. &lt;br /&gt;&lt;br /&gt;Maybe, in today digital world, a better way to refer to this process is 'Content refinement' as everything can potentially be 'changed'. But even the term refine might fall short as 'to refine' means improving by making small changes. Sometimes edits are massive and an article in Wikipedia can evolve dramatically in time. It is not simply polishing and fixing, we can add/remove big chunks of the original documents - adding missing items or removing items that are redundant or not valid anymore - or can make the original document more actual - for instance adding new evidence that was not available when the document has been previously published. 'Content Improvement' is probably generic enough to cover refinements and edits. &lt;br /&gt;&lt;br /&gt;Sure, I am talking of evolving documents but it does not preclude to take snapshots of it in a 'traditional publication' or in a version of that resource. Take online news. I realized more than once that the news at a specific URL was changing and journalists were incrementally adding new sections at the bottom of the page whenever the new updates were available. You might argue this is not good practice but it happens more often than what you think.&amp;nbsp; The reason is simple: in the digital world, it is possible and cheap. We don't have to reprint a book or to add an errata page to avoid reprinting. We just create a note or directly edit the content - hopefully while keeping track of the changes.&lt;br /&gt;&lt;br /&gt;I see many attempts to redefine what a publication is. These days, I believe &lt;b&gt;publication is a multidimensional evolving artifact&lt;/b&gt; including images, videos, live tables, data, metadata... and no matter what it includes or what it looks like, it has to &lt;b&gt;manage change or content improvement&lt;/b&gt;. Only snapshots of it, at&amp;nbsp;particular times, would match the 'classic' concept of publication.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-1544756907909796796?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/1544756907909796796/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=1544756907909796796' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/1544756907909796796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/1544756907909796796'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2011/01/annotation-and-content-improvement.html' title='Annotation and Content Improvement'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-329128608799264038</id><published>2010-11-19T00:03:00.001+01:00</published><updated>2010-11-19T00:04:09.222+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Books'/><title type='text'>Books on my desk</title><content type='html'>These days I have in the pipeline three books I want to browse/read. The first is a book I've read already months ago: &lt;a href="http://www.amazon.com/Spring-Dynamic-Modules-Service-Platforms/dp/1430216123/"&gt;Pro Spring Dynamic Modules for OSGi™ Service Platforms&lt;/a&gt;. The other two are: &lt;a href="http://www.amazon.com/OSGi-Equinox-Creating-Modular-Systems/dp/0321585712/"&gt;OSGi and Equinox: Creating Highly Modular Java Systems&lt;/a&gt; and &lt;a href="http://www.amazon.com/Eclipse-Rich-Client-Platform-2nd/dp/0321603788/"&gt;Eclipse Rich Client Platform (2nd Edition)&lt;/a&gt;. I guess my motivation is a re-visitation of the pool of technologies I've used years ago to develop &lt;a href="http://www.jdpf.org/"&gt;JDPF (Java Data Processing Framework)&lt;/a&gt;. I still believe &lt;a href="http://www.osgi.org/Main/HomePage"&gt;OSGi&lt;/a&gt; is a terrific technology.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-329128608799264038?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/329128608799264038/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=329128608799264038' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/329128608799264038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/329128608799264038'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2010/11/books-on-my-desk.html' title='Books on my desk'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-8675376692611769141</id><published>2010-11-09T20:07:00.037+01:00</published><updated>2010-11-16T17:05:00.101+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GWT'/><category scheme='http://www.blogger.com/atom/ns#' term='CSS'/><category scheme='http://www.blogger.com/atom/ns#' term='UIBinder'/><title type='text'>UIBinder, CSS and Images (GWT)</title><content type='html'>I am working with GWT (Google Web Toolkit) since a while now. One of the things I am regularly doing (since version 2.0) is creating UIs through Declarative Layouts with UiBinder. While creating the ui.xml files it is normal to have the need of displaying images or icons.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1) Integrating background images with the ui:style section&lt;/span&gt;: for a long time have been using simple colors to create my look and feel but lately I started to feel the need to give the UI a better look using images as background. One way of getting this done with GWT is to include in the ui.xml file something like this - where the image is in the same folder of the ui.xml file:&lt;br /&gt;&lt;pre&gt;&amp;lt;ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'&lt;br /&gt;xmlns:g='urn:import:com.google.gwt.user.client.ui'&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;ui:style&amp;gt;&lt;br /&gt;    @url fileUrl bckImage;&lt;br /&gt;    .titleBar { background: fileUrl repeat 0 0; }&lt;br /&gt;  &amp;lt;/ui:style&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;ui:data field='bckImage' src='image.gif'/&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;g:HorizontalPanel styleName='{style.titleBar}'&amp;gt;&lt;br /&gt;  ...&lt;br /&gt;  &amp;lt;/g:HorizontalPanel&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/ui:UiBinder&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;An alternative way:&lt;br /&gt;&lt;pre&gt;&amp;lt;ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'&lt;br /&gt;xmlns:g='urn:import:com.google.gwt.user.client.ui'&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;ui:image field='gradient' src='image.gif' /&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;ui:style&amp;gt;&lt;br /&gt;    @sprite .header {&lt;br /&gt;      gwt-image: 'gradient';&lt;br /&gt;      width: 100%;&lt;br /&gt;      height: 18px;&lt;br /&gt;    }&lt;br /&gt;  &amp;lt;/ui:style&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;g:VerticalPanel&amp;gt;&lt;br /&gt;    &amp;lt;g:HorizontalPanel ui:field='header' styleName='{style.header}'/&amp;gt;&lt;br /&gt;  &amp;lt;/g:VerticalPanel&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/ui:UiBinder&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2) Getting the images from the ClientBundle&lt;/span&gt;: in GWT it is possible to declare resources with something like the following:&lt;br /&gt;&lt;pre&gt;package com.commonsemantics.example;&lt;br /&gt;&lt;br /&gt;public class Example implements EntryPoint {&lt;br /&gt;&lt;br /&gt;  public interface Resources extends ClientBundle&lt;br /&gt;  {&lt;br /&gt;     public static final Resources INSTANCE =  GWT.create(Resources.class);&lt;br /&gt;&lt;br /&gt;     @Source("images/myIcon.jpg")&lt;br /&gt;     ImageResource myIcon();&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  ...&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Once the ImageResource is declared it is possible to use it in the ui.xml file:&lt;br /&gt;&lt;pre&gt;&amp;lt;ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'&lt;br /&gt;xmlns:g='urn:import:com.google.gwt.user.client.ui'&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;ui:style&amp;gt;&lt;br /&gt;    .myImage { width: 18px; height: 18px; }&lt;br /&gt;  &amp;lt;/ui:style&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;ui:with field='resources'&lt;br /&gt;    type='com.commonsemantics.example.Example.Resources' /&amp;gt; &lt;br /&gt;&lt;br /&gt;  &amp;lt;g:HorizontalPanel styleName='{style.titleBar}'&amp;gt;&lt;br /&gt;    &amp;lt;g:Image ui:field='rightSide' resource='{resources.myIcon}'  &lt;br /&gt;      styleName='{style.myImage}'&amp;gt;&amp;lt;/g:Image&amp;gt;&lt;br /&gt;  &amp;lt;/g:HorizontalPanel&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;/ui:UiBinder&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3) Getting the images from the same package&lt;/span&gt;. When making use of images it is also possible to copy them in the same package of the class using them and refer to them as follow:&lt;br /&gt;&lt;pre&gt;&amp;lt;ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'&lt;br /&gt;xmlns:g='urn:import:com.google.gwt.user.client.ui'&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;ui:style&amp;gt;&lt;br /&gt;    .myImage { width: 18px; height: 18px; }&lt;br /&gt;  &amp;lt;/ui:style&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;ui:image field='myImage' src='myImage.gif' /&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;g:HorizontalPanel&amp;gt;&lt;br /&gt;    &amp;lt;g:Image ui:field='rightSide' resource='{myImage}'  &lt;br /&gt;      styleName='{style.myImage}'&amp;gt;&amp;lt;/g:Image&amp;gt;&lt;br /&gt;  &amp;lt;/g:HorizontalPanel&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/ui:UiBinder&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-8675376692611769141?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/8675376692611769141/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=8675376692611769141' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/8675376692611769141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/8675376692611769141'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2010/11/uibinder-css-and-images-gwt.html' title='UIBinder, CSS and Images (GWT)'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-2285883470815062400</id><published>2010-05-27T21:50:00.013+02:00</published><updated>2010-11-19T00:07:18.750+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OWL'/><category scheme='http://www.blogger.com/atom/ns#' term='Annotation Ontology (AO)'/><category scheme='http://www.blogger.com/atom/ns#' term='FOAF'/><category scheme='http://www.blogger.com/atom/ns#' term='RDF'/><title type='text'>About one of my FOAF problems</title><content type='html'>I am currently involved in defining the &lt;a href="http://code.google.com/p/annotation-ontology/"&gt;Annotation Ontology (AO)&lt;/a&gt;. For this tasks I would like to be able to reuse existing ontologies and AO is actually built on top of the &lt;a href="http://www.w3.org/2000/10/annotation-ns#"&gt;Annotea project schema&lt;/a&gt;. Another popular vocabulary would be &lt;a href="http://xmlns.com/foaf/spec/"&gt;FOAF&lt;/a&gt;. Now, FOAF defines - or better loosely defines -  a foaf:Document class as: &lt;span style="font-style: italic;"&gt;The Document  class represents those things which are, broadly conceived,  'documents'. &lt;/span&gt;Also in the documentation (accessed today) I read: there is no distinction between physical or electronic documents.&lt;br /&gt;&lt;br /&gt;In AO I need to point to the document I am annotating. As many of you might know, documents on the web, even if they have the same URI, are subject to change. For instance my &lt;a href="http://www.hcklab.org/paolo-ciccarese-cv.html"&gt;curriculum&lt;/a&gt; is changing with the new projects I am working on. Unfortunately the URI is always the same. Therefore, it might be that I annotate a piece of text in a document today and, tomorrow that piece is gone and my annotation is orphan.&lt;br /&gt;&lt;br /&gt;To be clear I can write something like:&lt;br /&gt;&lt;pre&gt;&amp;lt;rdf:Description rdf:about="http://www.hcklab.org/paolo-ciccarese-cv.html"&amp;gt;&lt;br /&gt;  &amp;lt;rdf:type rdf:resource="Document"/&amp;gt;             &lt;br /&gt;  &amp;lt;pav:sourceAccessedOn&amp;gt;2010-05-10&amp;lt;/pav:sourceAccessedOn&amp;gt;&lt;br /&gt;&amp;lt;/rdf:Description&amp;gt;&lt;br /&gt;&lt;/pre&gt;After a while some other user (or myself again) creates some other annotation; this will result in:&lt;br /&gt;&lt;pre&gt;&amp;lt;rdf:Description rdf:about="http://www.hcklab.org/paolo-ciccarese-cv.html"&amp;gt;&lt;br /&gt;  &amp;lt;rdf:type rdf:resource="Document"/&amp;gt;             &lt;br /&gt;  &amp;lt;pav:sourceAccessedOn&amp;gt;2010-05-31&amp;lt;/pav:sourceAccessedOn&amp;gt;&lt;br /&gt;&amp;lt;/rdf:Description&amp;gt;&lt;br /&gt;&lt;/pre&gt;As you can imagine, the access date is not working well as now we have a URI associated with two dates and there is no way to distinguish which date is associated to what annotation. &lt;br /&gt;&lt;br /&gt;A better solution would be to have a stable URI for the webpage and a different URI for each version of the document. Something like:&lt;br /&gt;&lt;pre&gt;&amp;lt;rdf:Description rdf:about="http://my.example.org/sd/2332"&amp;gt;&lt;br /&gt;  &amp;lt;rdf:type rdf:resource="Document"/&amp;gt;&lt;br /&gt;  &amp;lt;ao:retrievedFrom rdf:resource="http://tinyurl.com/ykjn87p"/&amp;gt;&lt;br /&gt;  &amp;lt;pav:sourceAccessedOn&amp;gt;2010-05-10&amp;lt;/pav:sourceAccessedOn&amp;gt;&lt;br /&gt;&amp;lt;/rdf:Description&amp;gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;rdf:Description rdf:about="http://tinyurl.com/ykjn87p"&amp;gt;&lt;br /&gt;  &amp;lt;rdf:type rdf:resource="WebPage"/&amp;gt;&lt;br /&gt;&amp;lt;/rdf:Description&amp;gt;&lt;br /&gt;&lt;/pre&gt;or, if we really want to keep FOAF in the picture:&lt;br /&gt;&lt;pre&gt;&amp;lt;rdf:Description rdf:about="http://my.example.org/sd/2332"&amp;gt;&lt;br /&gt;  &amp;lt;rdf:type rdf:resource="SourceDocument"/&amp;gt;&lt;br /&gt;  &amp;lt;ao:retrievedFrom rdf:resource="http://tinyurl.com/ykjn87p"/&amp;gt;&lt;br /&gt;  &amp;lt;pav:sourceAccessedOn&amp;gt;2010-05-10&amp;lt;/pav:sourceAccessedOn&amp;gt;&lt;br /&gt;&amp;lt;/rdf:Description&amp;gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;rdf:Description rdf:about="http://tinyurl.com/ykjn87p"&amp;gt;&lt;br /&gt;  &amp;lt;rdf:type rdf:resource="http://xmlns.com/foaf/0.1/Document"/&amp;gt;&lt;br /&gt;&amp;lt;/rdf:Description&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/annotation-ontology/wiki/SourceDocument"&gt;Read more here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-2285883470815062400?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/2285883470815062400/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=2285883470815062400' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/2285883470815062400'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/2285883470815062400'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2010/05/about-one-of-my-foaf-problems.html' title='About one of my FOAF problems'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-2438549784270058514</id><published>2010-04-09T17:32:00.012+02:00</published><updated>2010-11-19T00:08:06.033+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Genius'/><category scheme='http://www.blogger.com/atom/ns#' term='Newtorks'/><category scheme='http://www.blogger.com/atom/ns#' term='Genes'/><title type='text'>Genius for gene networks</title><content type='html'>Now that I cleaned the matrix data (see previous three posts) I can display them with Genius (&lt;a href="http://code.google.com/p/genius-tool/"&gt;google code&lt;/a&gt;) without having to deal with long genes descriptions:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_ERBd_3h53JM/S79JwRkD04I/AAAAAAAAAE0/a7nQ1Idw8jY/s1600/Genius+3+by+Paolo+Ciccarese.png"&gt;&lt;br /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_ERBd_3h53JM/S79J9x7ibqI/AAAAAAAAAE8/fw9R2XMhN18/s1600/Genius+3+by+Paolo+Ciccarese.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 495px; height: 300px;" src="http://3.bp.blogspot.com/_ERBd_3h53JM/S79J9x7ibqI/AAAAAAAAAE8/fw9R2XMhN18/s400/Genius+3+by+Paolo+Ciccarese.png" alt="" id="BLOGGER_PHOTO_ID_5458162599120236194" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-2438549784270058514?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/2438549784270058514/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=2438549784270058514' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/2438549784270058514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/2438549784270058514'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2010/04/genius-for-gene-networks.html' title='Genius for gene networks'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_ERBd_3h53JM/S79J9x7ibqI/AAAAAAAAAE8/fw9R2XMhN18/s72-c/Genius+3+by+Paolo+Ciccarese.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-6101742500127622854</id><published>2010-04-09T16:08:00.011+02:00</published><updated>2010-04-09T18:09:47.437+02:00</updated><title type='text'>First steps with Gridworks (3)</title><content type='html'>Once again I go back to the original file and, as I know that the first column has always the same format I will try:&lt;span style="font-style: italic;"&gt; value.split(":")[-1]&lt;/span&gt; and the results will be:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ERBd_3h53JM/S781YHVXGuI/AAAAAAAAAEM/MaF73eAq8tw/s1600/Gridworks+14.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 529px; height: 375px;" src="http://1.bp.blogspot.com/_ERBd_3h53JM/S781YHVXGuI/AAAAAAAAAEM/MaF73eAq8tw/s320/Gridworks+14.png" alt="" id="BLOGGER_PHOTO_ID_5458139961798105826" border="0" /&gt;&lt;/a&gt;And here we go:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_ERBd_3h53JM/S782hFKgKcI/AAAAAAAAAEU/zFkNOu0LSf4/s1600/Gridworks+15.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 526px; height: 373px;" src="http://2.bp.blogspot.com/_ERBd_3h53JM/S782hFKgKcI/AAAAAAAAAEU/zFkNOu0LSf4/s320/Gridworks+15.png" alt="" id="BLOGGER_PHOTO_ID_5458141215346141634" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;In this case I've created a new column but I could have selected 'edit cell -&gt; transform' to transform the original column directly.&lt;br /&gt;&lt;br /&gt;Finally, to create exactly what I wanted:  &lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;value.split(':')[-2]+':'+value.split(':')[-1]&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;or&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;value.replace('Affymetrix:CompositeSequence:','')&lt;/span&gt;&lt;br /&gt;or&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;value.split(':')[2,4].join(':')&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ERBd_3h53JM/S786IS0BvkI/AAAAAAAAAEc/WwyT2vTLh0o/s1600/Gridworks+18.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 534px; height: 379px;" src="http://4.bp.blogspot.com/_ERBd_3h53JM/S786IS0BvkI/AAAAAAAAAEc/WwyT2vTLh0o/s320/Gridworks+18.png" alt="" id="BLOGGER_PHOTO_ID_5458145187559751234" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;In summary, with the last line of code, in a few seconds total (load the file and run the command) I can perform the desired transformation. Also, it would be helpful to be able to use the command "split multi-valued cells" with the choice of splitting into rows (as it is already possible now) or into columns (which is currently not possible).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-6101742500127622854?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/6101742500127622854/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=6101742500127622854' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/6101742500127622854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/6101742500127622854'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2010/04/first-steps-with-gridworks-3.html' title='First steps with Gridworks (3)'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_ERBd_3h53JM/S781YHVXGuI/AAAAAAAAAEM/MaF73eAq8tw/s72-c/Gridworks+14.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-6907041442203681555</id><published>2010-04-09T04:25:00.013+02:00</published><updated>2010-04-09T05:41:27.701+02:00</updated><title type='text'>First steps with Gridworks (2)</title><content type='html'>I am back on the 'Genius matrix' project and I notice that the column name is a bit cryptic, I therefore provide a new simple name.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ERBd_3h53JM/S76QcfHet5I/AAAAAAAAADs/LwuQTZXPyrU/s1600/Gridworks+7.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 543px; height: 328px;" src="http://4.bp.blogspot.com/_ERBd_3h53JM/S76QcfHet5I/AAAAAAAAADs/LwuQTZXPyrU/s320/Gridworks+7.png" alt="" id="BLOGGER_PHOTO_ID_5457958617483229074" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Even if that was not the goal of my data cleaning I am still curious on how to split the first column in multiple ones using the separator ':' as criteria.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_ERBd_3h53JM/S76Q6X7wetI/AAAAAAAAAD0/jbqdj5FuOno/s1600/Gridworks+8.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 544px; height: 328px;" src="http://2.bp.blogspot.com/_ERBd_3h53JM/S76Q6X7wetI/AAAAAAAAAD0/jbqdj5FuOno/s320/Gridworks+8.png" alt="" id="BLOGGER_PHOTO_ID_5457959130951088850" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I select 'add column based on this column' and I get the following screen:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ERBd_3h53JM/S76Ra1Z4_dI/AAAAAAAAAD8/ds1iKY2oSAs/s1600/Gridworks+12.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 546px; height: 378px;" src="http://4.bp.blogspot.com/_ERBd_3h53JM/S76Ra1Z4_dI/AAAAAAAAAD8/ds1iKY2oSAs/s320/Gridworks+12.png" alt="" id="BLOGGER_PHOTO_ID_5457959688617917906" border="0" /&gt;&lt;/a&gt;Using the "Gridworks Expression Language" (GEL) I can create a new column where I got rid of the prefix "Affymetrix:CompositeSequence" (as you can see in the above pic):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;if(value.startsWith ("Affymetrix:CompositeSequence"), value.substring(29), value) &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;And the result is:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_ERBd_3h53JM/S76g0BqBAMI/AAAAAAAAAEE/BPM1T9_PpbU/s1600/Gridworks+13.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 553px; height: 390px;" src="http://2.bp.blogspot.com/_ERBd_3h53JM/S76g0BqBAMI/AAAAAAAAAEE/BPM1T9_PpbU/s320/Gridworks+13.png" alt="" id="BLOGGER_PHOTO_ID_5457976614077923522" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I still haven't used the separator ':' with my rule but the result is really close to what I wanted... and there is always the option to roll back.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-6907041442203681555?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/6907041442203681555/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=6907041442203681555' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/6907041442203681555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/6907041442203681555'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2010/04/first-steps-with-gridworks-2.html' title='First steps with Gridworks (2)'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_ERBd_3h53JM/S76QcfHet5I/AAAAAAAAADs/LwuQTZXPyrU/s72-c/Gridworks+7.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-4186206772910301718</id><published>2010-04-08T14:40:00.017+02:00</published><updated>2010-04-08T15:17:06.559+02:00</updated><title type='text'>First steps with Gridworks (1)</title><content type='html'>I am having the chance of testing the alpha of Freebase Gridworks and given my appreciation for the work of &lt;a href="http://davidhuynh.net/"&gt;David Huynh&lt;/a&gt; and &lt;a href="http://www.betaversion.org/%7Estefano/"&gt;Stefano Mazzocchi&lt;/a&gt; I am really excited about it. As these days I am working on a little software for visualizing gene networks and I need to perform a few simple steps for cleaning the data I decided to go Gridworks (&lt;a href="http://vimeo.com/10081183"&gt;video1&lt;/a&gt; and &lt;a href="http://vimeo.com/10287824"&gt;video2&lt;/a&gt;). Gridworks is easy to install and once I run it, Gridworks opens a page in my browser.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ERBd_3h53JM/S73QPlv27NI/AAAAAAAAAC8/KUJ7v6hv6No/s1600/Gridworks+1.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 517px; height: 311px;" src="http://4.bp.blogspot.com/_ERBd_3h53JM/S73QPlv27NI/AAAAAAAAAC8/KUJ7v6hv6No/s320/Gridworks+1.png" alt="" id="BLOGGER_PHOTO_ID_5457747289692368082" border="0" /&gt;&lt;/a&gt;I am then going to load a matrix in csv format simply filling in the data file location and a project name. Creating the project I get back the view of the matrix:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_ERBd_3h53JM/S73RzRU6IbI/AAAAAAAAADE/54FFrarYHf8/s1600/Gridworks+2.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 513px; height: 312px;" src="http://3.bp.blogspot.com/_ERBd_3h53JM/S73RzRU6IbI/AAAAAAAAADE/54FFrarYHf8/s320/Gridworks+2.png" alt="" id="BLOGGER_PHOTO_ID_5457749002197541298" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I now need to clean the first column that contains names such as:&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Affymetrix:CompositeSequence:Rat230_2:1389668_at&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="data-table-cell-content"&gt;&lt;span&gt;and change them into something like: &lt;/span&gt;&lt;span style="font-style: italic;"&gt;Rat230_2:1389668&lt;/span&gt;But first I want to visualize a larger number of rows (from 20 to 50) to make sure that the pattern is always the same. I select &lt;span style="font-style: italic;"&gt;page size: 50&lt;/span&gt; and this time the operation takes a few seconds to complete.&lt;br /&gt;Now I want to find the best way to modify the first column and I start exploring the contextual menu:&lt;br /&gt;&lt;span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ERBd_3h53JM/S73URQ5I55I/AAAAAAAAADU/OUCQ9PIhEJI/s1600/Gridworks+4.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 526px; height: 317px;" src="http://1.bp.blogspot.com/_ERBd_3h53JM/S73URQ5I55I/AAAAAAAAADU/OUCQ9PIhEJI/s320/Gridworks+4.png" alt="" id="BLOGGER_PHOTO_ID_5457751716500400018" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Several quick options are available: transform to uppercase, lowercase, title case,  collapse white spaces and so on. I also see a split multi-valued cells and this gets my attention. I select it, I specify as separator the semicolumn ':' and I get back:&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e)  {}" href="http://1.bp.blogspot.com/_ERBd_3h53JM/S73Vh5yKjbI/AAAAAAAAADc/EVxRVWQ18Rg/s1600/Gridworks+5.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 532px; height: 323px;" src="http://1.bp.blogspot.com/_ERBd_3h53JM/S73Vh5yKjbI/AAAAAAAAADc/EVxRVWQ18Rg/s320/Gridworks+5.png" alt="" id="BLOGGER_PHOTO_ID_5457753101866536370" border="0" /&gt;&lt;/a&gt;This is not exactly what I wanted as I was expecting to get multiple columns out of the first one instead of getting multiple rows. Well, no problem the undo feature is one click away. You can either click on the top of the screen for the last command undo or you can browse the command history on the right of the screen and go back the desire amount of steps.&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e)  {}" href="http://3.bp.blogspot.com/_ERBd_3h53JM/S73Wp-yQPAI/AAAAAAAAADk/nlBXLF3_uF0/s1600/Gridworks+6.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 530px; height: 322px;" src="http://3.bp.blogspot.com/_ERBd_3h53JM/S73Wp-yQPAI/AAAAAAAAADk/nlBXLF3_uF0/s320/Gridworks+6.png" alt="" id="BLOGGER_PHOTO_ID_5457754340159667202" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;And I can go back to the original state.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-4186206772910301718?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/4186206772910301718/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=4186206772910301718' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/4186206772910301718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/4186206772910301718'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2010/04/first-steps-with-gridworks-1.html' title='First steps with Gridworks (1)'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_ERBd_3h53JM/S73QPlv27NI/AAAAAAAAAC8/KUJ7v6hv6No/s72-c/Gridworks+1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-1458381476362691864</id><published>2010-02-22T00:38:00.002+01:00</published><updated>2010-02-22T00:40:54.303+01:00</updated><title type='text'>Talking about SWAN (Semantic Web Applications in Neuromedicine)</title><content type='html'>An article entitled, "&lt;a href="http://www.alzheimersweekly.com/Research/swan-the-powerful-research-organizer-a688.html"&gt;SWAN: The Powerful Research Organizer&lt;/a&gt;", is on this week's Alzheimer's Weekly home page (02/21/2010)&lt;br /&gt;&lt;br /&gt;Several paragraphs about SWAN have been published in the &lt;a href="http://www.nature.com/news/2010/100127/full/463416a.html"&gt;Nature News Speed Reading  (Nature vol 463, 28 January 2010)&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-1458381476362691864?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/1458381476362691864/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=1458381476362691864' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/1458381476362691864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/1458381476362691864'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2010/02/talking-about-swan-semantic-web.html' title='Talking about SWAN (Semantic Web Applications in Neuromedicine)'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-2194934672988527157</id><published>2009-10-29T03:29:00.006+01:00</published><updated>2009-10-29T03:42:04.695+01:00</updated><title type='text'>Heat-shock Proteins Families</title><content type='html'>&lt;p&gt;Heat-shock proteins are named according to their molecular weight (kilodaltons):&lt;/p&gt;&lt;table border="1" cellpadding="2"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Approximate molecular weight  (kDa)&lt;/th&gt; &lt;th&gt;Eukaryotic proteins&lt;/th&gt; &lt;th&gt;Function&lt;/th&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;10 kDa&lt;/td&gt; &lt;td&gt;Hsp10&lt;/td&gt; &lt;td&gt;Co-factor of Hsp60. Chaperonins: protein complexes that assist the folding of these nascent, non-native polypeptides into their native, functional state. &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;20-30 kDa&lt;/td&gt; &lt;td&gt;The HspB group of Hsp. Ten members in mammals including Hsp27 or HspB1&lt;/td&gt; &lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;40 kDa&lt;/td&gt; &lt;td&gt;Hsp40&lt;/td&gt; &lt;td&gt;Co-factor of Hsp70&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;60 kDa&lt;/td&gt; &lt;td&gt;Hsp60&lt;/td&gt; &lt;td&gt;Involved in protein folding after its post-translational import to the mitochondrion/chloroplast&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;70 kDa&lt;/td&gt; &lt;td&gt;The HspA group of Hsp including Hsp71, Hsp70, Hsp72, Grp78 (BiP), Hsx70 found only in primates&lt;/td&gt; &lt;td&gt;Protein folding and unfolding, provides thermotolerance to cell on exposure to heat stress. Also prevents protein folding during post-translational import into the mitochondria/chloroplast.&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;90 kDa&lt;/td&gt; &lt;td&gt;The HspC group of Hsp including Hsp90, Grp94&lt;/td&gt; &lt;td&gt;Maintenance of steroid receptors and transcription factors&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;100 kDa&lt;/td&gt; &lt;td&gt;Hsp104, Hsp110&lt;/td&gt; &lt;td&gt;Tolerance of extreme temperature&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h2&gt;The Hsp70/Hsp40 Family (Chaperone)&lt;/h2&gt; &lt;p&gt;The 70 kilodalton heat shock proteins (Hsp70s) are a family of highly-related protein isoforms ranging in size from 66 kDa to 78 kDa. Proteins with similar structure exist in virtually all living organisms. The Hsp70s are an important part of the cell's machinery for protein folding, and help to protect cells from stress. The various family members are distributed throughout different intracellular compartments but nevertheless share many structural and biochemical properties. &lt;/p&gt; &lt;p&gt;These include: the cytosolic/nuclear Hsp70 proteins Hsc70 (a.k.a. Hsp73) and Hsp70 (a.k.a. Hsp72), Grp78 or Bip present within the lumen of the endoplasmic reticulum, and Grp75 (also called mortalin) localized within mitochondria. Hsc70 is constitutively expressed and poorly stress-inducible, whereas Hsp70 is unabundant in normal physiological situations and strongly induced under oxidative stress. Hsc70 was placed in the heat shock protein family due to homology with other heat shock proteins. &lt;/p&gt; &lt;p&gt;All of the mammalian Hsp70 family members require one or more cochaperones for their reaction cycle (HSP40 or HSP100).&lt;/p&gt;&lt;h2&gt;The Hsp60/Hsp10 Family (Chaperonins)&lt;/h2&gt; &lt;p&gt;The HSP60 (GroEL - Prokaryotic) proteins in combination with its particular co-factor Hsp10 (GroES - Prokaryotic) bind newly synthesized polypeptides and facilitate their folding to the native state in an ATP-dependent cycle. The binding and sequestration of the substrate polypeptide occurs within the large central cavity of the chaperonin complex. It is thought that protection of the substrate protein within the central cavity of the chaperonin provides a sequestered protein folding environment, thereby reducing the probability of misfolding and aggregation of the target protein with other polypeptides. The chaperonins together with Hsp70 chaperones coordinate the efficient folding and assembly of many proteins throughout the cell.&lt;/p&gt; &lt;p&gt;Hsp60 families are highly immunogenic proteins. The related GroEL proteins from different pathogens elicit strong humoral and cellular immune responses.&lt;/p&gt; &lt;p&gt;In mammalian the Hsp60 is localized within mitochondria and with its cochaperone, Hsp10, participates in the folding and assembly of newly synthesized proteins as they are transported into the mitochondria from the cytosol.&lt;/p&gt; &lt;h2&gt;Hsp90&lt;/h2&gt; &lt;p&gt;Hsp90 is a molecular chaperone and is one of the most abundant proteins expressed in cells. Unlike some of the other well characterized heat shock proteins whose chaperone role involves their interaction with many cellular proteins, Hsp90 exhibits some selectivity for a distinct set of “client” proteins. Hsp90 interacts with a variety of protein kinases and transcription factors important for growth and development. Working with its very large number of cochaperones, Hsp90 appears to maintain its client proteins in a conformation that allows for their subsequent activation in response to appropriate growth signals. Not surprisingly, Hsp90 and its co-chaperones are at the forefront of research for those studying signal transduction events and cancer.&lt;/p&gt;&lt;h3&gt;Sources&lt;/h3&gt; &lt;ul&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Heat_shock"&gt;http://en.wikipedia.org/wiki/Heat_shock&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Heat_shock_protein"&gt;http://en.wikipedia.org/wiki/Heat_shock_protein&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Chaperone_%28protein%29"&gt;http://en.wikipedia.org/wiki/Chaperone_%28protein%29&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Chaperonin"&gt;http://en.wikipedia.org/wiki/Chaperonin&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Heat_shock_factor"&gt;http://en.wikipedia.org/wiki/Heat_shock_factor&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cs.stedwards.edu/chem/Chemistry/CHEM43/CHEM43/HSP/STRUCTURE.HTML"&gt;http://www.cs.stedwards.edu/chem/Chemistry/CHEM43/CHEM43/HSP/STRUCTURE.HTML&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.antigenics.com/products/tech/hsp/"&gt;http://www.antigenics.com/products/tech/hsp/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.assaydesigns.com/corp/images/literature/flier-heat-shock.pdf"&gt;http://www.assaydesigns.com/corp/images/literature/flier-heat-shock.pdf&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-2194934672988527157?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/2194934672988527157/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=2194934672988527157' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/2194934672988527157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/2194934672988527157'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2009/10/heat-shock-proteins-families.html' title='Heat-shock Proteins Families'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-1573663527474098794</id><published>2009-10-29T01:57:00.004+01:00</published><updated>2009-10-29T02:06:31.097+01:00</updated><title type='text'>Heat Shock and Heat Shock Proteins</title><content type='html'>&lt;p&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Heat Shock&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;In biochemistry, heat shock is the effect of subjecting a cell to a higher temperature than that of the ideal body temperature of the organism from which the cell line was derived. In fish that survive at 0°C, heat shock can be induced with temperatures as low as 5°C, whereas thermophilic bacteria that proliferate at 50°C will not express heat shock proteins until temperatures reach approximately 60°C. The process of heat shocking can be done in a CO2 incubator, O2 incubator, or a hot water bath.&lt;/p&gt; &lt;p&gt;Induction of heat shock is a method by which genes can be introduced into cells via a vector. This is done by mixing the vector with competent bacteria in a microcentrifuge tube. First, the tube is cooled to a low temperature for several minutes, usually with an ice bath. The tube is then quickly moved into warm water, preferably around 42°C. This sudden change in temperature causes the pores to open up to larger sizes, allowing DNA molecules to enter. After a brief interval, the tube is quickly cooled to a low temperature again. This closes up the pores, and traps the DNA inside. With this, the cells would have been transformed. However, as with almost all transformation techniques, this method is far from 100% efficient.&lt;/p&gt;&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Heat_shock"&gt;from Wikipedia&lt;/a&gt; (accessed on 10/28/2009)&lt;/p&gt;&lt;p style="font-weight: bold;"&gt;&lt;span style="font-size:130%;"&gt;Heat Shock Proteins&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Heat shock proteins (HSPs) are present in cells under normal conditions (1), but are expressed at high levels when exposed to a sudden temperature jump or other stress (2)&lt;/strong&gt;.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;(1)&lt;/strong&gt; HSPs act like ‘chaperones,’ making sure that the cell’s proteins are in the right shape and in the right place at the right time. For example, HSPs help new or distorted proteins fold into shape, which is essential for their function. Heat shock proteins also shuttle proteins from one compartment to another inside the cell, and transport old proteins to ‘garbage disposals’ inside the cell. Heat shock proteins are also believed to play a role in the presentation of pieces of proteins (or peptides) on the cell surface to help the immune system recognize diseased cells. HSPs appear to serve a significant cardiovascular role.&lt;/p&gt;&lt;div style="background: rgb(204, 204, 204) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; padding-left: 5px; padding-right: 5px;"&gt;   &lt;p&gt;&lt;strong&gt;Chaperones&lt;/strong&gt; are proteins that assist the non-covalent folding/unfolding and the assembly/disassembly of other macromolecular structures, but do not occur in these structures when the latter are performing their normal biological functions. Chaperones do not necessarily convey steric information required for proteins to fold: thus statements of the form `chaperones fold proteins` can be misleading. One major function of chaperones is to prevent both newly synthesised polypeptide chains and assembled subunits from aggregating into nonfunctional structures. It is for this reason that many chaperones, but by no means all, are also heat shock proteins because the tendency to aggregate increases as proteins are denatured by stress. However, 'steric chaperones' directly assist in the folding of specific proteins by providing essential steric information.&lt;/p&gt; &lt;/div&gt;    &lt;p&gt;&lt;/p&gt;&lt;div style="background: rgb(204, 204, 204) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; padding-left: 5px; padding-right: 5px;"&gt;   &lt;p&gt;Heat shock proteins trigger &lt;strong&gt;immune response&lt;/strong&gt; through activities that occur both inside the cell (intracellular) and outside the cell (extracellular). &lt;/p&gt;   &lt;ul&gt;&lt;li&gt;&lt;strong&gt;Intracellular activities&lt;/strong&gt;: Because of the normal functions of heat shock proteins inside the cell (such as helping proteins fold, preparing proteins for disposal, etc.), HSPs end up binding virtually every protein made within the cell. This means that at any given time, HSPs can be found inside the cell bound to a wide array of peptides that represent a ‘library’ of all the proteins inside the cell. This library contains normal peptides that are found in all cells as well as abnormal peptides that are only found in sick cells. Research suggests that inside the cell, heat shock proteins take the peptides and hand them over to another group of molecules. These other molecules take the abnormal peptides that are found only in sick cells and move them from inside the cell to outside on the cell’s surface. When the abnormal peptides are displayed in this way, they act as red flags, warning the immune system that the cell has become sick. These abnormal peptides are called antigens — a term that describes any substance capable of triggering an immune response.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Extracellular activities&lt;/strong&gt;: Heat shock proteins are normally found inside cells. When they are found outside the cell, it indicates that a cell has become so sick that it has died and spilled out all of its contents. This kind of messy, unplanned death is called necrosis, and only occurs when something is very wrong with the cell. Extracellular HSPs are one of the most powerful ways of sending a ‘danger signal’ to the immune system in order to generate a response that can help to get rid of an infection or disease.&lt;/li&gt;&lt;/ul&gt; &lt;/div&gt; &lt;p&gt;&lt;strong&gt;(2)&lt;/strong&gt; HSPs are a part of the cell's internal repair mechanism. They are also called &lt;strong&gt;stress-proteins&lt;/strong&gt;. They respond to heat, cold and oxygen deprivation by activating several cascade pathways. In fact, HSPs stabilize proteins and are involved in the folding of denatured proteins. High temperatures and other stresses, such as altered pH and oxygen deprivation, make it more difficult for proteins to form their proper structures and cause some already structured proteins to unfold. Left uncorrected, mis-folded proteins form aggregates that may eventually kill the cell. HSPs are induced rapidly at high levels to deal with this problem. Increased expression of HSPs is mediated at multiple levels: mRNA synthesis, mRNA stability, and translation efficiency.&lt;/p&gt; &lt;p&gt;Heat shock factor 1 (HSF-1) is the major regulator of heat shock protein transcription in eukaryotes. In the absence of cellular stress, HSF-1 is inhibited by association with heat shock proteins and is therefore not active. Cellular stresses, such as increased temperature, can cause proteins in the cell to misfold. Heat shock proteins bind to the misfolded proteins and dissociate from HSF-1. This allows HSF1 to form trimers and translocate to the cell nucleus and activate transcription.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Heat_shock_protein"&gt;from Wikipedia&lt;/a&gt; (accessed on 10/28/2009), &lt;a href="http://en.wikipedia.org/wiki/Chaperone_%28protein%29"&gt;from Wikipedia&lt;/a&gt; (accessed on 10/28/2009), &lt;a href="http://en.wikipedia.org/wiki/Chaperonin"&gt;from Wikipedia&lt;/a&gt; (accessed on 10/28/2009), &lt;a href="http://en.wikipedia.org/wiki/Heat_shock_factor"&gt;from Wikipedia&lt;/a&gt; (accessed on 10/28/2009)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-1573663527474098794?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/1573663527474098794/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=1573663527474098794' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/1573663527474098794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/1573663527474098794'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2009/10/heat-shock-and-heat-shock-proteins.html' title='Heat Shock and Heat Shock Proteins'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-4242010849123844294</id><published>2009-10-23T20:13:00.017+02:00</published><updated>2009-10-25T23:45:42.302+01:00</updated><title type='text'>Eclipse+Grails+GWT: Integrating 'live' GWT [1]</title><content type='html'>After creating a Grails project in Eclipse (and a plugin), I want now to make use of GWT (&lt;a href="http://code.google.com/webtoolkit/"&gt;Google Web Toolkit&lt;/a&gt;). For doing so I am going first to install the useful Google plugin for Eclipse (&lt;a href="http://code.google.com/eclipse/docs/getting_started.html"&gt;download&lt;/a&gt;). As I am working with Eclipse Galileo, I am installing the software using: &lt;span style="font-style: italic;"&gt;http://dl.google.com/eclipse/plugin/3.5&lt;/span&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;If you are new to GWT I would suggest you to start creating a simple GWT project (without any Grails involved). Follow &lt;a href="http://code.google.com/eclipse/docs/getting_started.html"&gt;this&lt;/a&gt;.&lt;code&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;span style="font-weight: bold;"&gt;Adding the gwt libraries to the classpath of the Grails project&lt;/span&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;If you installed the Eclipse plugin for GWT this would be a fairly simple step. Right click on the project and &lt;span style="font-style: italic;"&gt;Properties-&gt;Java Build Path-&gt;Libraries-&gt;Add Library &lt;/span&gt;&lt;span&gt;and&lt;/span&gt; I will find in the list the Google Web Toolkit in the list (this is obviously because I previously succesfully installed the Eclipse plugin for GWT).&lt;br /&gt;&lt;br /&gt;An alternative way (to the Google plugin) would have been to define in the Eclipse &lt;span style="font-style: italic;"&gt;Preferences-&gt;Java-&gt;Build Path-&gt;Classpath Variables&lt;/span&gt; the variable GWT_HOME that will point to the gwt installation (i.e. /Users/paolociccarese/Library/gwt-mac-1.7.1). If you haven't installed GWT yet, you can download it &lt;a href="http://code.google.com/webtoolkit/download.html"&gt;here&lt;/a&gt;. Then we are going to add to the libraries of the 'FirstApp' projects the jars included in the GWT distribution (Right click on the project and &lt;span style="font-style: italic;"&gt;Properties-&gt;Java Build Path-&gt;Libraries-&gt;Add variable&lt;/span&gt; you can select GWT_HOME and extend it with the jars:  gwt-api-checker, gwt-dev-mac, gwt-servlet, gwt-user.&lt;br /&gt;&lt;br /&gt;Another way would be using ivy for resolving the dependencies.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;span style="font-weight: bold;"&gt;The Grails plugin for GWT&lt;/span&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;Then I will install the &lt;a href="http://grails.org/GWT+Plugin"&gt;Grails plugin for GWT&lt;/a&gt;. Once again, after positioning in the root of the 'FirstApp' project I will type:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&gt; grails install-plugin gwt&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;At this point I am almost ready to go...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-4242010849123844294?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/4242010849123844294/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=4242010849123844294' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/4242010849123844294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/4242010849123844294'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2009/10/eclipsegrailsgwt-integrating-live-gwt-1.html' title='Eclipse+Grails+GWT: Integrating &apos;live&apos; GWT [1]'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-6694696746562471937</id><published>2009-10-19T15:45:00.021+02:00</published><updated>2009-10-21T02:18:12.721+02:00</updated><title type='text'>Eclipse+Grails: Adding a 'live' plugin to the project</title><content type='html'>Once created the new project 'FirstApp' I want to be able to create a Grails plugin in the Eclipse IDE. To create a plugin is pretty straightforward, I use the command line, after positioning in the root of the current workspace, and I type:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&gt; grails create-plugin FirstPlugin&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The Grails plugin structure is almost identical to the Grails application structure. See my &lt;a href="http://hcklab.blogspot.com/2009/09/few-mins-with-grails-creating-plugin.html"&gt;previous post about the Grails plugin&lt;/a&gt;. I am going to import in Eclipse the plugin with the classic 'Import as Existing Project'. As I did for the 'FirstApp' I can enable the Groovy capabilities right clicking on the project and selecting: &lt;span style="font-style: italic;"&gt;Configure-&gt; Convert to Groovy project&lt;/span&gt;. Also, exactly as I did for the Grails application, I select the ivy.xml file, I right-clik and select 'Add Ivy Library...'. This will link, through ivy, all the libraries necessary to the newly created Grails application to compile and run. Once performed this step I can safely remove all the libraries linked in the subdirectory GRAILS_HOME from the &lt;span style="font-style: italic;"&gt;Properties-&gt;Java Build Path.&lt;/span&gt; You should also notice a new icon in the toolbar with tooltip 'Resolve All Dependencies'. You can use that icon to retrieve new dependencies that you specified in the ivy.xml file.&lt;br /&gt;&lt;br /&gt;For testing purposes I can run the plugin as it was an application with:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&gt; grails run-app&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;After checking that the plugin can run I want to use the Grails plugin 'FirstPlugin' in the Grails application 'FirstApp'. The 'classic' way would be to package the plugin by command line. After positioning in the root of the plugin:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&gt; grails package-plugin&lt;/span&gt;&lt;br /&gt;will create a file like grails-firstplugin-0.1.zip. After positioning in the root of the app, I can then the installation of the plugin:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&gt;grails install-plugin ../FirstPlugin/grails-firstplugin-0.1.zip&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;Unfortunately, this approach is really annoying and time consuming when using the Eclipse framework. In fact, every time the plugin is changing I have to package it again and install it again.&lt;br /&gt;&lt;br /&gt;Well, in Eclipse there is a better way to go. First of all we create the file &lt;span style="font-style: italic;"&gt;conf/BuildConfig.groovy&lt;/span&gt; in the 'FirstApp' project.&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;In this file we are going to type:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;grails.plugin.location.firstPlugin = "../FirstPlugin"&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;This will basically tell Grails to refer to that plugin specifying the plugin folder.&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;span&gt;To test this, after creating the file, &lt;/span&gt;&lt;span&gt;you can proceed creating a controller in the plugin. After positioning in the plugin root, I type:&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&gt;grails create-controller org.example.First&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;This will generate a new controller &lt;/span&gt;&lt;span&gt;&lt;span style="font-style: italic;"&gt;org.example.FirstController&lt;/span&gt; .&lt;/span&gt;&lt;span&gt;To prove that the BuildConfig.goovy file is working you can run the application. After positioning in the root of the application:&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&gt;grails run-app&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Checking the URL&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;: &lt;/span&gt;http://localhost:8080/FirstApp/ you should see the controller (of the plugin) showing up. There is still a problem though if you create a second controller (or a change in the code of the plugin), this will not show up in the application unless you restart the server. This might become extremely annoying on the long run.&lt;br /&gt;&lt;br /&gt;The solution to that is the creation of a soft link. We are going to create a link to the plugin project inside the code of the application. First I create the directory &lt;span style="font-style: italic;"&gt;plugins&lt;/span&gt; in the FirstApp project:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&gt;mkdir plugins&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Then, in that directory, I am going to create the link to the FirstPlugin:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&gt;ln -s ../../FirstPlugin&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Right. Now, if you followed correctly (...and if I have not forgot any step), while the server is running, you should be able to create a new controller in the 'FirstPlugin' and see it in the list of the controllers in the running application: http://localhost:8080/FirstApp/&lt;br /&gt;&lt;br /&gt;One more thing, remember to refresh the eclipse project every time you make use of a Grails command that creates/modify files.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-6694696746562471937?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/6694696746562471937/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=6694696746562471937' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/6694696746562471937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/6694696746562471937'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2009/10/eclipsegrails-adding-live-plugin-to.html' title='Eclipse+Grails: Adding a &apos;live&apos; plugin to the project'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-7026363456136550276</id><published>2009-10-19T03:46:00.022+02:00</published><updated>2009-10-19T05:12:23.671+02:00</updated><title type='text'>Eclipse+Grails: Setting up a new project</title><content type='html'>Here is my current setup for creating a Grails project with Eclipse:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Installed Eclipse jee 3.5 Galileo SR1 (&lt;a href="http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/galileo/SR1/eclipse-jee-galileo-SR1-macosx-cocoa.tar.gz"&gt;download&lt;/a&gt;)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Installed SVN plugin Subclipse (Update site: http://subclipse.tigris.org/update_1.6.x)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Installed Groovy plugin (Update site: http://dist.codehaus.org/groovy/distributions/greclipse/snapshot/e3.5/)&lt;/li&gt;&lt;li&gt;Installed Ivy plugin (http://www.apache.org/dist/ant/ivyde/updatesite)&lt;/li&gt;&lt;/ol&gt;I am then going to setup the launcher for the Grails commands through the "External Tools Configuration". I am specifying the 'location of Grails" (i.e. /Users/paolociccarese/Library/Grails-1.1.1/bin/grails), then &lt;span style="font-style: italic;"&gt;${project_loc}&lt;/span&gt; as 'Working directory' (that means the command will be related to the selected project in the Eclipse workspace. Finally I define as 'Arguments': &lt;span style="font-style: italic;"&gt;${string_prompt}&lt;/span&gt; . This will allow me to run the Grails commands like I would do from the command line. To be honest I also use the command line when I am managing grails projects, for some operations is more practical.&lt;br /&gt;&lt;br /&gt;Finally I create the GRAILS_HOME variable in &lt;span style="font-style: italic;"&gt;Eclipse-&gt;Preferences-&gt;Java-&gt;Build Path-&gt;Classpath Variables&lt;/span&gt;. This is used by Eclipse to compile the project. You may notice that GROOVY_HOME and IVY_HOME have already been created by the plugins.&lt;br /&gt;&lt;br /&gt;Now I want to create a new Grails application that I will call 'FirstApp'. For doing this I will use the command line and, after positioning myself in the root of the current workspace, I type:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&gt; grails create-app FirstApp&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This will create the structure of my new application (in the newly created directory: FirstApp). I can now import this structure as 'Import as Existing Project' in my workspace. I can enable the Groovy capabilities right clicking on the project and selecting: &lt;span style="font-style: italic;"&gt;Configure-&gt; Convert to Groovy project&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Now if you right-click on the project and select: &lt;span style="font-style: italic;"&gt;Properties-&gt;Java Build Path&lt;/span&gt; you will notice tha all the libraries are linked in a subdirectory of GRAILS_HOME. This is not my solution as I want to be dependent from the ivy.xml file. To do so, I select the ivy.xml file, I right-clik and select 'Add Ivy Library...'. This will link, through ivy, all the libraries necessary to the newly created Grails application to compile and run. Once performed this step I can safely remove all the libraries linked in the subdirectory GRAILS_HOME from the &lt;span style="font-style: italic;"&gt;Properties-&gt;Java Build Path.&lt;/span&gt; You should also notice a new icon in the toolbar with tooltip 'Resolve All Dependencies'. You can use that icon to retrieve new dependencies that you specified in the ivy.xml file.&lt;br /&gt;&lt;br /&gt;Now I can test if the application is actually running. I select a file in the project and I run the external application 'Grails' that I previously created. A window will pop up and we can fill out the text box with the command 'run-app'. The alternative would have been to use the shall and, after positioning in the root of the project,  type:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&gt; grails run-app&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If everything went right we can now browse: http://localhost:8080/FirstApp/ getting back the Grails welcome screen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-7026363456136550276?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/7026363456136550276/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=7026363456136550276' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/7026363456136550276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/7026363456136550276'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2009/10/eclipsegrails-setting-up-new-project.html' title='Eclipse+Grails: Setting up a new project'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-6464977195829833668</id><published>2009-09-16T22:11:00.022+02:00</published><updated>2009-09-19T00:35:47.588+02:00</updated><title type='text'>Uploading RDF vocabularies (GRAILS, Virtuoso and Sesame)</title><content type='html'>If you need to upload an RDF vocabulary in Virtuoso, the easiest way to go is doing it through the Virtuoso Conductor. It is pretty straightforward, you define the graph name and the file to upload and that is it. When developing an application though, you may want to be able to upload the files programmatically (for instance for managing metadata associated to the vocabulary and creating a catalog).&lt;br /&gt;&lt;br /&gt;The following snipped of code is a modified version of the one I found in the &lt;a href="http://www.openrdf.org/forum/mvnforum/viewthread?thread=1920"&gt;openrdf forum&lt;/a&gt;:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Repository myRepository = new VirtuosoRepository("jdbc:virtuoso://localhost:1111","dba","dba");&lt;br /&gt;myRepository.initialize();&lt;br /&gt;File file = new File("/Users/paolociccarese/Desktop/contact.rdf");&lt;br /&gt;RepositoryConnection con = myRepository.getConnection();&lt;br /&gt;URI context = new URIImpl("http://paolociccarese.info/contact");&lt;br /&gt;con.add(file, null, RDFFormat.RDFXML, context);&lt;br /&gt;con.close();&lt;br /&gt;&lt;/pre&gt;For running this code it is necessary to perform a bunch of imports:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;import org.openrdf.model.URI;&lt;br /&gt;import org.openrdf.model.impl.URIImpl;&lt;br /&gt;import org.openrdf.rio.RDFFormat&lt;br /&gt;import org.openrdf.repository.Repository&lt;br /&gt;import org.openrdf.repository.RepositoryConnection&lt;br /&gt;&lt;/pre&gt;To make it work, if you use grails and ivy (&lt;span style="font-style: italic;"&gt;ivy.xml&lt;/span&gt;), you should add at least the following dependencies:&lt;br /&gt;&lt;br /&gt;&amp;lt;dependency org="org.openrdf" name="openrdf-repository-api" rev="2.0.1" conf="compile"/&amp;gt;&lt;br /&gt;&amp;lt;dependency org="org.openrdf" name="openrdf-rio-rdfxml" rev="2.0.1" conf="compile"/&amp;gt;&lt;br /&gt;&amp;lt;dependency org="org.openrdf" name="openrdf-model" rev="2.0.1" conf="compile"/&amp;gt;&lt;br /&gt;&lt;br /&gt;and you also need to link to the maven repository for these in the &lt;span style="font-style: italic;"&gt;ivysettings.xml&lt;/span&gt; file:&lt;br /&gt;&lt;br /&gt;&amp;lt;ibiblio name="aduna" root="http://repository.aduna-software.org/maven2" m2compatible="true"/&amp;gt;&lt;br /&gt;&lt;br /&gt;and finally run the command &lt;span style="font-weight: bold;"&gt;&gt;grails get-dependencies&lt;/span&gt; again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-6464977195829833668?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/6464977195829833668/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=6464977195829833668' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/6464977195829833668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/6464977195829833668'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2009/09/uploading-rdf-vocabularies-grails.html' title='Uploading RDF vocabularies (GRAILS, Virtuoso and Sesame)'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-6116940338596759039</id><published>2009-09-11T02:35:00.019+02:00</published><updated>2009-09-11T03:47:38.368+02:00</updated><title type='text'>Grails: Multiple datasources without GORM</title><content type='html'>Who's playing around with Grails knows about GORM. GORM is Grails' object relational mapping (ORM) implementation. GORM is built on the top of Hibernate and enables persistence. The configuration of the database used for persistence is in the file &lt;span style="font-style: italic;"&gt;grails-app/conf/DataSource.groovy&lt;/span&gt;. The application might need to access other databases for reasons other than persistence. It might be necessary to distinguish different sources for development, test or production (the Grails standard environments). In this case it is possible to leverage Spring creating the file &lt;span style="font-style: italic;"&gt;grails-app/conf/srping/resources.groovy with a content similar to the following, which is setting up the connection to the Virtuoso triple store:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;import org.apache.commons.dbcp.BasicDataSource&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;* @author Paolo Ciccarese&lt;br /&gt;*&lt;br /&gt;* The virtuoso data source has been defined here to not&lt;br /&gt;* interfere with the GORM datasource in the file&lt;br /&gt;* grails-app/conf/DataSource.groovy&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;beans = {&lt;br /&gt;// Virtuoso triple store&lt;br /&gt;virtuosoDataSourceDevelopment(BasicDataSource) {&lt;br /&gt;   driverClassName = "virtuoso.jdbc3.Driver"&lt;br /&gt;   url="jdbc:virtuoso://localhost:1111"&lt;br /&gt;   username="dba"&lt;br /&gt;   password="dba"&lt;br /&gt;}&lt;br /&gt;virtuosoDataSourceTest(BasicDataSource) {&lt;br /&gt;   driverClassName = "virtuoso.jdbc3.Driver"&lt;br /&gt;   url="jdbc:virtuoso://blah.org:1111"&lt;br /&gt;   username="dba"&lt;br /&gt;   password="dba"&lt;br /&gt;}&lt;br /&gt;virtuosoDataSourceProduction(BasicDataSource) {&lt;br /&gt;    // Here the details of the production data source&lt;br /&gt;}&lt;br /&gt;}&lt;/pre&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="font-style: italic;"&gt;BasicDataSource &lt;/span&gt;&lt;span&gt;has been used as it guarantees connection pooling. In some examples, instead of that class you can find &lt;a href="http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/jdbc/datasource/DriverManagerDataSource.html"&gt;&lt;span style="font-style: italic;"&gt;org.springframework.jdbc.datasource.DriverManagerDataSource&lt;/span&gt;&lt;/a&gt; . Reading the documentation: &lt;/span&gt;&lt;/span&gt;&lt;b style="font-style: italic;"&gt;This class is not an actual connection pool; it does not actually  pool Connections.&lt;/b&gt;&lt;span style="font-style: italic;"&gt; It just serves as simple replacement for a full-blown  connection pool, implementing the same standard interface, but creating new  Connections on every call&lt;/span&gt;. &lt;span&gt;&lt;span&gt;This might create problems with Virtuoso in the case of numerous queries. Once we defined the data sources it is possible to define a service (&lt;span style="font-weight: bold;"&gt;&gt; grails create-service&lt;/span&gt;) for providing the right one according to the current environment:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;class SparqlService {&lt;br /&gt;&lt;br /&gt; def transactional = false&lt;br /&gt;&lt;br /&gt; def virtuosoDataSourceProduction&lt;br /&gt; def virtuosoDataSourceDevelopment&lt;br /&gt; def virtuosoDataSourceTest&lt;br /&gt;&lt;br /&gt; private static final String TEST = "test"&lt;br /&gt;&lt;br /&gt; def getDataSource() {&lt;br /&gt;     if(grails.util.GrailsUtil.isDevelopmentEnv())&lt;br /&gt;         return virtuosoDataSourceDevelopment&lt;br /&gt;     else if(grails.util.GrailsUtil.getEnvironment()==TEST)&lt;br /&gt;         return virtuosoDataSourceTest&lt;br /&gt;     else&lt;br /&gt;         return virtuosoDataSourceProduction&lt;br /&gt; }&lt;br /&gt;}&lt;/pre&gt; Now it will be possible, for other services to use the one just defined. Something like:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;class SparqlQueryService {&lt;br /&gt; &lt;br /&gt;     def sparqlService&lt;br /&gt;&lt;br /&gt;     boolean transactional = false&lt;br /&gt; &lt;br /&gt;     public List&amp;lt;Map&amp;lt;String, Object&amp;gt;&amp;gt; getSparqlResultRowMaps(String query){&lt;br /&gt;         log.info("Running query: " + query);&lt;br /&gt;         JdbcTemplate jdbcTemplate = new JdbcTemplate(&lt;span style="font-weight: bold;"&gt;sparqlService.getDataSource()&lt;/span&gt;)&lt;br /&gt;        .....&lt;br /&gt;         return results;&lt;br /&gt;     }&lt;br /&gt;&lt;br /&gt;....&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;Where the &lt;span style="font-style: italic;"&gt;sparqlService&lt;/span&gt; is injected. Thus when a query is needed is sufficient to refer to &lt;span style="font-style: italic;"&gt;sparqlQueryService&lt;/span&gt;, which will take care of selecting the right datasource.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-6116940338596759039?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/6116940338596759039/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=6116940338596759039' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/6116940338596759039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/6116940338596759039'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2009/09/grails-multiple-datasources-without.html' title='Grails: Multiple datasources without GORM'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-2741905702078987343</id><published>2009-09-04T17:17:00.006+02:00</published><updated>2009-09-04T22:36:55.830+02:00</updated><title type='text'>The Grails plugin class</title><content type='html'>&lt;p class="zemanta-img" style="margin: 1em; float: right; display: block; width: 290px;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Image:Grails_grails_logo.jpg"&gt;&lt;img src="http://upload.wikimedia.org/wikipedia/en/e/e1/Grails_grails_logo.jpg" alt="Grails" style="border: medium none ; display: block;" height="84" width="280" /&gt;&lt;/a&gt;&lt;span class="zemanta-img-attribution"&gt;Image via &lt;a href="http://en.wikipedia.org/wiki/Image:Grails_grails_logo.jpg"&gt;Wikipedia&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;/blockquote&gt;After creating the plugin structure one thing you can do is to edit the Grails plugin class. The grails plugin class, by default, looks something like this:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;class UtilsGrailsPlugin {&lt;br /&gt;  // the plugin version&lt;br /&gt;  def version = "0.1"&lt;br /&gt;  // the version or versions of Grails the plugin is designed for&lt;br /&gt;  def grailsVersion = "1.1.1 &gt; *"&lt;br /&gt;  // the other plugins this plugin depends on&lt;br /&gt;  def dependsOn = [:]&lt;br /&gt;  // resources that are excluded from plugin packaging&lt;br /&gt;  def pluginExcludes = ["grails-app/views/error.gsp"]&lt;br /&gt;&lt;br /&gt;  // TODO Fill in these fields&lt;br /&gt;  def author = "Your name"&lt;br /&gt;  def authorEmail = ""&lt;br /&gt;  def title = "Plugin summary/headline"&lt;br /&gt;  def description = '''\\&lt;br /&gt;Brief description of the plugin.&lt;br /&gt;'''&lt;br /&gt;&lt;br /&gt;  // URL to the plugin's documentation&lt;br /&gt;  def documentation = "http://grails.org/Utils+Plugin"&lt;br /&gt;&lt;br /&gt;....&lt;br /&gt;}&lt;/blockquote&gt;As we are writing our first plugin there are not dependencies we want to define. We will simply fill out some details:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt; def author = "Paolo Ciccarese"&lt;br /&gt;  def authorEmail = "paolo.ciccarese@gmail.com"&lt;br /&gt;  def title = "Utilities for vocabularies/ontologies management"&lt;br /&gt;  def description = '''\\&lt;br /&gt;  Utilities for vocabularies/ontologies management&lt;br /&gt;  '''&lt;/blockquote&gt;You might want also to define the location of the documentation. This file will be used to generate the plugin package when needed. It is sufficient to be in the root directory of the plugin and type:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&gt; grails package-plugin&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This will create a grails-utils-0.1.zip file that can be then installed by other grails plugins/applications. To install it will be sufficient to be in the new application/plugin root directory and to type&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&gt; grails install-plugin grails-utils-0.1.zip&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;But before doing this, you probably have to write some code that will provide actual utilities.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"&gt;&lt;a class="zemanta-pixie-a" href="http://reblog.zemanta.com/zemified/708200f0-7606-4d3f-9754-60baac9cff37/" title="Reblog this post [with Zemanta]"&gt;&lt;img style="border: medium none ; float: right;" class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_e.png?x-id=708200f0-7606-4d3f-9754-60baac9cff37" alt="Reblog this post [with Zemanta]" /&gt;&lt;/a&gt;&lt;span class="zem-script more-related pretty-attribution"&gt;&lt;script type="text/javascript" src="http://static.zemanta.com/readside/loader.js" defer="defer"&gt;&lt;/script&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-2741905702078987343?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/2741905702078987343/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=2741905702078987343' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/2741905702078987343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/2741905702078987343'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2009/09/grails-plugin-class.html' title='The Grails plugin class'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-1091089957719027996</id><published>2009-09-04T03:54:00.038+02:00</published><updated>2009-09-04T17:15:15.989+02:00</updated><title type='text'>A few mins with Grails (Creating a plugin)</title><content type='html'>&lt;p class="zemanta-img" style="margin: 1em; float: right; display: block; width: 290px;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Image:Grails_grails_logo.jpg"&gt;&lt;img src="http://upload.wikimedia.org/wikipedia/en/e/e1/Grails_grails_logo.jpg" alt="Grails" style="border: medium none ; display: block;" height="84" width="280" /&gt;&lt;/a&gt;&lt;span class="zemanta-img-attribution"&gt;Image via &lt;a href="http://en.wikipedia.org/wiki/Image:Grails_grails_logo.jpg"&gt;Wikipedia&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;Lately I found myself playing around with Grails and I've been appreciating right away the plugins mechanism (&lt;a href="http://grails.org/Creating+Plugins"&gt;Grails website: creating a Plugin&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;With a simple:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&gt; grails create-plugin Utils&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;or even with a simpler (the script will ask you to specify the name of the plugin later on):&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&gt; grails create-plugin&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;you will be able to generate the structure of a Grails plugin that you will notice is really similar to the structure of a Grails application (in italic the directories):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;.classpath&lt;/span&gt; -&gt; Eclipse .classpath file. It includes all the references to the folders in the project that are going to be in the classpath and all the references to the libraries for making your grails project run. The libraries are expressed through the GRAILS_HOME variable under the form GRAILS_HOME/dist/grails-web-1.1.1.jar. The directories that are included in the classpath are typically (you can detect them easily in Eclipse if you import the project just created as "existing project"):&lt;br /&gt;&lt;ul&gt;&lt;li&gt;src/java&lt;br /&gt;&lt;/li&gt;&lt;li&gt;src/groovy&lt;/li&gt;&lt;li&gt;grails-app/conf&lt;/li&gt;&lt;li&gt;grails-app/controllers&lt;/li&gt;&lt;li&gt;grails-app/domain&lt;/li&gt;&lt;li&gt;grails-app/services&lt;/li&gt;&lt;li&gt;grails-app/taglib&lt;/li&gt;&lt;li&gt;test/integration&lt;/li&gt;&lt;li&gt;test/unit&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;.project&lt;/span&gt; -&gt; Eclipse .project file&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;.settings &lt;/span&gt;-&gt; Eclipse .settings directory&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Utils-test.launch&lt;/span&gt; -&gt; can be used to run the unit tests&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Utils.launch&lt;/span&gt; -&gt; can be used to run the application&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Utils.tmproj&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;UtilsGrailsPlugin.groovy&lt;/span&gt; -&gt; The plugin class defines the version of the plugin and optionally various hooks into plugin extension points.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;application.properties&lt;/span&gt; -&gt; Contains a few lines to describe the details of the plugin/application:&lt;br /&gt;&lt;blockquote&gt;#utf-8&lt;br /&gt;#Fri Sep 04 10:12:01 EDT 2009&lt;br /&gt;app.version=0.1&lt;br /&gt;app.servlet.version=2.4&lt;br /&gt;app.grails.version=1.1.1&lt;br /&gt;app.name=Utils&lt;/blockquote&gt;&lt;span style="font-weight: bold;"&gt;build.xml&lt;/span&gt; -&gt; It is an Ant file that contains a set of targets, allowing to resolve dependencies declared in the Ivy file, to compile and run the sample code, produce a report of dependency resolution, and clean the cache or the project. Ivy is a subproject of Ant.&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;grails-app&lt;/span&gt; -&gt; directory containing the main components of a Grails application/plugin: controllers, services... (see classpath)&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ivy.xml&lt;/span&gt; -&gt;  Ivy  file containing the description of the dependencies of a module. Ivy (&lt;a href="http://ant.apache.org/ivy/"&gt;Ivy website&lt;/a&gt;) supports  dependency resolution (grails does not support Maven).&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ivysettings.xml&lt;/span&gt; -&gt; file for Ivy configuration&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;lib&lt;/span&gt; -&gt; directory containing the list of libraries for running the application&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;scripts&lt;/span&gt; -&gt; Grails scripts&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;src&lt;/span&gt; -&gt; directory with the source codes in both java and groovy (see classpath)&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;test&lt;/span&gt; -&gt; directory collecting all &lt;a href="http://grails.org/Unit+Testing"&gt;Grails unit tests&lt;/a&gt;: Grails supports the concepts of unit and integration testing. Unit testing is for small focused, fast loading tests that don't load supporting components. Integration testing is for tests that load the surrounding environment (it supports injection).&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;web-app&lt;/span&gt; -&gt; contains the web components of the Grails project&lt;br /&gt;&lt;br /&gt; &lt;div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"&gt;&lt;a class="zemanta-pixie-a" href="http://reblog.zemanta.com/zemified/65b094e1-40e1-425e-8d7c-66947e75302b/" title="Reblog this post [with Zemanta]"&gt;&lt;img style="border: medium none ; float: right;" class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_e.png?x-id=65b094e1-40e1-425e-8d7c-66947e75302b" alt="Reblog this post [with Zemanta]" /&gt;&lt;/a&gt;&lt;span class="zem-script more-related pretty-attribution"&gt;&lt;script type="text/javascript" src="http://static.zemanta.com/readside/loader.js" defer="defer"&gt;&lt;/script&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-1091089957719027996?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/1091089957719027996/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=1091089957719027996' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/1091089957719027996'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/1091089957719027996'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2009/09/few-mins-with-grails-creating-plugin.html' title='A few mins with Grails (Creating a plugin)'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-1587055909462792214</id><published>2008-12-31T17:23:00.050+01:00</published><updated>2009-01-11T23:08:16.800+01:00</updated><title type='text'>Moving towards the SWAN Collections Ontology [2]</title><content type='html'>The idea of reasoning with sequential structures in OWL-DL is  appealing. However, as already mentioned, we cannot use the RDF vocabulary in OWL-DL.&lt;br /&gt;&lt;br /&gt;Drummond et al. [1] proposed a way of representing sequential structures in OWL-DL. Analyzing the work of Hirsh &amp;amp; Kudenko [2]  Drummond argued that "&lt;span style="font-style: italic;"&gt;their representation requires extensive rewriting, the relation of the resulting structures to the original lists is not intuitive and, more importantly, the resulting structures grow as the square of the length of the list&lt;/span&gt;". Then, he describes a general list pattern, an intuitive approach related to that suggested by Hayes [3] and incorporated in the Semantic Web Best Practice Working Group’s note on n-ary relations.&lt;br /&gt;&lt;br /&gt;The list pattern works as follow:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_ERBd_3h53JM/SVvC_Pb9qRI/AAAAAAAAACQ/l4Iqdl3_lRw/s1600-h/Picture+35.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 110px;" src="http://3.bp.blogspot.com/_ERBd_3h53JM/SVvC_Pb9qRI/AAAAAAAAACQ/l4Iqdl3_lRw/s400/Picture+35.png" alt="" id="BLOGGER_PHOTO_ID_5286032979380775186" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:100%;"&gt;Each item is held in a “cell” (OW&lt;/span&gt;&lt;span style="font-size:100%;"&gt;LList); each cell has 2 pointers, one to a head (hasContents - functional) and one to the tail cells (hasNext - functional); the end of the list is indicated by a terminator (EmptyList) which also serves to represent the empty list. A transitive property, isFollowedBy, as a super-property of hasNext as been defined as well. In other words the members of any list are the contents of the first element plus the contents of all of the following elements. A separate OWL vocabulary has been defined as the RDF vocabulary cannot be used in OWL-DL.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Through the transitive property followedBy it is possible to ask things like: give me all the items that are followedBy "AC" for instance and it doesn't matter what is in between the item and the sequence itself.&lt;br /&gt;&lt;br /&gt;In &lt;a href="http://www.co-ode.org/resources/reference/manchester_syntax/"&gt;Manchester Syntax&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_ERBd_3h53JM/SVvBk56Z5CI/AAAAAAAAACI/iNTuWuvsJOw/s1600-h/Picture+36.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 270px;" src="http://2.bp.blogspot.com/_ERBd_3h53JM/SVvBk56Z5CI/AAAAAAAAACI/iNTuWuvsJOw/s400/Picture+36.png" alt="" id="BLOGGER_PHOTO_ID_5286031427414647842" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;OWLList can express:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ERBd_3h53JM/SVvAq_Ws-kI/AAAAAAAAACA/kp1fl-zjCiM/s1600-h/Picture+37.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 235px;" src="http://1.bp.blogspot.com/_ERBd_3h53JM/SVvAq_Ws-kI/AAAAAAAAACA/kp1fl-zjCiM/s400/Picture+37.png" alt="" id="BLOGGER_PHOTO_ID_5286030432443103810" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;For instance for the pattern (A*):&lt;br /&gt;&lt;br /&gt;List_only_As --&gt; List AND&lt;br /&gt;    hasContents ONLY A AND&lt;br /&gt;    isFollowedBy ONLY (List AND hasContents ONLY A)&lt;br /&gt;&lt;br /&gt;Still, in OWL-DL there are a bunch of constraints that cannot be defined (and I would suggest to read the paper for the complete list).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.co-ode.org/ontologies/lists/2008/09/11/"&gt;The list ontology page&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[1] Nicholas Drummond, Alan Rector, Robert Stevens, Georgina Moulton, Matthew Horridge, Hai Wang and Julian Sedenberg (2006). &lt;i&gt;Putting OWL in Order:  Paterns for sequences in OWL.&lt;/i&gt; OWL Experiences and Directions (OWLED 2006), Athens, Georgia, USA.&lt;br /&gt;[2] Hirsh, H. and D. Kudenko. Representing Sequences in Description Logics. in Fourteenth National Conference on Artificial Intelligence. 1997.&lt;br /&gt;[3] Noy, N.F. and A. Rector, N-ary relations. 2004, Editors Draft, Semantic Web Best Practices Working Group, W3C.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-1587055909462792214?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/1587055909462792214/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=1587055909462792214' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/1587055909462792214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/1587055909462792214'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2008/12/moving-towards-swan-collections_31.html' title='Moving towards the SWAN Collections Ontology [2]'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_ERBd_3h53JM/SVvC_Pb9qRI/AAAAAAAAACQ/l4Iqdl3_lRw/s72-c/Picture+35.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-226002907444058676</id><published>2008-12-30T21:49:00.068+01:00</published><updated>2009-01-12T03:37:28.382+01:00</updated><title type='text'>Moving towards the SWAN Collections Ontology [1]</title><content type='html'>&lt;span style="font-weight: bold;font-size:130%;" &gt;RDF Containers&lt;/span&gt;&lt;br /&gt;RDF allows the usage of three kinds of containers:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;rdf:Bag&lt;/span&gt; - A Bag represents  a group of resources or literals, possibly including duplicate members, where there is no significance in the order of the members. For example, a Bag might be used to describe a group of part numbers in which the order of entry or processing of the part numbers does not matter.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;rdf:Seq&lt;/span&gt; - A Sequence or Seq represents a group of resources or literals, possibly including duplicate members, where the order of the members is significant. For example, a Sequence might be used to describe a group that must be maintained in alphabetical order.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;rdf:Alt&lt;/span&gt; - An Alternative or Alt represents a group of resources or literals that are alternatives (typically for a single value of a property). For example, an Alt might be used to describe alternative language translations for the title of a book, or to describe a list of alternative Internet sites at which a resource might be found. An application using a property whose value is an Alt container should be aware that it can choose any one of the members of the group as appropriate. &lt;/li&gt;&lt;/ul&gt;For example, a statement about "The resolution was approved by the Rules Committee, having members Fred, Wilma, and Dino" will have the form in triples:&lt;br /&gt;&lt;br /&gt;ex:resolution       exterms:approvedBy   ex:rulesCommittee .&lt;br /&gt;ex:rulesCommittee   rdf:type             rdf:Bag .&lt;br /&gt;ex:rulesCommittee   rdf:_1                ex:Fred .&lt;br /&gt;ex:rulesCommittee   rdf:_2               ex:Wilma .&lt;br /&gt;ex:rulesCommittee   rdf:_3               ex:Dino .&lt;br /&gt;&lt;br /&gt;and this is much better than:&lt;br /&gt;&lt;br /&gt;ex:resolution   exterms:approvedBy   ex:Fred .&lt;br /&gt;ex:resolution   exterms:approvedBy   ex:Wilma .&lt;br /&gt;ex:resolution   exterms:approvedBy   ex:Dino .&lt;br /&gt;&lt;br /&gt;since these statements say that each member individually approved the resolution.&lt;br /&gt;&lt;br /&gt;For further examples &lt;a href="http://www.w3.org/TR/REC-rdf-syntax/#containers"&gt;RDF Primer&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;But containers only say that certain identified resources are members; they do not say that other members do not exist. There is no way to exclude that there might be another graph somewhere that describes additional members.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;RDF Collections&lt;/span&gt;&lt;br /&gt;RDF provides support for describing groups containing only the specified members, in the form of RDF collections. An RDF collection is a group of things represented as a list structure in the RDF graph.&lt;br /&gt;&lt;br /&gt;in RDF/XML a collection is something like this:&lt;br /&gt;&lt;span style="font-style: italic;"&gt;   &lt;/span&gt;&lt;pre&gt;&lt;span&gt;&lt;span style="font-style: italic;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;rdf:Description rdf:about="http://e.org/&lt;span&gt;family/349&lt;/span&gt;"&lt;span&gt;&lt;span style="font-style: italic;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;      &lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="font-style: italic;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;s:familyMembers rdf:parseType="Collection"&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span style="font-style: italic;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style="font-style: italic;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;rdf:Description rdf:about="http://e.org/person/Paolo"/&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span style="font-style: italic;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style="font-style: italic;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;rdf:Description rdf:about="http://e.org/person/Emanuele"/&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span style="font-style: italic;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style="font-style: italic;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;rdf:Description rdf:about="http://e.org/person/Maria"/&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span style="font-style: italic;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style="font-style: italic;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;rdf:Description rdf:about="http://e.org/person/Franco"/&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span style="font-style: italic;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style="font-style: italic;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;/s:familyMembers&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span style="font-style: italic;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style="font-style: italic;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;/rdf:Description&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span style="font-style: italic;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;this can also be written in RDF/XML by writing out the same triples         (without using &lt;code&gt;rdf:parseType="Collection"&lt;/code&gt;) using the          collection vocabulary:&lt;pre&gt;&lt;span style="font-style: italic;"&gt;&amp;lt;&lt;/span&gt;rdf:Description rdf:about="&lt;span&gt;http://e.org/family/349&lt;/span&gt;"&lt;span style="font-style: italic;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;   &amp;lt;&lt;/span&gt;s:familyMembers rdf:nodeID="sch1"/&lt;span style="font-style: italic;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&amp;lt;&lt;/span&gt;/rdf:Description&lt;span style="font-style: italic;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&amp;lt;&lt;/span&gt;rdf:Description rdf:nodeID="sch1"&lt;span style="font-style: italic;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;   &lt;/span&gt;&lt;span style="font-style: italic;"&gt;&amp;lt;&lt;/span&gt;rdf:first rdf:resource="http://e.org/person/Paolo"/&lt;span style="font-style: italic;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;   &amp;lt;&lt;/span&gt;rdf:rest rdf:nodeID="sch2"/&lt;span style="font-style: italic;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&amp;lt;&lt;/span&gt;/rdf:Description&lt;span style="font-style: italic;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&amp;lt;&lt;/span&gt;rdf:Description rdf:nodeID="sch2"&lt;span style="font-style: italic;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;   &lt;/span&gt;&lt;span style="font-style: italic;"&gt;&amp;lt;&lt;/span&gt;rdf:first rdf:resource="http://e.org/person/Emanuele"/&lt;span style="font-style: italic;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&amp;lt;&lt;/span&gt;rdf:rest rdf:nodeID="sch3"/&lt;span style="font-style: italic;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&amp;lt;&lt;/span&gt;/rdf:Description&lt;span style="font-style: italic;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&amp;lt;&lt;/span&gt;rdf:Description rdf:nodeID="sch3"&lt;span style="font-style: italic;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;   &amp;lt;&lt;/span&gt;rdf:first rdf:resource="http://e.org/person/Maria"/&lt;span style="font-style: italic;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;   &amp;lt;&lt;/span&gt;rdf:rest rdf:nodeID="sch4"/&lt;span style="font-style: italic;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&amp;lt;&lt;/span&gt;/rdf:Description&lt;span style="font-style: italic;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&amp;lt;&lt;/span&gt;rdf:Description rdf:nodeID="sch4"&lt;span style="font-style: italic;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;   &amp;lt;&lt;/span&gt;rdf:first rdf:resource="http://e.org/person/Franco"/&lt;span style="font-style: italic;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;   &amp;lt;&lt;/span&gt;rdf:rest rdf:resource=&lt;br /&gt;"http://www.w3.org/1999/02/22-rdf-syntax-ns#nil"/&lt;span style="font-style: italic;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&amp;lt;&lt;/span&gt;/rdf:Description&lt;span style="font-style: italic;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;For more examples &lt;a href="http://www.w3.org/TR/REC-rdf-syntax/#collections"&gt;RDF Primer&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;RDF imposes no "well-formedness" conditions on the use of the collection vocabulary (it is possible, for instance, to define multiple rdf:first elements), thus, RDF applications that require collections to be well-formed should be written to check that the collection vocabulary is being used appropriately, in order to be fully robust. Maybe OWL which can define additional constraints on the structure of RDF graphs, can rule out some of these cases?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;OWL and Ordering&lt;/span&gt;&lt;br /&gt;OWL have no support for ordering, but the natural constructs from the underlying RDF vocabulary (rdf:List and rdf:nil) are unavailable in OWL-DL because they are used in its RDF serialization. In principle, rdf:Seq is not illegal but it depends on lexical ordering and has no logical semantics accessible to a DL classifier. In other terms:  (1) The elements in a container are defined using the relations rdf:_1, rdf:_2, and so on that have no formal definition in RDF. Using them for the purpose of reasoning will require us to define and enforce the properties of these relations. (2) It is not possible to define a container that has elements only of a specific type. (3) For updating a specific element in a container in a remote source, one is forced to transmit the whole container. (4) It is not possible to associate provenance information with the elements in a container [1].&lt;br /&gt;&lt;br /&gt;But OWL has greater expressivity than RDF (with constructs such as transitive properties) and reasoning capabilities (for checking consistency and inferring subsumption). Thus, the idea of reasoning with sequential structures in OWL-DL  looks appealing.&lt;br /&gt;&lt;br /&gt;[1] Vinay K. Chaudhri, Bill Jarrold, John Pacheco. Exporting Knowledge Bases into OWL. OWL Experiences and Directions (OWLED 2006), Athens, Georgia, USA.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-226002907444058676?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/226002907444058676/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=226002907444058676' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/226002907444058676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/226002907444058676'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2008/12/moving-towards-swan-collections.html' title='Moving towards the SWAN Collections Ontology [1]'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-8635315476178961364</id><published>2008-11-21T21:37:00.006+01:00</published><updated>2008-11-21T22:08:39.608+01:00</updated><title type='text'>SWAN Ontology v. 1.2 almost ready to go</title><content type='html'>In the last months, I've been busy in developing the &lt;a href="http://swan.mindinformatics.org/ontology.html"&gt;new version of the ontology&lt;/a&gt; [SWAN Ontology] that represents the "backbone" of the &lt;a href="http://swan.mindinformatics.org/"&gt;SWAN project&lt;/a&gt;. In this iteration, I had two major goals in mind: modularity and provenance. The new ontology is composed by a set of modules, actually the SWAN ontology consists of a collection of ontologies. I think this is an important step for several reasons:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;first of all the SWAN ontology is growing in size. Modules can help in managing the increasing complexity&lt;/li&gt;&lt;li&gt;modules can improve the learning process of people that want to approach our ontology for modeling scientific discourse or simply for reusing a part of it&lt;/li&gt;&lt;li&gt;defining modules helped me in thinking a little bit more&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://swan.mindinformatics.org/imgs/discourse-elements-ontology.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 435px; height: 140px;" src="http://swan.mindinformatics.org/imgs/discourse-elements-ontology.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;The architecture of the SWAN ontology release candidate&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As additional feature I was also thinking to provide sub-modules for increasing reuse without asking potential users to write their own subset of the SWAN ontology. Thus, for instance, the Agents ontology is split in different modules that can include or not provenance and/or collections. This is because I assume that not everybody wants to deal with the tedious ordered lists and not anybody needs to define provenance the level we need.&lt;br /&gt;&lt;br /&gt;Provenance is one of the major aspects in the semantic web world that we are trying to build with SWAN. Our application is mashing up data coming from different sources and we would like to be able to export the new knowledge product giving credit to the original data provider and declaring which piece of software performed the conversion of such data into our format.&lt;br /&gt;&lt;br /&gt;I will speak more in detail about provenance in my next post.&lt;br /&gt;&lt;br /&gt;[SWAN Ontology] Ciccarese P, Wu E, Kinoshita J, Wong G, Ocana M, Ruttenberg A, Clark T. &lt;strong&gt;The SWAN Biomedical Discourse Ontology&lt;/strong&gt;. Journal of Biomedical Informatics, in press. &lt;a href="http://www.ncbi.nlm.nih.gov/pubmed/18583197" target="_blank"&gt;PMID: 18583197&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-8635315476178961364?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/8635315476178961364/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=8635315476178961364' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/8635315476178961364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/8635315476178961364'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2008/11/swan-ontology-v-12-almost-ready-to-go.html' title='SWAN Ontology v. 1.2 almost ready to go'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-456759033099002466</id><published>2008-03-05T19:20:00.014+01:00</published><updated>2008-04-24T03:32:25.077+02:00</updated><title type='text'>SWAN - Semantic Web Applications in Neuromedicine [2]</title><content type='html'>Thus, SWAN is not a like Wikipedia because several "hypotheses" (consistent or inconsistent) can co-exist. to be more precise I would say that the SWAN ontology is an ontology for modeling scientific discourse. Thus, I would define discourse elements as key entities in the SWAN ecosystem. They represent the hubs of the scientific discourse, or in general of the discourse.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_ERBd_3h53JM/SA_M6_LmgfI/AAAAAAAAAA0/IwlIbEpV6Es/s1600-h/swan-walsh-hypothesis.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 295px; height: 221px;" src="http://3.bp.blogspot.com/_ERBd_3h53JM/SA_M6_LmgfI/AAAAAAAAAA0/IwlIbEpV6Es/s320/swan-walsh-hypothesis.png" alt="" id="BLOGGER_PHOTO_ID_5192594209146044914" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic;"&gt;Figure 1 - Walsh Hypothesis in the SWAN browser&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Looking at fig. 1 it is possible to see the title of the Hypothesis, a description, the authors of such hypothesis (in this case the authors are the authors of the journal article the hypothesis has been derived from). Then, after the journal article used as source of the informatin related to the hypothesis we have the contained discourse elements. Right, a hypothesis can contain a list of discourse elements. In this case we have a list of claims (scientifically proved discourse elements) but it is possible to have in the discourse elements list other hypothesis, research questions or comments...&lt;br /&gt;&lt;br /&gt;The SWAN Team: Tim Clark, June Kinoshita, Paolo Ciccarese, Marco Ocana, Gwen Wong, Elizabeth Wu.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-456759033099002466?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/456759033099002466/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=456759033099002466' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/456759033099002466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/456759033099002466'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2008/03/swan-semantic-web-applications-in.html' title='SWAN - Semantic Web Applications in Neuromedicine [2]'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_ERBd_3h53JM/SA_M6_LmgfI/AAAAAAAAAA0/IwlIbEpV6Es/s72-c/swan-walsh-hypothesis.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-5288182398169271932</id><published>2008-03-03T21:16:00.019+01:00</published><updated>2008-03-12T21:13:50.478+01:00</updated><title type='text'>SWAN - Semantic Web Applications in Neuromedicine [1]</title><content type='html'>In the last months, Marco and I have been coding  for the SWAN project for Mass General Hospital (Neurology Dept) and Harvard Medical School. The SWAN project is the reason I moved to Boston to work. It is not easy to explain in a few words what SWAN (that stands for Semantic Web Applications in Neuromedicine) does (or it is supposed to do). I could say that 'we are using Semantic Web technologies with the idea of helping the researchers' life' but I understand that this is not really useful.&lt;br /&gt;&lt;br /&gt;I'll try to explain it better with an example. When I was a student, I used to create summaries of the lessons integrating my notes with what I was finding in some books. I was using obviously (I am not that young anymore) paper sheets, colors, drawings... and so on. I had my formalism for stressing a definition, a theorem a short summary and whatsoever. It was efficient, I could easily remember the things (I have visual memory) and it was faster than going through the book again and again. This was perfect for a single lesson. But what was happening with an entire year of lectures? With different topics somehow connected each others? Well, I tried to update the things but it was hard and everything was getting terribly messy. At that time, the word processors were really poor and crispy. Now we can think of organizing the things in some electronic documents... better we can use a wiki where several students can cooperate to build faster with less effort. Everybody knows wikipedia right? Nice, we have wiki tools, we can decide our formalism, the meaning of the colors... this works if we have "one truth".  Let's say I want to create in Wikipedia a page about a politician and I really dislike him/her (something that occurs often to me). I would probably be aggressive and biased. Somebody else could have a different perspective on the same person... this needs a mediation and rules to follow.&lt;br /&gt;&lt;br /&gt;Now, the same perspective can be true in science. When we have hypothesis these are still not confirmed facts. Scientists need to prove them and it is normal to have disagreement. Disagreement is part of the scientific process (and as we are not in the Middle Ages we don't risk our life saying something 'different'... I guess). In science disagreement can be a real value.&lt;br /&gt;&lt;br /&gt;SWAN is not Wikipedia, it is in some perspective the opposite of it. In SWAN, several 'truths' or better 'hypotheses' (consistent or not) can exist at the same time... inconsistencies can be both declared and inferred (nice uh?). In SWAN we can build the map of science (well, a part of it)... (TO BE CONTINUED)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-5288182398169271932?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/5288182398169271932/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=5288182398169271932' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/5288182398169271932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/5288182398169271932'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2008/03/swan-semantic-applications-in.html' title='SWAN - Semantic Web Applications in Neuromedicine [1]'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-8466167265293330006</id><published>2008-02-14T21:15:00.006+01:00</published><updated>2008-02-16T20:52:39.697+01:00</updated><title type='text'>Classes which are things and classes 'about' things</title><content type='html'>One of the most interesting distinctions that I keep always in mind when I create an ontology is what is representing a &lt;span style="font-weight: bold;"&gt;'real thing'&lt;/span&gt; and what is &lt;span style="font-weight: bold;"&gt;'talking about a real thing'&lt;/span&gt;. Let's consider an example related to bioinformatics. I want to create an ontology which is modeling proteins. Nowadays there are different sources where we can find information about proteins. If we are building a system performing data integration, we probably don't want to copy all the data belonging to those sources in our knowledge base. It is more correct to build references, sort of records that are pointing to the original source when the user/system wants to know more. What we are building are records, entities that 'talk about' real things like proteins. Vice versa, if we want to provide content about proteins (i.e. providing proteins variants) we would probably model the real things, the actual proteins. It doesn't really make sense to say that a record 'hasVariant' another record. Maybe a record 'refersToVariantRecord' or something like that.&lt;br /&gt;&lt;br /&gt;But why all this? Well, this is helping in building the models. Let's say that I want to define a 'authoredBy' property for a scientific article. Now, if I consider the real thing (i.e. the actual article) I can say 'authoredBy' but  if i am building a record of the article (a reference like the ones that PubMed does) and I say 'authoredBy' am I referring to the article or to the record? As ontologies are meant to define semantic.... I guess this is a crucial point.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-8466167265293330006?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/8466167265293330006/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=8466167265293330006' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/8466167265293330006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/8466167265293330006'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2008/02/classes-which-are-things-and-classes.html' title='Classes which are things and classes &apos;about&apos; things'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-1219147192483091464</id><published>2008-02-13T20:34:00.004+01:00</published><updated>2008-02-13T22:47:09.923+01:00</updated><title type='text'>Making ontologies</title><content type='html'>In the last years, I have been creating some ontologies for different purposes. When I started, I've been investigating several languages and I ended up to use RDF (Resource Description Framework). Not really for the expressiveness, that is quite limited, but more because it was possible to find more examples about its usage. It is true, specifications have been published by W3C but still, I believe in examples. Thus, I started creating what I would define &lt;span style="font-weight: bold;"&gt;data schemas&lt;/span&gt; in RDF. The idea was simple and the goal was not to use reasoners but to express something semantically. And for simple things it was ok.&lt;br /&gt;&lt;br /&gt;But when the ontologies started to grow, I started to feel the need of doing &lt;span style="font-weight: bold;"&gt;something better defined&lt;/span&gt;. And it was time for &lt;a href="http://www.w3.org/2004/OWL/"&gt;OWL  (Web Ontology Language)&lt;/a&gt; and reasoners (at least to check consistency not yet to infer classes). Now, if you are doing a pure ontology definition exercise is fine, but when you have to produce real applications I would say "good luck". First, it is really hard to find good exhaustive examples on owl usage. I mean you can find stuff here and there, but nothing well organized and well described. Sure you have the W3C specifications and document but there's no cookbook nor best practice described out there.  Nothing explaining with some examples how to create modular ontologies (ontologies that actually reuse other ontologies not redefining them completely in the very same file) keeping in mind open and close world.&lt;br /&gt;&lt;br /&gt;And when you look at online ontologies, you can find all sort of things (meta classes inserted in a hierarchy of real things classes, consistency failures, terms coming from WordNet used as classes in the hierarchy of real things,  real things and records with no distinctions). It is really hard to learn out of this.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-1219147192483091464?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/1219147192483091464/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=1219147192483091464' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/1219147192483091464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/1219147192483091464'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2008/02/making-ontologies.html' title='Making ontologies'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-6420823772482841431</id><published>2007-12-12T17:26:00.000+01:00</published><updated>2007-12-12T17:38:29.404+01:00</updated><title type='text'>Young guys are growing...</title><content type='html'>On Friday, Bruno Farina and Paolo Mauri are going to take their Master Degree in Computer Science. I'll be present and I have to say that this is a special event for me. I have been mentoring other students before... but the idea that this project become true and available open source is somehow awesome. I am talking about &lt;a href="http://www.jdpf.org"&gt;the JDPF project&lt;/a&gt;. Paolo and Bruno did a great job and this has been (hoping it is also going to be) a  really good learning experience!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-6420823772482841431?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/6420823772482841431/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=6420823772482841431' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/6420823772482841431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/6420823772482841431'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2007/12/young-guys-are-growing.html' title='Young guys are growing...'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-2779203583314841613</id><published>2007-12-05T10:44:00.001+01:00</published><updated>2010-10-10T17:27:12.702+02:00</updated><title type='text'>JDPF (Java Data Processing Framework)</title><content type='html'>JDPF (&lt;a href="http://www.jdpf.org/"&gt;www.jdpf.org&lt;/a&gt;) is a framework for the definition of pipelines/nets for performing data analysis. I've been personally involved many times in the definition of algorithms for doing every sort of data processing (mainly in medical informatics). For this reasons, some time ago, we thought to create something that was able to foster re-usability of data analysis components. And I thought it should have been free, hopefully community driven.&lt;br /&gt;&lt;br /&gt;The first implementation, two years ago, has been done from scratch and it was already giving an idea of the power of such an architecture (pipelines are not a news). Recently with the outstanding work of a couple of students (Bruno Farina and Paolo Mauri) and with the valuable help of Ezio Caffi we decided to move to OSGI technology. Working with OSGI has been really interesting and hard  at the very beginning (at that time the documentation was really skinny). Now, JDPF is composed by a set of core bundles (that are taking care of net loading, validation and running) and a set of classes that can be used to develop new calculation blocks.&lt;br /&gt;&lt;br /&gt;Right, because JDPF is an open architecture upon which you can run your own modules (or re-using the available ones). Let's say for instance that I need to clean some data. I can create my component (right now still editing an xml file,  we are going to publish the visual builder soon) putting together the existing modules:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;the generator able to load data from a file or location over the internet&lt;/li&gt;&lt;li&gt;the range filter able to clip or simply erase all the data that are outside the specific, allowed range&lt;/li&gt;&lt;li&gt;the serializer that is writing the results in a file&lt;/li&gt;&lt;/ul&gt;After the creation of the component (or net) we need to edit a second XML-file that is used to parametrize the previous block. For instance we need to define the range for the filtering, how to read the data and where, how to write the data and where.&lt;br /&gt;&lt;br /&gt;After the creation of these two xml files JDPF is ready to run on your data... no single line of code has been written by the user.&lt;br /&gt;&lt;br /&gt;Of course if you need a new custom block, you need to implement the algorithm. In this case, JDPF helps you in focusing only on that, forgetting the validation and running aspects...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-2779203583314841613?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/2779203583314841613/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=2779203583314841613' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/2779203583314841613'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/2779203583314841613'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2007/12/jdpf-java-data-processing-framework.html' title='JDPF (Java Data Processing Framework)'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-6411897678835674856</id><published>2007-09-17T22:14:00.000+02:00</published><updated>2007-09-17T22:26:23.912+02:00</updated><title type='text'>Creating Tabs Programmatically with Dojo 0.9 [2]</title><content type='html'>If you had a look of the previous post, you probably saw that it was working. But there was at least an error in there.&lt;br /&gt;&lt;br /&gt;&amp;lt;div id="mainTabContainer" dojoType="dijit.layout.TabContainer"&lt;br /&gt;style="float: left; margin-right: 30px; width: 100%;&lt;br /&gt;height: 100%; overflow: hidden"&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&amp;lt;div id="tabs"&gt;&amp;lt;/div&gt;&lt;/span&gt;&lt;br /&gt;&amp;lt;/div&gt;&lt;br /&gt;&lt;br /&gt;I put a div with an id 'tabs'. This is a really bad idea. In fact, even if the tabs are displayed correctly, this is messing up for instance the access by javascript code to those tabs:&lt;br /&gt;&lt;br /&gt;for(var i=this.getChildren().length-1; i&gt;=0; i--) {&lt;br /&gt;   this.tablist.onCloseButtonClick(this.getChildren()[i]);&lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;This code (in my personal tab widget that is an extension of the dojo tab widget - if I will have time I'll post it later), for instance, is not working, as the method getChildren() is returning always and only an element. To get over this problem, instead of declaring a div in the html, I create some divs dynamically, when needed:&lt;br /&gt;&lt;br /&gt;var pane1 = new dijit.layout.ContentPane({ id: 'tab1', title: 'Test tab 1' }, &lt;span style="font-weight: bold;"&gt;dojo.doc.createElement('div')&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;and the HTML code will become:&lt;br /&gt;&lt;br /&gt;&amp;lt;div id="mainTabContainer" dojoType="dijit.layout.TabContainer"&lt;br /&gt;style="float: left; margin-right: 30px; width: 100%;&lt;br /&gt;height: 100%; overflow: hidden"&gt;&lt;br /&gt;&amp;lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-6411897678835674856?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/6411897678835674856/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=6411897678835674856' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/6411897678835674856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/6411897678835674856'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2007/09/creating-tabs-programmatically-with_17.html' title='Creating Tabs Programmatically with Dojo 0.9 [2]'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-8249139513901923112</id><published>2007-09-13T19:21:00.000+02:00</published><updated>2007-09-13T20:50:58.128+02:00</updated><title type='text'>Creating Tabs Programmatically with Dojo 0.9 [1]</title><content type='html'>I am in the process of moving one of the projects I am working on from Dojo 4.3 to Dojo 0.9. One of the things I need is to develop an extended version of the dijit.TabContainer. First, I need to be able to create the standard components programmatically.&lt;br /&gt;&lt;br /&gt;I created a simple css file like this:&lt;br /&gt;&lt;br /&gt;html, body, #main{   &lt;br /&gt;    width: 100%;    /* make the body expand to fill the visible window */&lt;br /&gt;    height: 100%;&lt;br /&gt;    overflow: hidden;    /* erase window level scrollbars */&lt;br /&gt;    padding: 0 0 0 0;&lt;br /&gt;    margin: 0 0 0 0;&lt;br /&gt;    font-family: Verdana,sans-serif;&lt;br /&gt;    font-size: 11px;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#banner {&lt;br /&gt;    width: auto;&lt;br /&gt;    float: right;&lt;br /&gt;    margin: -1px -4px;&lt;br /&gt;    height: 20px;&lt;br /&gt;    position: absolute;&lt;br /&gt;    z-index: 100;&lt;br /&gt;    right: 10px;&lt;br /&gt;    top: 6px;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;And here's the code to be inserted in the html head (pay attention in adjusting the dojo path according to your dojo installation):&lt;br /&gt;&lt;br /&gt;    &amp;lt;script type="text/javascript" src="../dojo09/dojo/dojo.js"&lt;br /&gt;        djConfig="parseOnLoad: true, isDebug: true"&gt;&amp;lt;/script&gt;&lt;br /&gt;    &amp;lt;script type="text/javascript" src="../dojo09/dijit/dijit.js"&gt;&amp;lt;/script&gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;style type="text/css"&gt;&lt;br /&gt;        @import "../dojo09/dijit/themes/soria/soria.css";&lt;br /&gt;        @import "../dojo09/dojo/dojo.css";&lt;br /&gt;        @import "css/extTabContainerTest.css";&lt;br /&gt;    &amp;lt;/style&gt;&lt;br /&gt;&lt;br /&gt;The html body:&lt;br /&gt;&lt;br /&gt;&amp;lt;body class="soria"&gt;&lt;br /&gt; &amp;lt;div id="banner"&gt;&lt;br /&gt;       &amp;lt;button dojoType="dijit.form.Button" onclick="call_function"&gt;&lt;br /&gt;               Start Programmatic Test!&lt;br /&gt;        &amp;lt;/button&gt;&lt;br /&gt; &amp;lt;/div&gt;&lt;br /&gt; &amp;lt;div id="mainTabContainer" dojoType="dijit.layout.TabContainer"&lt;br /&gt;      style="float: left; margin-right: 30px; width: 100%;&lt;br /&gt;        height: 100%; overflow: hidden"&gt;&lt;br /&gt;        &amp;lt;div id="tabs"&gt;&amp;lt;/div&gt;&lt;br /&gt;    &amp;lt;/div&gt;&lt;br /&gt;&amp;lt;/body&gt;&lt;br /&gt;&lt;br /&gt;Finally the script to be added again in the html head:&lt;br /&gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&gt;&lt;br /&gt;     &lt;br /&gt;        dojo.require("dojo.parser");&lt;br /&gt;        dojo.require("dijit.form.Button");&lt;br /&gt; dojo.require("dijit.layout.ContentPane");&lt;br /&gt; dojo.require("dijit.layout.TabContainer");&lt;br /&gt;  &lt;br /&gt; function call_function() {&lt;br /&gt;  &lt;br /&gt;     var pane1 = new dijit.layout.ContentPane({ id: 'tab1', title: 'Test tab 1' }, dojo.byId('tabs'));&lt;br /&gt;     var pane2 = new dijit.layout.ContentPane({ id: 'tab2', title: 'Test tab 2', closable: true }, dojo.byId('tabs'));&lt;br /&gt;     &lt;br /&gt;     var tabContainer = dijit.byId('mainTabContainer');&lt;br /&gt;     tabContainer.addChild(pane1);&lt;br /&gt;     tabContainer.addChild(pane2);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;&amp;lt;/script&gt; &lt;br /&gt;&lt;br /&gt;Now loading the page and pressing the button on the top right you'll see the two new tabs&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-8249139513901923112?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/8249139513901923112/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=8249139513901923112' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/8249139513901923112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/8249139513901923112'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2007/09/creating-tabs-programmatically-with.html' title='Creating Tabs Programmatically with Dojo 0.9 [1]'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-2054630235638971526</id><published>2007-07-28T19:14:00.000+02:00</published><updated>2007-07-30T20:09:13.788+02:00</updated><title type='text'>Vocabularies for contact details</title><content type='html'>Here's a list of vocabularies that can be used to define people/groups/projects details:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;FOAF - Friend Of A Friend (&lt;a href="http://xmlns.com/foaf/spec/"&gt;Version 0.9 in RDF&lt;/a&gt;): it is the most popular vocabulary for representing people and groups details and relationships. One of the things I've always been curious about, is how FOAF models the names (name, given name, first name, family name, surname are all in the vocabulary in 'testing' status). An interesting reading about it can be found in the &lt;a href="http://rdfweb.org/topic/NamesInFoaf"&gt;FOAF wiki&lt;/a&gt;. Moreover, FOAF includes also classes such as Project (defined as 'a collective endeavour of some kind' keeping in mind that a project can be not only collective but also individual.. uh?) and Document (which is loosely defined as class that represents those things which are, broadly conceived,  'documents'. An Image is a subclass of Document).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;CONTACT (&lt;a href="http://dev.w3.org/cvsweb/2000/10/swap/pim/contact.rdf?rev=1.13&amp;amp;content-type=text/x-cvsweb-markup"&gt;Version 1.13 in RDF&lt;/a&gt;) by Tim Berners Lee. I don't know if you can find a 'human readable' resource on it. You probably have to read the rdf file. It is a quite complete vocabulary for defining all contact details of a person. You can find also properties like "nearest airport" or "mother tongue".&lt;br /&gt;&lt;/li&gt;&lt;li&gt;VCARD (&lt;a href="http://www.w3.org/TR/vcard-rdf"&gt;Version 3.0 in RDF&lt;/a&gt;). vCard is defined by RFC 2426 and this RDF representation provides equivalent functionality to its standard format.&lt;/li&gt;&lt;li&gt;DOAP - Description Of A Project (&lt;a href="http://usefulinc.com/doap/"&gt;website&lt;/a&gt;, &lt;a href="http://usefulinc.com/ns/doap#"&gt;rdf&lt;/a&gt;).&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-2054630235638971526?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/2054630235638971526/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=2054630235638971526' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/2054630235638971526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/2054630235638971526'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2007/07/vocabularies-for-contact-details.html' title='Vocabularies for contact details'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-117090701185931029</id><published>2007-02-08T04:42:00.000+01:00</published><updated>2007-02-08T04:56:51.870+01:00</updated><title type='text'>An invited talk by Prof.Carole Goble on Google Video</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://video.google.com/videoplay?docid=-3855125559250056&amp;hl=en"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/x/blogger/1691/1059/400/758047/carole_goble_keynote.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;In a recent &lt;a href="http://www.hcklab.org/talks-events/2007/january31cambridge.htm"&gt;meeting &lt;/a&gt;with &lt;a href="http://www.cs.man.ac.uk/%7Ecarole/"&gt;Prof. Carole Goble&lt;/a&gt; we discovered, that in her keynotes,  she's using a screenshot (around minute 12) coming from the prototype of the SWAN (Semantic Web Applications in Neuromedicine) application. Which is the project I am working on now for Mass General Hospital and Harvard Medical School.&lt;br /&gt;&lt;a href="http://www.cs.man.ac.uk/%7Ecarole/"&gt;&lt;br /&gt; Carole Goble&lt;/a&gt; is a Professor in the School of Computer Science. She is co-leader of the Information Management Group.   She has a leading role in the Semantic Web, e-Science and the Semantic Grid. She applies technical advances in   knowledge technologies and workflow systems to solve information management problems for Life Scientists and   other scientific disciplines. She was co-PC chair of WWW2006 and is an EIC of the Elsevier’s Journal of Web Semantics.&lt;br /&gt;&lt;br /&gt; She is the director of the large UK e-Science my Grid/Taverna programme of work for workflow based middleware for   Life Scientists (&lt;a href="http://www.mygrid.org.uk/"&gt;http://www.mygrid.org.uk&lt;/a&gt;).   My Grid uses semantic technologies for service and workflow discover   and metadata management of workflow-based experiments. My Grid is now part of the Open Middleware Infrastructure   Institute UK (&lt;a href="http://www.omii.ac.uk/"&gt;http://www.omii.ac.uk&lt;/a&gt;); Carole is the chair of this Institute   (of 40+ software developers), which has been funded to harden and support developments from the UK’s e-Science   programme. She is the co-chair of the Open Grid Forum Semantic Grid Research Group, and the Technical Director   of the EU Strep OntoGrid (http://www.ontogrid.net), which has developed the Semantic-Open Grid Service   Architecture (S-OGSA) framework for Semantic Grids.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-117090701185931029?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/117090701185931029/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=117090701185931029' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/117090701185931029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/117090701185931029'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2007/02/invited-talk-by-profcarole-goble-on.html' title='An invited talk by Prof.Carole Goble on Google Video'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-113448355522540312</id><published>2005-12-13T14:51:00.000+01:00</published><updated>2005-12-13T15:42:32.696+01:00</updated><title type='text'>Estonia and Orkut</title><content type='html'>&lt;span style="font-size:85%;"&gt;Recently I have been to Estonia for a short vacation [1][2]. It is a country of about 1.356.000 citizens located in the north of Europe on the Baltic sea. Well the interesting thing is that Milan (Italy) itself has more inhabitants than whole Estonia and if you look at Orkut community Estonian users are about 0,44% of the total.&lt;br /&gt;&lt;br /&gt;It has been written about "Orkut Brazilian invasion" [3], and  about Estonia numbers in the same article &lt;span style="font-style: italic;font-family:arial;" &gt;"orkut has turned most popular in little Eastern-European country &lt;/span&gt;&lt;a style="font-family: arial; font-style: italic;" href="http://en.wikipedia.org/wiki/Estonia" title="Estonia"&gt;Estonia&lt;/a&gt;&lt;span style="font-style: italic;font-family:arial;" &gt; where a little more than 3% (June 2005) of the &lt;/span&gt;&lt;a style="font-family: arial; font-style: italic;" href="http://en.wikipedia.org/wiki/Population" title="Population"&gt;population&lt;/a&gt;&lt;span style="font-style: italic;font-family:arial;" &gt; are registered orkut users. &lt;/span&gt;&lt;a style="font-family: arial; font-style: italic;" href="http://en.wikipedia.org/wiki/Brazil" title="Brazil"&gt;Brazil&lt;/a&gt;&lt;span style="font-style: italic;font-family:arial;" &gt; holds the second place (about 2.5% of the population in the south east of the country)"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;Estonian users are quite the same of Portugal (0.45%) users... but Portugal (more than 10.000.000 inhabitants) is about 8 times Estonia in terms of citizens. And what about Canada? Canada has about 30.000.000 citizens and in orkut it is around 0.53%.&lt;br /&gt;&lt;br /&gt;Orkut users from Estonia are usually between the age of 17 and 23... thus, given the whole population [4] we have about 140.000 units in that range. A good part of them is in orkut... interesting...&lt;br /&gt;&lt;br /&gt;[1] &lt;a href="http://fotoalbum.hcklab.org/"&gt;Fotoalbum&lt;/a&gt;&lt;br /&gt;[2] &lt;a href="http://vicino.blogspot.com/"&gt;Blog of my trips&lt;/a&gt;&lt;br /&gt;[3] &lt;a href="http://en.wikipedia.org/wiki/Orkut"&gt;Wikipedia&lt;/a&gt;&lt;br /&gt;[4] &lt;a href="http://www.nationmaster.com/country/en/Age_distribution"&gt;Population distribution in Estonia&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-113448355522540312?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/113448355522540312/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=113448355522540312' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/113448355522540312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/113448355522540312'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2005/12/estonia-and-orkut.html' title='Estonia and Orkut'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-113364044300987593</id><published>2005-12-03T20:54:00.000+01:00</published><updated>2005-12-03T21:11:04.060+01:00</updated><title type='text'>Welkin more stylish? [3]</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;This is the second developement step for adding in &lt;a href="http://simile.mit.edu/welkin/"&gt;welkin&lt;/a&gt; icons to resources of a particular rdf type and to resources with the URI starting with a particular substring (you can download it from &lt;a href="http://simile.mit.edu/repository/welkin/trunk/"&gt;svn&lt;/a&gt; of the &lt;a href="http://simile.mit.edu/"&gt;Simile Project&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;It is possible to associate an icon to all the resources with the URI starting with a particular substring:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;1) Click on the "icons" tab on the left of the welkin interface&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;2) Type the substring&lt;br /&gt;3) Check the "regexp" checkbox&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;4) Click on the "Add Element" button&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/1691/1059/1600/welkin02.1.jpg"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/1691/1059/320/welkin02.1.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;The substring of the new element will be displayed in blue (the "type" element will be in black).&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/1691/1059/1600/welkin03.0.jpg"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/1691/1059/320/welkin03.0.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;The final result:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/1691/1059/1600/welkin00.jpg"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/1691/1059/320/welkin00.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-113364044300987593?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/113364044300987593/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=113364044300987593' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/113364044300987593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/113364044300987593'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2005/12/welkin-more-stylish-3.html' title='Welkin more stylish? [3]'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-113313110876114078</id><published>2005-11-27T23:29:00.000+01:00</published><updated>2005-11-27T23:42:31.410+01:00</updated><title type='text'>Welkin more stylish? [2]</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;This is the first developement step for adding in &lt;a href="http://simile.mit.edu/welkin/"&gt;welkin&lt;/a&gt; icons to resources of a particular rdf type&lt;br /&gt;(you can find it on &lt;a href="http://simile.mit.edu/repository/welkin/trunk/"&gt;svn&lt;/a&gt; of the &lt;a href="http://simile.mit.edu/"&gt;Simile Project&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;It is possible to change the icon to be displayed by clicking on the icon image. It is suggested to upload only icons of 16x16 pixels (14x14 maximum) to not have overlapping in the chart.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/1691/1059/1600/welkin03.jpg"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/1691/1059/320/welkin03.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Clicking on the "trash" icon it is possible to delete one of the defined icon element.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/1691/1059/1600/welkin04.jpg"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/1691/1059/320/welkin04.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Double clicking on the uri it is possible to modify an already defined icon element.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/1691/1059/1600/welkin05.jpg"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/1691/1059/320/welkin05.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-113313110876114078?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/113313110876114078/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=113313110876114078' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/113313110876114078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/113313110876114078'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2005/11/welkin-more-stylish-2.html' title='Welkin more stylish? [2]'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-113312932005638035</id><published>2005-11-27T22:14:00.000+01:00</published><updated>2005-11-27T23:24:36.943+01:00</updated><title type='text'>Welkin more stylish? [1]</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;This is the first developement step for adding in &lt;a href="http://simile.mit.edu/welkin/"&gt;welkin&lt;/a&gt; icons to resources of a particular rdf type&lt;br /&gt;(you can find it on &lt;a href="http://simile.mit.edu/repository/welkin/trunk/"&gt;svn&lt;/a&gt; of the &lt;a href="http://simile.mit.edu/"&gt;Simile Project&lt;/a&gt;)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;When a model as been loaded it is possible to associate an icon to all the resources of the specified rdf type:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;1) Click on the "icons" tab on the left of the welkin interface&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;2) Type the URI of the desired type to associate to the icon on the left&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;3) Click on the "Add Element" button&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/1691/1059/1600/welkin01.jpg"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/1691/1059/320/welkin01.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;  &lt;span style="font-family:verdana;"&gt;&lt;br /&gt;After performing the above steps the new icon element will be displayed on the panel on the top left (4). Enabling the icons drawing (5), the resources that are of the specified type will be displayed with the selected icon (6).&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/1691/1059/1600/welkin02.0.jpg"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/1691/1059/320/welkin02.0.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-113312932005638035?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/113312932005638035/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=113312932005638035' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/113312932005638035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/113312932005638035'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2005/11/welkin-more-stylish-1.html' title='Welkin more stylish? [1]'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-113175983779258854</id><published>2005-11-12T02:42:00.000+01:00</published><updated>2005-11-13T23:07:42.850+01:00</updated><title type='text'>Linotype going to be "semantic"</title><content type='html'>Linotype software was written by Stefano Mazzocchi for his own blog [&lt;a href="http://www.betaversion.org/%7Estefano/linotype/"&gt;1&lt;/a&gt;]. It is implemented as a Cocoon application and the original software is available at [&lt;a href="http://simile.mit.edu/repository/linotype/trunk/"&gt;2&lt;/a&gt;].&lt;br /&gt;&lt;br /&gt;Working on the same software Stefano and I started to introduce semantic annotation of the content through rdf/a [&lt;a href="http://www.w3.org/2001/sw/BestPractices/HTML/2005-rdfa-spec"&gt;3&lt;/a&gt;].&lt;br /&gt;&lt;br /&gt;At the location [&lt;a href="http://simile.mit.edu/repository/linotype/branches/rdf-a/"&gt;4&lt;/a&gt;] it is available a branch in which an initial integration&lt;br /&gt;of rdf/a is under developement.&lt;br /&gt;&lt;br /&gt;[1] &lt;a href="http://www.betaversion.org/%7Estefano/linotype/"&gt;http://www.betaversion.org/~stefano/linotype/&lt;/a&gt;&lt;br /&gt;[2] &lt;a href="http://simile.mit.edu/repository/linotype/trunk/"&gt;http://simile.mit.edu/repository/linotype/trunk/&lt;/a&gt;&lt;br /&gt;[3] &lt;a href="http://www.w3.org/2001/sw/BestPractices/HTML/2005-rdfa-spec"&gt;http://www.w3.org/2001/sw/BestPractices/HTML/2005-rdfa-spec&lt;/a&gt;&lt;br /&gt;[4] &lt;a href="http://simile.mit.edu/repository/linotype/branches/rdf-a/"&gt;http://simile.mit.edu/repository/linotype/branches/rdf-a/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-113175983779258854?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/113175983779258854/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=113175983779258854' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/113175983779258854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/113175983779258854'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2005/11/linotype-going-to-be-semantic.html' title='Linotype going to be &quot;semantic&quot;'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12669512.post-113106641835461374</id><published>2005-11-04T01:40:00.000+01:00</published><updated>2005-11-05T01:21:16.333+01:00</updated><title type='text'>Piggy Bank and Solvent... Welcome Semantic Web!</title><content type='html'>Three years ago I started my trip through languages and technologies for ontologies definition and usage. I read several papers on this topic and after a certain period I felt quite sad in realizing the high price to pay to obtain a benefit from "semantic add ons".&lt;br /&gt;&lt;br /&gt;The idea was to define a sort of perfect micro-world where everything has a well defined meaning. And obviously, after a certain period I gave up. At that time &lt;a href="http://jena.sourceforge.net/index.html"&gt;Jena&lt;/a&gt; was something really complex to understand to me and &lt;a href="http://www.openrdf.org/index.jsp"&gt;Sesame&lt;/a&gt; was only a "magic" word. I took a look at the powerful and, in the same time, cryptic KIF formalism, at DAML and &lt;a href="http://www.w3.org/TR/daml+oil-reference"&gt;DAML+OIL&lt;/a&gt;. For some reasons (besically one :D... the serialization in XML was driving me crazy)  &lt;a href="http://www.w3.org/RDF/"&gt;RDF&lt;/a&gt; sounded too weird.&lt;br /&gt;&lt;br /&gt;Then OWL came out and I started reading again... n3... Rio... Sesame. The "Semantic Web" concept was still something not well defined and my impression was that OWL was "a light version" of the old-style ontology languages coming from the AI world...&lt;br /&gt;&lt;br /&gt;I was wrong, look at the &lt;a href="http://simile.mit.edu/"&gt;Simile Project&lt;/a&gt;... with &lt;a href="http://simile.mit.edu/piggy-bank/"&gt;Piggy Bank&lt;/a&gt; and &lt;a href="http://simile.mit.edu/solvent/"&gt;Solvent&lt;/a&gt; ... the "semantic web" started to rock!&lt;br /&gt;&lt;br /&gt;And now it is clear "Semantic Web" is everything you want it to be ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12669512-113106641835461374?l=hcklab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hcklab.blogspot.com/feeds/113106641835461374/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12669512&amp;postID=113106641835461374' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/113106641835461374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12669512/posts/default/113106641835461374'/><link rel='alternate' type='text/html' href='http://hcklab.blogspot.com/2005/11/piggy-bank-and-solvent-welcome.html' title='Piggy Bank and Solvent... Welcome Semantic Web!'/><author><name>Paolo Ciccarese</name><uri>http://www.blogger.com/profile/09511160036561089435</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_ERBd_3h53JM/SVqJQM8xzVI/AAAAAAAAABI/mwL4gWCd_iU/S220/londra2005.jpg'/></author><thr:total>0</thr:total></entry></feed>
