tag:blogger.com,1999:blog-88603058356399768452024-03-04T22:20:47.832-08:00Online Ontology Visualisationa Blog about <a href="http://OntologyOnline.org" title="online ontology visualisation">Ontology Online</a> . orgD Decraenehttp://www.blogger.com/profile/15692633380420867056noreply@blogger.comBlogger24125tag:blogger.com,1999:blog-8860305835639976845.post-33183281532411407372009-02-11T01:49:00.001-08:002009-03-11T03:04:44.592-07:00jOWL 1.0: Faster, Better, Smarter<p>I am very happy to be able to announce the release of <a href="http://jowl.ontologyonline.org">jOWL</a> version 1.0. Over the last months I have been making some significant changes to the underlying engine, enough to warrant a major version change.</p><br /><br /><h4>Faster: Modification of Internal Indices</h4><br /><p>I performed some speed tests on the internal indices jOWL maintains, evaluating the use of native javascript arrays versus associative arrays. It became quite clear that for jOWL purposes, <a href="http://en.wikipedia.org/wiki/Associative_array">associative arrays</a> (key + value) are a whole lot faster to query over. The jOWL indices have been converted into such arrays. Implementation wise, this means that in many cases I see the load time for owl files decrease by a factor 10 or more(!). Accessing specific ontology resources also executes much faster as a result. To give you an example, the initial load for the 2 MB OBI ontology now takes about 109 ms, which is 0.1 second, a drastic improvement to previous jOWL versions. Whether this allows to load bigger ontology files, that I cannot say</p><br /><h4>Smarter: Reasoning on intersections</h4><br /><p>I improved the way jOWL deals with Intersections. In owl, if you declare the class "Red Wine" to be the intersection of a wine and an item that has red color, then it naturally follows that all wines with red color are red wines, even if you do not explicitely declare it as such. E.g. owl relies on <a href="http://en.wikipedia.org/wiki/Open_World_Assumption">open world assumptions</a>. Previous versions were already able to reason with this a little, but with jOWL 1.0 I made some significant steps forward. This has an immediate impact on the visualization of hierarchies. Take for example the hierarchy of wine, whitewine and redwine (see <a href="http://jowl.ontologyonline.org/">http://jowl.ontologyonline.org</a>). In jOWL 1.0 fewer wines are direct descendant of "Wine" (18) but more wines are direct descendant of redwine and whitewine respectively. This makes jOWL significantly smarter than before. It is even able to pick up some duplicate intersections (inconsistencies), such as the ones that exist in the wine ontology between DryWine and TableWine, both are declared as the intersection of wine + hasSugar dry.</p><br /><p>There is one minor downside to this. Calling all desdendants on rich hierarchies, in an ontology relying on a lot of intersections/open world assumptions (take for example the wine ontology) can now be a little slower than before, but only at the first query. Subsequent queries are cached and happen lightning-fast. For example the <a href="http://jowl.ontologyonline.org/SPARQL-DL.html">sparql-dl query</a> Type(?thing, Wine) takes a little time to complete at first try.</p><br /><h4>Better: overall refractoring of code and completion of documentation</h4><br /><p>In previous versions, relation lookup functions on Individuals and Classes where unsatisfactory implemented (chaotic). I replaced the different functions by one common function that accepts similar arguments for both Individuals and Classes: <a href="http://jowl.ontologyonline.org/documentation.html?owlClass=Individual">sourceof</a>. This function filters relations on the class or individual by property, by target and possibly some additional settings. If you look at the source code you may also see that everything has been formatted in a more readable manner.</p><br /><p><a href="http://jowl.ontologyonline.org/documentation.html">Documentation:</a> I took some time to complete documentation, which should be a great help in understanding the library and writing your own extension/implementation for it. I also tried to make the documentation a little more visually pleasing. And it uses jOWL to present a treeview of the index, something which seems quite usefull to me.</p><br /><p><a href="http://jowl.ontologyonline.org/SPARQL-DL.html">SPARQL-DL</a>: I more or less rewrote the engine. It is now more flexible and powerfull, having a better and more complete implementation of SubClassOf, Type, Class, etc queries... See the <a href="http://jowl.ontologyonline.org/SPARQL-DL.html">SPARQL-DL test page</a>.</p><br /><p>Styling: I adapted the User Interface components a little so that they now operate nicely with <a href="http://jqueryui.com/themeroller/">jQuery Themeroller</a> generated custom themes. This can make styling the UI components a lot easier, but of course you can always implement your own styling as well.</p><br /><p>Out of curiosity, I also tested whether jOWL can be used in an <a href="http://www.adobe.com/products/air/">Adobe AIR</a> application. While I do not have any working examples online, I can say it does. This may allow for some interesting possibilities as well...</p><br /><br /><p>Some minor bugs were squatted, see also the <a href="http://jowl.ontologyonline.org/changelog.html">changelogs</a>. Hope you enjoy and looking forward to some feedback. You can download the 1.0 version at the <a href="http://code.google.com/p/jowl-plugin/">Google Code site</a>. Make sure to also download the JOWLBrowser html & css files (version 1.0) that go with it if you are trying to set up a generic ontology browser.</p><br /><p>Yours, David</p>David Decraenehttp://www.blogger.com/profile/08536691873586041676noreply@blogger.com5tag:blogger.com,1999:blog-8860305835639976845.post-63782892762504761142009-01-07T02:57:00.000-08:002009-01-07T03:02:39.244-08:00Experimental TouchGraph Visualization<p>I had a little fun trying to implement a <a href="http://www.touchgraph.com/navigator.html">TouchGraph</a> like, but javascript-based, visualization of OWL data. To make it even more challenging (what fun would it be otherwise :)), I decided not to use Canvas or SVG elements nor flash, which are usually used to draw/embed more advanced graphics in HTML pages. I wanted rely on pure DOM-HTML manipulations. It's very experimental, but I'm quite happy with the result, which I got working on the major browsers.</p><br /><br /><p>Straight to the Example: See the <a href="http://jowl.ontologyonline.org/TouchGraph.html">jOWL TouchGraph visualization</a> demo onsite, uses <a href="http://jowl.ontologyonline.org">jOWL</a> to interact with the wine ontology. Once again the source of data for this demo.</p><br /><br /><p>Readers may know that I recently fiddled (<a href="http://ontologyonline.blogspot.com/2008/12/hyperbolic-tree-visualization.html">see previous blog post)</a> a little with the <a href="http://blog.thejit.org/javascript-information-visualization-toolkit-jit/">Javascript Information Visualization Toolkit</a> in an attempt to create a hyperbolic tree view for jOWL. The <a href="http://jowl.ontologyonline.org/HyperBolicTree.html">hyperbolic tree view demo</a> was quite easy to set up, but even so I wasn't entirely happy with the result. The reason for it can be attributed to the nature of hyperbolic tree visualizations, which only seem to work well if you visualize pure hierarchies (each node has one parent max).<br />The majority of the ontologies however are what is know as <a href="http://en.wikipedia.org/wiki/Directed_acyclic_graph">Directed Acyclic Graphs</a>, which basically means that any given Class can have multiple parents. This multiple parenting is one of the things that make ontologies so powerful, but unfortunately it obscures a hyperbolic visualization a little.</p><br /><br /><p>The TouchGraph model ('Force-directed graph layout'), seems to have no problems with Directed Acyclic Graphs, and the results are therefore pretty cool and dynamic (see again: <a href="http://jowl.ontologyonline.org/TouchGraph.html">Demo</a>).</p><br /><br /><p>I must definately credit <a href="http://www.p01.org/articles/DHTML_techniques/Drawing_lines_in_JavaScript/">Mathieu 'P01' HENRI</a> for his wonderful examples & scripts on how to create diagonal lines by manipulating HTML only, and <a href="http://www.cricketschirping.com/weblog/?p=545">Sean McCullough</a> for that illuminating blog post on force-directed graph layouts, complete with <a href="http://www.cricketschirping.com/processing/GraphLayout/">code examples</a>.</p><br /><br /><p>Conclusion: Can be improved a lot, it's an experiment, but a fun one with great looking results. One downside: Loading lot's of nodes turns the application into a slideshow instead, but if we keep it reasonable, it seems to render quite fast.</p>David Decraenehttp://www.blogger.com/profile/08536691873586041676noreply@blogger.com2tag:blogger.com,1999:blog-8860305835639976845.post-41171615749820862752008-12-22T05:51:00.000-08:002008-12-22T05:58:03.928-08:00Hyperbolic Tree Visualization<p>Ever since I first read about the <a href="http://blog.thejit.org/javascript-information-visualization-toolkit-jit/">Javascript Information Visualization</a> (JIT) toolkit, a javascript library that renders hyperbolic tree's and other visualizations directly inside HTML (canvas element), I've wanted to try and integrate that functionality with some jOWL reasoning. <br />I finally found some time to do that.<br />Turns out integrating jOWL data with the JIT Hyperbolic tree visualization is a walk in the park. I had the basic example up and running in less than an hour. <br />Not in the least thanks to JIT library itself and the great documentation on the site.</p><br /><p>The result is a quite cool ontology view. It's a nice gimmick, but for most purposes, a regular jOWL treeview will provide a better oversight in my opinion. It should be fairly easy to expand and smoothen out the functionality of that demo. Linking the visualization to existing jOWL components should only require a few lines of code.<br />I did not put the effort in that for the moment, as I am currently working on a bigger jOWL-related project.</p><br /><br /><p>You can see the demo at: <a href="http://jowl.ontologyonline.org/HyperBolicTree.html">HyperBolic Tree demo</a>, it is best viewed in Firefox or Safari, due to Internet Explorer's refusal to adopt the canvas tag (although it will work on Internet Explorer as well, but slower).</p>David Decraenehttp://www.blogger.com/profile/08536691873586041676noreply@blogger.com0tag:blogger.com,1999:blog-8860305835639976845.post-46934273243841253782008-10-15T00:30:00.000-07:002008-10-15T00:44:15.852-07:00HTML Templating and OWL data visualisation<p>One of the challenges of building a dynamic HTML page that works with OWL-DL data has been how to visualize OWL data without knowing in advance what the data will be about. <br/>For any given owl:Class you do not know in advance which properties will be defined, whether it has children, or whether it will have a description (rdfs:comment) or not, or if any terms (rdfs:label) are assigned to it in any given language. You could write custom code for each application, but that will not get us very far and will be very cumbersome.</p><br /> <p>Much better is to have some sort of dynamic templating system that allows us to fill in the blanks, and I have been looking for something like that ever since I started coding <a href="http://jowl.ontologyonline.org">jOWL</a>. From jOWL (5.1) 6.0 on, the User Interface extensions contain a new component called <b>owl_propertyLens</b>. Luckily I didn't have to invent the wheel all by myself. To create this owl_propertylens functionality I found some inspiration in both the <br /><a href="http://www.w3.org/2005/04/fresnel-info/manual/#csshooking">Fresnel abstract box model</a> (created by the MIT - and used in for example the <a href="http://simile.mit.edu/exhibit/">Simile - Exhibit project</a>) and the <a href="http://mjtemplate.org/tour/intro.html">mjt templating language</a> (<a href="http://metaweb.com/">MetaWeb Technologies</a> - freebase).</p> <br /><p>The first implementation was a based on a couple of ideas inspired by the <a href="http://www.w3.org/2005/04/fresnel-info/">Fresnel display vocabulary for RDF</a>. But, in order to allow templating of SPARQL-DL queries, I had to make a more hybrid approach, so that the various parameters of a query can integrated with our HTML. The result is I think a quite flexible templating system, specifically tailored towards OWL-DL syntax. As a matter of fact most of the visualisation can be specified by modifying the HTML (no javascript options required). An example page that really needed a templating system like this is the <a href="http://jowl.ontologyonline.org/jOWLBrowser.html">jOWL generic Browser</a> page, a page intended to visualize any ontology loaded with the <a href="http://ontologyonline.blogspot.com/2008/09/ubiquity-owl-dl-file-accessibility-and.html">Ubiquity - Firefox Command</a> I wrote recently.</p><br /><br /><h2>Basics of an owl_propertyLens</h2><br /><p>A first thing to mention is that I decided to make use of custom data attributes (actually one kind only: data-jowl). This might seem strange to some, but apparently custom data attributes will make it as a <a href="http://ejohn.org/blog/html-5-data-attributes/">new feature for HTML 5</a>. Attributes of the form 'data-...' are valid HTML5. So basically I'm just being a little ahead of time.</p><br /><p>The 'abstract box model' uses three kinds of boxes:<br /><ol><br /><li>The topmost is the <b>resourcebox</b>, it is the HTML that surrounds one given resource, and contains several properties. This is the element you call .owl_propertyLens() on, it should contain the attribute class="resourcebox" and preferably a data-jowl attribute with value specifying the expected type of resource:<br /><pre><br /><div class="resourcebox" data-jowl="owl:Class"><br /> ....<br /></div><br /></pre><br /></li><br /><li>Inside the resourcebox you declare <b>propertyboxes</b>: these are the html fragments that encapsulate (surround) a given kind of 'property', in the broad sense of the word. If the 'property' is unavailable then the propertybox will be hidden from view. A propertybox should contain the attribute class="propertybox".<br /><pre><div class="propertybox">...</div></pre><br /></li><br /><li>The third and smallest boxes are what can be considered '<b>valueboxes</b>'. In order to avoid too much nested HTML elements, valueboxes can co-locate with their propertybox elements. They are identified by the <b>data-jowl</b> attribute, for which it's value specifies the kind of result that is expected. A propertybox can contain at max one data-jowl specification.<br />Currently the supported values are: <br /><ul><br /><li>term (showing all available rdfs:label's for an ontology element)</li><li>rdf:ID (the identifier of the element)</li><li>rdfs:label (a representation name for the element)</li><li>rdfs:comment (descriptions for the element)</li><li>SPARQL-DL queries (syntax: sparql-dl + ":" + abstract SPARQL-DL query)</li><li>permalink: create a permalink for the element</li><li>rdfs:range and rdfs:domain: for properties, the range or domain</li><li>owl:disjointWith : disjoints specified on the element.</li><br /></ul><br />For each matching result to a property the data-jowl element (valuebox) will be duplicated.</li><br /></ol></p><br /><br /><h2>Valueboxes and examples</h2><br /><br /><p>From the <a href="http://mjtemplate.org/tour/intro.html">MJT templating language</a> I borrowed the idea of text substitution. This means that inside a 'valuebox' you designate the parameters to be shown by having an element with text equal to parameter surrounded by curly brackets and prefixed with a dollar sign. That is particularly useful for SPARQL-DL statements. Examples:</p><br /><ol><br /><li>Simplest propertylens syntax:<br /> <pre><div class="propertybox" data-jowl="rdfs:label">${rdfs:label}</div></pre><br /></li><br /><li>Another way of defining a propertybox:<br /> <pre><div class="propertybox" data-jowl="rdf:ID">ID = <span>${rdf:ID}</span></div></pre><br /></li><br /><li>More complex example, new <li> elements are created for each term present. If no terms are present, then this entire section will not display.<br /><pre><div class="propertybox"><br /> Terms:<br /> <ul><br /> <li data-jowl="term">${term}</li><br /> </ul><br /></div><br /></pre><br /></li><br /><li>SPARQL-DL example: to add the current resource as a parameter: use the data-jowl value of the resourcebox in the abstract syntax as in the example below:<br /><pre><br /><div class="propertybox"><br /> Direct children:<br /> <div data-jowl="sparql-dl:DirectSubClassOf(?c, owl:Class)">${?c}</div><br /></div><br /></pre><br /></li><br /><li>SPARQL-DL example with multiple parameters to show:<br /><pre><br /><div class="propertybox" data-jowl="sparql-dl:PropertyValue(owl:Class, ?p, ?t)"> <br /> <span>${?p}</span><span>: </span><span>${?t}</span><br /></div><br /></pre><br /></li><br /></ol><br /><h2>Feeding an ontology element to the owl_propertyLens</h2><br /><p>Like any other UI component, there are two ways to update the template with an ontology element.<br /><pre>var lens = $('#some_element').owl_propertyLens();</pre><br /><ol><br /><li>propertyChange: pass the owl element inside the propertyChange function: <br /><pre>lens.propertyChange(jOWL('wine'))</pre><br /></li><br /><li>By listening to another component, such as a treeview (automatic updates):<br /><pre>sometreeview.addListener(lens);</pre><br /></li><br /></ol><br />See the <a href="http://jowl.ontologyonline.org">jOWL demo's</a> for some examples.<br /></p><br /><br /><h2>Additional (optional) Javascript parameters</h2><br /><p>The templating system should be flexible enough to meet most needs. But there may be cases where you need a little extra control. This can be achieved by feeding some additional options with the owl_propertyLens function.<br /><ul><br /><li>onUpdate: a function that will be called each time the template has been updated with a new ontology element.</li><br /><li>onChange: allows you to specify what should happen with elements referencing a given kind of ontology element (owl:Class, owl:Thing, ..) inside the lens. This allows for example to set up a tooltip that will be displayed each time an owl:Thing reference inside the lens is hovered over. See the <a href="http://jowl.ontologyonline.org/jOWLBrowser.html">jOWL generic Browser</a> page for an example.</li><br /><li>tooltip = true: removes the lens from the document, to be used as a tooltip within other components.</li><br /><li>specific data-jowl values: see the <a href="http://jowl.ontologyonline.org/jOWLBrowser.html">jOWL generic Browser</a> page for examples.<br /> <ul><br /> <li>split: if multiple results are present, then this string will additionally be used to separate results (example: ', ').</li><br /> <li>"a parameter": a function that can be specified for any of the bracketed parameters (example: rdfs:comment) in the template. The function gives access to the specific HTML elements for this parameter.</li> <br /> </ul><br /></li><br /></ul><br /></p><br /><h2>Conclusion</h2><br /><p>I don't know about <a href="http://groups.google.com/group/ontology-online">your opinion</a>, but this system seems quite flexible, not in the least thanks to the SPARQL-DL support. It serves it's purpose in many different situations (see Demo's) and so far I have been very happy with the implementation.</p><br /><p>Many, but not all <a href="http://jowl.ontologyonline.org">jOWL</a> Demo's have been updated, a task for the weeks to come.</p><br />David.David Decraenehttp://www.blogger.com/profile/08536691873586041676noreply@blogger.com0tag:blogger.com,1999:blog-8860305835639976845.post-23835901076907835432008-09-24T02:09:00.001-07:002008-09-26T00:09:23.929-07:00Ubiquity, OWL-DL file accessibility and jOWLIf you are like me, and often browse to web in search of OWL-DL ontologies, then you have probably wished that there was an easier way to look at these files than just observing the raw OWL syntax.<br />I'm proud to announce a Ubiquity plugin that allows you to browse <span style="font-weight:bold;font-style:italic;">any</span> OWL-DL file on the web with <a href="http://jowl.ontologyonline.org">jOWL</a>, the semantic javascript library I am developing, <span style="text-decoration:underline">no matter where</span> it is hosted.<br /><br />I had been thinking on writing a Firefox plugin for quite some time for this purpose, even wrote some initial code, as this would be a great application for jOWL. But then came along the amazing <a href="http://labs.mozilla.com/2008/08/introducing-ubiquity/">Ubiquity</a>. <br /><br /><h3> About Ubiquity</h3><br /><a href="http://labs.mozilla.com/2008/08/introducing-ubiquity/">Ubiquity</a> is a Mozilla Experiment that is in two ways incredibly impressive:<br /><ul><br /><li>It allows you to give natural language commands to the browser. Examples include 'map brussels', 'weather paris' or 'email this to {somebody}'</li><br /><li>It allows you to basically mash up the entire web, avoiding the confinement of one domain only with it comes to looking at data.</li><br /></ul><br />The <a href="http://labs.mozilla.com/2008/08/introducing-ubiquity/">Mozilla blog post</a> is quite instructive on what Ubiquity is about, I suggest you read it if you are not familiar with it yet.<br /><br /><h3>About the jOWL Extension script to Ubiquity</h3><br />As it turned out, writing the command was pretty straightforward. It is also very small in size (3KB only). Basically it feeds the OWL-DL document to a <a href="http://jowl.ontologyonline.org/jOWLBrowser.html">generic jOWL-Browser page</a> I have set up. This browser page does all the heavy (jOWL) work, so even users unaware of javascript can use jOWL to browse OWL-DL files. Any issues and goodies are due to the jOWL library (which I continue to improve). The jOWL browser page contains the latest additions to the jOWL library (HTML templating and SPARQL-DL). I plan to write about and release a version update containing this functionality in the coming weeks.<br /><br /><h3>Installing the functionality (Firefox Only)</h3><br /><ol><br /><li>Get/Install the <a href="http://labs.mozilla.com/2008/08/introducing-ubiquity/">Ubiquity Natural Language commands extension</a> from Mozilla</li><br /><li>Install the small (3 KB) script that enables the '<span style="font-style:italic;font-weight:bolg">view_ontolog</span>y' command by going to <a href="http://jowl.ontologyonline.org/Ubiquity.html">this page</a> </li><br /><li>Go to a published OWL-DL file (examples below), open ubiquity and choose view_ontology</li><br /></ol><br /><br /><h3>Tested Ontologies</h3><br />The Ontologies must be expressed in OWL-DL. <br /><ul><br /><li><a href="http://www.w3.org/TR/owl-guide/wine.rdf">http://www.w3.org/TR/owl-guide/wine.rdf</a> wine ontology</li><br /><li><a href="http://www.dayf.de/2004/owl/beer.owl">http://www.dayf.de/2004/owl/beer.owl</a> beer ontology</li><br /><li><a href="http://www.w3.org/2004/09/fresnel#">http://www.w3.org/2004/09/fresnel#</a> fresnel vocabulary</li><br /><li><a href="http://www.mindswap.org/2003/vegetarian.owl">http://www.mindswap.org/2003/vegetarian.owl</a> vegetarian ontology</li><br /><li><a href="http://moustaki.org/c4dm/music.owl">http://moustaki.org/c4dm/music.owl</a> music production ontology (doesn't have an ontology label)</li><br /><li><a href="http://trust.mindswap.org/ont/trust.owl">http://trust.mindswap.org/ont/trust.owl</a> trust ontology (mostly properties)</li><br /><li><a href="http://purl.obofoundry.org/obo/obi.owl">http://purl.obofoundry.org/obo/obi.owl</a> OBI ontology (big, wait until it's fully loaded before viewing).</li><br /></ul><br /><br />If you encounter any issues, post to the <a href="http://groups.google.com/group/ontology-online">Discussion group</a> and I'll make sure to take them into account and update the functionality progressively. One thing I noticed already is that, if it is your first visit to the jOWL Browser page, the page can load empty. I'm looking into it, but the problem should be resolved by trying the same command once more on the OWL-DL file.<br /><br />One more note, the viewer can also be used to peek at local OWL-DL files (for example if you are writing your own Ontology in OWL-DL syntax). Just load the file in Firefox and use the same Ubiquity command on it.<br /><br />Hope you like it!David Decraenehttp://www.blogger.com/profile/08536691873586041676noreply@blogger.com2tag:blogger.com,1999:blog-8860305835639976845.post-20172323243529421472008-08-20T02:44:00.000-07:002008-08-20T02:58:24.939-07:00Cell Cycle Ontology hosted at OntologyOnline.orgI'm proud to say that <a href="http://ontologyonline.org">OntologyOnline</a> now hosts the <a href="http://www.cellcycleontology.org/">Cell Cycle Ontology</a>.<br /><br />The Cell Cycle Ontology is a wonderfully rich ontology (59.000 entries), focused around cell cycle proteins, genes and interactions. A great resource if you are dealing with biochemistry, biomedicines or any other related field. <br />Due to it's sheer size it has been problematic to get a good look at this ontology in the past, but not anymore. The <a href="http://ontologyonline.org/visualisation/c/CellCycleOntology/">version</a> present at <a href="http://ontologyonline.org">OntologyOnline</a> is the composite ontology, collecting information on four different model organisms: <a href="http://ontologyonline.org/visualisation/c/TreeofLife/Arabidopsis_thaliana">Arabidopsis thaliana</a>, Saccharomyces cerevisiae, Schizosaccharomyces pombe and Homo sapiens (us humans).<br /><br />It extends to Gene Ontology (that we also host), so there is a little overlap, but if you want to jump into the fray a good place to start would be a search on <a href="http://ontologyonline.org/visualisation/search.jsp?kn=cell+cycle">Cell Cycle</a>.David Decraenehttp://www.blogger.com/profile/08536691873586041676noreply@blogger.comtag:blogger.com,1999:blog-8860305835639976845.post-32837411716951243762008-07-14T12:02:00.000-07:002008-07-14T12:06:22.060-07:00jOWL status update<p><br />I packaged the latest development version of <a href="http://jowl.ontologyonline.org" title="jOWL semantic javascript library">jOWL</a> into a 0.5 release, available at <a href="http://code.google.com/p/jowl-plugin/">Google Code</a>. jOWL is an AJAX/javascript extension to <a href="http://jquery.com">jQuery</a> that I am developing. The jOWL library parses and reasons with OWL-DL documents. Supported browsers for this release are Internet Explorer 7 and Firefox 2 & 3.</p><br /><p>This release is accompanied by several new and impressive demo's (in my humble opinion). These make use of the new functionalities that have been incorporated so far. Below are some important highlights.</p><br /><h2>Reasoning over Individuals: Demo 2: jOWL integration with Simile Exhibit</h2><br /><p><a href="http://simile.mit.edu/wiki/Exhibit">Simile Exhibit</a> is an <a href="http://web.mit.edu/">MIT</a> project that allows complex data visualisations to be defined entirely on the client-side (javascripted). This means no server-side scripting is needed (no PHP, Ruby, JSP, ASP, ...) and no database access is required. In Exhibit, data is defined in a rich, but flat, JSON format.</p><p>The jOWL library is designed with similar ideas and goals in mind, but focuses on OWL semantics and vertical search instead. So on the one hand jOWL takes into account subsumption/inheritance, but on the other hand Exhibit has powerful visualisations. I believed it would be an interesting experiment to try and reconcile the two. The results of this labor can be seen at the <a href="http://jowl.ontologyonline.org/jOWLExhibit.html">jOWL - Exhibit demo page</a> that has been set up. jOWL loads the OWL file, grabs all instances of the specified class (wine), grabs all restrictions (relations) applicable for these, and converts this into a JSON data format that Exhibit can read. Exhibit then takes care of the further visualisations and filtering.</p><br /><p>The Exhibit results also hook back to some jOWL functionality, which allows visualisation of a little more supporting information. Clicking on Meursault in the below example (image) shows the ontological classification of this type of wine.</p><br /><div style="text-align:center;"><br /><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRp_jMmHHo6gVVY5_on0PMyKuVhyR5bA4qKEqIlesm4BRdL8Gxae4kvb3OkcuG1WZVwFwxcquSXvX0IerAUAKQ3cuGHoq2Mn_DhOm-EerIsONX5ExdRr1SqwDz1h_b_Q7pckBbGm2R0pg/s400/jOWLExhibitExample.gif" border="0" alt="jOWL Exhibit Demo - screenshot" id="BLOGGER_PHOTO_ID_5222947540690314162" /><br /></div><br /><br /><h2>Ontology Browsing</h2><br /><p>One item on my todo list was to expand the tests and demo's to include more diverse types of OWL-DL files. Even though OWL-DL is a standard, there are alternative ways to express things. In general, ontology elements are uniquely referenced by the attribute 'rdf:ID'. It is however also possible to use external declarations only, by means of the 'rdf:about' attribute and external URI's. This has some particular benefits, most importantly the identity of the ontology elements always points to one and the same location, no matter the location of the OWL file, and therefore is common practice in building ontologies. The external URI should then declare the ontology elements as well at the specified location, but funnily enough this is often overseen. Previously jOWL only indexed elements referenced by 'rdf:ID', but this has now been expanded to also include elements only referenced through 'rdf:about'. The concrete result of this rewrite is that ontologies like the <a href="http://jowl.ontologyonline.org/bfo.html">Basic Formal Ontology</a> or the <a href="http://jowl.ontologyonline.org/obi.html">Ontology of Biomedical Investigations</a> can now also be properly visualised with jOWL.</p><br /><p>Another change is that the foundations for a new User Interface component are being drafted. This new component is meant to visualise descriptions, labels, disjoints, outgoing non-hierarchical relations, etc... The prototype (under development) can be seen for example in the <a href="http://jowl.ontologyonline.org/bfo.html">BFO (Basic Formal Ontology) demo</a>. Hand in hand with this component is the ability to use permalinks, links that allow you to externally reference a given owl:Class. Examples of the permalink functionality is also visible in that demo.</p><br /><br /><h2>Documentation, and visualisation of RDFa embedded OWL syntax</h2><br /><p>Documentation was somewhat lacking in the past, but I put in an effort to create it. And even more, jOWL is used to visualize it. Initially I defined the documentation in an OWL-DL file. I kept that, now outdated, <a href="http://jowl.ontologyonline.org/data/jOWL.owl">owl file</a> accessible, because it demonstrates how to include HTML syntax in rdfs:comments (by wrapping in CDATA tags). But I decided to take another approach in the end with this documentation. Instead of loading an OWL-DL file, all the documentation resides in an html file, which is enriched with RDFa markup. The RDFa indicates which ontology classes exist, along with their descriptions ('rdfs:comments') and more. jOWL then extracts an OWL-DL file directly from this RDFa-enriched html page, and adapts the page to visualize it the jOWL way instead. Basically this is a real application to what I previously wrote in the blog post '<a href="http://ontologyonline.blogspot.com/2007/11/embedding-owl-rdfs-syntax-in-xhtml-with.html">Embedding OWL syntax in HTML with RDFa</a>'.</p><br /><p>Some people may have doubts on this approach, and I must admit I haven't entirely made my mind up on the applicability of it as well. For one it is only suitable if the OWL syntax remains simple, as for example in the case of documentation, where hierarchical information (vertical representation of data) is enough. But it does come with some major advantages:<br /><ul><br /><li>A big plus, just being practical: Content is accessible to search engine spiders and people who disable javascript. Ergo it solves the search engine access issues always seen with any other AJAX implementation.</li><br /><li>It is much simpler & userfriendly than writing an OWL-DL file. Still requires some effort. But (in combination with jOWL) it seriously lowers adoption barrier for using OWL.</li><br /><li>The flat representation of the documentation is hidden, and instead you the user is presented with a more dynamic/intelligent view on that data.</li><br /></ul><br /></p><br /><p>And finally: The link to this <a href="http://jowl.ontologyonline.org/documentation.html">documentation</a>, which serves as a demo on it's own.</p><br /><p><br />Hope you enjoy the new demo's, <br/><br />David.</p>David Decraenehttp://www.blogger.com/profile/08536691873586041676noreply@blogger.comtag:blogger.com,1999:blog-8860305835639976845.post-59642333371686122672008-05-13T13:11:00.000-07:002008-05-13T13:19:52.078-07:00TreeView for jOWLThere is an update to the <a title="jOWL" href="http://jowl.ontologyonline.org/">jOWL javascript library</a>.<br />Version 0.2 contains:<br /><ul><li>A TreeView component (see <a href="http://jowl.ontologyonline.org/">jOWL</a> page for a demo) in jOWL_UI.</li><li>Numerous code improvements.</li></ul>Can be downloaded at the <a href="http://code.google.com/p/jowl-plugin/">google project page for jOWL</a>.<br /><br />jOWL is a <a href="http://jquery.com/">jQuery</a> dependent javascript library that loads and reasons over OWL documents. See also the <a href="http://ontologyonline.blogspot.com/2008/01/jowl-javascript-library-for-traversing.html">original Blog post on jOWL</a>.David Decraenehttp://www.blogger.com/profile/08536691873586041676noreply@blogger.comtag:blogger.com,1999:blog-8860305835639976845.post-36830787673886642372008-05-06T12:26:00.000-07:002008-05-06T12:44:04.066-07:00Server-side storage of OWL syntax.<p>One concern I have with <a href="http://jowl.ontologyonline.org" title="semantic javascript library">jOWL</a>, a javascript library I am maintaining that parses and reasons with OWL-RDFS documents, is it's scalability.</p><br /><p>Scalability is, as we all know, of vital importance in a web setting. A potential drawback of the current jOWL javascript approach is that user is required to download the entire ontology before being able to do anything with it. This might be fine and sensible in the case of small sample ontologies such as the wine ontology (still 79kB) that has been used in previous <a href="http://ontologyonline.org">semantic web demo's at ontology online</a>. Sadly, it doesn't take much imagination to see that it could quickly become gruesome to load when we make things a little more interesting.</p><br /><p>So it dawned on me that it would be great to have a more dynamic load mechanism, where you only request or get what you really need. And it just so happens that Ajax (web 2.0 technology), combined with javascript, is perfectly suited for that. So I have been working hard on creating some server side code that is able to respond to Ajax calls and send back pieces of OWL-DL syntax. The image below kind of explains what I wish to achieve.</p><br /><div><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9lIpigWfKDJGfkB_yUXx_qpSo0G8T5perdHBNkimt0WuQjUDFZMBV7zTqBh4NqdCacD9CXY46_xqeMu9br1d1s9McApXhaCuCqhRmXdtML8hVyDW6wtB9Ynm3nKjsmlV_TWDgVMQaGkA/s1600-h/jOWL-client_server.jpg"><img style="cursor: pointer; " src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9lIpigWfKDJGfkB_yUXx_qpSo0G8T5perdHBNkimt0WuQjUDFZMBV7zTqBh4NqdCacD9CXY46_xqeMu9br1d1s9McApXhaCuCqhRmXdtML8hVyDW6wtB9Ynm3nKjsmlV_TWDgVMQaGkA/s400/jOWL-client_server.jpg" alt="" id="BLOGGER_PHOTO_ID_5197349426315808738" border="0" /></a><br /></div><br /><p>At the same time I decided to rewrite the database code that allows me to store ontology information, and take a more xml-hybrid like approach. The limitation of the older code I have, is that it attempts to translate every aspect of OWL-RDF into a relational database table format, e.g. concrete row-column values. As I try to put the richer logic of OWL-DL into work, it becomes a real pain & huge overhead in coding to represent all intersections, unions or other advanced constructs in this format. You just can't seem to beat native OWL-XML syntax (Yeay for the OWL people).</p><br /><p>The new approach I'm undertaking stores the full OWL syntax directly into the database. The database doesn't store the ontology in one bulky blob, but slices it up into small digestible units, each unit corresponding to one defined ontology object (e.g. an object referenced by a unique rdf:ID).<br />The only real modification to the native OWL syntax is a slight compression / reduction in verbosity. In addition, to allow (I hope) quick access some indexes are created (terms, etc). </p><br /><p>For those interested, the very first results of this labor can be seen at the <a href="http://ontologyonline.org/jOWL_Server/">jOWL server test page</a> I have set up. Be warned, it's primordial, it doesn't come with much explanation. There is also no concrete integration with jOWL just yet, that is for later, I guess I still have a long way to go.</p><br /><p>You will be noticing that I'm also sticking to using the wine ontology as a benchmark. Not that I'm such a complete wine devotee (with all these wine related demo's I can see how people might come to think of it like that). But seeing that this ontology was originally used by the <a href="http://www.w3.org/">W3C</a> to illustrate the different aspects of OWL (cfr. <a href="http://www.w3.org/TR/owl-guide/">OWL language guide</a>) and consequently, in testing out the syntax, I figured I might as well continue the tradition. Not sure how this will scale under somewhat heavier load, but those are problems for later :).</p>David Decraenehttp://www.blogger.com/profile/08536691873586041676noreply@blogger.comtag:blogger.com,1999:blog-8860305835639976845.post-78134350734950489142008-03-06T10:22:00.001-08:002008-03-06T11:25:44.748-08:00Semantics in the wild: new jOWL wine DemoI've prepared a more ambitious <a title="jOWL wine demo" href="http://jowl.ontologyonline.org/wine_demo.html">jOWL demo</a> that shows off some of the reasoning capability. For the unacquainted, <a title="jOWL" href="http://jowl.ontologyonline.org">jOWL</a> is a 'semantic' javascript library, under development by <a title="Ontology Online" href="http://OntologyOnline.org">OntologyOnline.org</a>, with the intention to make OWL-RDFS files (see also the previous article on <a href="ontologyonline.blogspot.com/2007/11/embedding-owl-rdfs-syntax-in-xhtml-with.html" title="Embedding OWL">OWL</a>) a little more accessible, and thereby bring web3.0 technology another step closer to the user.<br /><br />The thing about the demo that cheers up the geek within is: there is absolute <span style="font-weight:bold;">no server-side scripting</span> involved and <span style="font-weight:bold;">no database access</span> is required, all the reasoning is taken care of by your own computer.<br />It's a great example on how added semantics might influence your future browsing experience. The visuals don't change (web2.0 got that packed to go for us), but the user experience could. There is suddenly some 'smartness' in browsing, and it is something one might quickly get accustomed to. Like all great technology, you should hardly notice it until it's gone, most of it happens under the hood.<br /><br />I'm still polishing some of the details, and will continue to do so for quite some time, adding more features as we go, but the code is crossbrowser compatible (tested on Firefox and Internet explorer) and I wanted to share <a title="jOWL wine demo" href="http://jowl.ontologyonline.org/wine_demo.html">that</a> with you.<br />Expect more demo's in the future as well.<br /><br />Comments are possible at <a href="http://groups.google.com/group/ontology-online">our discussion group</a>.David Decraenehttp://www.blogger.com/profile/08536691873586041676noreply@blogger.comtag:blogger.com,1999:blog-8860305835639976845.post-77668574466723226012008-01-24T10:08:00.000-08:002008-03-03T11:52:15.747-08:00jOWL, a javascript library for traversing OWL-RDFS documents<p>I have started working on <a href="http://jowl.ontologyonline.org">jOWL</a>, a <a href="http://jquery.com/">jQuery</a> plugin for traversing OWL-RDFS documents. The ambitious intention is to deliver a script that smoothes out cross-browser issues between Firefox and Internet explorer when dealing with OWL syntax and at the same time greatly simplifies traversing OWL-RDFS documents. I'm using a mix of <a href="http://www.w3schools.com/xpath/default.asp">Xpath</a> expressions and jQuery functionality to do so.</p><br /><p>My main motivitation for writing this library is to see if I would be able to replicate the behaviour of the freebase-dependent <a href="http://ontologyonline.org/demo/connaisseur.html">wine widget</a> in a manner that doesn't require database or complex server interactions (Imagine!). Just plain old HTML, some javascript and an OWL ontology file.</p><br /><br /><p>While it isn't release ready, the results look very promising and there is already quite some functionality to look at. Have a look at the simple <a href="http://jowl.ontologyonline.org">Demo</a>.</p><br /><br /><p>All it currently takes to deliver similar functionality is the following lines, it should bear no secrets if you are a little familiar with jQuery:</p><br /><pre style="border: 1px solid rgb(51, 102, 255); margin: 5px; padding: 10px; font-family: Courier New,monospace; font-size: 11px; background-color: rgb(255, 204, 102); color: rgb(102, 102, 102);"><br />//load the owl file<br />jOWL.load('wine.xml', startDemo);<br /><br />function startDemo(owl){<br /> //Creates a panel to display individuals<br /> var individuals = $('#individuals').owl_individuals(owl);<br /><br /> //Creates a panel to display class, child and parent relations<br /> var navbar = $('#navbar').owl_navbar(owl);<br /><br /> //lets this component talk to the individuals panel<br /> navbar.addListener(individuals); <br /><br /> //Creates an autocomplete field, options to refine are possible<br /> var autocomplete = $('#owlauto').owl_autocomplete(owl);<br /><br /> //lets the autocomplete field talk (provide input) to <br /> the other components.<br /> autocomplete.addListener(navbar).addListener(individuals);<br />}<br /></pre><br /><p>The plan is to extend this functionality further, while keeping syntax required to interact with the OWL-RDFS document as simple as possible. I intend to update this demo page with more examples and documentation as I progress further with this library. I'm currently testing it with the prototypical wine ontology, but plan to expand the test to other ontologies when the time is ripe.</p>David Decraenehttp://www.blogger.com/profile/08536691873586041676noreply@blogger.comtag:blogger.com,1999:blog-8860305835639976845.post-54046466424603229772008-01-03T12:21:00.000-08:002008-01-03T12:34:40.825-08:00Semantic Annotation with RDFa: a simple experiment<p>This article will demonstrate an application for semantic annotation with RDFa. This is more or less a follow-up to our previous article '<a title="Embedding OWL-RDFS syntax in XHTML with RDFa" target="_blank" href="http://ontologyonline.blogspot.com/2007/11/embedding-owl-rdfs-syntax-in-xhtml-with.html">Embedding OWL-RDFS syntax in XHTML with RDFa</a>' If you need additional information on RDFa and semantic annotation: see that article.</p><br /><h3>Goal</h3><br /><p>The idea is to enrich the markup of certain sections of a webpage with an annotation, in such a way that computers can recognize it for what it is (semantic annotation, invisible to the user) and do something with it. <br />In this case, the goal was to return a set of language terms related to an annotation, either direct synonyms, or language terms from parents, or sources or targets of relations. The resulting procedure generates an ontological table of contents for that page focused around the given annotation and renders it directly within the original web page. In particular it adds a <a title="JQuery" target="_blank" href="http://jquery.com/" id="x6ht">JQuery</a>-enabled AJAX-script to the page that retrieves data from the OntologyOnline server and visualizes the results directly within the page you are browsing. It takes the form of an information box containing a clickable, ontological index of related terms occurring in the page plus a description (if present) for the given concept. This box can be dragged across the screen. The script also highlights the terms it found in a manner similar to google-search highlighting. The results can be discarded if no longer needed.<br /><div style="width:500px;margin-left:auto;margin-right:auto;"><br /> <div style="padding:10px;margin:5px;"><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEis0596J-UJ-fR_5yXFwL-wrf2PFWnNumieVpv5uoDNIjE67GaZp4GBsCp5tDwpr93YrfDszRwJiZB-4xHNXmq7dlmDBgRHr5PYBIKc5-QGsZDpypyLmwUtdR3Qxn6-IMoq9HAJq0m-bF4/s1600-h/20080103_operatorscript.jpg"><img style="cursor:pointer; cursor:hand;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEis0596J-UJ-fR_5yXFwL-wrf2PFWnNumieVpv5uoDNIjE67GaZp4GBsCp5tDwpr93YrfDszRwJiZB-4xHNXmq7dlmDBgRHr5PYBIKc5-QGsZDpypyLmwUtdR3Qxn6-IMoq9HAJq0m-bF4/s320/20080103_operatorscript.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5151348499949419426" /></a><br /> </div><br /> <div style="text-align:center;font-size:0.8em;"><br /> <b>Figure 1</b>: Information box on a semantic annotation, rendered directly within the annotated page.<br /> </div><br /></div><br /><br />It requires at least the following components: <br /><ol><br /> <li>A web page containing a semantic RDFa annotation.</li><br /> <li>The ability of the browser or a browser extension (Firefox - Operator plugin) to pick up the semantic annotation and, if the user desires to do so, trigger an AJAX call (a request for information).</li><br /> <li>A service to which the AJAX call is directed (<a href="http://OntologyOnline.org">OntologyOnline.org</a> service) and returns back useful (ontological) information about the annotated construct.</li><br /></ol></p><br /><br /><h3>1. Semantic Annotation: RDFa markup</h3><br />The idea is to mark up a section of a web page with a reference to an ontological class that describes what that section is about. We do this by using RDFa.<br />The RDFa markup makes use of the <code>about</code> attribute and the <code>class</code> attribute. This syntax is not entirely optimal as it does not really extract as correct OWL-DL syntax (and the class and about attributes should probably be switched around as well, but that does not visualize well in the plugin). <br />A combination with the <code>instanceof</code> attribute might be more appropriate (cfr <a href="http://www.w3.org/TR/xhtml-rdfa-primer/">rdfa primer: @instanceof</a>) to declare what kind of ontology concept the given entry is an instance of, but this RDFa attribute is not yet supported by the current release of the Operator Plugin (see below), so for the time being we will have to stick with '<code>about</code>'.<br /><br /><div style="width:550px;margin-left:auto;margin-right:auto;margin-bottom:10px"><br /> <div style="font-family: Courier New,monospace; white-space: pre;font-size:11px;background-color:#ffcc66;border:1px solid #3366ff;padding:10px;margin:5px;color:#666666"><br /><div class="owl:Thing" <br /> about="celltypeontology:immature+neutrophil">text section ...</div><br /> </div><br /> <div style="text-align:center;font-size:0.8em;"><br /> <b>Figure 2</b>: Embedding instance information by using the class & about attributes..<br /> </div><br /></div><br />Also mind that it is always a good idea (but in this case not an absolute necessity) to declare the namespaces you used in the document as well:<br /><div style="width:550px;margin-left:auto;margin-right:auto;"><br /> <div style="font-family: Courier New,monospace; white-space: pre;font-size:11px;background-color:#ffcc66;border:1px solid #3366ff;padding:10px;margin:5px;color:#666666"><br /><div <br /> xmlns:owl="http://www.w3.org/2002/07/owl#" <br /> xmlns:celltypeontology <br /> = "http://ontologyonline.org/visualisation/c/Directory/">...<br /></div><br /> </div><br /> <div style="text-align:center;font-size:0.8em;"><br /> <b>Figure 3</b>: Including namespaces.<br /> </div><br /></div><br /><br /><br /><br /><h3>2. The Operator action script</h3><br />The firefox extension <a href="https://addons.mozilla.org/nl/firefox/addon/4106">Operator</a> by Michael Kaply and Elias Torres recognizes RDFa in XHTML pages, and allows users to define custom actions (an Action User script) for these annotations that can be trigerred specifically by the person browsing the page. <br />We've created an Action User script for the Operator extension to firefox that makes an AJAX call to an ontologyonline JSONP service (see section below). This script can be downloaded at: <a href="http://ontologyonline.org/scripts/OntologyOnline_Operator.js">OntologyOnline.org/scripts/OntologyOnline_Operator.js</a>.<br /><br/>To set up the script:<br /><ol><br /><li>Get Firefox if you do not have it already.</li><br /><li>Install the <a href="https://addons.mozilla.org/nl/firefox/addon/4106">Operator plugin.</a></li><br /><li>Download the Operator user script to your computer (Right-Click <a href="http://ontologyonline.org/scripts/OntologyOnline_Operator.js">OntologyOnline_Operator.js</a>, select save as).</li><br /><li>Browse to the Options section of the operator plugin, select user scripts tab, hit new, and select the script you downloaded above. Close options.</li><br /><li>Re-open options, select the actions tab, hit new, and select 'create a topic map - ontology online'. Close options.</li><br /><li>Restart the Browser.</li><br /><li>Browse to a semantically annotated page, the 'Resources' button should be highlighting, select the resource, and select the 'topic map' action that should be visible.<br/><b>Demo Pages</b>:<br /> <ul><br /> <li><a href="http://OntologyOnline.org/demo/RDFa_usecase1.html">RDfa demo</a>, a page about neutrophils.</li><br /> <li>Our previous article: <a title="Embedding OWL-RDFS syntax in XHTML with RDFa" target="_blank" href="http://ontologyonline.blogspot.com/2007/11/embedding-owl-rdfs-syntax-in-xhtml-with.html" id="vpxn">Embedding OWL-RDFS syntax in XHTML with RDFa</a></li><br /> </ul><br /></li><br /></ol><br /><div style="width:500px;margin-left:auto;margin-right:auto;"><br /> <div style="padding:10px;margin:5px;"><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvt_du0AgTXDIFbV53tzIp8i6lr8ou2aSpRTdMsfwPLeiNPY9Lihrzfr17Di30F5zYyRTpbtO_sFYWYx-9ZKn5mNikoVKjnUhFmK8dRmHt2Gj6rQlJyL2HGyVmRf8Qb9vO9a8-IVZioW4/s1600-h/20080103_operatorscriptaction.jpg"><img style="cursor:pointer; cursor:hand;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvt_du0AgTXDIFbV53tzIp8i6lr8ou2aSpRTdMsfwPLeiNPY9Lihrzfr17Di30F5zYyRTpbtO_sFYWYx-9ZKn5mNikoVKjnUhFmK8dRmHt2Gj6rQlJyL2HGyVmRf8Qb9vO9a8-IVZioW4/s320/20080103_operatorscriptaction.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5151348830661901234" /></a><br /> </div><br /> <div style="text-align:center;font-size:0.8em;"><br /> <b>Figure 4</b>: The topic map action.<br /> </div><br /></div><br /><br /><h3>3. The Ontology Online service</h3><br />We've set up a AJAX - JSONP service that returns term information on a semantic annotation, if the concept is known to the Ontology Online semantic database. If you wonder what JSONP is, JSONP is a technique that enables you to perform some AJAX calls (requests for data) cross domain, (e.g. hypothetically any web page can access the data), see <a href="http://bob.pythonmac.org/archives/2005/12/05/remote-json-jsonp/" target="_blank">Remote JSON</a> for more information.<br /><br /><br /><h3 id="conclusion">Some last remarks</h3><br />In my opinion, this experiment also shows one of the advantages of using RDFa as opposed to using regular microformats. By using RDFa we do not impose content limits or restraints on an annotation, it is possible to use any semantic construct, as long as it is known to a ontology service like the Ontology Online Topicmap service.<br />The set-up has been kept simple deliberately, improvements can (and may in the future) be made on several accounts, but nevertheless I wanted to share this with you anyway.<br />Be aware that for large web documents the script may have some more computation work to do. I'm also hoping to come up with some more elaborate use-cases in the distant future.<br /><br/><br/><br/><br />Comment on this article: <a href="http://groups.google.com/group/ontology-online">Discussion group</a>.<br /><br /><div style="margin-top:25px;position:relative;"> <br /><div style="float:right"><br /> <!-- Digg BEGIN --><br /> <script type="text/javascript">digg_url = 'http://ontologyonline.blogspot.com/2008/01/semantic-annotation-with-rdfa-simple.html';</script><br /> <script src="http://digg.com/tools/diggthis.js" type="text/javascript"></script><br /> <!-- Digg END --><br /> </div> <br /> <!-- AddThis Bookmark Button BEGIN --><br /> <div style="margin-top:10px;"><br /> <script type="text/javascript"><br /> addthis_url = location.href; addthis_title = document.title; addthis_pub = 'ontologyonline';<br /> </script><script type="text/javascript" src="http://s7.addthis.com/js/addthis_widget.php?v=12" ></script><br /> </div><br /> <!-- AddThis Bookmark Button END --><br /></div>David Decraenehttp://www.blogger.com/profile/08536691873586041676noreply@blogger.comtag:blogger.com,1999:blog-8860305835639976845.post-7376077808878040892007-11-27T11:12:00.000-08:002007-12-20T12:15:09.879-08:00Embedding OWL-RDFS syntax in XHTML with RDFa<h2>Short introduction to RDFa, OWL and Microformats</h2><br />The <b>OWL-language</b> (web ontology language) is a recommendation by the <a href="http://www.w3.org/">W3C</a>. <a rel="tag" href="http://ontologyonline.org/visualisation/c/Directory/Owl_language">OWL</a> is a language that allows proper definition and representation of <a rel='tag' href="visualisation/c/Directory/ontology" title="What is an Ontology?">Ontologies</a>. It is supposed to form the foundation of the next generation of the internet: the semantic web (a.k.a. web3.0). Unfortunately, even though it has been a recommendation since 2004, it has gained very little traction in the online community.<br />There are several reasons for this, and some of them are discussed in this article.<br/><br /><b>Microformats</b> are small structural mark-ups of HTML, with a very consistent format. They are somewhat of a web 2 and a half approach, allowing machine readability through consistent structure, but lacking the flexibility to capture more than what is defined in the limited Microformat standard. Microformats have more or less emerged spontaneously. Through their ease of use, Microformats have gained a lot of momentum, but as mentioned, they lack the expressivity required to really push the boundaries of the current internet experience.<br/><br />This article is about coming up with a solution that reconciles the ease of use of Microformats with the expressivity of a language like OWL.<br />Some problems hindering OWL adoptation will be highlighted, and a first experiment with the use of <b>RDFa</b> mark-up to embed OWL data directly into an XHTML page will be demonstrated, a solution that can be considered as a step higher than Microformats on the evolutionary ladder of the web.<br/><br /><br /><dl><b>Terminology frequently used in this article:</b><br /> <dt>Instance</dt><br /> <dd>A real world occurrence of a <span about="Directory:Owl:class" class="owl:Thing">class</span> (a bordeaux wine you just bought in the store).</dd><br /> <dt>Class</dt><br /> <dd>A unit of meaning (wine as a 'category').</dd><br /> <dt>Parent</dt><br /> <dd>With meaning a little broader than the given Class (less specific), for example 'Potable (drinkable) Liquid' in the case of wine.</dd><br /> <dt>Semantic items</dt><br /> <dd>Human and machine understandable content.</dd><br /></dl><br /><br /><h3>OWL-RDFS</h3><br />There are three sublanguages of OWL, named OWL-Full, OWL-DL and OWL-Lite. Funnily enough, and contrary to what you might think, OWL-Lite is the most strict of the three and hardest to achieve. OWL-Full is the least interesting of the three dialects; it is often gibberish to reasoners (programs that interpret your semantic constructs) because you can intermingle anything with everything. Usually, the goal is to produce OWL-DL syntax at the least.<br />All OWL syntax examples in this document validate as OWL-Lite, copy-paste the syntax into the <a title="OWL Validator" href="http://www.mygrid.org.uk/OWL/Validator">OWL Validator</a> to check. For a more complete introduction on OWL, see the W3C <a href="http://www.w3.org/TR/owl-features/">OWL language guide</a>.<br /><br/><br /><h3>Why OWL-RDFS has such poor web presence.</h3><br />There are several reasons why OWL syntax is nowhere to be seen on the web, and some of these problems are as follows:<br/><br /><div style="font-weight:bold;margin-top:10px;">1. OWL is Verbose</div><br /><u>It really is</u>, but, in my opinion, this does not constitute that much of a problem. Verbosity can be good if it improves readability. <br />See next point for some considerations however.<br />On verbosity; below is an example of the minimal OWL-DL compatible syntax required to declare <u>one class</u>, with <u>one parent</u> specified, and <u>one outgoing relation</u>, no comments or labels included, and no advanced relating. As you can see in the figure below, that is already quite a mouth full.<br /><div style="width:500px;margin-left:auto;margin-right:auto;"><br /><div style="font-family: Courier New,monospace; white-space: pre;font-size:11px;background-color:#ffcc66;border:1px solid #3366ff;padding:10px;margin:5px;color:#666666"><br /><rdf:RDF <br /> xmlns ='http://this.page' <br /> xml:base ='http://this.page' <br /> xmlns:owl ='http://www.w3.org/2002/07/owl#' <br /> xmlns:rdf ='http://www.w3.org/1999/02/22-rdf-syntax-ns#' <br /> xmlns:rdfs ='http://www.w3.org/2000/01/rdf-schema#' <br /> xmlns:xsd ='http://www.w3.org/2001/XMLSchema#'><br /><owl:Ontology rdf:about='http://example.com/dummy_ontology'/><br /><owl:Class rdf:ID='id_for_this_class'><br /> <rdfs:subClassOf><br /> <owl:Class rdf:about='http://example.com/dummy_parent' /><br /> </rdfs:subClassOf><br /> <rdfs:subClassOf><br /> <owl:Restriction><br /> <owl:onProperty><br /> <owl:ObjectProperty <br /> rdf:about='http://example.com/dummy_property'/><br /> </owl:onProperty><br /> <owl:someValuesFrom><br /> <owl:Class <br /> rdf:about='http://example.com/dummy_target' /><br /> </owl:someValuesFrom><br /> </owl:Restriction><br /> </rdfs:subClassOf><br /></owl:Class><br /></rdf:RDF><br /></div><br /><div style="text-align:center;font-size:0.8em;"><br /> <b>Figure 1</b>: OWL Verbosity: Expressing one class, including one parent and one outgoing relation.<br /></div><br /></div><br /><div style="font-weight:bold;">2. OWL is Incomprehensible</div><br /><div style="margin-top:5px;">Well, not really, there is a lot of logic in OWL. At least computers should have no problem understanding. Honestly!?<br />But to the average human, it is a bit like learning to read bits and bytes. Part of the reason why Microformats are successfull is that every web designer understands css and html. Before you delve into OWL, you should have a good understanding of RDF, xml Namespaces, URI's, ... and even though all OWL documents are RDF documents, the language is in many ways nothing like RDF. Finally, you also need to become familiar with ontological jargon (classes, instances, subsumption, disjoints, ...) and methodology and how it impacts your ontology. This, in many ways, resembles learning algebra. The methodology is not something people are acustomed to, there is a general 'why bother attitude', but once learned it paves the road to new insights. So there is a bit of a learning curve. <br /></div><br /><div style="margin-top:5px;"><br />Perhaps the most significant problem however, is that there are multiple ways of expressing one and the same thing. Consider the examples below. For both, ONLY the syntax varies from what is expressed in Figure 1, the content remains the same (mind that this is still about the very simple set-up: one class, one parent and one relation). They both validate as OWL-Lite as well. The bottom example is the one that resembles the most an original RDF graph, but it is also the hardest one to read. It is an important example however, seeing that this is more or less what RDF, extracted from an RDFa-XHTML page looks like (more on that later).<br /></div><br /><div style="width:500px;margin-left:auto;margin-right:auto;margin-top:10px;"><br /><div style="font-family: Courier New,monospace; white-space: pre;font-size:11px;background-color:#ffcc66;border:1px solid #3366ff;padding:10px;margin:5px;color:#666666"><br /><rdf:RDF <br /> xmlns ='http://this.page' <br /> xml:base ='http://this.page' <br /> xmlns:owl ='http://www.w3.org/2002/07/owl#' <br /> xmlns:rdf ='http://www.w3.org/1999/02/22-rdf-syntax-ns#' <br /> xmlns:rdfs ='http://www.w3.org/2000/01/rdf-schema#' <br /> xmlns:xsd ='http://www.w3.org/2001/XMLSchema#'><br /><owl:Ontology rdf:about='http://example.com/dummy_ontology'/><br /><owl:Class rdf:ID='id_for_this_class'><br /> <rdfs:subClassOf rdf:resource='dummy_parent' /><br /> <rdfs:subClassOf><br /> <owl:Restriction><br /> <owl:onProperty rdf:resource='dummy_property' /><br /> <owl:someValuesFrom rdf:resource='dummy_target' /><br /> </owl:Restriction><br /> </rdfs:subClassOf><br /></owl:Class><br /><owl:Class rdf:about="dummy_parent"/><br /><owl:ObjectProperty rdf:about="dummy_property"/><br /><owl:Class rdf:about="dummy_target"/><br /></rdf:RDF><br /><br /><!-- <br />reference to parent & to target: must be declared <br />in this document as being of the owl:Class type to be <br />owl-DL compatible.<br />reference to property: must be declared as being of type <br />owl:ObjectProperty in this document to be owl-DL compatible.<br />--><br /></div><br /><div style="font-family: Courier New,monospace; white-space: pre;font-size:11px;background-color:#ffcc66;border:1px solid #3366ff;padding:10px;margin:5px;color:#666666"><br /><rdf:RDF <br /> xmlns ='http://this.page' <br /> xml:base ='http://this.page' <br /> xmlns:owl ='http://www.w3.org/2002/07/owl#' <br /> xmlns:rdf ='http://www.w3.org/1999/02/22-rdf-syntax-ns#' <br /> xmlns:rdfs ='http://www.w3.org/2000/01/rdf-schema#' <br /> xmlns:xsd ='http://www.w3.org/2001/XMLSchema#'><br /> <rdf:Description rdf:about="http://example.com/dummy_ontology"><br /> <rdf:type <br /> rdf:resource="http://www.w3.org/2002/07/owl#Ontology"/><br /> </rdf:Description><br /> <rdf:Description rdf:ID="id_for_this_class"><br /> <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Class"/><br /> <rdfs:subClassOf rdf:resource="#dummy_parent" /><br /> <rdfs:subClassOf rdf:resource="#restriction1" /><br /> </rdf:Description><br /> <rdf:Description rdf:ID="restriction1"><br /> <rdf:type <br /> rdf:resource="http://www.w3.org/2002/07/owl#Restriction"/><br /> <owl:onProperty rdf:resource='#dummy_property' /><br /> <owl:someValuesFrom rdf:resource='#dummy_target' /><br /> </rdf:Description><br /> <rdf:Description rdf:ID="dummy_parent"><br /> <rdf:type <br /> rdf:resource="http://www.w3.org/2002/07/owl#Class"/><br /> </rdf:Description><br /> <rdf:Description rdf:ID="dummy_target"><br /> <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Class"/><br /> </rdf:Description><br /> <rdf:Description rdf:ID="dummy_property"><br /> <rdf:type <br /> rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/><br /> </rdf:Description><br /></rdf:RDF><br /></div><br /><div style="text-align:center;font-size:0.8em;"><br /> <b>Figure 2</b>: OWL variancy: The two examples above only differ syntactically from the OWL expression found in figure 1, the content is the same, and both validate as OWL-Lite as well. Cfr. <a title="OWL Validator" href="http://www.mygrid.org.uk/OWL/Validator">OWL Validator</a>.<br /></div><br /></div><br /><div style="font-weight:bold;margin-top:5px;">3. No explored approaches to align / integrate OWL with current web content.</div><br />In my opinion, this is the biggest roadblock that stands in the way of public OWL-adoptation.<br />For ontological data to truly be useful, you need to somehow tie current web content with semantic classes and instances. OWL has failed miserably in this respect so far. It is much like a far away island of Eden, and a man without a canoe. All the important data could be there but no-one knows how to reach it. Granted, OWL does define a standard format for data interchange between applications, but this limited scope cannot be what the semantic vision is about. <br/><br />What we need is <b>semantic annotation</b>. You need to be able to tag sections of your content with explicit ontology classes and even relations, without it hindering the display of your content. If you wrote a piece on a certain bordeaux for example, you could mark up the section as being about an instance of wine, perhaps even with some properties defined (or even more amazing, just by knowing it is about wine properties can be extracted automatically, a mention of red is bound to be about the wine color). <br/><br />Take a look at our <a title="freebase widget" href="http://ontologyonline.org/demo/connaisseur.html">freebase widget</a> for the desired search engine functionality. You should be able to look for wine (example), by specifying color, origin, vintageyear and more. The funtionality present on that page is thanks to the Freebase service.<br /><a title="Freebase" href="http://www.freebase.com/view/">Freebase</a> (big thumbs up) really understands the need to couple instance data (they call it 'Topics') and content (images, text) to semantic classes ('Type' in freebase lingo).<br/><br />The amazing observation here is that you would <u>not need</u> a service like freebase to pull out this kind of data if:<br /><ul><br /> <li>It where possible to directly associate your content with certain units of meaning (semantic classes), something which is referred to as 'semantic annotation'.</li><br /> <li>Search engines would index these annotations.</li><br /></ul><br />To achieve this goal we need several things to happen:<br /><ul><br /> <li>The ability to easily reference ontological classes; at the least there should be some highly accessible repository(/-ies) of ontological data to which one can refer. This is part of the rationale behind <a href="http://OntologyOnline.org">ontologyonline.org</a> and why it offers one page per semantic class, it can be seen as an ontological tag index.</li><br /> <li>The ability to embed semantic content directly and invisibly within (X)HTML. </li><br /></ul><br />This brings us back to the topic of this section: the current divide between semantic data and web content. There is hope on the horizon however, there seem to be possibilities, and I'd like to demonstrate one of them in this article: the use of RDFa.<br />Roughly said, <a title="RDFa" href="http://www.w3.org/TR/xhtml-rdfa-primer/">RDFa</a> is a next-generation Microformat. It is a structured mark-up that allows direct inclusion of RDF into XHTML, and seeing that OWL is more or less an extension to RDF an interesting thought would be to try and use RDFa to embed OWL in a web page. <br /><br /><h2>Integration into XHTML markup: the promise of RDFa</h2><br />This article does not attempt to provide a full introduction to RDFa, for that: see W3C's <a href="http://www.w3.org/TR/xhtml-rdfa-primer/">RDFa Primer</a>. As mentioned above, the use case for the majority of people would be to mark up content with reference to semantic classes (e.g. tag your content as being an instance of semantic class Y). In this experiment however, we focus on embedding OWL class information and ontology information directly within XHTML. Embedding Instance information (as required for the above) should be easier and may be discussed in a later <a href="http://ontologyonline.blogspot.com/">Online Ontology Visualisation</a> blog entry. <br /><br/><br />As said before, part of <a href="http://ontologyonline.org">ontology online's</a> design is the offer one page per semantic class. This makes referencing a lot easier, instead of having to usi URI's (like an URL, but may also point to sections of a certain page or a given part of a document), you can just use a page URL to retrieve a reference to an ontological class. As will be demonstrated, it also makes the RDFa approach a lot cleaner. Of note, the mark-up has been simplified a little (information not required for this demonstration has been stripped) for easier reading. The figure below demonstrates how the content that has RDFa embedded looks like visually (the RDFa is completely invisible to the user).<br /><div style="width:500px;margin-left:auto;margin-right:auto;margin-top:10px;margin-bottom:5px;"><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDmJ_7E2CKKxFzEP5hCVaLzwdtu0PkJBhqpsqfAU0KxV2VMvNvDPWuK3Krinmb3qVUGdDlluivuAffKHAtv7okQpJ5iooisoNOxlNIVFSk0Gw_2emM5GJCnYnql8_Ftkaqn86nMIBlKyI/s1600-h/20071126_fragmentofconceptpage.JPG"><img style="cursor:pointer; cursor:hand;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDmJ_7E2CKKxFzEP5hCVaLzwdtu0PkJBhqpsqfAU0KxV2VMvNvDPWuK3Krinmb3qVUGdDlluivuAffKHAtv7okQpJ5iooisoNOxlNIVFSk0Gw_2emM5GJCnYnql8_Ftkaqn86nMIBlKyI/s320/20071126_fragmentofconceptpage.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5137604200930675298" /></a><br /><div style="text-align:center;font-size:0.8em;"><br /> <b>Figure</b>: Visual output of the RDFa-embedded XHTML.<br /></div><br /></div><br /><br /><h3>Step 0. Being Standards-compliant</h3><br />This is the only pain-point of embedding RDFa. If you wish to get your page to validate against the <a href="http://validator.w3.org/">W3C-Validator</a> service then you must set up your page properly. This means that, besides the fact that you better have <a href="http://en.wikipedia.org/wiki/XHTML">valid XHTML</a> if you wish to extract the RDFa out of the page, you also need to change the DOCTYPE declaration of the page, and the content-type you serve, plus include any namespaces you are using in your document. Beware that changing the DOCTYPE may influence the display of your page a little (css is more strict) and changing the content type may affect javascript functionality. This may not even be a possibility to you. Fortunately, this is only a long-term goal to strive to, the RDFa will still be extractable even with less properly defined doctype & content-type (hence step 0).<br /><br /><div style="width:500px;margin-left:auto;margin-right:auto;margin-top:10px;margin-bottom:5px;"><br /><div style="font-family: Courier New,monospace; white-space: pre;font-size:11px;background-color:#ffcc66;border:1px solid #3366ff;padding:10px;margin:5px;color:#666666"><br /><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" <br /> "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd"><br /> <html xmlns="http://www.w3.org/1999/xhtml" <br /> xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" <br /> xmlns:owl="http://www.w3.org/2002/07/owl#" <br /> xmlns:rdfs ='http://www.w3.org/2000/01/rdf-schema#'<br /> xmlns:dc="http://purl.org/dc/elements/1.1/"><br /> <head><br /> <meta http-equiv="Content-Type" <br /> content="application/xhtml+xml; charset=UTF-8"/><br /> ...<br /></div><br /><div style="text-align:center;font-size:0.8em;"><br /> <b>Figure</b>: Declarations you need if you wish to be Standards-compliant.<br /></div><br /></div><br />You might notice that when you try to run Ontology Online concept pages through the W3C validator still one error persists: 'Conflict between Mime Type and Document Type'. This is because the server does not yet serve the correct content type (it seems to affect javascript functionality and that is something we do not wish to deal with at this point).<br /><h3>Step 1. Declaring the ontology</h3><br />On any page describing a semantic class (concept page) the ontology is reference by a 'rev' attribute on an anchor element. 'rev' expresses an <i>inverse relationship</i> in RDFa. In this case we say that the ontology (defined at the target of the 'href' attribute) has an owl:Class (designates a class of the ontology) which is described on this page. The mechanism to declare the ontology itself is not discussed in this article, but can be easily seen by examining the source of any of the ontology html pages at ontologyonline.org.<br /><div style="width:525px;margin-left:auto;margin-right:auto;margin-top:10px;margin-bottom:5px;"><br /><div style="font-family: Courier New,monospace; white-space: pre;font-size:11px;background-color:#ffcc66;border:1px solid #3366ff;padding:10px;margin:5px;color:#666666"><br /><a rev="owl:Class" <br /> href="http://ontologyonline.org/visualisation/c/CellTypeOntology/"><br /> Cell Type Ontology</a><br /></div><br /><div style="text-align:center;font-size:0.8em;"><br /> <b>Figure</b>: Declaring the ontology on a concept page.<br /></div><br /></div><br /><h3>Step 2. Declaring the Class</h3><br />In RDFa an '<b>about</b>' attribute is used when talking about something that does not refer to the entire page. Seeing that the resource here is indeed the entire page (the entire page equals the semantic class) we do not use an about 'attribute'. The class is defined simply by adding a class <b>attribute</b> with value <i>owl:Class</i> in the markup. Notice how the markup does not affect the content itself, nor it's display (hint: for those who did not know, it is possible to use multiple classes in html markup, by providing a space-separated list: example class='owl:Class concept blue', css will take into account all of them). The <b>property</b> attribute with value <i>rdfs:label</i> provides a nicer representation name than just 'this page url'. Ideally an <b>xml:lang</b> attribute would be specified as well, denoting that the label is in English for example (xml:lang="en", work in progress).<br /><div style="width:500px;margin-left:auto;margin-right:auto;margin-top:10px;margin-bottom:10px;"><br /><div style="font-family: Courier New,monospace; white-space: pre;font-size:11px;background-color:#ffcc66;border:1px solid #3366ff;padding:10px;margin:5px;color:#666666"><br /><h1 class="owl:Class" property="rdfs:label">mature B cell</h1><br /></div><br /><div style="text-align:center;font-size:0.8em;"><b>Figure</b>: Declaring the semantic class.</div><br /></div><br /><u><b>The parents</b></u> are declared on another page, hence a link (anchor element) is used to reference them. By wrapping the anchor element in an additional html element we can specify two relations, firstly that the class expressed on this page has a subclass relationship to something (as expressed by the '<b>rel</b>' attribute with value '<i>SubClassOf</i>'). And secondly, that this 'something' is an actual owl:Class, which is very important if we wish to achieve OWL-DL syntax and state that this concerns a parent. We do this by setting the '<b>rel</b>' attribute on the anchor element to '<i>owl:Class</i>'. In the figure below two parents are declared:<br /><div style="width:525px;margin-left:auto;margin-right:auto;margin-top:10px;margin-bottom:10px;"><br /><div style="font-family: Courier New,monospace; white-space: pre;font-size:11px;background-color:#ffcc66;border:1px solid #3366ff;padding:10px;margin:5px;color:#666666"><br /><div><br /> <span rel='rdfs:SubclassOf'><br /> <a rel='owl:Class' href='c/CellTypeOntology/B_cell'>B cell</a><br /> </span><br /> <span rel='rdfs:SubclassOf'><br /> <a rel='owl:Class' <br /> href='c/CellTypeOntology/professional_antigen_presenting_cell'><br /> professional antigen presenting cell</a><br /> </span><br /></div><br /></div><br /><div style="text-align:center;font-size:0.8em;"><b>Figure</b>: Declaring Parent(s).</div><br /></div><br /><u><b>Outgoing relations</b></u> are specified by taking a similar, yet slightly more complex, approach. The outgoing relation requires a property declaration (type of relation) and a target declaration, another class of the ontology to which the class on this page relates. At this time properties at <a href="http://ontologyonline.org">ontology online</a> do not have their own page just yet, so they are referenced only in text. For the target of a relation a link (anchor element) is used as reference. The top html element with attribute '<b>rel</b>' and value '<i>rdfs:SubclassOf</i>' again denotes that the class expressed on this page has another subclass relationship to something. The element underneath it tell us that this subclass relationship is a kind of outgoing relationship (instead of a parent relationship) by having an attribute '<b>rel</b>' with value '<i>owl:Restriction</i>'. This element wraps around two elements, one which designates the property (recognized by having the attribute '<b>property</b>' with value '<i>owl:onProperty</i>' The second is an anchor element for which the href attribute specifies the target, while the '<b>rel</b>' attribute '<i>someValuesFrom</i>' adds some additional logic the relationship (see W3C's <a href="http://www.w3.org/TR/owl-features/">OWL language guide</a> for details on someValuesFrom).<br/><br />Of note, it should be expressed that the property is of the type owl:ObjectProperty and the target is of the type 'owl:Class' to be OWL-DL compliant, again work in progress (still deciding on the most optimal way to convey this...).<br /><div style="width:525px;margin-left:auto;margin-right:auto;margin-top:10px;margin-bottom:10px;"><br /><div style="font-family: Courier New,monospace; white-space: pre;font-size:11px;background-color:#ffcc66;border:1px solid #3366ff;padding:10px;margin:5px;color:#666666"><br /><div rel='rdfs:SubclassOf'><br /> <div rel='owl:Restriction'><br /> <span property='owl:onProperty'>develops_from</span><br /> <a rel='owl:someValuesFrom' <br /> href='c/CellTypeOntology/immature_B_cell'>immature B cell</a><br /> </div><br /></div><br /></div><br /><div style="text-align:center;font-size:0.8em;"><b>Figure</b>: Declaring Outgoing Relations.</div><br /></div><br />Last thing to do is to add a <u><b>description</b></u> and perhaps some additional <b><u>language terms</u></b> that define the class described on the page. This is done though '<i>rdfs:comment</i>' and '<i>rdfs:label</i>' properties (when the target is text on the same page then the attribute '<b>property</b>' is used in RDfa). Again, it would be better to also append an <b>xml:lang</b> attribute as well specifying the language of the comment or language term.<br /><div style="width:500px;margin-left:auto;margin-right:auto;margin-top:10px;margin-bottom:10px;"><br /><div style="font-family: Courier New,monospace; white-space: pre;font-size:11px;background-color:#ffcc66;border:1px solid #3366ff;padding:10px;margin:5px;color:#666666"><br /><div property='rdfs:comment'>"A mature form of a B cell, a type of <br /> lymphocyte whose defining characteristic is the expression of an <br /> immunoglobulin complex." [GOC:add, ISBN:0781735149]</div><br /><span property='rdfs:label'>mature B lymphocyte</span><br /><span property='rdfs:label'>mature B-cell</span><br /><span property='rdfs:label'>mature B-lymphocyte</span><br /></div><br /><div style="text-align:center;font-size:0.8em;"><b>Figure</b>: Declaring description and additional language terms.</div><br /></div><br /><br /><h3>Testing out: Operator Plugin</h3><br /> <div><br /> <div>It is possible to see how the RDFa extract from any of the concept pages looks like by using a browser plugin: The latest version of Mike Kaply's <a href="https://addons.mozilla.org/nl/firefox/addon/4106">Operator Plugin</a> recognizes RDFa data embedded within XHTML pages.</div><br /> <div style="text-align:left;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlEULC-OxbKWRpbGq4UPNIskzKrllwux0PWHOg_kS_2tVtsMC_qgL-z5P_-OHI6mgxvLhi5j_tv9ksvt0Fh2apbE6ON6KU8xkAdN6LG-ZpnFc683IMTZcXCl7y1kCFC9gsq_Ps36e3mbU/s1600-h/20071116_operator_resources.JPG"><img style="cursor:pointer; cursor:hand;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlEULC-OxbKWRpbGq4UPNIskzKrllwux0PWHOg_kS_2tVtsMC_qgL-z5P_-OHI6mgxvLhi5j_tv9ksvt0Fh2apbE6ON6KU8xkAdN6LG-ZpnFc683IMTZcXCl7y1kCFC9gsq_Ps36e3mbU/s320/20071116_operator_resources.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5137607035609090674" /></a><br /> <div style="font-size:0.8em;margin-bottom:10px;"><b>Figure</b>: Taken from '<a href="http://ontologyonline.org/visualisation/c/CellTypeOntology/neutrophilic_promyelocyte">Cell Type Ontology - neutrophilic_promyelocyte</a>'.</div></div><br /> <div>Browsing any of the Concept pages on OntologyOnline.org should highlight the 'Resources' button, which should show both the ontology to which the concept belongs (if on a concept page) and OWL-syntax like information about the concept itself:</div><br /> <div>Browsing an Ontology information page (e.g. <a href="http://ontologyonline.org/visualisation/c/CellTypeOntology/">Cell Type Ontology</a>) should reveal one resource recognized, the ontology itself.</div><br /> <div style="width:550px;margin-left:auto;margin-right:auto;margin-top:10px"><br /><div style="font-family: Courier New,monospace; white-space: pre;font-size:10px;background-color:#ffcc66;border:1px solid #3366ff;padding:10px;margin:5px;color:#666666;"><br />@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .<br />@prefix owl: <http://www.w3.org/2002/07/owl#> .<br />@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .<br /><br /><http://ontologyonline.org/visualisation/c/CellTypeOntology/><br /> owl:Class <br /><http://ontologyonline.org/visualisation/c/CellTypeOntology/neutrophilic_promyelocyte><br />.<br /><br /><http://ontologyonline.org/visualisation/c/CellTypeOntology/neutrophilic_promyelocyte><br /> rdf:type owl:Class ;<br /> rdfs:label "neutrophilic promyelocyte" ;<br /> rdfs:label "neutrophilic premyelocyte" ;<br /> rdfs:label "neutrophilic progranulocyte" ;<br /> rdfs:comment ""A neutrophil precursor in the granulocytic series, being a cell <br /> intermediate in development between a myeloblast and myelocyte, and containing <br /> a few, as yet undifferentiated, cytoplasmic granules." <br /> [GOC:add, ISBN:0721601464]" ;<br /> rdfs:SubclassOf [ <br /> owl:Restriction [ <br /> owl:onProperty "develops_from" ;<br /> owl:someValuesFrom <c/CellTypeOntology/neutrophilic_myeloblast><br /> ]<br /> ] ;<br /> rdfs:SubclassOf [ <br /> owl:Class <c/CellTypeOntology/promyelocyte><br /> ] .<br /></div><br /> <div style="text-align:center;font-size:0.8em;"><br /> <b>Figure</b>: OWL-DL based Syntax extracted from an <a href="http://OntologyOnline.org">Ontology Online</a> concept page by the firefox <a href="https://addons.mozilla.org/nl/firefox/addon/4106">Operator</a> plugin.<br /> </div><br /></div><br /> </div><br /> <h2 id="conclusion">Conclusion</h2><br /> <div>To my knowledge, this is a first attempt to finally reconcile OWL-RDFS with standard XHTML web pages. <br /> The extracted RDF (as tested with <a href="http://www.w3.org/2007/08/pyRdfa/">RDFa Distiller</a>) does not validate as OWL-DL just yet. But this initial venture into OWL-enabled XHTML shows promise. There is room for improvement, so RDF-Guru or not: <a href="http://groups.google.com/group/ontology-online">feedback and suggestions</a> are greatly appreciated.</div><br /> <div style="margin-top:15px;"> <br /> <!-- Digg BEGIN --><br /> <script type="text/javascript">digg_url = 'http://ontologyonline.blogspot.com/2007/11/embedding-owl-rdfs-syntax-in-xhtml-with.html';</script><br /> <script src="http://digg.com/tools/diggthis.js" type="text/javascript"></script><br /> <!-- Digg END --><br /> <br/>If you found the content of this article interesting, consider digging it.<br /><br/><br /> </div>David Decraenehttp://www.blogger.com/profile/08536691873586041676noreply@blogger.com1tag:blogger.com,1999:blog-8860305835639976845.post-18057708016965503602007-10-20T00:28:00.000-07:002007-10-31T14:45:08.179-07:00Style and Ajax functionality update.<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVz0RQyjF-xBnwCOB2dtdultFgdV5ExTF6lcxnvLDoBvudqUFNsLOWKDM6uInRDAJes6kI9Mcip_fHFbnW4GGuBrcHszGpanZYznhLqAktfmOhGZA2s-_NtYn-ht-zzKSFXStwMoPI57Wj/s1600-h/20071031_newstyle.JPG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVz0RQyjF-xBnwCOB2dtdultFgdV5ExTF6lcxnvLDoBvudqUFNsLOWKDM6uInRDAJes6kI9Mcip_fHFbnW4GGuBrcHszGpanZYznhLqAktfmOhGZA2s-_NtYn-ht-zzKSFXStwMoPI57Wj/s320/20071031_newstyle.JPG" alt="" id="BLOGGER_PHOTO_ID_5127615084899415938" border="0" /></a><br /><ul><li>The search and browse sections of the site have been restyled, be sure to check it out (example links: <a rel="tag" title="a kind of bird" href="http://ontologyonline.org/visualisation/c/TreeofLife/Papasula_abbotti">Papasula abbotti</a>, <a href="http://ontologyonline.org/visualisation/c/GeneOntology/ATP_catabolic_process/">ATP catabolic process</a>).</li><li>A new Logo has been put into place.<br /></li><li>Javascript/<a rel="tag" href="http://nl.wikipedia.org/wiki/Asynchronous_JavaScript_and_XML">AJAX</a> functionality has been upgraded.</li><li>xHTML markup has been improved, the site is not completely <a rel="tag" href="http://microformats.org/wiki/posh">POSH</a> yet (which is hard to achieve for any site using AJAX), but steps have been made in the right direction.</li></ul><br /><br /><p>The new style has actually already been in place for more than a week, the reason why this announcement comes with delay is that I experienced some unexpected problems with the Ajax functionality update. The script ran smoothly in Mozilla Firefox, but getting the script to run in Internet Explorer proved to be a debugging nightmare. At first I resorted to write plumbing code to meet crossbrowser inconsistencies, but soon enough I learned a <span style="font-style: italic;">valuable lesson</span> that each Ajax programmer sooner or later learns:</p><br /><blockquote>"Rely on a javascript-library / framework instead of writing pathwork code, good frameworks take care of browser incompatibilities in a much more elegant way than one person could possibly implement."</blockquote> <br /><p>For me, the holy grail has been <a href="http://jquery.com/">JQuery</a>. Not only does it smooth out the issues with Internet Explorer, you really can do more yet write less code. The methods I had been trying to implement that met crossbrowser differences or just were generally useful (importnode, clone, remove nodes, get elements by class name, ..) apparently also exist in JQuery, and on top of that their implementation is more elegant and functional than what I ever achieved. So JQuery, I'm officially a fan.</p><br /><br /><p>Also discovered another quite funny example of how semantics are missing from search engines (see also the earlier post '<a href="http://ontologyonline.blogspot.com/2007/09/why-we-need-semantic-web.html">why we need the semantic web</a>'). The sequence Ontology has an entry called '<a rel="tag" title="A Band" href="http://ontologyonline.org/visualisation/c/GeneOntology/A_band">A Band</a>'. One of our ontology widgets pulls images from google to match the concept, but in this case the results are not exactly as expected. Querying a search engine and finding results specifically on 'A Band' as in the 'dark-staining region of a sarcomere' instead of some music-playing people might not be that easy.</p>D Decraenehttp://www.blogger.com/profile/15692633380420867056noreply@blogger.com0tag:blogger.com,1999:blog-8860305835639976845.post-79929046821244913442007-09-16T11:03:00.000-07:002007-09-16T12:02:26.874-07:00minor application updateThe web application has received a small update. Ontology information pages now display more details again (example: <a href="http://ontologyonline.org/visualisation/c/GeneOntology/" title="ontology information">GeneOntology information page</a>), this functionality had been broken by the code overhaul we performed this month. In addition we expanded the available namespaces with the <a href="http://ontologyonline.org/visualisation/c/SequenceOntology/sequence_ontology_entity/" title="sequence ontology">sequence ontology</a>, an ontology about gene sequence types and features. The sequence ontology contains 1311 concepts.D Decraenehttp://www.blogger.com/profile/15692633380420867056noreply@blogger.com0tag:blogger.com,1999:blog-8860305835639976845.post-2060185218433568452007-09-10T09:23:00.000-07:002007-11-27T12:16:10.269-08:00Why we need the semantic webTwo search strings with the same syntax can have dramatically different semantics. What if your looking for pages about a less popular topic which happens to share the same syntax as a highly popular yet 'totally irrelevant to you' topic? Finding what you need will take time and ingenuity. The newly introduced concept feeds (external feeds matching the concept of the given page), for example those associated with the concept page on <a href="http://ontologyonline.org/visualisation/c/CellTypeOntology/Cell/" title="Cell Ontology Page">Cells (in it's biological sense)</a>, demonstrate our dire need for semantically enabled search engines.<br /><br />'Cell', as an English term, applies to a wide variety of concepts: 'cell' in the biological sense, 'cell' as in 'cell phone', 'cell' as in prison cell, 'cell' as in an aggregation of people, and many more including some combinatorial uses (e.g. a title for games, novels, etc). No search engine at the moment is capable of disambiguating between these different meanings and filter results accordingly. The books feed will display a novel by Stephen King, and a book about 9/11. The blog feed lists a police break-up of a Nazi-cell, many entries about cell phones and one about solar cells. The Digg news feed is again mainly about cell phones. Imagine if one of them offered the ability to filter results pertaining only to cell in the biological sense, you might imagine that becoming the next-gen search engine.<br />And that's exactly what ontologies do, provide a means for disambiguating syntactically equal but semantically different items. Ontologies tell you that there are in fact different concepts (owl classes), one being a designed artifact, another a part of an organism, yet another being a certain aggregation of people, etc etc which all share the same language term 'cell'. Knowing this is already half the work.<br /><br />You could argue that dictionaries might point to you the different semantics as well, yet by browsing the ontology you have easy access along a variety of axes (horizontal & hierarchical) to a plethora of related concepts such as organisms and cell structures for cell in it's biological sense, telephony in the case of cell phones, social groups and people in the case of 'cell' as an aggregation of people.. you get the picture. When using an ontology as a backbone for indexing, you might be able to figure out which concept applies by examining the context in which it is found.<br /><br />Tagging/Indexing with <a href="http://ontologyonline.org/visualisation/c/Directory/Concept/" title="definition of concept">concepts</a>, as opposed to language terms, might be a core requirement for future search engines.<br /><div><br /><div><br /><script type="text/javascript">digg_url = 'http://ontologyonline.blogspot.com/2007/09/why-we-need-semantic-web.html';digg_skin = 'compact';</script><br /><script src="http://digg.com/tools/diggthis.js" type="text/javascript"></script></div><br /></div>D Decraenehttp://www.blogger.com/profile/15692633380420867056noreply@blogger.com0tag:blogger.com,1999:blog-8860305835639976845.post-21787489582119621672007-09-09T12:47:00.000-07:002007-09-09T13:59:53.612-07:00Concept Feed Widget, a new level of ontology interaction.We are pretty excited about some new functionality we added to the Ontology Concept Information Pages. By selecting the appropriate tab button you can now retrieve a list of the most relevant Books, Blog entries and Digg news Items (of any) about the concept itself. <br />For a quick example: see <a href="http://ontologyonline.org/visualisation/c/Directory/Domain_ontology/" title="domain ontology feeds">Domain Ontology - Ontology Directory</a>. This gives you some amazingly focused search results with only one handclick away.<br /> <br /><div style="text-align:center;"> <br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhy1eyb8k6VCaKrmRnh3u6jUv6cXJCV-toVCeYN-AQTkaHtV0HN48jiiRj83XWZtytwJCYsJncvFKgfPaVzx2KcrVtcjheVdU7_oxAV0lW9YDQBD5piLdD7KGYTpl3Rhq3oFyTFz2Jnuf2e/s1600-h/20071109_widget.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhy1eyb8k6VCaKrmRnh3u6jUv6cXJCV-toVCeYN-AQTkaHtV0HN48jiiRj83XWZtytwJCYsJncvFKgfPaVzx2KcrVtcjheVdU7_oxAV0lW9YDQBD5piLdD7KGYTpl3Rhq3oFyTFz2Jnuf2e/s320/20071109_widget.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5108294227924852818" /></a><div style="font-size:smaller;">The new Concept feed widget retrieving books about 'domain ontology'.</div></div>D Decraenehttp://www.blogger.com/profile/15692633380420867056noreply@blogger.com0tag:blogger.com,1999:blog-8860305835639976845.post-25887484139579865782007-09-03T11:52:00.000-07:002007-09-03T12:17:17.814-07:00New OntologyOnline WebApp VersionA new version of the <a href="http://ontologyonline.org/visualisation/c/Namespaces/" title="OntologyOnline Semantic Web application">ontologyonline web application</a> has been uploaded.<br/><br />This marks the completion of the first phase of a major code overhaul. The most important result is that all ontologies now aggregate in one MySQl database.<br/><br />The biggest change should be noted in the search results section. The search engine now mines all namespaces and the search output provides the ability to filter on both namespace and language (if the results contain terms from multiple languages). I'm hoping the transition went smooth, although a little hiccup here and there is not totally avoidable.<br /><div align="center"><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2tPMrRe0RZJ8BZrn72jLgVa1PcBEbHlHEFfyACiK63Z8_AD7fAKhLw6RZIwcJ1IDanSBbszWyEnU_XgsKJrPWA6pdi-PtYq6HyrIas3aPknrN-S13ehTaBRijeeHhz7UMAQy5Yl9Xag9R/s1600-h/20071107_searchengine.jpg"><img style="cursor:pointer; cursor:hand;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2tPMrRe0RZJ8BZrn72jLgVa1PcBEbHlHEFfyACiK63Z8_AD7fAKhLw6RZIwcJ1IDanSBbszWyEnU_XgsKJrPWA6pdi-PtYq6HyrIas3aPknrN-S13ehTaBRijeeHhz7UMAQy5Yl9Xag9R/s320/20071107_searchengine.jpg" border="0" alt="OntologyOnline Search Engine" id="BLOGGER_PHOTO_ID_5106057537806114882" /></a><div>Screenshot of the search engine in action.</div></div><br /><h4>About the search engine</h4><br /><p>The ontology online search engine differs quite dramatically from regular google/yahoo etc searches. Each ontologyonline web page is about one given unique ontology concept. In contrast to google/yahoo and similar search engines the search is not about retrieving relevant pages which contain the specified search string in text, but about retrieving exact concepts: As such our search engine attempts to match the search string against all names and synonyms (including different languages) of the concepts present in the knowledge warehouse. <br />If no exact match can be found, a list of partial matches (where the name or synonym contains part of your search string) will be displayed, in alphabetical order.<br/><br />So if one for example wishes to search for neuroblast, the search string '<a href="http://ontologyonline.org/visualisation/c/CellTypeOntology/neuro/" id="ojt3" title="Search for 'neuro' at OntologyOnline.org">neuro</a>' will yield partial matches for, amongst other, 'neuroblast'. Functionality of the engine is expected to increase/improve in the future.</p>D Decraenehttp://www.blogger.com/profile/15692633380420867056noreply@blogger.com0tag:blogger.com,1999:blog-8860305835639976845.post-90871275846907476192007-07-16T00:13:00.000-07:002007-07-16T00:25:18.131-07:00Code overhaulIt's been quiet for some time on the ontology online newsfront, reason is that we are performing a major overhaul of the java code. Currently, each imported ontology for which the content should be preserved as is requires it's own database schema. This imposes some strong limitations, and we are therefore recoding to centralise ontologies to one unique MySQL database schema, this is done by implementing ontology-specific namespaces. It will open up a lot of exciting possibilities once finished (which may take some time). Some<br />results will be a greatly improved search engine, the possibility to offer a lot more content, etc..D Decraenehttp://www.blogger.com/profile/15692633380420867056noreply@blogger.com0tag:blogger.com,1999:blog-8860305835639976845.post-91145844672338746422007-06-25T10:16:00.000-07:002007-07-03T09:37:54.938-07:00A true semantic web applicationOntologyOnline.org was launched in April 2007. It offers one of the first true semantic web applications (often referenced as web 3.0) by allowing users to interact with ontologies at runtime. Ontology Online's proper search engine crawls the available ontologies for exact phrases, but also synonyms and even word fragments, the querying ability is only limited by the content itself, not by the semantics. <br /><br />As an example illustrating this, when searching organisms with the OntologyOnline search engine the search parameters '<a href="http://ontologyonline.org/visualisation/Browse.jsp?ns=TreeofLife&kn=velvet+worm" title="Search for velvet worm">velvet worm</a>', '<a href="http://ontologyonline.org/visualisation/Browse.jsp?ns=TreeofLife&kn=spitting+worm" title="Search for spitting worm">spitting worm</a>', '<a href="http://ontologyonline.org/visualisation/Browse.jsp?ns=TreeofLife&kn=onychophoran" title="search for onychophoran">onychophoran</a>', or even the word fragment '<a href="http://ontologyonline.org/visualisation/Browse.jsp?ns=TreeofLife&kn=onycho" title="search for onycho word fragment">onyocho</a>' will all lead to the same page describing the <a href="http://ontologyonline.org/visualisation/c/TreeofLife/Onychophora%20-%20phylum/" title="onychophora">Onychophora(e.g. velvet worms) phylum</a>.<br /><br />The search engine is also accessible by means of a <a href="http://www.google.com/ig/directory?synd=open&num=24&url=http://OntologyOnline.org/xml/OntologyOnline_gadget.xml" title="Ontology Online google gadget">Google Gadget</a>.D Decraenehttp://www.blogger.com/profile/15692633380420867056noreply@blogger.com0tag:blogger.com,1999:blog-8860305835639976845.post-80558945866824795482007-06-17T06:33:00.000-07:002007-06-17T07:15:54.795-07:00All about OWL - RDF tags.We have started adding OWL - RDF element tag descriptions and definitions to the <a href="http://ontologyonline.org/visualisation/c/Directory/Rdf%3Aabout+attribute/" title="Ontology Directory">Ontology Directory Project</a> at <a href="http://OntologyOnline.org" title="Ontology Online">Ontology Online</a>. You might have seen that the official W3C <a href="http://www.w3.org/TR/2004/REC-owl-guide-20040210/" title="W3C Documentation on OWl">documentation on OWL</a> tends to be quite verbose, with the <a href="http://ontologyonline.org/visualisation/c/Directory/Rdf%3Aabout+attribute/" title="Ontology Directory">Ontology Directory Project</a> we wish to provide a focused, comprehensive and quickly accessible description of the OWL language.<br />The benefits of this projects are that by offering documentation in the form of an ontology you can deliver indepth information without having to resort to lengthy text-descriptions which repeat a lot of the same information.<br /><br />For an example see <b><a href="http://ontologyonline.org/visualisation/c/Directory/Owl%3Aclass/" title="owl:Class">owl:class definition</a></b>, where the hierarchy around this concept and the horizontal relations attributed to this concept provide a level of detail you would only be able to express textually by writing several paragraphs of information.D Decraenehttp://www.blogger.com/profile/15692633380420867056noreply@blogger.com0tag:blogger.com,1999:blog-8860305835639976845.post-1060503528467212752007-05-14T11:27:00.000-07:002007-06-17T07:15:12.071-07:00The Ontology directoryI've started putting together an ontological directory of existing third-party ontologies, controlled vocabularies , terminologies, and more.<br />While it is still incomplete, I expect it to grow substantially in the nearby future.<br /><br />To browse: <a href="http://ontologyonline.org:9080/visualisation/Browse.jsp?ns=Directory&kn=ontology">Ontology Directory</a>D Decraenehttp://www.blogger.com/profile/15692633380420867056noreply@blogger.com0tag:blogger.com,1999:blog-8860305835639976845.post-12300990886793505542007-05-08T12:38:00.000-07:002007-05-08T12:41:44.428-07:00Dynamically Generated Ontology PagesWe are in the process of updating the website with dynamically generated ontology pages and searchbox functionality for content.<br />For a preview (still under construction) please see:<br /><a href="http://ontologyonline.org:9080/visualisation/Browse.jsp">Online Ontology Browsing</a>.D Decraenehttp://www.blogger.com/profile/15692633380420867056noreply@blogger.com0tag:blogger.com,1999:blog-8860305835639976845.post-4483262558001169202007-05-04T23:58:00.000-07:002007-05-05T00:00:37.125-07:00Blog creationThis blog has been created by <a href="http://www.ontologyonline.org/main.html">Ontology Online</a>.<br />Its purpose is to discuss possibilities in online ontology visualisation (website integration) and use.D Decraenehttp://www.blogger.com/profile/15692633380420867056noreply@blogger.com0