blob: acb9392970b1efa4d3c4d3f1e7aa1803161d5780 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="keywords" content="SMILA/Project Concepts/Data Model and XML representation,SMILA/Project Concepts/Blackboard Service Concept,SMILA/Project Concepts/ID Concept,G.schmidt.brox.de,Juergen.schumacher.empolis.com,Churkin.ivan.gmail.com" />
<link rel="shortcut icon" href="http://wiki.eclipse.org/SMILA/Project_Concepts/favicon.ico" />
<link rel="search" type="application/opensearchdescription+xml" href="http://wiki.eclipse.org/opensearch_desc.php" title="Eclipsepedia (English)" />
<link rel="alternate" type="application/rss+xml" title="Eclipsepedia RSS Feed" href="http://wiki.eclipse.org/index.php?title=Special:Recentchanges&amp;feed=rss" />
<link rel="alternate" type="application/atom+xml" title="Eclipsepedia Atom Feed" href="http://wiki.eclipse.org/index.php?title=Special:Recentchanges&amp;feed=atom" />
<title>SMILA/Project Concepts/Data Model and XML representation - Eclipsepedia</title>
<style type="text/css" media="screen,projection">/*<![CDATA[*/ @import "http://wiki.eclipse.org/skins/eclipsenova/novaWide.css?116"; /*]]>*/</style>
<link rel="stylesheet" type="text/css" media="print" href="http://wiki.eclipse.org/skins/eclipsenova/eclipsenovaPrint.css?116" />
<link rel="stylesheet" type="text/css" media="handheld" href="http://wiki.eclipse.org/skins/eclipsenova/handheld.css?116" />
<link rel="stylesheet" type="text/css" href="http://wiki.eclipse.org/skins/eclipsenova/Nova/css/header.css" media="screen" />
<link rel="stylesheet" type="text/css" href="http://wiki.eclipse.org/skins/eclipsenova/tabs.css" media="screen" />
<link rel="stylesheet" type="text/css" href="http://wiki.eclipse.org/skins/eclipsenova/Nova/css/visual.css" media="screen" />
<link rel="stylesheet" type="text/css" href="http://wiki.eclipse.org/skins/eclipsenova/Nova/css/layout.css" media="screen" />
<link rel="stylesheet" type="text/css" href="http://wiki.eclipse.org/skins/eclipsenova/Nova/css/footer.css" media="screen" />
<!--[if IE]><link rel="stylesheet" type="text/css" href="/skins/eclipsenova/IEpngfix.css" media="screen" /><![endif]-->
<!--[if lt IE 5.5000]><style type="text/css">@import "/skins/eclipsenova/IE50Fixes.css?116";</style> <![endif]-->
<!--[if IE 5.5000]><style type="text/css">@import "/skins/eclipsenova/IE55Fixes.css?116";</style><![endif]-->
<!--[if IE 6]><style type="text/css">@import "/skins/eclipsenova/IE60Fixes.css?116";</style><![endif]-->
<!--[if IE 7]><style type="text/css">@import "/skins/eclipsenova/IE70Fixes.css?116";</style><![endif]-->
<!--[if lt IE 7]><script type="text/javascript" src="/skins/common/IEFixes.js?116"></script>
<meta http-equiv="imagetoolbar" content="no" /><![endif]-->
<script type= "text/javascript">/*<![CDATA[*/
var skin = "eclipsenova";
var stylepath = "/skins";
var wgArticlePath = "/$1";
var wgScriptPath = "";
var wgScript = "/index.php";
var wgServer = "http://wiki.eclipse.org";
var wgCanonicalNamespace = "";
var wgCanonicalSpecialPageName = false;
var wgNamespaceNumber = 0;
var wgPageName = "SMILA/Project_Concepts/Data_Model_and_XML_representation";
var wgTitle = "SMILA/Project Concepts/Data Model and XML representation";
var wgAction = "view";
var wgRestrictionEdit = [];
var wgRestrictionMove = [];
var wgArticleId = "15156";
var wgIsArticle = true;
var wgUserName = null;
var wgUserGroups = null;
var wgUserLanguage = "en";
var wgContentLanguage = "en";
var wgBreakFrames = false;
var wgCurRevisionId = "128017";
var wgVersion = "1.12.0";
var wgEnableAPI = true;
var wgEnableWriteAPI = false;
/*]]>*/</script>
<script type="text/javascript" src="http://wiki.eclipse.org/skins/common/wikibits.js?116"><!-- wikibits js --></script>
<!-- Performance mods similar to those for bug 166401 -->
<script type="text/javascript" src="http://wiki.eclipse.org/index.php?title=-&amp;action=raw&amp;gen=js&amp;useskin=eclipsenova"><!-- site js --></script>
<!-- Head Scripts -->
<script type="text/javascript" src="http://wiki.eclipse.org/skins/common/ajax.js?116"></script>
<style type="text/css">/*<![CDATA[*/
.source-java {line-height: normal; font-size: medium;}
.source-java li {line-height: normal;}
/**
* GeSHi Dynamically Generated Stylesheet
* --------------------------------------
* Dynamically generated stylesheet for java
* CSS class: source-java, CSS id:
* GeSHi (C) 2004 - 2007 Nigel McNie (http://qbnz.com/highlighter)
*/
.source-java .de1, .source-java .de2 {font-family: 'Courier New', Courier, monospace; font-weight: normal;}
.source-java {}
.source-java .head {}
.source-java .foot {}
.source-java .imp {font-weight: bold; color: red;}
.source-java .ln-xtra {color: #cc0; background-color: #ffc;}
.source-java li {font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;}
.source-java li.li2 {font-weight: bold;}
.source-java .kw1 {color: #7F0055; font-weight: bold;}
.source-java .kw2 {color: #7F0055; font-weight: bold;}
.source-java .kw3 {color: #000000; font-weight: normal}
.source-java .kw4 {color: #7F0055; font-weight: bold;}
.source-java .co1 {color: #3F7F5F; font-style: italic;}
.source-java .co2 {color: #3F7F5F;}
.source-java .co3 {color: #3F7F5F; font-style: italic; font-weight: bold;}
.source-java .coMULTI {color: #3F5FBF; font-style: italic;}
.source-java .es0 {color: #000000;}
.source-java .br0 {color: #000000;}
.source-java .st0 {color: #2A00ff;}
.source-java .nu0 {color: #000000;}
.source-java .me1 {color: #000000;}
.source-java .me2 {color: #000000;}
/*]]>*/
</style>
<style type="text/css">/*<![CDATA[*/
@import "http://wiki.eclipse.org/index.php?title=MediaWiki:Geshi.css&usemsgcache=yes&action=raw&ctype=text/css&smaxage=18000";
/*]]>*/
</style><style type="text/css">/*<![CDATA[*/
.source-xml {line-height: normal; font-size: medium;}
.source-xml li {line-height: normal;}
/**
* GeSHi Dynamically Generated Stylesheet
* --------------------------------------
* Dynamically generated stylesheet for xml
* CSS class: source-xml, CSS id:
* GeSHi (C) 2004 - 2007 Nigel McNie (http://qbnz.com/highlighter)
*/
.source-xml .de1, .source-xml .de2 {font-family: 'Courier New', Courier, monospace; font-weight: normal;}
.source-xml {}
.source-xml .head {}
.source-xml .foot {}
.source-xml .imp {font-weight: bold; color: red;}
.source-xml .ln-xtra {color: #cc0; background-color: #ffc;}
.source-xml li {font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;}
.source-xml li.li2 {font-weight: bold;}
.source-xml .coMULTI {color: #808080; font-style: italic;}
.source-xml .es0 {color: #000099; font-weight: bold;}
.source-xml .br0 {color: #66cc66;}
.source-xml .st0 {color: #ff0000;}
.source-xml .nu0 {color: #cc66cc;}
.source-xml .sc0 {color: #00bbdd;}
.source-xml .sc1 {color: #ddbb00;}
.source-xml .sc2 {color: #339933;}
.source-xml .sc3 {color: #009900;}
.source-xml .re0 {color: #000066;}
.source-xml .re1 {font-weight: bold; color: black;}
.source-xml .re2 {font-weight: bold; color: black;}
/*]]>*/
</style>
<style type="text/css">/*<![CDATA[*/
@import "http://wiki.eclipse.org/index.php?title=MediaWiki:Geshi.css&usemsgcache=yes&action=raw&ctype=text/css&smaxage=18000";
/*]]>*/
</style><link rel="stylesheet" type="text/css" href="Data_Model_and_XML_representation.html" /> </head>
<body class="mediawiki ns-0 ltr page-SMILA_Project_Concepts_Data_Model_and_XML_representation">
<div id="globalWrapper">
<div id="column-one">
<!-- Eclipse Additions for the Top Nav start here M. Ward-->
<div id="header">
<div id="header-graphic">
<img src="http://wiki.eclipse.org/skins/eclipsenova/eclipse.png" alt="Eclipse Wiki">
</div>
<!-- Pulled 101409 Mward -->
<div class="portlet" id="p-personal">
<div class="pBody">
<ul>
<li id="pt-login"><a href="http://wiki.eclipse.org/index.php?title=Special:Userlogin&amp;returnto=SMILA/Project_Concepts/Data_Model_and_XML_representation">Log in</a></li>
</ul>
</div>
</div>
<div id="header-icons">
<div id="sites">
<ul id="sitesUL">
<li><a href="http://www.eclipse.org"><img src="http://dev.eclipse.org/custom_icons/eclipseIcon.png" width="28" height="28" alt="Eclipse Foundation" title="Eclipse Foundation" /><div>Eclipse Foundation</div></a></li>
<li><a href="http://marketplace.eclipse.org"><img src="http://dev.eclipse.org/custom_icons/marketplace.png" width="28" height="28" alt="Eclipse Marketplace" title="Eclipse Marketplace" /><div>Eclipse Marketplace</div></a></li>
<li><a href="https://bugs.eclipse.org/bugs"><img src="http://dev.eclipse.org/custom_icons/system-search-bw.png" width="28" height="28" alt="Bugzilla" title="Bugzilla" /><div>Bugzilla</div></a></li>
<li><a href="http://live.eclipse.org"><img src="http://dev.eclipse.org/custom_icons/audio-input-microphone-bw.png" width="28" height="28" alt="Live" title="Live" /><div>Eclipse Live</div></a></li>
<li><a href="http://planeteclipse.org"><img src="http://dev.eclipse.org/large_icons/devices/audio-card.png" width="28" height="28" alt="PlanetEclipse" title="Planet" /><div>Planet Eclipse</div></a></li>
<li><a href="http://portal.eclipse.org"><img src="http://dev.eclipse.org/custom_icons/preferences-system-network-proxy-bw.png" width="28" height="28" alt="Portal" title="Portal" /><div>My Foundation Portal</div></a></li>
</ul>
</div>
</div>
</div>
<!-- NEW HEADER STUFF HERE -->
<div id="header-menu">
<div id="header-nav">
<ul> <li><a class="first_one" href="http://wiki.eclipse.org/" target="_self">Home</a></li> <li><a href="http://www.eclipse.org/downloads/" target="_self">Downloads</a></li>
<li><a href="http://www.eclipse.org/users/" target="_self">Users</a></li>
<li><a href="http://www.eclipse.org/membership/" target="_self">Members</a></li>
<li><a href="http://wiki.eclipse.org/index.php/Development_Resources" target="_self">Committers</a></li>
<li><a href="http://www.eclipse.org/resources/" target="_self">Resources</a></li>
<li><a href="http://www.eclipse.org/projects/" target="_self">Projects</a></li>
<li><a href="http://www.eclipse.org/org/" target="_self">About Us</a></li>
</ul>
</div>
<div id="header-utils">
<!-- moved the search window here -->
<form action="http://wiki.eclipse.org/Special:Search" >
<input class="input" name="search" type="text" accesskey="f" value="" />
<input type='submit' onclick="this.submit();" name="go" id="searchGoButton" class="button" title="Go to a page with this exact name if one exists" value="Go" />&nbsp;
<input type='submit' onclick="this.submit();" name="fulltext" class="button" id="mw-searchButton" title="Search Eclipsepedia for this text" value="Search" />
</form>
</div>
</div>
<!-- Eclipse Additions for the Header stop here -->
<!-- Additions and mods for leftside nav Start here -->
<!--Started nav rip here-->
<!-- these are the nav controls main page, changes etc -->
<div id="novaContent" class="faux">
<div id="leftcol">
<ul id="leftnav">
<!-- these are the page controls, edit history etc -->
<li class="separator"><a class="separator">Navigation &#160;&#160;</li>
<li id="n-mainpage"><a href="http://wiki.eclipse.org/Main_Page">Main Page</a></li>
<li id="n-portal"><a href="http://wiki.eclipse.org/Eclipsepedia:Community_Portal">Community portal</a></li>
<li id="n-currentevents"><a href="http://wiki.eclipse.org/Eclipsepedia:Current_events">Current events</a></li>
<li id="n-recentchanges"><a href="http://wiki.eclipse.org/Special:Recentchanges">Recent changes</a></li>
<li id="n-randompage"><a href="http://wiki.eclipse.org/Special:Random">Random page</a></li>
<li id="n-help"><a href="http://wiki.eclipse.org/Help:Contents">Help</a></li>
<li class="separator"><a class="separator">Toolbox &#160;&#160;</a></li>
<li id="t-whatlinkshere"><a href="http://wiki.eclipse.org/Special:Whatlinkshere/SMILA/Project_Concepts/Data_Model_and_XML_representation">What links here</a></li>
<li id="t-recentchangeslinked"><a href="http://wiki.eclipse.org/Special:Recentchangeslinked/SMILA/Project_Concepts/Data_Model_and_XML_representation">Related changes</a></li>
<!-- This is the toolbox section -->
<li id="t-upload"><a href="http://wiki.eclipse.org/Special:Upload">Upload file</a></li>
<li id="t-specialpages"><a href="http://wiki.eclipse.org/Special:Specialpages">Special pages</a></li>
<li id="t-print"><a href="http://wiki.eclipse.org/index.php?title=SMILA/Project_Concepts/Data_Model_and_XML_representation&amp;printable=yes">Printable version</a></li> <li id="t-permalink"><a href="http://wiki.eclipse.org/index.php?title=SMILA/Project_Concepts/Data_Model_and_XML_representation&amp;oldid=128017">Permanent link</a></li> </ul>
</div>
<!-- Additions and mods for leftside nav End here -->
<div id="column-content">
<div id="content">
<a name="top" id="top"></a>
<div id="tabs">
<ul class="primary">
<li class="active"><a href="Data_Model_and_XML_representation.html"><span class="tab">Page</span></a></li>
<li><a href="http://wiki.eclipse.org/index.php?title=Talk:SMILA/Project_Concepts/Data_Model_and_XML_representation&amp;action=edit"><span class="tab">Discussion</span></a></li>
<li><a href="http://wiki.eclipse.org/index.php?title=SMILA/Project_Concepts/Data_Model_and_XML_representation&amp;action=edit"><span class="tab">View source</span></a></li>
<li><a href="http://wiki.eclipse.org/index.php?title=SMILA/Project_Concepts/Data_Model_and_XML_representation&amp;action=history"><span class="tab">History</span></a></li>
<li><a href="http://wiki.eclipse.org/index.php?title=Special:Userlogin&amp;returnto=SMILA/Project&#32;Concepts/Data&#32;Model&#32;and&#32;XML&#32;representation"><span class="tab">Edit</span></a></li>
</ul>
</div>
<script type="text/javascript"> if (window.isMSIE55) fixalpha(); </script>
<h1 class="firstHeading">SMILA/Project Concepts/Data Model and XML representation</h1>
<div id="bodyContent">
<h3 id="siteSub">From Eclipsepedia</h3>
<div id="contentSub"><span class="subpages">&lt; <a href="../../SMILA.html" title="SMILA">SMILA</a> | <a href="../Project_Concepts.1.html" title="SMILA/Project Concepts">Project Concepts</a></span></div>
<div id="jump-to-nav">Jump to: <a href="Data_Model_and_XML_representation.html#column-one">navigation</a>, <a href="Data_Model_and_XML_representation.html#searchInput">search</a></div> <!-- start content -->
<table id="toc" class="toc" summary="Contents"><tr><td><div id="toctitle"><h2>Contents</h2></div>
<ul>
<li class="toclevel-1"><a href="Data_Model_and_XML_representation.html#Description"><span class="tocnumber">1</span> <span class="toctext">Description</span></a></li>
<li class="toclevel-1"><a href="Data_Model_and_XML_representation.html#Discussion"><span class="tocnumber">2</span> <span class="toctext">Discussion</span></a></li>
<li class="toclevel-1"><a href="Data_Model_and_XML_representation.html#Technical_proposal"><span class="tocnumber">3</span> <span class="toctext">Technical proposal</span></a>
<ul>
<li class="toclevel-2"><a href="Data_Model_and_XML_representation.html#Considerations"><span class="tocnumber">3.1</span> <span class="toctext">Considerations</span></a></li>
<li class="toclevel-2"><a href="Data_Model_and_XML_representation.html#Physical_Data_Model"><span class="tocnumber">3.2</span> <span class="toctext">Physical Data Model</span></a></li>
<li class="toclevel-2"><a href="Data_Model_and_XML_representation.html#Description_of_Logical_Data_Model"><span class="tocnumber">3.3</span> <span class="toctext">Description of Logical Data Model</span></a></li>
<li class="toclevel-2"><a href="Data_Model_and_XML_representation.html#Java_Interfaces_of_Logical_Data_Model"><span class="tocnumber">3.4</span> <span class="toctext">Java Interfaces of Logical Data Model</span></a></li>
<li class="toclevel-2"><a href="Data_Model_and_XML_representation.html#XML_Schema_of_Logical_Data_Model"><span class="tocnumber">3.5</span> <span class="toctext">XML Schema of Logical Data Model</span></a></li>
</ul>
</li>
</ul>
</td></tr></table><script type="text/javascript"> if (window.showTocToggle) { var tocShowText = "show"; var tocHideText = "hide"; showTocToggle(); } </script>
<a name="Description"></a><h2> <span class="mw-headline"> Description </span></h2>
<p>This page describes the data model used in SMILA to represent data objects (records) in workflows.
</p>
<a name="Discussion"></a><h2> <span class="mw-headline"> Discussion </span></h2>
<p><a href="http://wiki.eclipse.org/User:G.schmidt.brox.de" title="User:G.schmidt.brox.de">G.schmidt.brox.de</a>: Currently I have some remarks regarding the record interface.
</p>
<ul><li> We are not able to return large data, such as videos or large xml data, due to the lack of a stream interface for attachments.
</li></ul>
<ul><li><ul><li> <a href="http://wiki.eclipse.org/User:Juergen.schumacher.empolis.com" title="User:Juergen.schumacher.empolis.com">Juergen.schumacher.empolis.com</a> Yes, that's right. The problem is how to handle streams when sending a record with attachments via remote interfaces (I think we wanted to allow Crawler -&gt; Controller, anyway it must be possible in the communication Controller -&gt; Connectivity). You cannot send around the stream then, the receiver might not even able to access the actual object, even a callback from receiver to sender as in Ivans proposal below might not be possible. Any idea how to handle this is appreciated. Maybe using blackboard services in Crawler components woudl be possible, because it supports pushing attachments as stream directly to its bin storage. In this case a record could be transferred e.g. from CrawlerController to Connectivity by first pushing it from teh CC-Blackboard to the Connectivity-Blackboard and then sending only the record ID to Connectivity. Just an idea.
</li></ul>
</li></ul>
<ul><li> I am developing an crawler that returns XML. This crawler is able to crawl our Berkeley DB storage. Thus way I am able to return full Record structures. The open question is. How do I convert a embedded ID into a ID for the record. Via normal XML/IndexOrder syntax I am not able to generate a dynamic key that contains several hierarchies that may change on record level.
</li></ul>
<ul><li><ul><li> <a href="http://wiki.eclipse.org/User:Juergen.schumacher.empolis.com" title="User:Juergen.schumacher.empolis.com">Juergen.schumacher.empolis.com</a> I'm not sure that I understand your scenario. Why do you need to create a new ID? Is it not possible just to reuse the original ID? The record in your source XML DB still represents the original source object, so probably it should keep its ID. Another possibility would be to create a new ID with the ID hash of the original ID as the key value, because in the XML DB the hash serves as a kind of simple primary key.
</li></ul>
</li></ul>
<ul><li><ul><li><ul><li> <a href="http://wiki.eclipse.org/User:G.schmidt.brox.de" title="User:G.schmidt.brox.de">G.schmidt.brox.de</a> From my point of view you get right to the point. How can i create a ID directly. How is configuration at index order affected? E.g. when just copying the ID, how do I set this ID in a MObject/Record object in a way that it's not replaced. Further I may need a transformation between those ID's. e.g. if I have a import from Record V1 to Record V2. I do not yet see a way to handle this.
</li></ul>
</li></ul>
</li></ul>
<p><br />
<a href="http://wiki.eclipse.org/index.php?title=User:Churkin.ivan.gmail.com&amp;action=edit" class="new" title="User:Churkin.ivan.gmail.com">Ivan Churkin</a>:
</p>
<ol><li> Record object should be changed to avoid ability to set Attachment as byte[]
</li><li> Crawler Developer will only point Attachment's name in the Record object
</li><li> Crawler interface should be improved by adding method
</li></ol>
<div dir="ltr" style="text-align: left;"><pre class="source-java"><span class="kw1">interface</span> Crawler<span class="br0">&#123;</span>
....
<span class="kw3">InputStream</span> getAttachmentStream<span class="br0">&#40;</span><span class="kw4">int</span> pos, <span class="kw3">String</span> attachmentName<span class="br0">&#41;</span>
&nbsp;
<span class="br0">&#125;</span></pre></div>
<ol><li> Crawler Controller, after fetching Record from Crawler, will track Attachments and transfer streams from Crawler one-by-one
</li></ol>
<p><a href="http://wiki.eclipse.org/index.php?title=User:Churkin.ivan.gmail.com&amp;action=edit" class="new" title="User:Churkin.ivan.gmail.com">Ivan Churkin</a>: I only wondering... Juergen, you know better SCA features, explain please. SCA doesn't supporting stream callbacks? Is it possible somehow to transfer stream? If it's not possible, then shame on SCA, it's better to write TCP/IP based custom protocol&nbsp;:)
</p><p>&gt;Maybe using blackboard services in Crawler components would be possible
</p><p>BWT: blackboard interface already contains streams as arguments and as return type. So, it cannot be binded by SCA already? What is the difference between CC and Blackboard here?
</p><p><a href="http://wiki.eclipse.org/User:Juergen.schumacher.empolis.com" title="User:Juergen.schumacher.empolis.com">Juergen.schumacher.empolis.com</a> Sorry, I do currently not know what happens with methods with streams as arguments or return types in SCA when using different remote bindings. Certainly SCA cannot do wonders, and from my experience handling streams in any RCP protocol is not trivial. In case of CrawlerController talking to Connectivity via a WebService interface through a firewall that simply does not allow Connectivity talking back to the Controller (a valid deployment scenario from the very beginning of SMILA) ... what should SCA do there? So, in general we should design our interfaces to be remoting-friendly where they need to be. So far, Blackboard has not been a major candidate for being accessed by remote clients. This may change, but it also may require a specific remote interface instead remoting the complete local interface.
</p><p><a href="http://wiki.eclipse.org/User:G.schmidt.brox.de" title="User:G.schmidt.brox.de">G.schmidt.brox.de</a> About SCA and remoting usage. Jürgen, could you please ask the SCA team how to handle those points. (You are absolute right). Maybe they have best practices for interface design and so on. Further we may think of a probably need for a communication proxy for SCA or similar technologies.
</p><p><a href="http://wiki.eclipse.org/index.php?title=User:Churkin.ivan.gmail.com&amp;action=edit" class="new" title="User:Churkin.ivan.gmail.com">Ivan Churkin</a> Many thanks Juergen, yes, there are problems if to support any RCP. But, maybe it's possible to strict protocol to common one? Or it's not allowed here&nbsp;:(?
&gt;firewall that simply does not allow Connectivity talking back to the Controller
Theoretically remote callbacks may be avoided by caching to file by SCA-proxy class,
</p>
<a name="Technical_proposal"></a><h2> <span class="mw-headline"> Technical proposal </span></h2>
<a name="Considerations"></a><h3> <span class="mw-headline"> Considerations </span></h3>
<p>What we need:
</p>
<ul><li> Simple API for service developers to work with the records.
</li><li> Minimal constraints on what is possible to express
</li><li> Any SMILA component must be able to process every incoming record without knowing about any other component in the installation that
</li></ul>
<p>may have produced some service specific part of the record. It must also be able to reproduce these elements in its result if they were
not explicitly deleted during service execution.
</p>
<ul><li> This means that for service specific classes we cannot even rely on having the same classes in the same version installed in each
</li></ul>
<p>composite at the same time.
</p>
<ul><li> Records produced and stored with one version state of an SMILA installation must be re-processable also with updated versions of the installation (at least, if the major version of the framework has not changed).
</li><li> Nice XML representation possible
</li><li> Simple to express XPath queries on objects for conditions in BPEL or message routers.
</li></ul>
<p>In my opinion, this means, that we cannot have the data model extended by any service specific classes, but we must provide a data model that
is able to express everything that a service might want to express. As a later extension we plan to allow the use of user-definable XML streaming for application specific object types, but this will not be implemented in the first version.
</p>
<a name="Physical_Data_Model"></a><h3> <span class="mw-headline"> Physical Data Model </span></h3>
<p>{info:Alternative Proposal}
This section has been obsoleted largely by <a href="Blackboard_Service_Concept.html" title="SMILA/Project Concepts/Blackboard Service Concept">SMILA/Project Concepts/Blackboard Service Concept</a>. However, I still suggest to define a logical data model using interfaces to hide the physical implementation from the client in order to make optimized implementations of the data model possible in different parts of the framework.
{info}
Problem: Different processing engine require to work on certain Java objects. E.g.:
</p>
<ul><li> The ODE BPEL engine needs to be called with DOM objects.
</li><li> ActiveBPEL uses other classes.
</li><li> One could think of a SMILA specific processing engine that could use a physical data model that implements the logical data model more efficiently.
</li></ul>
<p>Conversion between different physical models can become expensive if it has to be done very often. This means e.g. that if a BPEL engine to orchestrate a number of SMILA services, it should not be necessary to actually convert the exchanged data objects each time a service is called and each time a service returns its result to the engine. And because the orchestration engine should be replaceable like everything else in the framework, we cannot commit to using e.g. DOM as the physical representation of our data objects, because then we would have conversion issues when using ActiveBPEL.
</p><p>Proposal:
</p>
<ul><li> Define logical data model using a set of interfaces and a corresponding XML schema.
</li><li> SMILA services access and create data only by using these interfaces, they do not need to know about the actual physica data model.
</li><li> Provide physical data models that implement these interfaces using appropriate object formats.
</li></ul>
<p>E.g. when using ODE as the orchestration engine, use a physical model that uses DOM to represent the data objects. These DOM object can be passed to the BPEL engine directly. Each time a service is invoked from BPEL only a small wrapper must be created and the service can access the DOM objects as logical SMILA objects.
</p><p>On the other hand, in a crawler or in a queue listener that does not use a BPEL engine, a more efficient implementation of the logical model could be used for better performance.
</p><p>Data exchange between components that require to use different physical data models could easiest be done by using the common XML format for serialization. Also, queue messages would always contain an XML string. Each listener can then decide for itself which implementation to use.
</p>
<a name="Description_of_Logical_Data_Model"></a><h3> <span class="mw-headline"> Description of Logical Data Model </span></h3>
<p>This proposal is based on experiences made with the IAS (the <a href="http://www.empolis.com/en/information_management/" class="external text" title="http://www.empolis.com/en/information_management/" rel="nofollow">empolis Information Access Suite</a>) data model. It is intended as a simplification of the IAS model, to overcome problems caused by its over-specification.
</p><p>Record - Top level element
</p>
<ul><li> ID: see <a href="ID_Concept.html" title="SMILA/Project Concepts/ID Concept">SMILA/Project Concepts/ID Concept</a> for details
</li><li> metadata: Metadata Object - the actual data about the document
</li><li> attachments: Map&lt;String, byte[]&gt; - additional data not serializable to XML (or too inefficient), e.g.:
<ul><li> binary content of documents
</li><li> Huge annotations
</li></ul>
</li></ul>
<p>MetadataObject
</p>
<ul><li> attributes: Map&lt;String, Attribute&gt; - data about records according to some application model or ontology
</li><li> annotations: Map&lt;String, List&lt;Annotation&gt;&gt; - additional service specific data
</li></ul>
<p>Attribute
</p>
<ul><li> name: String
</li><li> value: List&lt;MetadataObject|Literal&gt;
</li><li> annotations: Map&lt;String, List&lt;Annotation&gt;&gt;
</li></ul>
<p>Literal
</p>
<ul><li> semantic type: String
</li><li> value: (String | Long | Double | Boolean | Date | Time | DateTime)?
</li><li> data type
</li><li> annotations: Map&lt;String, List&lt;Annotation&gt;&gt;
</li></ul>
<p>Annotation
</p>
<ul><li> anonymous values: List&lt;String&gt;
</li><li> named values Map&lt;String, String&gt;
</li><li> annotations: Map&lt;String, List&lt;Annotation&gt;&gt;
</li></ul>
<a name="Java_Interfaces_of_Logical_Data_Model"></a><h3> <span class="mw-headline"> Java Interfaces of Logical Data Model </span></h3>
<p>Note: This is just a preview. The details may be changed during implementation if other variants are be more appropriate or convenenient.
</p>
<div dir="ltr" style="text-align: left;"><pre class="source-java"><span class="kw1">interface</span> <span class="kw3">Annotation</span> <span class="kw1">extends</span> Annotatable <span class="br0">&#123;</span>
List&lt;String&gt; getAnonValues<span class="br0">&#40;</span><span class="br0">&#41;</span>;
<span class="kw4">void</span> addAnonValue<span class="br0">&#40;</span><span class="kw3">String</span><span class="br0">&#41;</span>;
<span class="kw4">void</span> removeAnonValues<span class="br0">&#40;</span><span class="br0">&#41;</span>;
&nbsp;
<span class="kw4">void</span> setNamedValue<span class="br0">&#40;</span><span class="kw3">String</span> name, <span class="kw3">String</span> value<span class="br0">&#41;</span>;
<span class="kw3">String</span> getNamedValues<span class="br0">&#40;</span><span class="kw3">String</span> name<span class="br0">&#41;</span>;
<span class="kw4">void</span> removeNamedValues<span class="br0">&#40;</span><span class="br0">&#41;</span>;
<span class="br0">&#125;</span></pre></div>
<div dir="ltr" style="text-align: left;"><pre class="source-java"><span class="kw1">interface</span> Annotatable <span class="br0">&#123;</span>
<span class="kw4">boolean</span> hasAnnotations<span class="br0">&#40;</span><span class="br0">&#41;</span>;
<span class="kw4">boolean</span> hasAnnotation<span class="br0">&#40;</span><span class="kw3">String</span><span class="br0">&#41;</span>;
&nbsp;
List&lt;Annotation&gt; getAnnotations<span class="br0">&#40;</span><span class="kw3">String</span><span class="br0">&#41;</span>;
<span class="kw3">Annotation</span> getAnnotation<span class="br0">&#40;</span><span class="kw3">String</span><span class="br0">&#41;</span>;
&nbsp;
<span class="kw4">void</span> setAnnotations<span class="br0">&#40;</span><span class="kw3">String</span>, List&lt;Annotation&gt;<span class="br0">&#41;</span>;
<span class="kw4">void</span> setAnnotation<span class="br0">&#40;</span><span class="kw3">String</span>, <span class="kw3">Annotation</span><span class="br0">&#41;</span>;
<span class="kw4">void</span> addAnnotation<span class="br0">&#40;</span><span class="kw3">String</span>, <span class="kw3">Annotation</span><span class="br0">&#41;</span>;
&nbsp;
<span class="kw4">void</span> removeAnnotations<span class="br0">&#40;</span><span class="kw3">String</span><span class="br0">&#41;</span>;
<span class="br0">&#125;</span></pre></div>
<div dir="ltr" style="text-align: left;"><pre class="source-java"><span class="kw1">interface</span> Record <span class="br0">&#123;</span>
ID getID<span class="br0">&#40;</span><span class="br0">&#41;</span>;
<span class="kw4">void</span> setID<span class="br0">&#40;</span>ID<span class="br0">&#41;</span>;
&nbsp;
MObject getMetadata<span class="br0">&#40;</span><span class="br0">&#41;</span>;
<span class="kw4">void</span> getMetadata<span class="br0">&#40;</span>MObject<span class="br0">&#41;</span>;
&nbsp;
<span class="kw4">boolean</span> hasAttachments<span class="br0">&#40;</span><span class="br0">&#41;</span>;
<span class="kw4">byte</span><span class="br0">&#91;</span><span class="br0">&#93;</span> getAttachment<span class="br0">&#40;</span><span class="kw3">String</span><span class="br0">&#41;</span>;
<span class="kw4">void</span> putAttachment<span class="br0">&#40;</span><span class="kw3">String</span>, <span class="kw4">byte</span><span class="br0">&#91;</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;
<span class="br0">&#125;</span></pre></div>
<div dir="ltr" style="text-align: left;"><pre class="source-java"><span class="kw1">interface</span> <span class="kw3">Attribute</span> <span class="kw1">extends</span> Annotatable <span class="br0">&#123;</span>
<span class="kw3">String</span> getName<span class="br0">&#40;</span><span class="br0">&#41;</span>;
&nbsp;
<span class="kw4">boolean</span> hasLiterals<span class="br0">&#40;</span><span class="br0">&#41;</span>;
<span class="kw4">int</span> valueSize<span class="br0">&#40;</span><span class="br0">&#41;</span>;
List&lt;Literal&gt; getLiterals<span class="br0">&#40;</span><span class="br0">&#41;</span>;
Literal getLiterale<span class="br0">&#40;</span><span class="br0">&#41;</span>; <span class="co1">// return only first value in list, if any</span>
<span class="kw4">void</span> addLiteral<span class="br0">&#40;</span>Literal literal<span class="br0">&#41;</span>;
<span class="kw4">void</span> removeValues<span class="br0">&#40;</span><span class="br0">&#41;</span>;
&nbsp;
<span class="kw4">boolean</span> hasObjects<span class="br0">&#40;</span><span class="br0">&#41;</span>;
<span class="kw4">int</span> ObjectSize<span class="br0">&#40;</span><span class="br0">&#41;</span>;
List&lt;MObject&gt; getObjects<span class="br0">&#40;</span><span class="br0">&#41;</span>;
MObject getObject<span class="br0">&#40;</span><span class="br0">&#41;</span>; <span class="co1">// return only first Object in list, if any</span>
<span class="kw4">void</span> addObject<span class="br0">&#40;</span>MObject object<span class="br0">&#41;</span>;
<span class="kw4">void</span> removeObjects<span class="br0">&#40;</span><span class="br0">&#41;</span>;
<span class="br0">&#125;</span></pre></div>
<div dir="ltr" style="text-align: left;"><pre class="source-java"><span class="kw1">interface</span> AttributeValue <span class="kw1">extends</span> Annotatable <span class="br0">&#123;</span>
<span class="kw3">String</span> getSemanticType<span class="br0">&#40;</span><span class="br0">&#41;</span>;
<span class="kw4">void</span> setSemanticType<span class="br0">&#40;</span><span class="kw3">String</span><span class="br0">&#41;</span>;
<span class="br0">&#125;</span></pre></div>
<div dir="ltr" style="text-align: left;"><pre class="source-java"><span class="co1">// MObject is short for Metadata Object</span>
<span class="kw1">interface</span> MObject <span class="kw1">extends</span> AttributeValue <span class="br0">&#123;</span>
<span class="kw4">boolean</span> hasAttributes<span class="br0">&#40;</span><span class="br0">&#41;</span>;
<span class="kw4">boolean</span> hasAttribute<span class="br0">&#40;</span><span class="kw3">String</span><span class="br0">&#41;</span>;
<span class="kw3">Attribute</span> getAttribute<span class="br0">&#40;</span><span class="kw3">String</span><span class="br0">&#41;</span>;
<span class="kw4">void</span> setAttribute<span class="br0">&#40;</span><span class="kw3">String</span>, <span class="kw3">Attribute</span><span class="br0">&#41;</span>;
<span class="br0">&#125;</span></pre></div>
<div dir="ltr" style="text-align: left;"><pre class="source-java"><span class="kw1">interface</span> Literal <span class="kw1">extends</span> AttributeValue <span class="br0">&#123;</span>
<span class="kw4">boolean</span> hasValue<span class="br0">&#40;</span><span class="br0">&#41;</span>;
&nbsp;
<span class="kw3">Object</span> getValue<span class="br0">&#40;</span><span class="br0">&#41;</span>;
<span class="kw3">String</span> getStringValue<span class="br0">&#40;</span><span class="br0">&#41;</span>; <span class="co1">// return toString() of value, if not a string</span>
<span class="co1">// other type specific methods return null, if value is not of requested type</span>
<span class="kw3">Long</span> getIntValue<span class="br0">&#40;</span><span class="br0">&#41;</span>;
<span class="kw3">Double</span> getFPValue<span class="br0">&#40;</span><span class="br0">&#41;</span>;
<span class="kw3">Boolean</span> getBoolValue<span class="br0">&#40;</span><span class="br0">&#41;</span>;
<span class="kw3">Date</span> getDateTimeValue<span class="br0">&#40;</span><span class="br0">&#41;</span>;
&nbsp;
<span class="kw4">void</span> setValue<span class="br0">&#40;</span><span class="kw3">Object</span><span class="br0">&#41;</span> <span class="kw1">throws</span> InvalidArgumentException;
<span class="kw4">void</span> setStringValue<span class="br0">&#40;</span><span class="kw3">String</span><span class="br0">&#41;</span>;
<span class="kw4">void</span> setIntValue<span class="br0">&#40;</span><span class="kw3">Long</span><span class="br0">&#41;</span>;
<span class="kw4">void</span> setFPValue<span class="br0">&#40;</span><span class="kw3">Double</span><span class="br0">&#41;</span>;
<span class="kw4">void</span> setBoolValue<span class="br0">&#40;</span><span class="kw3">Boolean</span><span class="br0">&#41;</span>;
<span class="kw4">void</span> setDateTimeValue<span class="br0">&#40;</span><span class="kw3">Date</span><span class="br0">&#41;</span>;
<span class="br0">&#125;</span></pre></div>
<a name="XML_Schema_of_Logical_Data_Model"></a><h3> <span class="mw-headline"> XML Schema of Logical Data Model </span></h3>
<p>XML Schema design by example
</p><p>The following XML snippet illustrates how to possibly represent this data model in XML. This section should be seen as experimental.
</p><p>The XML schema is targeted at being relatively easy to use for XPath expressions in BPEL processes or elsewhere. The element and attribute have been abbreviated in order to minimze the length on the resulting document. This should have an positive impact on communication overhead and processing performance (of course, in reality also whitespace (linefeeds, indentation) should be left out).
</p><p>The annotations used as examples are motivated by 0often used IAS properties.
</p>
<div dir="ltr" style="text-align: left;"><pre class="source-xml"><span class="sc3"><span class="re1">&lt;RecordList</span> <span class="re0">xmlns</span>=<span class="st0">&quot;http://www.eclipse.org/smila/record&quot;</span> <span class="re0">xmlns:id</span>=<span class="st0">&quot;http://www.eclipse.org/smila/id&quot;</span>
<span class="re0">xmlns:rec</span>=<span class="st0">&quot;http://www.eclipse.org/smila/record&quot;</span> <span class="re0">xmlns:xsi</span>=<span class="st0">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span>
<span class="re0">xsi:schemaLocation</span>=<span class="st0">&quot;http://www.eclipse.org/smila/record record.xsd &quot;</span><span class="re2">&gt;</span></span>
&nbsp;
<span class="sc3"><span class="re1">&lt;Record</span> <span class="re0">version</span>=<span class="st0">&quot;1.0&quot;</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;id:ID</span> <span class="re0">version</span>=<span class="st0">&quot;1.0&quot;</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;id:Source<span class="re2">&gt;</span></span></span>share<span class="sc3"><span class="re1">&lt;/id:Source<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;id:Key<span class="re2">&gt;</span></span></span>some.html<span class="sc3"><span class="re1">&lt;/id:Key<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/id:ID<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;A</span> <span class="re0">n</span>=<span class="st0">&quot;mimetype&quot;</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="coMULTI">&lt;!-- IAS retrieval filter: annotation attached to attribute, valid for complete attribute value --&gt;</span></span>
<span class="sc3"><span class="re1">&lt;An</span> <span class="re0">n</span>=<span class="st0">&quot;filter&quot;</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;V</span> <span class="re0">n</span>=<span class="st0">&quot;type&quot;</span><span class="re2">&gt;</span></span>exclude<span class="sc3"><span class="re1">&lt;/V<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;An</span> <span class="re0">n</span>=<span class="st0">&quot;values&quot;</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;V<span class="re2">&gt;</span></span></span>text/plain<span class="sc3"><span class="re1">&lt;/V<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;V<span class="re2">&gt;</span></span></span>text/html<span class="sc3"><span class="re1">&lt;/V<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/An<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/An<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;L<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;V<span class="re2">&gt;</span></span></span>text/html<span class="sc3"><span class="re1">&lt;/V<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;V</span> <span class="re0">st</span>=<span class="st0">&quot;appl:Mimetype&quot;</span><span class="re2">&gt;</span></span>text/html<span class="sc3"><span class="re1">&lt;/V<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/L<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/A<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;A</span> <span class="re0">n</span>=<span class="st0">&quot;filesize&quot;</span><span class="re2">&gt;</span></span><span class="sc3"><span class="coMULTI">&lt;!-- single numeric value attribute --&gt;</span></span>
<span class="sc3"><span class="re1">&lt;L<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;V</span> <span class="re0">t</span>=<span class="st0">&quot;int&quot;</span><span class="re2">&gt;</span></span>1234<span class="sc3"><span class="re1">&lt;/V<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/L<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/A<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;A</span> <span class="re0">n</span>=<span class="st0">&quot;trustee&quot;</span><span class="re2">&gt;</span></span><span class="sc3"><span class="coMULTI">&lt;!-- multivalued attribute without annotation for each value --&gt;</span></span>
<span class="sc3"><span class="re1">&lt;L<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;V<span class="re2">&gt;</span></span></span>group1<span class="sc3"><span class="re1">&lt;/V<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;V<span class="re2">&gt;</span></span></span>group2<span class="sc3"><span class="re1">&lt;/V<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/L<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/A<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;A</span> <span class="re0">n</span>=<span class="st0">&quot;topic&quot;</span><span class="re2">&gt;</span></span><span class="sc3"><span class="coMULTI">&lt;!-- multivalued attribute with simple values with annotations --&gt;</span></span>
<span class="sc3"><span class="re1">&lt;An</span> <span class="re0">n</span>=<span class="st0">&quot;importance&quot;</span><span class="re2">&gt;</span></span><span class="sc3"><span class="coMULTI">&lt;!-- IAS query boost factor, refers to complete attribute --&gt;</span></span>
<span class="sc3"><span class="re1">&lt;V<span class="re2">&gt;</span></span></span>4.0<span class="sc3"><span class="re1">&lt;/V<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/An<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;L<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;V<span class="re2">&gt;</span></span></span>Eclipse<span class="sc3"><span class="re1">&lt;/V<span class="re2">&gt;</span></span></span><span class="sc3"><span class="coMULTI">&lt;!-- first value --&gt;</span></span>
<span class="sc3"><span class="re1">&lt;An</span> <span class="re0">n</span>=<span class="st0">&quot;sourceRef&quot;</span><span class="re2">&gt;</span></span><span class="sc3"><span class="coMULTI">&lt;!-- part of IAS textminer info for first value--&gt;</span></span>
<span class="sc3"><span class="re1">&lt;V</span> <span class="re0">n</span>=<span class="st0">&quot;attribute&quot;</span><span class="re2">&gt;</span></span>fulltext<span class="sc3"><span class="re1">&lt;/V<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;V</span> <span class="re0">n</span>=<span class="st0">&quot;startPos&quot;</span><span class="re2">&gt;</span></span>37<span class="sc3"><span class="re1">&lt;/V<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;V</span> <span class="re0">n</span>=<span class="st0">&quot;endPos&quot;</span><span class="re2">&gt;</span></span>42<span class="sc3"><span class="re1">&lt;/V<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/An<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;An</span> <span class="re0">n</span>=<span class="st0">&quot;sourceRef&quot;</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;V</span> <span class="re0">n</span>=<span class="st0">&quot;attribute&quot;</span><span class="re2">&gt;</span></span>fulltext<span class="sc3"><span class="re1">&lt;/V<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;V</span> <span class="re0">n</span>=<span class="st0">&quot;startPos&quot;</span><span class="re2">&gt;</span></span>137<span class="sc3"><span class="re1">&lt;/V<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;V</span> <span class="re0">n</span>=<span class="st0">&quot;endPos&quot;</span><span class="re2">&gt;</span></span>142<span class="sc3"><span class="re1">&lt;/V<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/An<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;An</span> <span class="re0">n</span>=<span class="st0">&quot;importance&quot;</span><span class="re2">&gt;</span></span><span class="sc3"><span class="coMULTI">&lt;!-- extra IAS query boost factor for first value --&gt;</span></span>
<span class="sc3"><span class="re1">&lt;V<span class="re2">&gt;</span></span></span>2.0<span class="sc3"><span class="re1">&lt;/V<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/An<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/L<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;L<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;V<span class="re2">&gt;</span></span></span>SMILA<span class="sc3"><span class="re1">&lt;/V<span class="re2">&gt;</span></span></span><span class="sc3"><span class="coMULTI">&lt;!-- second attribute value --&gt;</span></span>
<span class="sc3"><span class="re1">&lt;An</span> <span class="re0">n</span>=<span class="st0">&quot;sourceRef&quot;</span><span class="re2">&gt;</span></span><span class="sc3"><span class="coMULTI">&lt;!-- following annotations refer to second value --&gt;</span></span>
<span class="sc3"><span class="coMULTI">&lt;!-- similar to above --&gt;</span></span>
<span class="sc3"><span class="re1">&lt;/An<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/L<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/A<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;A</span> <span class="re0">n</span>=<span class="st0">&quot;author&quot;</span><span class="re2">&gt;</span></span><span class="sc3"><span class="coMULTI">&lt;!-- &quot;set of aggregates&quot; --&gt;</span></span>
<span class="sc3"><span class="re1">&lt;O<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;A</span> <span class="re0">n</span>=<span class="st0">&quot;firstName&quot;</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;L<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;V<span class="re2">&gt;</span></span></span>Igor<span class="sc3"><span class="re1">&lt;/V<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/L<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/A<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;A</span> <span class="re0">n</span>=<span class="st0">&quot;lastName&quot;</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;L<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;V<span class="re2">&gt;</span></span></span>Novakovic<span class="sc3"><span class="re1">&lt;/V<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/L<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/A<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/O<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;O</span> <span class="re0">st</span>=<span class="st0">&quot;appl:Author&quot;</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;A</span> <span class="re0">n</span>=<span class="st0">&quot;firstName&quot;</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;L<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;V<span class="re2">&gt;</span></span></span>Georg<span class="sc3"><span class="re1">&lt;/V<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/L<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/A<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;A</span> <span class="re0">n</span>=<span class="st0">&quot;lastName&quot;</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;L<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;V<span class="re2">&gt;</span></span></span>Schmidt<span class="sc3"><span class="re1">&lt;/V<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/L<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/A<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/O<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/A<span class="re2">&gt;</span></span></span>
&nbsp;
<span class="sc3"><span class="re1">&lt;An</span> <span class="re0">n</span>=<span class="st0">&quot;action&quot;</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;V<span class="re2">&gt;</span></span></span>update<span class="sc3"><span class="re1">&lt;/V<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/An<span class="re2">&gt;</span></span></span>
&nbsp;
<span class="sc3"><span class="re1">&lt;Attachment<span class="re2">&gt;</span></span></span>content<span class="sc3"><span class="re1">&lt;/Attachment<span class="re2">&gt;</span></span></span><span class="sc3"><span class="coMULTI">&lt;!-- just a marker that an attachment exists in attachment store? --&gt;</span></span>
<span class="sc3"><span class="re1">&lt;Attachment<span class="re2">&gt;</span></span></span>fulltext<span class="sc3"><span class="re1">&lt;/Attachment<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/Record<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/RecordList<span class="re2">&gt;</span></span></span></pre></div>
<p>Some notes
</p>
<ul><li> <code>&lt;L&gt;</code> can contain multiple <code>&lt;V&gt;</code>, if the single values do not have annotations
</li><li> The <code>st</code> attribute in &lt;L&gt; and &lt;O&gt; means some application specific "semantic" type while the <code>t</code> attribute in <code>&lt;V&gt;</code> means the native datatype of this value.
</li><li> The version attribute is for parsers todo conversion between older XML formats and the current supported format if necessary.
</li><li> The data model will be extended later to support XML streaming of user-definable object types, either as attribute values or in an extra part of the record.
</li></ul>
<!--
NewPP limit report
Preprocessor node count: 41/1000000
Post-expand include size: 0/2097152 bytes
Template argument size: 0/2097152 bytes
#ifexist count: 0/100
-->
<!-- Saved in parser cache with key wikidb:pcache:idhash:15156-0!1!0!!en!2!edit=0 and timestamp 20120710093546 -->
<div class="printfooter">
Retrieved from "<a href="Data_Model_and_XML_representation.html">http://wiki.eclipse.org/SMILA/Project_Concepts/Data_Model_and_XML_representation</a>"</div>
<div id="catlinks"><p class='catlinks'><a href="http://wiki.eclipse.org/Special:Categories" title="Special:Categories">Category</a>: <span dir='ltr'><a href="http://wiki.eclipse.org/Category:SMILA" title="Category:SMILA">SMILA</a></span></p></div> <!-- end content -->
<div class="visualClear"></div>
</div>
</div>
</div>
<!-- Yoink of toolbox for phoenix moved up -->
</div>
</div>
<div id="clearFooter"/>
<div id="footer" >
<ul id="footernav">
<li class="first"><a href="http://www.eclipse.org/">Home</a></li>
<li><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></li>
<li><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></li>
<li><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></li>
<li><a href="http://www.eclipse.org/org/foundation/contact.php">Contact</a></li>
<li><a href="http://wiki.eclipse.org/Eclipsepedia:About" title="Eclipsepedia:About">About Eclipsepedia</a></li>
</ul>
<span id="copyright">Copyright &copy; 2012 The Eclipse Foundation. All Rights Reserved</span>
<p id="footercredit">This page was last modified 16:00, 11 November 2008 by <a href="http://wiki.eclipse.org/User:Igor.novakovic.empolis.com" title="User:Igor.novakovic.empolis.com">Igor Novakovic</a>. Based on work by <a href="http://wiki.eclipse.org/User:Daniel.stucky.empolis.com" title="User:Daniel.stucky.empolis.com">Daniel Stucky</a>, <a href="http://wiki.eclipse.org/index.php?title=User:Churkin.ivan.gmail.com&amp;action=edit" class="new" title="User:Churkin.ivan.gmail.com">Ivan Churkin</a> and <a href="http://wiki.eclipse.org/User:G.schmidt.brox.de" title="User:G.schmidt.brox.de">Georg Schmidt</a> and <a href="http://wiki.eclipse.org/index.php?title=SMILA/Project_Concepts/Data_Model_and_XML_representation&amp;action=credits" title="SMILA/Project Concepts/Data Model and XML representation">others</a>.</p>
<p id="footerviews">This page has been accessed 3,873 times.</p>
</div>
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-910670-4");
pageTracker._trackPageview();
</script>
<!-- <div class="visualClear"></div> -->
<script type="text/javascript">if (window.runOnloadHook) runOnloadHook();</script>
</div>
<!-- Served in 0.054 secs. --></body></html>