<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Frederick Giasson's Weblog &#187; Structured Dynamics</title>
	<atom:link href="http://fgiasson.com/blog/index.php/category/structured-dynamics/feed/" rel="self" type="application/rss+xml" />
	<link>http://fgiasson.com/blog</link>
	<description></description>
	<lastBuildDate>Tue, 06 Jul 2010 01:14:18 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Semantic Components</title>
		<link>http://fgiasson.com/blog/index.php/2010/07/05/semantic-components/</link>
		<comments>http://fgiasson.com/blog/index.php/2010/07/05/semantic-components/#comments</comments>
		<pubDate>Mon, 05 Jul 2010 21:32:32 +0000</pubDate>
		<dc:creator>Fred</dc:creator>
				<category><![CDATA[Semantic Web]]></category>
		<category><![CDATA[Structured Dynamics]]></category>

		<guid isPermaLink="false">http://fgiasson.com/blog/?p=1055</guid>
		<description><![CDATA[	
	<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Focoins.info%3Agenerator&amp;rft.title=Semantic Components&amp;rft.aulast=Giasson&amp;rft.aufirst=Frédérick&amp;rft.subject=Semantic Web&amp;rft.subject=Structured Dynamics&amp;rft.source=Frederick Giasson&#8217;s Weblog&amp;rft.date=2010-07-05&amp;rft.type=blogPost&amp;rft.format=text&amp;rft.identifier=http://fgiasson.com/blog/index.php/2010/07/05/semantic-components/&amp;rft.language=English"></span>
For few months now at Structured Dynamics we have been developing what we call &#8220;Semantic Components&#8220;. A semantic component is an ontology-driven component, or widget, based on Flex. Such a component takes record descriptions, ontologies and target attributes/types as inputs and outputs some (possibly interactive) visualizations of the records. Depending on the logic described in [...]]]></description>
			<content:encoded><![CDATA[	
	<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Focoins.info%3Agenerator&amp;rft.title=Semantic Components&amp;rft.aulast=Giasson&amp;rft.aufirst=Frédérick&amp;rft.subject=Semantic Web&amp;rft.subject=Structured Dynamics&amp;rft.source=Frederick Giasson&#8217;s Weblog&amp;rft.date=2010-07-05&amp;rft.type=blogPost&amp;rft.format=text&amp;rft.identifier=http://fgiasson.com/blog/index.php/2010/07/05/semantic-components/&amp;rft.language=English"></span>
<p>For few months now at <a href="http://structureddynamics.com/">Structured Dynamics</a> we have been developing what we call &#8220;<a href="http://openstructs.org/semantic-components/">Semantic Components</a>&#8220;. A semantic component is an ontology-driven component, or widget, based on Flex. Such a component takes record descriptions, ontologies and target attributes/types as inputs and outputs some (possibly interactive) visualizations of the records. Depending on the logic described in the input schema and the input records descriptions, the semantic component may behave differently to optimize its own layout/behavior to users.</p>
<p>The purpose of these semantic components is to have a framework of adaptive user interfaces that can be plugged directly to <a href="http://openstructs.org/structwsf">structWSF</a> Web service endpoint instances. The goal is to plug some data, schema and target attributes into these components, and then to let them change their behaviors and appearances depending on the input data and schema.</p>
<p>The picture is simple. We tell the components: here is a set of records serialized in <a href="http://openstructs.org/structxml">structXML</a>, here is a set of <a href="http://openstructs.org/iron/iron-specification#mozTocId217695">schema</a> serialized in <a href="http://openstructs.org/iron/iron-specification#mozTocId408837">irXML</a>, and here are the target attributes and types I want the components to display. Then, different components get selected and behave differently depending on how the schema have been defined, and how the records have been described.</p>
<p>Ultimately, development time is saved because developers don&#8217;t have to hard-code the appearance and the behavior of the user interfaces depending on the data and schema that the user interface was receiving at a certain point in time: the logic is built-in to the components.</p>
<h3>Overall Workflow</h3>
<p>These various semantic components get embedded in a layout canvas. By interacting with the various components, new queries are generated (most often as SPARQL queries) to the various structWSF Web services endpoints. The result of these requests is to generate a structured results set, which includes various types and attributes.</p>
<p>An internal ontology that embodies the desired behavior and display options (SCO, the Semantic Component Ontology) is matched with these types and attributes to generate the formal instructions to the semantic components. These instructions are presented via the sControl component, that determines which widgets (individual components) needs to be invoked and displayed on the layout canvas.</p>
<p><img class="aligncenter size-full wp-image-1056" title="Semantic Components Framework" src="http://fgiasson.com/blog/wp-content/uploads/2010/07/Untitled1.png" alt="Semantic Components Framework" width="433" height="430" /></p>
<p>New interactions with the resulting displays and components cause the iteration path to be generated anew, again starting a new cycle of queries and results sets.</p>
<p>As these pathways and associated display components get created, they can be named and made persistent for later re-use or within dashboard invocations.</p>
<h3>A Shift in Design Perspective</h3>
<p>There is a bit of a user interface design shift here. User interfaces have always been developed to present information (data) to users, and to let them interact with it. When someone develops such an interface, he has to make thousands of decisions to enable the user interface to cope with different data description situations. Our semantic component framework tries to remove some of this burden on the shoulders of the designer so that it takes these decisions itself. Such decisions are in the range of:</p>
<ul>
<li>The      text control X displays the value of an attribute Y. If the attribute Y      doesn&#8217;t exist in the description of a record A, then we have to remove it      from the user interface.
<ul>
<li>Note:       if the text control X gets removed from the interface, there is a good       chance that we may have to change other controls as well so that the user       interface remains usable to the users.</li>
</ul>
</li>
<li>If the      text control X gets removed, then there is no reason why its associated icon      image should remain in the user interface, so let&#8217;s provide accommodations      to remove it as well.</li>
<li>Some      attributes describing the records have values that are comparable with      related attributes, so let&#8217;s compare these values in a linear chart</li>
<li>Some      records may be useful baselines for comparison with other records, so      let&#8217;s allow that to be externally specified, too.</li>
<li>All these      decisions are true for record A, but not for record B since we have a      value to display for the text control X, so let&#8217;s behave differently by      displaying the text control X and its associated icon image.</li>
<li>Etc.</li>
</ul>
<p>All of these kinds of decisions are now made by the semantic components within our new framework depending on how the input records are described and what ontologies (schema) drive the system.</p>
<p>Thus, the designer can now put more time and effort on the questions of general layout and behavior, themes and styles for her applications, without caring much about how to display information for specific records descriptions.</p>
<p>Perhaps most significantly is that the behavior and presentation of information can now be described within these records and schema, an activity that users and knowledge workers can do directly, thus bypassing the need for IT and development. A new balance gets established: developers focus on creating generic tools (widgets or components); consumers of data (users and knowledge workers) determine how they want to display and compare their information.</p>
<h3>Unbelievably Fast Implementation</h3>
<p>While this shift or change may appear on its face to require some big new framework, the fact is we have been able to accomplish this with simple approaches leading to simple outcomes. Structured Dynamics has been able to put in place a complete Web portal of integrated data that publish all its data in several serialization languages, with many utilities by which users can interact with the data, slice and dice it, visualize it, and filter and manipulated it &#8230; and all of this in within two weeks of effort for one developer!</p>
<p>One good example of this is the Citizen Dan demo, composed of Census data and stories related to the Iowa City Metropolitan Area that <a href="http://www.mkbergman.com/881/two-presentations-at-semtech-2010/">Mike presented at SemTech 2010</a> (<a href="http://citizen-dan.org/details.html">and some screenshots</a>).</p>
<p>Oh, and did I mention? This system handles text, images, tags, maps, dashboards, numeric data and any kind of structure you can throw at it. And all with the same set of generic components (to which we and others are adding).</p>
<h3>More Information</h3>
<p>Here is some more information about the semantic component framework and its related pieces:</p>
<ul>
<li><a href="http://openstructs.org/semantic-components/">Homepage</a></li>
<li><a href="http://openstructs.org/semantic-components/manual">Manual</a></li>
<li><a href="http://code.google.com/p/semanticcomponents/">Source code repository</a></li>
<li><a href="http://openstructs.org/doc/code/semanticcomponents/index.html">Code      documentation</a></li>
<li><a href="http://groups.google.com/group/open-semantic-framework">Discussion      forum</a></li>
<li><a href="http://openstructs.org/semantic-components/demos">Demos</a></li>
</ul>
<p>This is an alpha version of the library. We would also welcome any contributor to the project! We hope you like what you see and that you will be able to leverage it the way we did so that you, and your team, can save as much time as we did!</p>
]]></content:encoded>
			<wfw:commentRss>http://fgiasson.com/blog/index.php/2010/07/05/semantic-components/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Global structWSF Statistics Report</title>
		<link>http://fgiasson.com/blog/index.php/2010/04/09/global-structwsf-statistics-report/</link>
		<comments>http://fgiasson.com/blog/index.php/2010/04/09/global-structwsf-statistics-report/#comments</comments>
		<pubDate>Fri, 09 Apr 2010 15:53:18 +0000</pubDate>
		<dc:creator>Fred</dc:creator>
				<category><![CDATA[Structured Dynamics]]></category>
		<category><![CDATA[conStruct]]></category>
		<category><![CDATA[structWSF]]></category>

		<guid isPermaLink="false">http://fgiasson.com/blog/?p=1048</guid>
		<description><![CDATA[	
	<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Focoins.info%3Agenerator&amp;rft.title=Global structWSF Statistics Report&amp;rft.aulast=Giasson&amp;rft.aufirst=Frédérick&amp;rft.subject=Structured Dynamics&amp;rft.subject=conStruct&amp;rft.subject=structWSF&amp;rft.source=Frederick Giasson&#8217;s Weblog&amp;rft.date=2010-04-09&amp;rft.type=blogPost&amp;rft.format=text&amp;rft.identifier=http://fgiasson.com/blog/index.php/2010/04/09/global-structwsf-statistics-report/&amp;rft.language=English"></span>
Today we released a simple structWSF nodes statistics report. It aggregates different statistics from all know (and accessible) structWSF nodes on the Web. It is still in its early stage, but aggregated statistics so far are quite interesting.
This global statistics reports has two aims:

Monitoring      the evolution of the usage of [...]]]></description>
			<content:encoded><![CDATA[	
	<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Focoins.info%3Agenerator&amp;rft.title=Global structWSF Statistics Report&amp;rft.aulast=Giasson&amp;rft.aufirst=Frédérick&amp;rft.subject=Structured Dynamics&amp;rft.subject=conStruct&amp;rft.subject=structWSF&amp;rft.source=Frederick Giasson&#8217;s Weblog&amp;rft.date=2010-04-09&amp;rft.type=blogPost&amp;rft.format=text&amp;rft.identifier=http://fgiasson.com/blog/index.php/2010/04/09/global-structwsf-statistics-report/&amp;rft.language=English"></span>
<p><img class="alignright size-full wp-image-941" title="triple_120" src="http://fgiasson.com/blog/wp-content/uploads/2009/06/triple_120.png" alt="triple_120" width="120" height="120" />Today we released a simple structWSF nodes statistics report. It aggregates different statistics from all know (and accessible) structWSF nodes on the Web. It is still in its early stage, but aggregated statistics so far are quite interesting.</p>
<p>This global statistics reports has two aims:</p>
<ol>
<li>Monitoring      the evolution of the usage of structWSF, and</li>
<li>Monitoring      the overall performance of structWSF web services in different setups for      different usages</li>
</ol>
<p><a href="http://openstructs.org/structwsf/stats/">The report is accessible here in all time</a>. The report is updated hourly.</p>
<h3>Overall Statistics</h3>
<p>The main statistics of the report are:</p>
<ul>
<li>The      number of structWSF nodes participating to the report</li>
<li>The      total number of HTTP queries processed by the structWSF nodes</li>
<li>The      total number of datasets created on the nodes</li>
<li>The      total number of records indexed, and</li>
<li>The      total number of triples indexed</li>
</ul>
<p>These statistics gives a general overview of the size of the “global structWSF network of nodes”.</p>
<h3>Web Service Statistics</h3>
<p>Each Web service endpoint has its own statistics, which are:</p>
<ul>
<li>The      number of queries processed by the web service</li>
<li>The      average time it took to process the query (without the network latency      between the requested and the web service endpoint server)</li>
<li>All      the requested mime-types, and the number of times a mime-type have been      requested, and</li>
<li>All      the HTTP response code returned by the endpoint</li>
</ul>
<p>These Web service specific statistics are helpful to have a general understanding of each web service endpoint.</p>
<p>The average time per query is helpful to know what kind of performance a developer should expect when using this web service endpoint.</p>
<p>The list of requested MIME types gives an overall usage of the web service endpoint: are users mostly requesting XML data, JSON data, RDF+XML data, etc. Such usage statistics is helpful to prioritize future development tasks.</p>
<p>The list of all HTTP response code is helpful to notice possible issues with a web service endpoint. If error codes are returned often, this could pinpoint a possible bug in the web service endpoint, an issue with its usage that could lead to a fix in the documentation, etc.</p>
<h3>Participating to the Global structWSF Statistics Report</h3>
<p>If you are operating a structWSF instance and want to participate to the Global structWSF Statistics Report, you first have to download the new <a href="http://code.google.com/p/structwsf/source/browse/branches/dev/statisticsBroker.php">statisticsBroker.php script</a> and install it on your structWSF node.</p>
<p>The statistics broker script is what calculates the statistics of a structWSF node, and what is used to aggregate statistics from all nodes, to generate the consolidated report.</p>
<p>The first thing to do is to edit the file, and to change the value of the $enableStatisticsBroadcast variable from FALSE to TRUE at the line 46. This will enable the script.</p>
<p>Normally you should install the script in the root folder of your structWSF node, but you can install it anywhere on your server, where it will be accessible on the Web.</p>
<p><a href="http://openstructs.org/structwsf/stats/subscribe/">The final step is to register your node to the reporting system</a>. It is just a matter of registering the URL address where the statisticsBroker.php script is accessible. It should be added to the global report within 24 hours, once I validated it.</p>
<h3>Other Usage of the Statistics Broker</h3>
<p>This is nice to participate to such global statistics report, but much more can be done with such a statistics broker.</p>
<p>A structWSF developer or a structWSF node maintainer could use it to have statistics of the local node. As described above, such statistics can be used to pinpoint possible performance issues, bottlenecks and possible bugs in web service endpoints. It could also be use to plan future extension of the network to scale some highly used web service endpoint in the network.</p>
<p>Additionally, the statistics broker could be used in a broader server maintenance architecture. It could be used in conjunction with another script to be part of a <a href="http://ganglia.sourceforge.net/">Ganglia</a> monitoring system for example. Performances could be monitored by Ganglia, rate of requests per hours, raise in the number different HTTP response returned by some web services. Additionally, each of these statistics could be bound to different alerts notification messages that would alert the structWSF system maintainers and developers of possible issues with the network.</p>
<h3>Next Step</h3>
<p>The next step with the statistics broker will be to create a structWSF web service out of it. That way, structWSF node maintainers will be easily able to define access and usage permissions for such statistics.</p>
]]></content:encoded>
			<wfw:commentRss>http://fgiasson.com/blog/index.php/2010/04/09/global-structwsf-statistics-report/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>structWSF Web Services Tutorial</title>
		<link>http://fgiasson.com/blog/index.php/2010/02/18/structwsf-web-services-tutorial/</link>
		<comments>http://fgiasson.com/blog/index.php/2010/02/18/structwsf-web-services-tutorial/#comments</comments>
		<pubDate>Thu, 18 Feb 2010 21:45:40 +0000</pubDate>
		<dc:creator>Fred</dc:creator>
				<category><![CDATA[Structured Dynamics]]></category>
		<category><![CDATA[conStruct]]></category>
		<category><![CDATA[irON]]></category>
		<category><![CDATA[structWSF]]></category>

		<guid isPermaLink="false">http://fgiasson.com/blog/?p=1044</guid>
		<description><![CDATA[	
	<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Focoins.info%3Agenerator&amp;rft.title=structWSF Web Services Tutorial&amp;rft.aulast=Giasson&amp;rft.aufirst=Frédérick&amp;rft.subject=Structured Dynamics&amp;rft.subject=conStruct&amp;rft.subject=irON&amp;rft.subject=structWSF&amp;rft.source=Frederick Giasson&#8217;s Weblog&amp;rft.date=2010-02-18&amp;rft.type=blogPost&amp;rft.format=text&amp;rft.identifier=http://fgiasson.com/blog/index.php/2010/02/18/structwsf-web-services-tutorial/&amp;rft.language=English"></span>
One thing that was hard to do with structWSF was explaining what structWSF is, and how users can interact with it. For most people, structWSF was abstracted behind conStruct and they didn’t know that each single functionalities of conStruct was bound to one, or multiple queries to one, or multiple, structWSF instance.
It is the reason [...]]]></description>
			<content:encoded><![CDATA[	
	<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Focoins.info%3Agenerator&amp;rft.title=structWSF Web Services Tutorial&amp;rft.aulast=Giasson&amp;rft.aufirst=Frédérick&amp;rft.subject=Structured Dynamics&amp;rft.subject=conStruct&amp;rft.subject=irON&amp;rft.subject=structWSF&amp;rft.source=Frederick Giasson&#8217;s Weblog&amp;rft.date=2010-02-18&amp;rft.type=blogPost&amp;rft.format=text&amp;rft.identifier=http://fgiasson.com/blog/index.php/2010/02/18/structwsf-web-services-tutorial/&amp;rft.language=English"></span>
<p>One thing that was hard to do with <a href="http://openstructs.org/structwsf/">structWSF</a> was explaining what structWSF is, and how users can interact with it. For most people, structWSF was abstracted behind <a href="http://constructscs.com/">conStruct</a> and they didn’t know that each single functionalities of conStruct was bound to one, or multiple queries to one, or multiple, structWSF instance.</p>
<p>It is the reason why we took the time to write a complete structWSF interaction tutorial. This tutorial explains what the general structWSF architecture is, and it describes a series of general interaction usecases. We hope that this tutorial will helps developers and system implementators understanding the capabilities of structWSF and how they can use it.</p>
<p><a href="http://openstructs.org/structwsf/web-services-tutorial">You can read the complete structWSF Web Services Tutorial here.</a></p>
<p>Additionally, we released a new version of <a href="http://openstructs.org/blog/2010/2/fgiasson/structwsf-10a5-released">structWSF</a>, <a href="http://constructscs.com/blog/fgiasson/2010/2/construct-6x-1x-dev-5-released">conStruct</a> and the <a href="http://openstructs.org/blog/2010/2/fgiasson/irjson-parser-10a2-released">irJSON Parser</a> which are products of this toturial.</p>
]]></content:encoded>
			<wfw:commentRss>http://fgiasson.com/blog/index.php/2010/02/18/structwsf-web-services-tutorial/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Behind Oz&#8217;s Curtain</title>
		<link>http://fgiasson.com/blog/index.php/2010/01/27/behind-ozs-curtain/</link>
		<comments>http://fgiasson.com/blog/index.php/2010/01/27/behind-ozs-curtain/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 20:50:41 +0000</pubDate>
		<dc:creator>Fred</dc:creator>
				<category><![CDATA[Semantic Web]]></category>
		<category><![CDATA[Structured Dynamics]]></category>

		<guid isPermaLink="false">http://fgiasson.com/blog/?p=1030</guid>
		<description><![CDATA[	
	<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Focoins.info%3Agenerator&amp;rft.title=Behind Oz&#8217;s Curtain&amp;rft.aulast=Giasson&amp;rft.aufirst=Frédérick&amp;rft.subject=Semantic Web&amp;rft.subject=Structured Dynamics&amp;rft.source=Frederick Giasson&#8217;s Weblog&amp;rft.date=2010-01-27&amp;rft.type=blogPost&amp;rft.format=text&amp;rft.identifier=http://fgiasson.com/blog/index.php/2010/01/27/behind-ozs-curtain/&amp;rft.language=English"></span>
Benjamin Nowack, creator of ARC and Trice, wrote an interesting blog post about the place of Microformats and RDFa in the HTML 5 specification. I am not deep into the specification itself, and so may lack some history context. However, the most interesting point in this article is not related to Microformats, RDFx or the [...]]]></description>
			<content:encoded><![CDATA[	
	<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Focoins.info%3Agenerator&amp;rft.title=Behind Oz&#8217;s Curtain&amp;rft.aulast=Giasson&amp;rft.aufirst=Frédérick&amp;rft.subject=Semantic Web&amp;rft.subject=Structured Dynamics&amp;rft.source=Frederick Giasson&#8217;s Weblog&amp;rft.date=2010-01-27&amp;rft.type=blogPost&amp;rft.format=text&amp;rft.identifier=http://fgiasson.com/blog/index.php/2010/01/27/behind-ozs-curtain/&amp;rft.language=English"></span>
<p>Benjamin Nowack, creator of <a href="http://arc.semsol.org/">ARC</a> and <a href="http://trice.semsol.org/">Trice</a>, <a href="http://bnode.org/blog/2010/01/26/microdata-semantic-markup-for-both-rdfers-and-non-rdfers">wrote an interesting blog post about the place of Microformats and RDFa in the HTML 5 specification</a>. I am not deep into the specification itself, and so may lack some history context. However, the most interesting point in this article is not related to Microformats, RDFx or the new HTML 5 specification.</p>
<p>The point is that apparently, some people believe that it is RDF or nothing. This is not new, but is that true?</p>
<p>People (and particularly enterprises) want the benefits of structured data, not necessarily RDF. In fact, many people don&#8217;t know about RDF, or don&#8217;t understand RDF, or just don&#8217;t care about RDF. But, is it because you don&#8217;t know, understand or care about RDF that you cannot benefit from it? No, certainly not. And I think that is what Benjamin is talking about when he mentions things such as: &#8220;[...] <em>to get RDF to the broader developer community</em>&#8220;, &#8220;[...] <em>here could have been a solution that would have served everybody sufficiently well, both HTMLers and RDFers</em>&#8220;. &#8220;[...] <em>they would most probably have been able to define RDFa 1.1 as a proper superset of Microdata&#8221;</em>. RDF can be incarnated in multiple bodies, but it is still RDF. I think it is what Benjamin was suggesting, and it the path we took at <a href="http://structureddynamics.com">Structured Dynamics</a>.</p>
<p>We choose to use RDF behind Oz&#8217;s curtain. This means that at the core of any of our methodologies, systems and specifications, we use RDF. Why? Because it is the more flexible description framework available that helps us handle any other source of data. However, does that mean that we should push RDF in everybody&#8217;s face? Certainly not.</p>
<p>Our work with different enterprises from all kind of domains told us that we have to look beyond RDF while still using it (as paradoxically as that may appear). For example, we developed <a href="http://openstructs.org/structwsf/">structWSF</a> and <a href="http://constructscs.com">conStruct</a> such that people can upload (and manage) their data in different formats while being able to export it in all other different formats. At the core, these systems use RDF to manipulate all these different kind of formats, but from the outside, users simply use the format they care about, they use, or that they have available in their workflow. These users benefits from RDF without knowing it, understanding it or without caring about it. We don’t think RDF is for everyone, but everyone can benefit from RDF.</p>
<p>Another example of RDF behind Oz&#8217;s curtain is the <a href="http://openstructs.org/iron/iron-specification">irON</a> description framework and its three serialization profiles: <a href="http://openstructs.org/iron/iron-specification#mozTocId462570">irJSON</a>, <a href="http://openstructs.org/iron/iron-specification#mozTocId408837">irXML</a> and <a href="http://openstructs.org/iron/iron-specification#mozTocId603499">commON</a> that we developed. As stated in the <a href="http://openstructs.org/iron/iron-specification#mozTocId212042">Purpose section</a> of this document, the goal was quite clear:</p>
<p style="padding-left: 30px;"><em>irON (instance record and Object Notation) is a abstract notation and associated vocabulary for specifying RDF triples and schema in non-RDF forms. Its purpose is to allow users and tools in non-RDF formats to stage interoperable datasets using RDF. The notation supports writing RDF and schema in JSON (irJSON), XML (irXML) and comma-delimited (CSV) formats (commON). The notation specification includes guidance for creating instance records (including in bulk), linkages to existing ontologies and schema, and schema definitions. Profiles and examples are also provided for each of the irXML, irJSON and commON serializations.</em></p>
<p style="padding-left: 30px;"><em> </em></p>
<p style="padding-left: 30px;"><em>irON is premised on these considerations and observations:</em></p>
<p style="padding-left: 30px;"><em> </em></p>
<ul style="padding-left: 30px;">
<li><em>RDF (Resource Description Framework) is a powerful canonical data model for data interoperability</em></li>
<li><em>However, most existing data is not written in RDF and many authors and publishers prefer other formats for various reasons</em></li>
<li><em>Many formats that are easier to author and read than RDF are variants of the attribute-value pair construct [2], which can readily be expressed as RDF, and</em></li>
<li><em>A common abstract notation for converting to RDF would also enable non-RDF formats to become somewhat interchangeable, thus allowing the strengths of each to be combined.</em></li>
</ul>
<p style="padding-left: 30px;"><em> </em></p>
<p style="padding-left: 30px;"><em>The irON notation and vocabulary is designed to allow the conceptual structure (&#8221;schema&#8221;) of datasets to be described, to facilitate easy description of the instance records that populate those datasets, and to link different structures for different schema to one another. In these manners, more-or-less complete RDF data structures and instances can be described in alternate formats and be made interoperable. irON provides a simple and naive information exchange notation expressive enough to describe most any data entity.</em></p>
<p>I think this is what Benjamin was talking about in his article, and the kind of mindset he was suggesting the RDF community to adopt. At least this is the minding we adopted at Structured Dynamics, and apparently it is the minding Benjamin adopted for his own business. I am sure there are many other people and organizations out there that are adopting the same point of view according to RDF and its role in the current data ecosystem.</p>
]]></content:encoded>
			<wfw:commentRss>http://fgiasson.com/blog/index.php/2010/01/27/behind-ozs-curtain/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New versions of structWSF and conStruct</title>
		<link>http://fgiasson.com/blog/index.php/2010/01/20/new-versions-of-structwsf-and-construct/</link>
		<comments>http://fgiasson.com/blog/index.php/2010/01/20/new-versions-of-structwsf-and-construct/#comments</comments>
		<pubDate>Wed, 20 Jan 2010 22:42:34 +0000</pubDate>
		<dc:creator>Fred</dc:creator>
				<category><![CDATA[Semantic Web]]></category>
		<category><![CDATA[Structured Dynamics]]></category>
		<category><![CDATA[conStruct]]></category>
		<category><![CDATA[structWSF]]></category>

		<guid isPermaLink="false">http://fgiasson.com/blog/?p=1024</guid>
		<description><![CDATA[	
	<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Focoins.info%3Agenerator&amp;rft.title=New versions of structWSF and conStruct&amp;rft.aulast=Giasson&amp;rft.aufirst=Frédérick&amp;rft.subject=Semantic Web&amp;rft.subject=Structured Dynamics&amp;rft.subject=conStruct&amp;rft.subject=structWSF&amp;rft.source=Frederick Giasson&#8217;s Weblog&amp;rft.date=2010-01-20&amp;rft.type=blogPost&amp;rft.format=text&amp;rft.identifier=http://fgiasson.com/blog/index.php/2010/01/20/new-versions-of-structwsf-and-construct/&amp;rft.language=English"></span>

We just released a new (major) version of both structWSF and conStruct. Though some months had passed since we last released this software, we finally got the time and opportunity to make these important upgrades. Many things have changed in both packages. I don’t want to iterate all the changes in this blog post, so I [...]]]></description>
			<content:encoded><![CDATA[	
	<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Focoins.info%3Agenerator&amp;rft.title=New versions of structWSF and conStruct&amp;rft.aulast=Giasson&amp;rft.aufirst=Frédérick&amp;rft.subject=Semantic Web&amp;rft.subject=Structured Dynamics&amp;rft.subject=conStruct&amp;rft.subject=structWSF&amp;rft.source=Frederick Giasson&#8217;s Weblog&amp;rft.date=2010-01-20&amp;rft.type=blogPost&amp;rft.format=text&amp;rft.identifier=http://fgiasson.com/blog/index.php/2010/01/20/new-versions-of-structwsf-and-construct/&amp;rft.language=English"></span>
<p><img class="size-full wp-image-941 alignright" title="triple_120" src="http://fgiasson.com/blog/wp-content/uploads/2009/06/triple_120.png" alt="triple_120" width="120" height="120" /><img class="alignright size-full wp-image-942" title="construct_logo_120" src="http://fgiasson.com/blog/wp-content/uploads/2009/06/construct_logo_120.png" alt="construct_logo_120" width="120" height="120" /></p>
<p>We just released a new (major) version of both structWSF and conStruct. Though some months had passed since we last released this software, we finally got the time and opportunity to make these important upgrades. Many things have changed in both packages. I don’t want to iterate all the changes in this blog post, so I would suggest you to read the changes log files here:</p>
<ul>
<li><a href="http://community.openstructs.org/content/structwsf-10a4">structWSF      changes log</a></li>
<li><a href="http://community.openstructs.org/content/construct-6x-1x-dev-4">conStruct      changes log</a></li>
</ul>
<p>These new versions have greatly been impacted by the needs of our clients. We also started to introduce some new concepts we wrote about the last few months.</p>
<p>A really good addition to this release is the <a href="http://openstructs.org/structwsf/installation-guide">a brand new Installation Manual</a>. Hopefully people will be able to “easily” and properly install and setup a Web server to host these two packages.</p>
<p>All documentation files have been updated:</p>
<ul>
<li><a href="http://openstructs.org/structwsf/individual-ws-documentation">structWSF      Web Service Endpoints documentation</a></li>
<li><a href="http://openstructs.org/doc/code/structwsf/index.html">structWSF code      documentation</a></li>
<li><a href="http://constructscs.com/doc/code/construct/index.html">conStruct      code documentation</a></li>
</ul>
<p>You can download both software packages from here:</p>
<ul>
<li><a href="http://structwsf.googlecode.com/files/structwsf-1.0a4.zip">structWSF      version 1.0a4</a></li>
<li><a href="http://drupal.org/project/construct">conStruct version 6.x-1.x-dev-4</a> (Drupal should create the new package within 1 day)</li>
</ul>
<h2>An Amazon EC2/EBS Architecture</h2>
<p>Some of the changes to these new versions have been made to help create, setup and maintain Web servers that host structWSF and conStruct instances.</p>
<p>At Structured Dynamics, we have developed and use a server architecture that leverages Amazon computer-in-the-clouds services such as: EC2, EBS, Elastic IP in the Cloud. Such an architecture is giving us the flexibility to easily maintain and upgrade server instances, to instantly create new <strong>structWSF</strong> instances in one click (without performing all these steps everytime), etc.</p>
<p>You can contact us for more information about these EC2 AMIs and EBS Volumes that we developed for this purpose. Here is an overview of the architecture that is now in place:</p>
<p><img class="aligncenter size-full wp-image-1025" title="structwsf_amazon" src="http://fgiasson.com/blog/wp-content/uploads/2010/01/structwsf_amazon.png" alt="structwsf_amazon" width="501" height="446" /></p>
<p>There is a clear separation of concerns between three major things:</p>
<ul>
<li>Software &amp; libraries</li>
<li>Configuration files</li>
<li>Data files.</li>
</ul>
<p>We chose to put all software and libraries needed to create a stand-alone <strong>structWSF</strong> instance in an EC2 AMI. This means that all needed software to run a <strong>structWSF</strong> instance is present on the Virtuoso server running Ubuntu server.</p>
<p>Then we chose to put all configuration and data files on an EBS volume that we attach, and mount, on the EC2 instance. You can think about a EBS volume as a physical hard drive: it can be mounted on a server instance, but it can&#8217;t be shared between multiple instances.</p>
<p>By splitting the software &amp; libraries, configuration and data files, we make sure that we can easily upgrade a <strong>structWSF</strong> server in production with the latest version of <strong>structWSF</strong> (its code base and all related software such as Virtuoso, Solr, etc). Since the configuration and data files are not on the EC2 instance, we can easily create a new EC2 instance by using the latest <strong>structWSF</strong> AMI we produced, and then to mount the configuration and data files EBS volume on the new (and upgraded) <strong>structWSF</strong> instance. That way, in a few clicks, we can fully upgrade a server in production without fear of disturbing the configuration or data files.</p>
<p>Additionally, we can easily create backups of configuration and data files at different intervals by using Amazon&#8217;s Snapshot technology.</p>
<p>Finally, we chose to put all related software and configuration files needed to run a <strong>conStruct</strong> instance in another, separate, EBS volume. That way, we have a clean <strong>structWSF</strong> AMI instance that can be upgraded at any time, and we can <em>plug</em> (mount) a <strong>conStruct</strong> instance (EBS instance) into a <strong>structWSF</strong> server at any time. This means that we can easily have <strong>structWSF</strong> instances with or without a <strong>conStruct</strong> instance. The same strategy can easily be used to create <em>plugin packages</em> that can be mounted and unmounted to any <strong>structWSF</strong> instance at any time, depending on the needs.</p>
<p>All this makes <strong>structWSF</strong> server instances maintenance easier, simpler and faster.</p>
]]></content:encoded>
			<wfw:commentRss>http://fgiasson.com/blog/index.php/2010/01/20/new-versions-of-structwsf-and-construct/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>commON and irJSON PHP parsers released</title>
		<link>http://fgiasson.com/blog/index.php/2009/10/20/common-and-irjson-php-parsers-released/</link>
		<comments>http://fgiasson.com/blog/index.php/2009/10/20/common-and-irjson-php-parsers-released/#comments</comments>
		<pubDate>Tue, 20 Oct 2009 21:15:45 +0000</pubDate>
		<dc:creator>Fred</dc:creator>
				<category><![CDATA[Semantic Web]]></category>
		<category><![CDATA[Structured Dynamics]]></category>
		<category><![CDATA[irON]]></category>

		<guid isPermaLink="false">http://fgiasson.com/blog/?p=986</guid>
		<description><![CDATA[	
	<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Focoins.info%3Agenerator&amp;rft.title=commON and irJSON PHP parsers released&amp;rft.aulast=Giasson&amp;rft.aufirst=Frédérick&amp;rft.subject=Semantic Web&amp;rft.subject=Structured Dynamics&amp;rft.subject=irON&amp;rft.source=Frederick Giasson&#8217;s Weblog&amp;rft.date=2009-10-20&amp;rft.type=blogPost&amp;rft.format=text&amp;rft.identifier=http://fgiasson.com/blog/index.php/2009/10/20/common-and-irjson-php-parsers-released/&amp;rft.language=English"></span>
Two days ago we released irON: Instance Record and Object Notation (irON) Specification. irON is a new notation that has been created to describe instance records. irON records can be serialized in 3 different formats: irXML (XML), irJSON (JSON) and commON (CSV: mainly for spreadsheet manipulations).
The release of irON has already been covered at length [...]]]></description>
			<content:encoded><![CDATA[	
	<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Focoins.info%3Agenerator&amp;rft.title=commON and irJSON PHP parsers released&amp;rft.aulast=Giasson&amp;rft.aufirst=Frédérick&amp;rft.subject=Semantic Web&amp;rft.subject=Structured Dynamics&amp;rft.subject=irON&amp;rft.source=Frederick Giasson&#8217;s Weblog&amp;rft.date=2009-10-20&amp;rft.type=blogPost&amp;rft.format=text&amp;rft.identifier=http://fgiasson.com/blog/index.php/2009/10/20/common-and-irjson-php-parsers-released/&amp;rft.language=English"></span>
<p><img class="size-full wp-image-988 alignleft" title="iron_logo_235" src="http://fgiasson.com/blog/wp-content/uploads/2009/10/iron_logo_235.png" alt="iron_logo_235" width="99" height="53" />Two days ago <a href="http://structureddynamics.com">we</a> released irON: <a href="http://openstructs.org/iron/iron-specification">Instance Record and Object Notation (irON) Specification</a>. irON is a new notation that has been created to describe instance records. irON records can be serialized in 3 different formats: <a href="http://openstructs.org/iron/iron-specification#mozTocId408837">irXML</a> (XML), <a href="http://openstructs.org/iron/iron-specification#mozTocId462570">irJSON</a> (JSON) and <a href="http://openstructs.org/iron/iron-specification#mozTocId603499">commON</a> (CSV: mainly for spreadsheet manipulations).</p>
<p>The release of irON has already been covered at length on <a href="http://www.mkbergman.com/838/iron-semantic-web-for-mere-mortals/">Mike&#8217;s blog</a> and in <a href="http://structureddynamics.com/pr20091018.html">Structure Dynamics&#8217;s press room</a>; so I won&#8217;t talk more about it here.</p>
<h3>irON Parsers</h3>
<p>What I am happy to release today are the first two parsers that can be used to parse and validate irON datasets of instance records. The first two parsers that have been developed so far are the ones for irJSON and commON. Each parser has been developed in PHP and is available under the <a href="http://www.apache.org/licenses/LICENSE-2.0.html">Apache 2 licence</a>. Now, lets take a look at each of them</p>
<h3>irJSON Parser</h3>
<p style="text-align: left;">The irJSON parser package can be <a href="http://code.google.com/p/iron-notation/downloads/list">downloaded here</a>. Additionally, the source code can be <a href="http://code.google.com/p/iron-notation/source/browse/#svn/trunk/irJSON">browsed here</a>.</p>
<p>First of all, to understand the code, you have to understand the <a href="http://openstructs.org/iron/iron-specification#mozTocId462570">specification of the irJSON serialization</a>.</p>
<p>The irON parser package is everything you need to test and use the parser. The package is composed of the following files:</p>
<ul>
<li>test.php &#8211; If you want to quick-start with      this package, just run this test.php script and you will have an idea of      what it can do for you. This script just runs the parser over a irJSON test      file, and shows you some validation errors along with the internal parsed      structure of the file. From there, you can simply use the irJSONParser      class, with the structure that is returned to do whatever is needed for      you: adding the information in you database, converting the data to      another format, etc.</li>
<li>irJSONParser.php &#8211; This is the irJSON      parser class. It parses the irJSON file and populates its internal      structure that is composed of instances of the classes below.</li>
<li>Dataset.php &#8211; This      class defines a Dataset records with all its attributes. It is the object      that the developed has to manipulate that comes from the parser.</li>
<li>InstanceRecord.php &#8211; This class defines an      Instance Records with all its attributes. It is the object that the      developed has to manipulate that comes from the parser.</li>
<li>StructureSchema.php &#8211; This class defines a      Structure Schema records with all its attributes. It is the object that      the developed has to manipulate that comes from the parser.</li>
<li>LinkageSchema.php &#8211;      This class defines a Linkage Schema records with all its attributes. It is      the object that the developed has to manipulate that comes from the      parser.</li>
</ul>
<p>The irJSON parser also validates the incoming irJSON files according to these three levels of validation:</p>
<ol>
<li>JSON well-formedness validation      &#8211; The first validation test occurs on the JSON serialization itself. A      JSON file has to be a well formed in order to be processed. An error at      this level will raise an error to the user.</li>
<li>irJSON well-formedness validation &#8211; Once      JSON is parsed and well formed, the parser make sure that the file is      irJSON well-formed. If it is not well formed according to the irJSON spec,      an error will be raised to the user.</li>
<li>Structure Schema validation &#8211; The last      validation that occurs is between instance records, and their related      (if available) Structure Schema. If a validation error happens at this      level, a notice will be raised to the user.</li>
</ol>
<p>You can experiment with some of these validation errors and notices by running the test.php script in the package.</p>
<p>With this package, developers can already start to parse irJSON files and to integrate them with some of their prototype projects.</p>
<h3>commON Parser</h3>
<p>The commON parser package can be <a href="http://code.google.com/p/iron-notation/downloads/list">downloaded here</a>. Additionally, the source code can be <a href="http://code.google.com/p/iron-notation/source/browse/#svn/trunk/commON">browsed here</a>.</p>
<p>To understand the code, you have to understand the <a href="http://openstructs.org/iron/iron-specification#mozTocId603499">specification of the commON serialization</a>.</p>
<p>The commON parser package is everything you need to test the parser. The package is composed of the following files:</p>
<ul>
<li>test.php      &#8211; If you want to quick-start with this package, just run this test.php      script and you will have an idea of what it can do for you. This script      just run the parser over a file, and shows you some validation errors      along with the internal parsed structure of the file. From there, you can      simply use the CommonParser class, with the structure that is returned to      do whatever is needed for you: adding the information in you database,      converting the data to another format, etc.</li>
<li>CommonParser.php      &#8211; This is the commON parser class. It parses the commON file and populates      its internal structure that is described in the code. the parser.</li>
</ul>
<p>The commON parser also validates the incoming commON files according to these two levels:</p>
<ol>
<li>CSV      well-formedness validation &#8211; The first validation test occurs on the <a href="http://www.rfc-editor.org/rfc/rfc4180.txt">CSV</a> serialization itself. A CSV file has to be a well formed in order to be      processed. An error at this level will raise an error to the user.</li>
<li>commON      well-formedness validation &#8211; Once CSV is parsed and well formed, the      parser make sure that the file is CSV well-formed. If it is not well      formed according to the CSV RFC, an error will be raised to the user.</li>
</ol>
<p>You can experiment some of these validation errors and notices by running the test.php script in the package.</p>
<p>With this package, developers can already start to parsing commON files and to integrate them with some prototypes of their projects.</p>
<p>The commON parser is less advanced than the irJSON one. For example, the implementation of the &#8220;dataset&#8221; and the &#8220;schema&#8221; processor keywords are not yet done. Other keywords haven&#8217;t (yet) been integrated too. Take a look at the source code to know what is currently missing.</p>
<p>In any case, a lot of things can currently be done with this parser. We will publish specific commON usage use-cases in the coming weeks that will shows people are we are using commON internally and how we will expect our customers to use it to create and maintain different smaller datasets.</p>
<h3><strong>Conclusion</strong></h3>
<p>These are the first versions of the irJSON and commON parsers. We have to continue to development to make them perfectly reflecting the current and future irON specification. We yet have to write the irXML parser too.</p>
<p>I would encourage reporting any issues with these parsers, or any enhancement suggestions, <a href="http://code.google.com/p/iron-notation/issues/list">on this issue tracked</a>.</p>
<p>All discussions regarding these parsers and the irON specification document should happen on the <a href="http://groups.google.com/group/iron-notation?pli=1">irON group mailing list here</a>.</p>
<p>Finally, another step for us will be to embed these parsers in converter web services for <a href="http://openstructs.org/structwsf/">structWSF</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://fgiasson.com/blog/index.php/2009/10/20/common-and-irjson-php-parsers-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A New Home for UMBEL Web Services</title>
		<link>http://fgiasson.com/blog/index.php/2009/09/18/a-new-home-for-umbel-web-services/</link>
		<comments>http://fgiasson.com/blog/index.php/2009/09/18/a-new-home-for-umbel-web-services/#comments</comments>
		<pubDate>Fri, 18 Sep 2009 21:27:46 +0000</pubDate>
		<dc:creator>Fred</dc:creator>
				<category><![CDATA[Ping the Semantic Web]]></category>
		<category><![CDATA[Semantic Web]]></category>
		<category><![CDATA[Structured Dynamics]]></category>
		<category><![CDATA[UMBEL]]></category>

		<guid isPermaLink="false">http://fgiasson.com/blog/?p=974</guid>
		<description><![CDATA[	
	<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Focoins.info%3Agenerator&amp;rft.title=A New Home for UMBEL Web Services&amp;rft.aulast=Giasson&amp;rft.aufirst=Frédérick&amp;rft.subject=Ping the Semantic Web&amp;rft.subject=Semantic Web&amp;rft.subject=Structured Dynamics&amp;rft.subject=UMBEL&amp;rft.source=Frederick Giasson&#8217;s Weblog&amp;rft.date=2009-09-18&amp;rft.type=blogPost&amp;rft.format=text&amp;rft.identifier=http://fgiasson.com/blog/index.php/2009/09/18/a-new-home-for-umbel-web-services/&amp;rft.language=English"></span>
Eight months ago we announced the dissolution of Zitgist LLC. This event led to the creation of a &#8220;sandbox&#8220; to keep alive all the online assets of the company. Since this sandbox server was not owned by Structured Dynamics, it was becoming hard for us to update UMBEL and its online services. It is why [...]]]></description>
			<content:encoded><![CDATA[	
	<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Focoins.info%3Agenerator&amp;rft.title=A New Home for UMBEL Web Services&amp;rft.aulast=Giasson&amp;rft.aufirst=Frédérick&amp;rft.subject=Ping the Semantic Web&amp;rft.subject=Semantic Web&amp;rft.subject=Structured Dynamics&amp;rft.subject=UMBEL&amp;rft.source=Frederick Giasson&#8217;s Weblog&amp;rft.date=2009-09-18&amp;rft.type=blogPost&amp;rft.format=text&amp;rft.identifier=http://fgiasson.com/blog/index.php/2009/09/18/a-new-home-for-umbel-web-services/&amp;rft.language=English"></span>
<p><span style="font-weight: normal; font-size: 14px; "><img class="alignleft size-full wp-image-916" title="umbel_ws" src="http://fgiasson.com/blog/wp-content/uploads/2008/10/umbel_ws.png" alt="umbel_ws" width="170" height="74" />Eight months ago we announced the dissolution of Zitgist LLC. This event led to the creation of a </span>&#8220;<span style="font-weight: normal; font-size: 14px; ">sandbox</span>&#8220;<span style="font-weight: normal; font-size: 14px; "> to keep alive all the online assets of the company. Since this sandbox server was not owned by <a href="http://structureddynamics.com/">Structured Dynamics</a>, it was becoming hard for us to update UMBEL and its online services. It is why we took the time to move the services back on to our new servers.</span><br />
<span style="font-weight: normal; font-size: 14px; "><br />
</span></p>
<h3>A New Home</h3>
<p><img class="alignright size-full wp-image-920" title="sd_logo_260" src="http://fgiasson.com/blog/wp-content/uploads/2009/01/sd_logo_260.png" alt="sd_logo_260" width="260" height="60" />Structured Dynamics LLC now hosts a new version for the UMBEL Web services. From the main menu at the <a href="http://structureddynamics.com/">SD Web site</a> you can access these services under the &#8220;<a href="http://structureddynamics.com/umbel_ws/index.php">umbel ws</a>&#8221; menu option (you can also bookmark the Web services site at <a href="http://umbel.structureddynamics.com/">umbel.structureddynamics.com</a> or <a href="http://ws.umbel.org/">ws.umbel.org</a>.)</p>
<p>This move of UMBEL&#8217;s Web services to a new home will make the future upgrade of UMBEL easier, and this will make the maintenance of the Web services endpoints easier as well. With this move, I am pleased to announce the release of five initial Web services and one visualization tool:</p>
<p><strong>Lookup Web Services:</strong></p>
<ul>
<li><a href="http://ws.umbel.org/finder_subject_concept.php">Finder: Subject      Concept</a></li>
<li><a href="http://ws.umbel.org/reporter_subject_concept.php">Reporter: Subject      Concept</a></li>
</ul>
<p><strong>Inference Engine Web Services:</strong></p>
<ul>
<li><a href="http://ws.umbel.org/inference_lister.php">Inference: Lister &#8212; list      sub-classes, super-classes and equivalent-classes</a></li>
<li><a href="http://ws.umbel.org/inference_validator.php">Inference: Validator &#8212;      verify sub-class, super-class and equivalent-class relationships</a></li>
</ul>
<p><strong>SPARQL endpoint Web Service:</strong></p>
<ul>
<li><a href="http://ws.umbel.org/sparql.php">SPARQL Endpoint</a></li>
</ul>
<p><strong>Visual Tool:</strong></p>
<ul>
<li><a href="http://ws.umbel.org/explorer.php">Subject Concept Explorer</a></li>
</ul>
<p><em>Note that the visual tool is using <a href="http://moritz.stefaner.eu/projects/relation-browser/">Moritz Stefaner&#8217;s Relation Browser</a>.</em></p>
<p><em><br />
</em></p>
<h3>Ping the Semantic Web</h3>
<p><img class="alignright size-full wp-image-832" title="ptswlogo160.gif" src="http://fgiasson.com/blog/wp-content/uploads/2007/08/ptswlogo160.gif" alt="ptswlogo160.gif" width="160" height="90" />Additionally, the <a href="http://pingthesemanticweb.com">Ping the Semantic Web</a> RDF pinging service is now the property of <a href="http://openlinksw.com">OpenLink Software Inc.</a> OpenLink is now hosting, maintaining and developing the service.</p>
]]></content:encoded>
			<wfw:commentRss>http://fgiasson.com/blog/index.php/2009/09/18/a-new-home-for-umbel-web-services/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>structWSF Early Querying Metrics</title>
		<link>http://fgiasson.com/blog/index.php/2009/08/18/structwsf-early-querying-metrics/</link>
		<comments>http://fgiasson.com/blog/index.php/2009/08/18/structwsf-early-querying-metrics/#comments</comments>
		<pubDate>Tue, 18 Aug 2009 21:04:12 +0000</pubDate>
		<dc:creator>Fred</dc:creator>
				<category><![CDATA[Structured Dynamics]]></category>
		<category><![CDATA[structWSF]]></category>

		<guid isPermaLink="false">http://fgiasson.com/blog/?p=949</guid>
		<description><![CDATA[	
	<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Focoins.info%3Agenerator&amp;rft.title=structWSF Early Querying Metrics&amp;rft.aulast=Giasson&amp;rft.aufirst=Frédérick&amp;rft.subject=Structured Dynamics&amp;rft.subject=structWSF&amp;rft.source=Frederick Giasson&#8217;s Weblog&amp;rft.date=2009-08-18&amp;rft.type=blogPost&amp;rft.format=text&amp;rft.identifier=http://fgiasson.com/blog/index.php/2009/08/18/structwsf-early-querying-metrics/&amp;rft.language=English"></span>
We have been running different structWSF instances for about two months now. Each instance is hosting different dataset(s) that are queried for different purposes. I think that it worth taking some time starting to analyze the querying stats of two of these instances of the early Alpha version of structWSF.
The goal is to create some [...]]]></description>
			<content:encoded><![CDATA[	
	<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Focoins.info%3Agenerator&amp;rft.title=structWSF Early Querying Metrics&amp;rft.aulast=Giasson&amp;rft.aufirst=Frédérick&amp;rft.subject=Structured Dynamics&amp;rft.subject=structWSF&amp;rft.source=Frederick Giasson&#8217;s Weblog&amp;rft.date=2009-08-18&amp;rft.type=blogPost&amp;rft.format=text&amp;rft.identifier=http://fgiasson.com/blog/index.php/2009/08/18/structwsf-early-querying-metrics/&amp;rft.language=English"></span>
<p>We have been running different structWSF instances for about two months now. Each instance is hosting different dataset(s) that are queried for different purposes. I think that it worth taking some time starting to analyze the querying stats of two of these instances of the early Alpha version of structWSF.</p>
<p>The goal is to create some kind of checkpoints that we will be able to use in the future to check how the system improved or deteriorated. It is also to check what kind of metrics we could derive from the current logging system, and to check if we could find any bottle neck or issues with any of the endpoints.</p>
<p>The data used to analyze the instance A span from the 2009-06-08 at 7:16:38 to the 2009-08-18 at 12:28:37.</p>
<p>The data used to analyze the instance B span from the 2009-05-20 at 1:46:31to the 2009-08-18 at 12:40:28.</p>
<h3>structWSF Instance A</h3>
<p>The instance A only has 1 dataset with about 1000 instance records in it. As we can notice bellow, the average time of a query to that instance for all web service endpoints is about 210 milliseconds.</p>
<table border="0">
<tbody>
<tr style="border: 1px solid">
<td style="border: 1px solid"><strong><span class="rescolname">Number of queries</span></strong><br />
<span> </span></td>
<td style="border: 1px solid"><strong><span class="rescolname">Average time for each query in seconds</span></strong></td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">27956</td>
<td style="border: 1px solid">0.218252857656909</td>
</tr>
</tbody>
</table>
<p>The table bellow give us the total number of queries sent to each web service endpoint with an average time for each web service.</p>
<table class="listing" border="0">
<tbody>
<tr>
<td class="restitle" colspan="5"></td>
</tr>
<tr>
<td style="border: 1px solid"><strong><span class="rescolname">Web Service</span></strong></td>
<td style="border: 1px solid"><strong>Number of queries</strong></td>
<td style="border: 1px solid"><strong>Average time for each query in seconds</strong></td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">dataset_create</td>
<td style="border: 1px solid">265</td>
<td style="border: 1px solid">0.126993534699919</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">converter/tsv</td>
<td style="border: 1px solid">48</td>
<td style="border: 1px solid">0.128808428843714</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">dataset_update</td>
<td style="border: 1px solid">17</td>
<td style="border: 1px solid">0.140141641392576</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">dataset_read</td>
<td style="border: 1px solid">11780</td>
<td style="border: 1px solid">0.144073766884864</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">auth_registrar_access</td>
<td style="border: 1px solid">883</td>
<td style="border: 1px solid">0.145781793788779</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">converter/bibtex</td>
<td style="border: 1px solid">49</td>
<td style="border: 1px solid">0.149710825511323</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">auth_lister</td>
<td style="border: 1px solid">1970</td>
<td style="border: 1px solid">0.159979685066925</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">search</td>
<td style="border: 1px solid">1397</td>
<td style="border: 1px solid">0.180938945980523</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">browse</td>
<td style="border: 1px solid">8949</td>
<td style="border: 1px solid">0.199636802392004</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">crud_read</td>
<td style="border: 1px solid">638</td>
<td style="border: 1px solid">0.241032384406063</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">dataset_delete</td>
<td style="border: 1px solid">263</td>
<td style="border: 1px solid">0.420157149717388</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">crud_delete</td>
<td style="border: 1px solid">3</td>
<td style="border: 1px solid">0.637878338496</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">converter/irv</td>
<td style="border: 1px solid">792</td>
<td style="border: 1px solid">0.661979901670313</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">sparql</td>
<td style="border: 1px solid">715</td>
<td style="border: 1px solid">1.123084135322358</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">crud_create</td>
<td style="border: 1px solid">187</td>
<td style="border: 1px solid">1.486844727060763</td>
</tr>
<tr>
<td class="resfooter" colspan="5"></td>
</tr>
</tbody>
</table>
<p>This table gives the number of queries for each returned HTTP response status code by the endpoint. This kind of metrics is useful to debug potential issues</p>
<table class="listing" border="0">
<tbody>
<tr>
<td class="restitle" colspan="5"></td>
</tr>
<tr>
<td style="border: 1px solid"><strong><span>Web Service</span></strong></td>
<td style="border: 1px solid"><strong>Number of queries</strong></td>
<td style="border: 1px solid"><strong><span>HTTP Response Status</span></strong></td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">auth_lister</td>
<td style="border: 1px solid">1968</td>
<td style="border: 1px solid">200</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">auth_lister</td>
<td style="border: 1px solid">2</td>
<td style="border: 1px solid">400</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">auth_registrar_access</td>
<td style="border: 1px solid">883</td>
<td style="border: 1px solid">200</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">browse</td>
<td style="border: 1px solid">8949</td>
<td style="border: 1px solid">200</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">converter/bibtex</td>
<td style="border: 1px solid">45</td>
<td style="border: 1px solid">200</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">converter/bibtex</td>
<td style="border: 1px solid">2</td>
<td style="border: 1px solid">400</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">converter/bibtex</td>
<td style="border: 1px solid">2</td>
<td style="border: 1px solid">406</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">converter/irv</td>
<td style="border: 1px solid">740</td>
<td style="border: 1px solid">200</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">converter/irv</td>
<td style="border: 1px solid">51</td>
<td style="border: 1px solid">400</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">converter/irv</td>
<td style="border: 1px solid">1</td>
<td style="border: 1px solid">406</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">converter/tsv</td>
<td style="border: 1px solid">43</td>
<td style="border: 1px solid">200</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">converter/tsv</td>
<td style="border: 1px solid">2</td>
<td style="border: 1px solid">400</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">converter/tsv</td>
<td style="border: 1px solid">3</td>
<td style="border: 1px solid">406</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">crud_create</td>
<td style="border: 1px solid">66</td>
<td style="border: 1px solid">200</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">crud_create</td>
<td style="border: 1px solid">116</td>
<td style="border: 1px solid">400</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">crud_create</td>
<td style="border: 1px solid">5</td>
<td style="border: 1px solid">500</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">crud_delete</td>
<td style="border: 1px solid">3</td>
<td style="border: 1px solid">200</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">crud_read</td>
<td style="border: 1px solid">480</td>
<td style="border: 1px solid">200</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">crud_read</td>
<td style="border: 1px solid">158</td>
<td style="border: 1px solid">400</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">dataset_create</td>
<td style="border: 1px solid">265</td>
<td style="border: 1px solid">200</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">dataset_delete</td>
<td style="border: 1px solid">261</td>
<td style="border: 1px solid">200</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">dataset_delete</td>
<td style="border: 1px solid">2</td>
<td style="border: 1px solid">500</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">dataset_read</td>
<td style="border: 1px solid">11767</td>
<td style="border: 1px solid">200</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">dataset_read</td>
<td style="border: 1px solid">9</td>
<td style="border: 1px solid">400</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">dataset_read</td>
<td style="border: 1px solid">4</td>
<td style="border: 1px solid">500</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">dataset_update</td>
<td style="border: 1px solid">17</td>
<td style="border: 1px solid">200</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">search</td>
<td style="border: 1px solid">1393</td>
<td style="border: 1px solid">200</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">search</td>
<td style="border: 1px solid">4</td>
<td style="border: 1px solid">400</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">sparql</td>
<td style="border: 1px solid">693</td>
<td style="border: 1px solid">200</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">sparql</td>
<td style="border: 1px solid">19</td>
<td style="border: 1px solid">400</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">sparql</td>
<td style="border: 1px solid">3</td>
<td style="border: 1px solid">406</td>
</tr>
<tr>
<td class="resfooter" colspan="5"></td>
</tr>
</tbody>
</table>
<h3>structWSF Instance B</h3>
<p>The instance B has 25 datasets with about 2 312 000 instance records in it. As we can notice bellow, the average time of a query to that instance for all web service endpoints is about 550 milliseconds.</p>
<p>Why the average query time per query double with the size of that instance? It is what we will check.</p>
<table class="listing" border="0">
<tbody>
<tr>
<td class="restitle" colspan="5"></td>
</tr>
<tr>
<td style="border: 1px solid"><strong>Number of queries</strong></td>
<td style="border: 1px solid"><strong>Average time for each query in seconds</strong></td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">37575</td>
<td style="border: 1px solid">0.556303637714566</td>
</tr>
<tr>
<td class="resfooter" colspan="5"></td>
</tr>
</tbody>
</table>
<p>The table bellow give us the total number of queries sent to each web service endpoint with an average time for each web service. What we can notice is that the time it takes to create, delete and update records in the database management systems is related to the size of the dataset. So, what happened and is there anything we can do?</p>
<p>Most of the queries used for this analysis come from queries sent to structWSF v.1.0a1 and v1.0a2. However, something that has a major impact on these results changed in v1.0a3 that has been released last week. The big problem with these numbers is Solr&#8217;s commit time. In version v1.0a1 and v1.0a2, a Solr commit was issued each time something was updated in the index. Commit could take up to minutes sometimes with the size of its index. Since v1.0a3, we give that choice to the system administrator: he can issue commit each time something change in the index, or setup Solr&#8217;s AutoCommit setting properly. That means that we increased the performance of these CUD endpoints by about 95%.</p>
<p>For the SPARQL endpoint, the reason is that it is mostly exclusively used to export data from a structWSF instance. This means that big dump of RDF triples are incurred for each query, which justify the average time per query of 2.1 seconds.</p>
<table class="listing" border="0">
<tbody>
<tr>
<td class="restitle" colspan="5"></td>
</tr>
<tr>
<td style="border: 1px solid"><strong><span>Web Service</span></strong></td>
<td style="border: 1px solid"><strong>Number of queries</strong></td>
<td style="border: 1px solid"><strong>Average time for each query in seconds</strong></td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">dataset_create</td>
<td style="border: 1px solid">173</td>
<td style="border: 1px solid">0.09835156953404</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">auth_registrar_access</td>
<td style="border: 1px solid">1135</td>
<td style="border: 1px solid">0.114255581658327</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">dataset_update</td>
<td style="border: 1px solid">121</td>
<td style="border: 1px solid">0.119028852005636</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">dataset_read</td>
<td style="border: 1px solid">12683</td>
<td style="border: 1px solid">0.159165935205064</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">crud_read</td>
<td style="border: 1px solid">8546</td>
<td style="border: 1px solid">0.23457546435556</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">converter/bibtex</td>
<td style="border: 1px solid">109</td>
<td style="border: 1px solid">0.405608450600873</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">auth_lister</td>
<td style="border: 1px solid">2315</td>
<td style="border: 1px solid">0.471687612780759</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">search</td>
<td style="border: 1px solid">2313</td>
<td style="border: 1px solid">0.533951056245796</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">browse</td>
<td style="border: 1px solid">9103</td>
<td style="border: 1px solid">0.758227908033767</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">converter/tsv</td>
<td style="border: 1px solid">8</td>
<td style="border: 1px solid">0.863690733909698</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">sparql</td>
<td style="border: 1px solid">650</td>
<td style="border: 1px solid">2.115058046487879</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">converter/irv</td>
<td style="border: 1px solid">166</td>
<td style="border: 1px solid">2.681712512510398</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">crud_update</td>
<td style="border: 1px solid">13</td>
<td style="border: 1px solid">4.649851157114154</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">crud_create</td>
<td style="border: 1px solid">75</td>
<td style="border: 1px solid">11.306954870223277</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">dataset_delete</td>
<td style="border: 1px solid">140</td>
<td style="border: 1px solid">27.511527856750207</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">crud_delete</td>
<td style="border: 1px solid">25</td>
<td style="border: 1px solid">34.33350466727492</td>
</tr>
<tr>
<td class="resfooter" colspan="5"></td>
</tr>
</tbody>
</table>
<p>This table gives the number of queries for each returned HTTP response status code by the endpoint.</p>
<table class="listing" border="0">
<tbody>
<tr>
<td class="restitle" colspan="5"></td>
</tr>
<tr>
<td style="border: 1px solid"><strong><span>Web Service</span></strong></td>
<td style="border: 1px solid"><strong>Number of queries</strong></td>
<td style="border: 1px solid"><strong><span class="rescolname">HTTP Response Status</span></strong></td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">auth_lister</td>
<td style="border: 1px solid">2275</td>
<td style="border: 1px solid">200</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">auth_lister</td>
<td style="border: 1px solid">11</td>
<td style="border: 1px solid">400</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">auth_lister</td>
<td style="border: 1px solid">2</td>
<td style="border: 1px solid">406</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">auth_lister</td>
<td style="border: 1px solid">27</td>
<td style="border: 1px solid">500</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">auth_registrar_access</td>
<td style="border: 1px solid">1110</td>
<td style="border: 1px solid">200</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">auth_registrar_access</td>
<td style="border: 1px solid">25</td>
<td style="border: 1px solid">400</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">browse</td>
<td style="border: 1px solid">9084</td>
<td style="border: 1px solid">200</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">browse</td>
<td style="border: 1px solid">18</td>
<td style="border: 1px solid">400</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">browse</td>
<td style="border: 1px solid">1</td>
<td style="border: 1px solid">406</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">converter/bibtex</td>
<td style="border: 1px solid">108</td>
<td style="border: 1px solid">200</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">converter/bibtex</td>
<td style="border: 1px solid">1</td>
<td style="border: 1px solid">400</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">converter/irv</td>
<td style="border: 1px solid">154</td>
<td style="border: 1px solid">200</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">converter/irv</td>
<td style="border: 1px solid">12</td>
<td style="border: 1px solid">400</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">converter/tsv</td>
<td style="border: 1px solid">8</td>
<td style="border: 1px solid">200</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">crud_create</td>
<td style="border: 1px solid">41</td>
<td style="border: 1px solid">200</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">crud_create</td>
<td style="border: 1px solid">33</td>
<td style="border: 1px solid">400</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">crud_create</td>
<td style="border: 1px solid">1</td>
<td style="border: 1px solid">500</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">crud_delete</td>
<td style="border: 1px solid">24</td>
<td style="border: 1px solid">200</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">crud_delete</td>
<td style="border: 1px solid">1</td>
<td style="border: 1px solid">400</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">crud_read</td>
<td style="border: 1px solid">8268</td>
<td style="border: 1px solid">200</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">crud_read</td>
<td style="border: 1px solid">273</td>
<td style="border: 1px solid">400</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">crud_read</td>
<td style="border: 1px solid">5</td>
<td style="border: 1px solid">406</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">crud_update</td>
<td style="border: 1px solid">4</td>
<td style="border: 1px solid">200</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">crud_update</td>
<td style="border: 1px solid">9</td>
<td style="border: 1px solid">400</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">dataset_create</td>
<td style="border: 1px solid">171</td>
<td style="border: 1px solid">200</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">dataset_create</td>
<td style="border: 1px solid">2</td>
<td style="border: 1px solid">400</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">dataset_delete</td>
<td style="border: 1px solid">79</td>
<td style="border: 1px solid">200</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">dataset_delete</td>
<td style="border: 1px solid">61</td>
<td style="border: 1px solid">500</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">dataset_read</td>
<td style="border: 1px solid">12647</td>
<td style="border: 1px solid">200</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">dataset_read</td>
<td style="border: 1px solid">11</td>
<td style="border: 1px solid">400</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">dataset_read</td>
<td style="border: 1px solid">25</td>
<td style="border: 1px solid">500</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">dataset_update</td>
<td style="border: 1px solid">113</td>
<td style="border: 1px solid">200</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">dataset_update</td>
<td style="border: 1px solid">8</td>
<td style="border: 1px solid">500</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">search</td>
<td style="border: 1px solid">2286</td>
<td style="border: 1px solid">200</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">search</td>
<td style="border: 1px solid">24</td>
<td style="border: 1px solid">400</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">search</td>
<td style="border: 1px solid">3</td>
<td style="border: 1px solid">406</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">sparql</td>
<td style="border: 1px solid">618</td>
<td style="border: 1px solid">200</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">sparql</td>
<td style="border: 1px solid">22</td>
<td style="border: 1px solid">400</td>
</tr>
<tr style="border: 1px solid">
<td style="border: 1px solid">sparql</td>
<td style="border: 1px solid">6</td>
<td style="border: 1px solid">406</td>
</tr>
<tr class="resrowodd">
<td style="border: 1px solid">sparql</td>
<td style="border: 1px solid">4</td>
<td style="border: 1px solid">500</td>
</tr>
<tr>
<td class="resfooter" colspan="5"></td>
</tr>
</tbody>
</table>
<h3>Generating the Stats</h3>
<p>Here is the list of SQL query used to create these stat tables. You can run them locally on your structWSF instance to generate the same kind of statistics.</p>
<p>Timespan of the queries</p>
<blockquote><p>select min(request_datetime) as startdate, max(request_datetime) as enddate from SD.WSF.ws_queries_log;</p></blockquote>
<p>Get the average number of milliseconds per query sent to the syste</p>
<blockquote><p>select count(request_processing_time) as nb_queries, avg(request_processing_time) as average_query_time from SD.WSF.ws_queries_log order by ID desc;</p></blockquote>
<p>Get the average query time for each web service of a structWSF instance.</p>
<blockquote><p>select requested_web_service, count(request_processing_time) as nb_queries, avg(request_processing_time) as average_query_time from SD.WSF.ws_queries_log GROUP BY requested_web_service ORDER BY average_query_time ASC;</p></blockquote>
<p>Status messages counts per web service endpoint</p>
<blockquote><p>select requested_web_service, count(request_http_response_status) as nb_queries, request_http_response_status from SD.WSF.ws_queries_log GROUP BY requested_web_service, request_http_response_status ORDER BY requested_web_service, request_http_response_status;</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://fgiasson.com/blog/index.php/2009/08/18/structwsf-early-querying-metrics/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>conStruct: a skin for structWSF</title>
		<link>http://fgiasson.com/blog/index.php/2009/08/12/construct-a-skin-for-structwsf/</link>
		<comments>http://fgiasson.com/blog/index.php/2009/08/12/construct-a-skin-for-structwsf/#comments</comments>
		<pubDate>Wed, 12 Aug 2009 21:10:51 +0000</pubDate>
		<dc:creator>Fred</dc:creator>
				<category><![CDATA[Semantic Web]]></category>
		<category><![CDATA[Structured Dynamics]]></category>
		<category><![CDATA[conStruct]]></category>
		<category><![CDATA[structWSF]]></category>

		<guid isPermaLink="false">http://fgiasson.com/blog/?p=946</guid>
		<description><![CDATA[	
	<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Focoins.info%3Agenerator&amp;rft.title=conStruct: a skin for structWSF&amp;rft.aulast=Giasson&amp;rft.aufirst=Frédérick&amp;rft.subject=Semantic Web&amp;rft.subject=Structured Dynamics&amp;rft.subject=conStruct&amp;rft.subject=structWSF&amp;rft.source=Frederick Giasson&#8217;s Weblog&amp;rft.date=2009-08-12&amp;rft.type=blogPost&amp;rft.format=text&amp;rft.identifier=http://fgiasson.com/blog/index.php/2009/08/12/construct-a-skin-for-structwsf/&amp;rft.language=English"></span>
As I said in my previous blog post, a conStruct instance is nothing more than a skin for one or multiple structWSF instances. conStruct is a user of a structWSF network.
But&#8230; what that means?
That means that each conStruct tools communicate with one or multiple structWSF instances. Each each feature of conStruct comes from structWSF. The [...]]]></description>
			<content:encoded><![CDATA[	
	<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Focoins.info%3Agenerator&amp;rft.title=conStruct: a skin for structWSF&amp;rft.aulast=Giasson&amp;rft.aufirst=Frédérick&amp;rft.subject=Semantic Web&amp;rft.subject=Structured Dynamics&amp;rft.subject=conStruct&amp;rft.subject=structWSF&amp;rft.source=Frederick Giasson&#8217;s Weblog&amp;rft.date=2009-08-12&amp;rft.type=blogPost&amp;rft.format=text&amp;rft.identifier=http://fgiasson.com/blog/index.php/2009/08/12/construct-a-skin-for-structwsf/&amp;rft.language=English"></span>
<p>As I said <a href="http://fgiasson.com/blog/index.php/2009/08/10/re-introduction/">in my previous blog post</a>, a <a href="http://constructscs.com">conStruct</a> instance is nothing more than a skin for one or multiple <a href="http://openstructs.org/structwsf/">structWSF</a> instances. conStruct is a <em>user</em> of a structWSF network.</p>
<p>But&#8230; what that means?</p>
<p>That means that each conStruct tools communicate with one or multiple structWSF instances. Each each feature of conStruct comes from structWSF. The only thing it does is presenting information to users, and give them some tool to manipulate the data.</p>
<h3>A structWSF instances network</h3>
<p><a href="http://openstructs.org/structwsf/individual-ws-documentation">A structWSF instance is a set of web service endpoints</a>. Each endpoint gets registered in a network. Each query sent to any of the web service endpoint of the network gets authenticated (and possibly rejected) by the network.</p>
<p>All structWSF instances share the same basic web services endpoints, however some specialized structWSF instance can add new functionality to the framework by developing new endpoints that does special things. Others can un-register services that has nothing to do with the mission of the instance, etc.</p>
<p>Not all structWSF instances are the same, but all of them share the same interface.</p>
<p>Individual people or organizations can choose to create structWSF nodes. The purposes can be quite different. Some organizations could choose to create structWSF nodes for internal purposes only: to help their departments to share different kind of data for example. Some people could want to setup a structWSF node where they can archive and share all data specific to their hobbies. Whatever the use-case is: they want a platform to ingest, manage, interact with and publish data; publicly or privately.</p>
<p style="text-align: center;"><a href="http://fgiasson.com/blog/wp-content/uploads/2009/08/structwsf_networks.png"><img class="alignnone size-medium wp-image-947 aligncenter" title="structwsf_networks" src="http://fgiasson.com/blog/wp-content/uploads/2009/08/structwsf_networks-300x158.png" alt="" width="300" height="158" /></a></p>
<p><!--[if gte vml 1]> <![endif]--></p>
<p>In the schema above, we can notice that different structWSF instances have been created and are maintained by different organizations, for different purposes. Some of the clients will communicate with these structWSF instances as a public user of the datasets published on the node(s), and other users will access to datasets that only them have access to.</p>
<p>As you can see, some users communicate with multiple structWSF instances. This means that these user cares about data of different datasets, maintained by different organizations. Why and what for? We don&#8217;t know. It can be for any reasons. It can be as a web portal that aggregates all the information about a specific domain that is shared amongst multiple nodes or it can be because the user get information from his client&#8217;s networks to get things done.</p>
<p>What is important to keep in mind with the schema above is that any kind of people, any kind of organizations and any kind of systems can leverage the <em>structured</em> data they have access to that is hosted by different organizations that make available different datasets and different web services endpoints (maybe some organizations can even create a web service endpoint that works with their dataset and to expose some special algorithms they use to disambiguate/tag entities, etc.)</p>
<h3>A network in action</h3>
<p>You are probably telling yourself: well, the grand vision is good&#8230; but where is the meat around the bone?</p>
<p>Lets take a look at the <a href="http://constructscs.com/demos">conStructSCS sandbox demo</a>. You have <a href="http://constructscs.com/conStruct/dataset/">two datasets in there: (1) the Sweet Tools and (2) RePEc</a>. There is one thing that you probably don&#8217;t notice: both datasets live on two different structWSF instances (each structWSF instance is hosted on a different web server). This means that if you perform a <a href="http://constructscs.com/conStruct/search/?query=rdf&amp;type=all&amp;dataset=all">search</a>, or a <a href="http://constructscs.com/conStruct/browse/">browse</a> query, all results you get in the conStruct user interface come from two totally different servers, with different data maintainers, hosted by different organizations, etc. Still, all results are displayed in the same user interface, which is the conStructSCS demo sandbox.</p>
<h3>Under the curtain</h3>
<p>Lets take a look at what is happening. First, run this <a href="http://constructscs.com/conStruct/search/?query=rdf&amp;type=all&amp;dataset=all&amp;wsf_debug=2">search query for &#8220;rdf&#8221;</a>. You see what appears in the yellow box? This is a list of the queries exchanged between conStruct and two structWSF instances. You want more? Try this other <a href="http://constructscs.com/conStruct/search/?query=rdf&amp;type=all&amp;dataset=all&amp;wsf_debug=1">search query for &#8220;rdf&#8221;</a>. Now you also have access to the body of the messages.</p>
<p>For this demo sandbox, we enabled the &#8220;wsf_debug&#8221; parameter so that users of the sandbox can see how a conStruct node can interact with structWSF instances. If the value of this URL parameter is &#8220;1&#8243;, then the header + body of the query is displayed to the users. If the value is &#8220;2&#8243;, only the header is displayed.</p>
<p>This means that you can happen the &#8220;&amp;wsf_debug=1&#8243; parameter to any URL of the demo sandbox and you will be able to see the messages exchanged between the systems. Why? Because <strong>all</strong> conStruct tools communicate with one or multiple web service endpoint(s) and one or multiple structWSF instances.</p>
<p>Now, lets take a look at the output of the search query above.</p>
<ul type="disc">
<li>Web service query: [[url: <strong>http://localhost/ws/search/</strong>] [method: post] [mime:      text/xml] [parameters: <a name="OLE_LINK15"></a>]      [execution time: <strong>0.279745101929</strong>]] (status: 200) OK &#8211; .</li>
<li>Web service query: [[url: <strong>http://bknetwork.org/ws/search/</strong>] [method: post] [mime:      text/xml] [parameters:      query=rdf&amp;types=all&amp;datasets=http%3A%2F%2Fbknetwork.org%2Fwsf%2Fdatasets%2F283%2F%3Bhttp%3A%2F%2Fconstructscs.com%2Fwsf%2Fdatasets%2F160%2F&amp;items=10&amp;page=0&amp;inference=on&amp;include_aggregates=true&amp;registered_ip=self%3A%3A0]      [execution time: <strong>0.289397001266</strong>]] (status: 200) OK &#8211; .</li>
<li>Web service query: [[url: <strong>http://localhost/ws/dataset/read/</strong>] [method: get] [mime:      text/xml] [parameters: uri=all&amp;registered_ip=self%3A%3A0] [execution      time: <strong>0.123399972916</strong>]] (status: 200) OK &#8211; .</li>
<li>Web service query: [[url: <a name="OLE_LINK14"></a><strong>/ws/dataset/read/</strong>] [method: get] [mime:      text/xml] [parameters: uri=all&amp;registered_ip=self%3A%3A0] [execution      time: <strong>0.18315911293</strong>]] (status: 200) OK &#8211; .</li>
</ul>
<p>Each dot is a query sent to a specific structWSF instance. For each query, you have this information:</p>
<ul type="disc">
<li>URL      of the web service endpoint where the query has been sent.</li>
<li>HTTP      method used to send the query</li>
<li>MIME      type (Accept HTTP header parameters) requested</li>
<li>Parameters      of the query</li>
<li>Time      it took to execute the query (including network latency &amp; query      processing)</li>
<li>Status      of the query from the web service endpoint</li>
</ul>
<p>Since this conStruct instance is linked to two different structWSF instances, the search tool will send a search query to two different search web service endpoints. Additionally, it will query these structWSF instances to get the description of the searched dataset (to display the proper name of the datasets in the user interface).</p>
<p>Each query is validated by the structWSF instances to make sure that they are legitimate queries. If they are, then results are returned. Once these queries are sent and answers received, the structSearch tool can then generate the page and display it to the user.</p>
<p>Do you want more? Here is a list of queries sent by different conStruct tools to different web services endpoints:</p>
<ul type="disc">
<li><a href="http://constructscs.com/conStruct/browse/?wsf_debug=2">Browse      tool: listing datasets to browse</a></li>
<li><a href="http://constructscs.com/conStruct/browse/?browse=true&amp;attribute=all&amp;type=all&amp;dataset=http%3A%2F%2Fconstructscs.com%2Fwsf%2Fdatasets%2F122%2F&amp;page=0&amp;wsf_debug=1">Browse      tool: browsing a specific dataset</a></li>
<li><a href="http://constructscs.com/conStruct/dataset/?wsf_debug=2">Dataset      tool</a></li>
<li><a href="http://constructscs.com/conStruct/view/?uri=http%3A%2F%2Fconstructscs.com%2FconStruct%2Fdatasets%2F122%2Fresource%2FCerebra_Server&amp;dataset=http%3A%2F%2Fconstructscs.com%2Fwsf%2Fdatasets%2F122%2F&amp;wsf_debug=2">View      page</a></li>
</ul>
<p><strong>(Note: this debug info tabs has been added so that people can see what is happening under the hood. However this information is only accessible to the registered conStruct instance and the administrator of that instance).</strong></p>
<h3>Do it by yourself, from your desktop computer</h3>
<p>I said that people or organizations that managed to create content data on these structWSF instances were able to manage/manipulate their data from anywhere: not only from within conStruct. Lets test this.</p>
<p>I changed the permissions on the Sweet Tools List dataset so that it is publicly available for reading. That way, any anyone will be able to send <a href="http://curl.haxx.se/">Curl</a> queries against the dataset, to that structWSF instance.</p>
<p>Now, lets try a couple of queries to different web services endpoints. Let start with a query for the keyword &#8220;rdf&#8221; on the Sweet Tools dataset:</p>
<p style="padding-left: 30px;"><em>curl -H &#8220;Accept: text/xml&#8221; &#8220;http://constructscs.com/ws/search/&#8221; -d &#8220;query=rdf&amp;types=all&amp;datasets=http%3A%2F%2Fconstructscs.com%2Fwsf%2Fdatasets%2F122%2F&amp;items=10&amp;inference=on&#8221;</em></p>
<p>What you will get for this query is a list of 10 instance records that match this query. You don&#8217;t like the internal XML representation of the system? Then try the internal JSON representation by running this query:</p>
<p><a name="OLE_LINK17"></a></p>
<p>Maybe this is not good enough for you? Then lets try in RDF+XML:</p>
<p style="padding-left: 30px;"><em>curl -H &#8220;Accept: application/rdf+xml&#8221; &#8220;http://constructscs.com/ws/search/&#8221; -d &#8220;query=rdf&amp;types=all&amp;datasets=http%3A%2F%2Fconstructscs.com%2Fwsf%2Fdatasets%2F122%2F&amp;items=10&amp;inference=on&#8221;</em></p>
<p>I think you understood the point here, so I won&#8217;t continue.</p>
<p>Now, lets send a query to get all the datasets accessible by you:</p>
<p style="padding-left: 30px;"><em>curl -H &#8220;Accept: application/rdf+xml&#8221; &#8220;http://constructscs.com/ws/auth/lister/&#8221; -d &#8220;mode=adataset&#8221;</em></p>
<p>If you can query all these things with Curl, this mean that anything can query these services. Standalone softwares can be developed to leverage these content nodes as well as other online applications.</p>
<h3>Conclusion</h3>
<p>As you probably learned with this blog post, one of the powers of structWSF is that it creates networks of structured content nodes that can be accessed by any thing, from anywhere, publicly or privately.</p>
<p>As you noticed, all this stuff is not only about integrating any kind of data, but also to publish it in a flexible way.</p>
]]></content:encoded>
			<wfw:commentRss>http://fgiasson.com/blog/index.php/2009/08/12/construct-a-skin-for-structwsf/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Re-Introduction</title>
		<link>http://fgiasson.com/blog/index.php/2009/08/10/re-introduction/</link>
		<comments>http://fgiasson.com/blog/index.php/2009/08/10/re-introduction/#comments</comments>
		<pubDate>Mon, 10 Aug 2009 21:46:42 +0000</pubDate>
		<dc:creator>Fred</dc:creator>
				<category><![CDATA[Semantic Web]]></category>
		<category><![CDATA[Structured Dynamics]]></category>
		<category><![CDATA[conStruct]]></category>
		<category><![CDATA[structWSF]]></category>

		<guid isPermaLink="false">http://fgiasson.com/blog/?p=945</guid>
		<description><![CDATA[	
	<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Focoins.info%3Agenerator&amp;rft.title=Re-Introduction&amp;rft.aulast=Giasson&amp;rft.aufirst=Frédérick&amp;rft.subject=Semantic Web&amp;rft.subject=Structured Dynamics&amp;rft.subject=conStruct&amp;rft.subject=structWSF&amp;rft.source=Frederick Giasson&#8217;s Weblog&amp;rft.date=2009-08-10&amp;rft.type=blogPost&amp;rft.format=text&amp;rft.identifier=http://fgiasson.com/blog/index.php/2009/08/10/re-introduction/&amp;rft.language=English"></span>
I haven&#8217;t been active on this blog for more than half a year now. I was telling myself that I was too busy coding to write anything meaningful to my readers. I did write a couple of things, but nothing of importance related to all the things I was working on. I did publish announcements [...]]]></description>
			<content:encoded><![CDATA[	
	<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Focoins.info%3Agenerator&amp;rft.title=Re-Introduction&amp;rft.aulast=Giasson&amp;rft.aufirst=Frédérick&amp;rft.subject=Semantic Web&amp;rft.subject=Structured Dynamics&amp;rft.subject=conStruct&amp;rft.subject=structWSF&amp;rft.source=Frederick Giasson&#8217;s Weblog&amp;rft.date=2009-08-10&amp;rft.type=blogPost&amp;rft.format=text&amp;rft.identifier=http://fgiasson.com/blog/index.php/2009/08/10/re-introduction/&amp;rft.language=English"></span>
<p>I haven&#8217;t been active on this blog for more than half a year now. I was telling myself that I was too busy coding to write anything meaningful to my readers. I did write a couple of things, but nothing of importance related to all the things I was working on. I did publish announcements and such, but didn&#8217;t really take the time to write about these things. A lot of things have been done and published recently, but little has been said. So, lets try to rectify the shot so that I share more about what I am currently working on, the concepts I am playing with, the systems I am releasing, etc. So, lets restart to write about these things that I really do believe in, and that I put all my time, efforts and energy in. Lets restart writing about things that I do believe in and that are valuable to me.</p>
<p>As you probably know, my company <a href="http://structureddynamics.com">Structured Dynamics</a> released a series of products: <a href="http://openstructs.org/structwsf/">structWSF</a> and <a href="http://constructscs.com">conStruct</a>. I spent the last six months developing these two products. However, what are they? Why did I spend all my time working on these products? Why does they matter? Why do I think that they are valuable?</p>
<p>Let me outline what they are, what they do and what they are useful at. Then think if they could be of any value to you, your organizations, your enterprises, etc.</p>
<h3>StructWSF</h3>
<p><a href="http://fgiasson.com/blog/wp-content/uploads/2009/06/triple_120.png"><img class="alignleft size-full wp-image-941" title="triple_120" src="http://fgiasson.com/blog/wp-content/uploads/2009/06/triple_120.png" alt="" width="120" height="120" /></a><a href="http://openstructs.org/structwsf/">StructWSF</a> is a web services framework (WSF) that basically does four things: it ingest, manage, interact with and publish data. What kind data? Any kind of data</p>
<p><strong>Ingesting</strong>: the aim is to be able to ingest data from any data source (so data formatted using any language, or described using any vocabularies/schemas techniques). The framework has to be able to ingest any data that come from any data sources with a single conversion step.</p>
<p><strong>Managing</strong>: the aim is to be able to manage the data. Managing the data means being able to collectively (with permissions and authentication) manage datasets available in a framework instance. Being about the create, modify, delete or update data. It also means being able to browse and search the data. It means making it publicly available, or to restrict its access to a user or group of users. This means merging datasets together too.</p>
<p><strong>Interacting</strong>: but there is another facet to data management. We don&#8217;t only want to be able to manage data in a locked system. What we want is to be able to manage its data from anywhere. It can be from my browse, from my website, from some other applications on my desktop, from my home, from my office: from anywhere. All functions of a structWSF instance are accessible as web services endpoints. This means that you can perform any action, on your data, from anywhere you want: from a conStruct node or from a local Curl query. This is I think how people / organizations want to be able to manage the data they create and curate data.</p>
<p><strong>Publishing</strong>: like ingesting, we want to be able to publish, to communicate the data we create to other people, other organizations or other entities. We want to do this in such a way that these external entities doesn&#8217;t have to recreate/reinvent themselves. We want to be able to communicate data the way they understand it: using any format and any vocabulary/schema.</p>
<p>The mindset behind structWSF is the following: we can ingest any kind of data, we can manage that data in multiple ways, we can interact with that data from anywhere and we can publish-back this data in any ways. structWSF is friction less in the sense of data communication between systems, users and entities.</p>
<h3>conStruct</h3>
<p><a href="http://fgiasson.com/blog/wp-content/uploads/2009/06/construct_logo_120.png"><img class="alignright size-full wp-image-942" title="construct_logo_120" src="http://fgiasson.com/blog/wp-content/uploads/2009/06/construct_logo_120.png" alt="" width="120" height="120" /></a><a href="http://constructscs.com">conStruct</a> is just a skin over one, or multiple, structWSF instances. The conStruct software is an example of how a system can interact with a structWSF data provider. conStruct is a suite of generic tools that can be used to search, browse, visualize (template), import, export, create, delete and update data. All these tools interact with one or multiple structWSF functions by using their web service endpoints.</p>
<p>Since conStruct can interact with a single structWSF instance, it can also interact with multiple structWSF instances. That means that conStruct can be a user interface that communicates with multiple data providers (structWSF instances) and display all the results, from all these providers, in a canonical user interface.</p>
<p>But as I said, conStruct is <em>one</em> skin over structWSF instances. We could think about the integration of structWSF into other CMS systems. We could even think about having different CMS systems integrating with the same structWSF instance(s) so that if one user update/create/delete some data, it appears in other CMS systems as well.</p>
<h3>The Magic Twist</h3>
<p>However, all this is done with a twist: everything is structured. This means that everything that is in the system has a structure: is described using some vocabularies (full blow ontologies; or naive vocabularies). This enable all kind of valuable functionalities: inferencing capabilities in search and browse activities, filtering on types and attributes, helps integrating different datasets from different systems and organizations.</p>
<p>This is the magic twist that make this system different: everything in there is structured in such a way that everything can be ingested and published in any format; in such a way that basic inferencing or more complex reasoning is possible. It integrates data and let users use it the way they want from where they are. The capabilities are there; use it if you need them.</p>
<h3>Next steps</h3>
<p>The next steps for me will be to describe the features of the system: how the data is managed, how permissions work, what is the granularity of permissions available, etc. These will be more technical blog posts, but they will give you the full potential of the systems and concepts I have been talking in this blog post.</p>
]]></content:encoded>
			<wfw:commentRss>http://fgiasson.com/blog/index.php/2009/08/10/re-introduction/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
