| <!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/Documentation/Search,SMILA/Documentation/BPEL Workflow Processor" /> |
| <link rel="shortcut icon" href="http://wiki.eclipse.org/SMILA/Documentation/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&feed=rss" /> |
| <link rel="alternate" type="application/atom+xml" title="Eclipsepedia Atom Feed" href="http://wiki.eclipse.org/index.php?title=Special:Recentchanges&feed=atom" /> |
| |
| |
| <title>SMILA/Documentation/Search - Eclipsepedia</title> |
| |
| <style type="text/css" media="screen,projection">/*<![CDATA[*/ @import "/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/Documentation/Search"; |
| var wgTitle = "SMILA/Documentation/Search"; |
| var wgAction = "view"; |
| var wgRestrictionEdit = []; |
| var wgRestrictionMove = []; |
| var wgArticleId = "18950"; |
| var wgIsArticle = true; |
| var wgUserName = null; |
| var wgUserGroups = null; |
| var wgUserLanguage = "en"; |
| var wgContentLanguage = "en"; |
| var wgBreakFrames = false; |
| var wgCurRevisionId = "241530"; |
| 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=-&action=raw&gen=js&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-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 "/index.php?title=MediaWiki:Geshi.css&usemsgcache=yes&action=raw&ctype=text/css&smaxage=18000"; |
| /*]]>*/ |
| </style><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 "/index.php?title=MediaWiki:Geshi.css&usemsgcache=yes&action=raw&ctype=text/css&smaxage=18000"; |
| /*]]>*/ |
| </style><link rel="stylesheet" type="text/css" href="Search.html" /> </head> |
| <body class="mediawiki ns-0 ltr page-SMILA_Documentation_Search"> |
| <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&returnto=SMILA/Documentation/Search">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" /> |
| <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   </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   </a></li> |
| |
| <li id="t-whatlinkshere"><a href="http://wiki.eclipse.org/Special:Whatlinkshere/SMILA/Documentation/Search">What links here</a></li> |
| <li id="t-recentchangeslinked"><a href="http://wiki.eclipse.org/Special:Recentchangeslinked/SMILA/Documentation/Search">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/Documentation/Search&printable=yes">Printable version</a></li> <li id="t-permalink"><a href="http://wiki.eclipse.org/index.php?title=SMILA/Documentation/Search&oldid=241530">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="Search.html"><span class="tab">Page</span></a></li> |
| <li><a href="http://wiki.eclipse.org/index.php?title=Talk:SMILA/Documentation/Search&action=edit"><span class="tab">Discussion</span></a></li> |
| <li><a href="http://wiki.eclipse.org/index.php?title=SMILA/Documentation/Search&action=edit"><span class="tab">View source</span></a></li> |
| <li><a href="http://wiki.eclipse.org/index.php?title=SMILA/Documentation/Search&action=history"><span class="tab">History</span></a></li> |
| <li><a href="http://wiki.eclipse.org/index.php?title=Special:Userlogin&returnto=SMILA/Documentation/Search"><span class="tab">Edit</span></a></li> |
| </ul> |
| </div> |
| |
| |
| <script type="text/javascript"> if (window.isMSIE55) fixalpha(); </script> |
| <h1 class="firstHeading">SMILA/Documentation/Search</h1> |
| <div id="bodyContent"> |
| <h3 id="siteSub">From Eclipsepedia</h3> |
| <div id="contentSub"><span class="subpages">< <a href="../../SMILA.html" title="SMILA">SMILA</a> | <a href="../Documentation.html" title="SMILA/Documentation">Documentation</a></span></div> |
| <div id="jump-to-nav">Jump to: <a href="Search.html#column-one">navigation</a>, <a href="Search.html#searchInput">search</a></div> <!-- start content --> |
| <p>This page describes the search service and related parts of SMILA. This includes the query and result helpers, the processing of search requests in BPEL workflows, and the sample servlet used to create a simple search Web GUI. |
| </p> |
| <table id="toc" class="toc" summary="Contents"><tr><td><div id="toctitle"><h2>Contents</h2></div> |
| <ul> |
| <li class="toclevel-1"><a href="Search.html#Introduction"><span class="tocnumber">1</span> <span class="toctext">Introduction</span></a></li> |
| <li class="toclevel-1"><a href="Search.html#Search_Processing"><span class="tocnumber">2</span> <span class="toctext">Search Processing</span></a> |
| <ul> |
| <li class="toclevel-2"><a href="Search.html#Search_Pipelines"><span class="tocnumber">2.1</span> <span class="toctext">Search Pipelines</span></a></li> |
| <li class="toclevel-2"><a href="Search.html#SimplePipelets.2FProcessingServices_in_Search_pipelines"><span class="tocnumber">2.2</span> <span class="toctext">SimplePipelets/ProcessingServices in Search pipelines</span></a></li> |
| <li class="toclevel-2"><a href="Search.html#SearchPipelets.2FSearchProcessingServices"><span class="tocnumber">2.3</span> <span class="toctext">SearchPipelets/SearchProcessingServices</span></a></li> |
| </ul> |
| </li> |
| <li class="toclevel-1"><a href="Search.html#Search_Service_API"><span class="tocnumber">3</span> <span class="toctext">Search Service API</span></a></li> |
| <li class="toclevel-1"><a href="Search.html#Query_Parameters"><span class="tocnumber">4</span> <span class="toctext">Query Parameters</span></a></li> |
| <li class="toclevel-1"><a href="Search.html#Query_Attribute_Annotations"><span class="tocnumber">5</span> <span class="toctext">Query Attribute Annotations</span></a></li> |
| <li class="toclevel-1"><a href="Search.html#Result_Annotations"><span class="tocnumber">6</span> <span class="toctext">Result Annotations</span></a></li> |
| <li class="toclevel-1"><a href="Search.html#Helper_Classes"><span class="tocnumber">7</span> <span class="toctext">Helper Classes</span></a></li> |
| <li class="toclevel-1"><a href="Search.html#Servlet"><span class="tocnumber">8</span> <span class="toctext">Servlet</span></a> |
| <ul> |
| <li class="toclevel-2"><a href="Search.html#XSLT_Stylehsheets_for_SMILA_search_and_result_pages"><span class="tocnumber">8.1</span> <span class="toctext">XSLT Stylehsheets for SMILA search and result pages</span></a></li> |
| <li class="toclevel-2"><a href="Search.html#Setting_parameters"><span class="tocnumber">8.2</span> <span class="toctext">Setting parameters</span></a></li> |
| <li class="toclevel-2"><a href="Search.html#Setting_attributes"><span class="tocnumber">8.3</span> <span class="toctext">Setting attributes</span></a></li> |
| <li class="toclevel-2"><a href="Search.html#Setting_other_annotations"><span class="tocnumber">8.4</span> <span class="toctext">Setting other annotations</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="Introduction"></a><h3> <span class="mw-headline"> Introduction </span></h3> |
| <p>Let's start at the top: If you have installed SMILA and created an index by starting a crawler you can now use you web browser to go to <a href="http://localhost:8080/SMILA/search" class="external free" title="http://localhost:8080/SMILA/search" rel="nofollow">http://localhost:8080/SMILA/search</a> to search the index: |
| </p><p><a href="http://wiki.eclipse.org/Image:SMILA-search-page-default.png" class="image" title="SMILA's sample search page"><img alt="SMILA's sample search page" src="http://wiki.eclipse.org/images/thumb/8/82/SMILA-search-page-default.png/500px-SMILA-search-page-default.png" width="500" height="422" border="0" /></a> |
| </p><p>What happens behind the scenes when you enter a query string and submit the form is that a servlet creates a SMILA record from the HTTP parameters, uses the search service to execute a BPEL workflow on this record, receives an enriched version of the query record and a list of result records in XML form and uses an XSLT stylesheet to create a result HTML page. |
| </p><p>Using the <a href="http://localhost:8080/SMILA/search?style=SMILASearchAdvanced" class="external text" title="http://localhost:8080/SMILA/search?style=SMILASearchAdvanced" rel="nofollow">Advanced</a> link at the top you can switch to more detailed search page: |
| </p><p><a href="http://wiki.eclipse.org/Image:SMILA-search-page-advanced.png" class="image" title="SMILA's advanced sample search page"><img alt="SMILA's advanced sample search page" src="http://wiki.eclipse.org/images/thumb/7/70/SMILA-search-page-advanced.png/500px-SMILA-search-page-advanced.png" width="500" height="422" border="0" /></a> |
| </p><p>This page allows you to enter a more specific query. In case you want to use the default search servlet for your own search page you should use the XSLT files that create these two pages as a reference when trying to design your own search page. |
| </p><p><br /> |
| </p> |
| <a name="Search_Processing"></a><h3> <span class="mw-headline"> Search Processing </span></h3> |
| <p>Having seen the tip of the iceberg, we dive down to the very bottom of SMILA search: the actual processing of search requests in SMILA BPEL pipelines. We assume that you are accustomed to the basic SMILA workflow processing features used in indexing workflows. You may want to refer to <a href="BPEL_Workflow_Processor.html" title="SMILA/Documentation/BPEL Workflow Processor">SMILA/Documentation/BPEL_Workflow_Processor</a> for details. |
| </p> |
| <a name="Search_Pipelines"></a><h4> <span class="mw-headline"> Search Pipelines </span></h4> |
| <p>Search workflows (or pipelines) are very similar to indexing pipelines, but there are a few extensions. The variables in indexing pipelines represent just a simple list of records. This is not sufficient for search pipelines where we need to distinguish between the single record representing the user query (the "query record") and the current list of result records (the "search result"). This results in a few general differences between the BPEL files of indexing and search pipelines: |
| </p> |
| <ul><li> the partner link of the pipeline must be of type "proc:SearchProcessorPartnerLinkType": |
| </li></ul> |
| <div dir="ltr" style="text-align: left;"><pre class="source-xml"><span class="sc3"><span class="re1"><partnerLinks<span class="re2">></span></span></span> |
| <span class="sc3"><span class="re1"><partnerLink</span> <span class="re0">name</span>=<span class="st0">"Pipeline"</span> <span class="re0">partnerLinkType</span>=<span class="st0">"proc:SearchProcessorPartnerLinkType"</span> <span class="re0">myRole</span>=<span class="st0">"service"</span> <span class="re2">/></span></span> |
| <span class="sc3"><span class="re1"></partnerLinks<span class="re2">></span></span></span></pre></div> |
| <ul><li> the input and output variables of the pipeline itself and of pipelet/service invocations must have the message type "proc:SearchProcessorMessage". This message has only a single part named "records" which can contain a single record (the query record) and a record list (the result records). Refer to <tt>org.eclipse.smila.processing.bpel/xml/processor.wsdl</tt> for the details of the schema definition. |
| </li></ul> |
| <div dir="ltr" style="text-align: left;"><pre class="source-xml"><span class="sc3"><span class="re1"><variables<span class="re2">></span></span></span> |
| <span class="sc3"><span class="re1"><variable</span> <span class="re0">name</span>=<span class="st0">"request"</span> <span class="re0">messageType</span>=<span class="st0">"proc:SearchProcessorMessage"</span> <span class="re2">/></span></span> |
| <span class="sc3"><span class="re1"></variables<span class="re2">></span></span></span></pre></div> |
| <p><br /> |
| </p> |
| <ul><li> The <receive> and <reply> elements must use the portType "proc:SearchProcessorPortType": |
| </li></ul> |
| <div dir="ltr" style="text-align: left;"><pre class="source-xml"><span class="sc3"><span class="re1"><sequence<span class="re2">></span></span></span> |
| <span class="sc3"><span class="re1"><receive</span> <span class="re0">name</span>=<span class="st0">"start"</span> <span class="re0">partnerLink</span>=<span class="st0">"Pipeline"</span> <span class="re0">portType</span>=<span class="st0">"proc:SearchProcessorPortType"</span> |
| <span class="re0">operation</span>=<span class="st0">"process"</span> <span class="re0">variable</span>=<span class="st0">"request"</span> <span class="re0">createInstance</span>=<span class="st0">"yes"</span> <span class="re2">/></span></span> |
| <span class="sc3"><span class="coMULTI"><!-- service/pipelet invocation and other workflow logic --></span></span> |
| <span class="sc3"><span class="re1"><reply</span> <span class="re0">name</span>=<span class="st0">"end"</span> <span class="re0">partnerLink</span>=<span class="st0">"Pipeline"</span> <span class="re0">portType</span>=<span class="st0">"proc:SearchProcessorPortType"</span> |
| <span class="re0">operation</span>=<span class="st0">"process"</span> <span class="re0">variable</span>=<span class="st0">"request"</span> <span class="re2">/></span></span> |
| <span class="sc3"><span class="re1"></sequence<span class="re2">></span></span></span></pre></div> |
| <p>Apart from this, pipelet/service invocations look the same as in indexing pipelines. See <tt>SMILA.application/configuration/org.eclipse.smila.processing.bpel/pipelines/SearchPipeline.bpel</tt> for a complete example search pipeline (the one used in the above sample). |
| </p><p><br /> |
| </p> |
| <a name="SimplePipelets.2FProcessingServices_in_Search_pipelines"></a><h4> <span class="mw-headline"> SimplePipelets/ProcessingServices in Search pipelines </span></h4> |
| <p>Recall that the signature of the invocation method of SimplePipelets/ProcessingServices is |
| </p> |
| <div dir="ltr" style="text-align: left;"><pre class="source-java">Id<span class="br0">[</span><span class="br0">]</span> process<span class="br0">(</span>Blackboard blackboard, Id<span class="br0">[</span><span class="br0">]</span> recordIds<span class="br0">)</span> <span class="kw1">throws</span> ProcessingException;</pre></div> |
| <p>This means when used in search pipelines they cannot process a complete message variable. Therefore the engine selects one part of the message when invoking a "simple" pipeline element: |
| </p> |
| <ul><li> if there is not yet a result record list in the message (not even an empty one) the pipelet is called with the query record ID and the output message contains only a single query record ID, too. |
| </li><li> else it is called with the result record list and the result becomes the record list of the output variable. The query record ID is just copied to the result variable. |
| </li></ul> |
| <p>The rationale behind this is that in a search pipeline first some pipelets may be needed to prepare the query object (enrich the query, set some defaults, etc.), then follows the actual search, which takes the query as input and produces a list of results (thus adds the result record list to the variable) and then additional pipelets may be needed to manipulate the result further. Using the distinction described above makes it possible to use the same pipelet implementation for query and result records, just depending on their position in the pipeline. |
| </p> |
| <a name="SearchPipelets.2FSearchProcessingServices"></a><h4> <span class="mw-headline"> SearchPipelets/SearchProcessingServices </span></h4> |
| <p>For some operations in search pipelines this invocation pattern is not sufficient, the most prominent being the actual search implementation itself: It needs the query record as input and produces a result record list. But there may be other pipelets after the actual search that need to compare query and result records and therefore need access to both kinds of record. To support this, two new interfaces have been defined: |
| </p> |
| <ul><li> <tt>org.eclipse.smila.processing.SearchPipelet</tt> |
| </li><li> <tt>org.eclipse.smila.processing.SearchProcessingService</tt> |
| </li></ul> |
| <p>Concerning life cycle and configuration they are identical to standard Simple Pipelets and Processing Services: Pipelets are created and configured by the BPEL engine and must be declared in teh MANIFEST.MF of the providing bundle. ProcessingServices are started independently from the BPEL engine as OSGi services (though for different service interfaces). The enhancement provided by the search pipelets/service is a new invocation method: |
| </p> |
| <div dir="ltr" style="text-align: left;"><pre class="source-java">SearchMessage process<span class="br0">(</span>Blackboard blackboard, SearchMessage message<span class="br0">)</span> <span class="kw1">throws</span> ProcessingException;</pre></div> |
| <p>where <tt>SearchMessage</tt> consists of a query record ID and a record ID list. |
| </p> |
| <a name="Search_Service_API"></a><h3> <span class="mw-headline"> Search Service API </span></h3> |
| <p>The actual Search API is quite simple: SMILA registeres an OSGi service with the interface <tt>org.eclipse.smila.search.api.SearchService</tt>. It provides a few methods that take a |
| SMILA query record and the name of a search workflow as input, execute the workflow on the record and return the result in different formats: |
| </p> |
| <ul><li> <tt>SearchResult search(String workflowName, Record query) throws ProcessingException</tt>: this is the basic method of the search service, that returns the result records as SMILA data structures. The other methods call this method for the actual search execution, too, and just convert the result. |
| </li><li> <tt>org.w3c.dom.Document searchAsXml(String workflowName, Record query) throws ProcessingException</tt>: return the search result as a XML DOM document. See below for the schema of the result. |
| </li><li> <tt>String searchAsXmlString(String workflowName, Record query) throws ProcessingException</tt>: return the search result as an XML string. See below for the schema of the result. |
| </li></ul> |
| <p>The schema of XML search results is basically as follows (target namespace is <tt><a href="http://www.eclipse.org/smila/search" class="external free" title="http://www.eclipse.org/smila/search" rel="nofollow">http://www.eclipse.org/smila/search</a></tt>, see <tt>org.eclipse.smila.search.api/xml/search.xsd</tt> for the full definition): |
| </p> |
| <div dir="ltr" style="text-align: left;"><pre class="source-xml"><span class="sc3"><span class="re1"><element</span> <span class="re0">name</span>=<span class="st0">"SearchResult"</span><span class="re2">></span></span> |
| <span class="sc3"><span class="re1"><complexType<span class="re2">></span></span></span> |
| <span class="sc3"><span class="re1"><sequence</span> <span class="re0">minOccurs</span>=<span class="st0">"1"</span> <span class="re0">maxOccurs</span>=<span class="st0">"1"</span><span class="re2">></span></span> |
| <span class="sc3"><span class="re1"><element</span> <span class="re0">name</span>=<span class="st0">"Query"</span> <span class="re0">minOccurs</span>=<span class="st0">"1"</span> <span class="re0">maxOccurs</span>=<span class="st0">"1"</span><span class="re2">></span></span> |
| <span class="sc3"><span class="re1"><complexType<span class="re2">></span></span></span> |
| <span class="sc3"><span class="re1"><sequence<span class="re2">></span></span></span> |
| <span class="sc3"><span class="re1"><element</span> <span class="re0">name</span>=<span class="st0">"Workflow"</span> <span class="re0">type</span>=<span class="st0">"string"</span> <span class="re0">minOccurs</span>=<span class="st0">"1"</span> <span class="re0">maxOccurs</span>=<span class="st0">"1"</span> <span class="re2">/></span></span> |
| <span class="sc3"><span class="re1"><element</span> <span class="re0">ref</span>=<span class="st0">"rec:Record"</span> <span class="re0">minOccurs</span>=<span class="st0">"0"</span> <span class="re0">maxOccurs</span>=<span class="st0">"1"</span> <span class="re2">/></span></span> |
| <span class="sc3"><span class="re1"></sequence<span class="re2">></span></span></span> |
| <span class="sc3"><span class="re1"></complexType<span class="re2">></span></span></span> |
| <span class="sc3"><span class="re1"></element<span class="re2">></span></span></span> |
| <span class="sc3"><span class="re1"><element</span> <span class="re0">ref</span>=<span class="st0">"rec:RecordList"</span> <span class="re0">minOccurs</span>=<span class="st0">"0"</span> <span class="re0">maxOccurs</span>=<span class="st0">"1"</span><span class="re2">/></span></span> |
| <span class="sc3"><span class="re1"></sequence<span class="re2">></span></span></span> |
| <span class="sc3"><span class="re1"></complexType<span class="re2">></span></span></span> |
| <span class="sc3"><span class="re1"></element<span class="re2">></span></span></span></pre></div> |
| <p>You can view the result XML by using the sample SMILA search page <a href="http://localhsot:8080/SMILA/search" class="external autonumber" title="http://localhsot:8080/SMILA/search" rel="nofollow">[1]</a> and selecting the "Show XML result" checkbox before submitting the query. |
| </p><p>The content of the query record basically depends a lot on the used search services. E.g. using the LuceneSearchService, you can set attribute values to search in the index fields to which these attributes have been mapped during indexing (refer to the Lucene integration documentation for details). Other search parameters are attached to the query record as annotations. However, the Search API is also a recommendation where to put some basic, commonly used search parameters, which all index integrations should honor (of course they may quite specify extensions that are not covered by the generic Search API). The following sections describes these recommendations. |
| </p><p><br /> |
| </p> |
| <a name="Query_Parameters"></a><h3> <span class="mw-headline"> Query Parameters </span></h3> |
| <p>Parameters are stored in a single place in the query record and used to describe relatively simple query properties: The query record has a single annotation named "parameters", which can contain: |
| </p> |
| <ul><li> single valued parameters: named values of the annotation |
| </li><li> multi valued parameters: subannotation with the parameter name and the values as its anon-values list. |
| </li><li> map valued parameters: subannotations with named values |
| </li></ul> |
| <p>The Search API defines also the names, allowed values and default values for a set of commonly used parameters. All implementations should use these properties if possible, i.e. they should not introduce additioal parameters for the same purpose, but it may be possible that certain parameters are not supported because it is not feasible with the underlying technology. For some parameters we also define default values. All parameters are single values if not specified differently. |
| </p> |
| <ul><li> query: the search string. The index implementor can define a syntax to describe complex search criteria in a single string, SMILA does currently not define an own query syntax. The index implementor might or might not be able to merge this query string with search criteria described by attribute values/annotations of the query record. |
| </li><li> resultSize: number of records to return to the search client, default value is 10. |
| </li><li> resultOffset: number or top results to skip, default value is 0. Use this parameter to implement result list paging: If resultSize=10, the "next page" queries can be identical to the initial query, but with resultOffset=10, 20, .... |
| </li><li> threshold: minimal relevance score that a result must have, default is 0.0. |
| </li><li> language: language of the query, no default value. There could be language specific pipelets/services that need to know in which language the user is expressing his query to work correctly. |
| </li><li> indexName: some index services (like our LuceneIndexService) can manage multiple indexes at once, then they can use this parameter to select the index to search with this request. However, they always should have a default index name configured somehow so that a request succeeds without having this parameter set. |
| </li><li> resultAttributes: multi-valued parameter, describing the names of attributes that should be added to result records by the search engine. This list should only contain the attributes needed by pipelets after the search for processing or by the search page for displaying the results, including too many attributes will always decrease performance. Omitting this parameter should result in getting all available attributes. |
| </li><li> orderBy: map valued parameter with named values "attribute" (any string) and "mode" ("ASC"/"DESC") specifying that the search result should be be sorted by the named attributes in the given direction. Omitting this parameter should result in search result sorted by relevance (score, similarity, ranking, ....). Multiple orderBy annotations can be added and should be evaluated in the order of appearance. |
| </li></ul> |
| <a name="Query_Attribute_Annotations"></a><h3> <span class="mw-headline"> Query Attribute Annotations </span></h3> |
| <p>Additional annotations can be added to attributes for which they describe refinements of the search. They usually contain only named values and anonymous values. |
| </p> |
| <ul><li> Filters: Filters describe hard restrictions on the values of result record attributes that must be matched for a record to be included in a result (in opposite to attribute values which may describe only soft criteria). Advanced search engines might even allow to add multiple filter annotations to a single attribute. |
| <ul><li> type: "ENUMERATION"/"RANGE": Specifies if the filter is described by an explicit enumeration of allowed/forbidden values or by giving the lower and/or upper bound. For enumeration filters, the actual filter values are added as anonymous values to the filter annotation. For range filters, see below. |
| </li><li> mode: "ALL"/"ANY"/"ONLY"/"NONE": Specify whether an allowed object must have all, any, only or none of the filter values to match the filter. |
| </li><li> min/max: Specify the lower and/or upper bound of a range filter. |
| </li></ul> |
| </li></ul> |
| <ul><li> Ranking: Contains properties that modify the ranking or relevance score of results by manipulating the relevance valuation for a single attribute or for the complete record (if attached to the record itself, not an attribute). Two property names are predefined, but search engine integrations may include additional names: |
| <ul><li> name: if the engine knows a number of different named ways or algorithms to compute the relevance this property can be used to select a different one than the default |
| </li><li> boost: changes the weight of this attribute when the local relevance is accumulated into a global one. |
| </li></ul> |
| </li></ul> |
| <p><br /> |
| </p> |
| <a name="Result_Annotations"></a><h3> <span class="mw-headline"> Result Annotations </span></h3> |
| <p>Annotations may not only be attached to the query record, but to the records in the search result, too. There are even additional annotations attached to the query object to describe result properties that do not refer to a single result record, but to the complete search result. |
| </p> |
| <ul><li> result statistics: After the search the query record contains an annotation named "result" that currently contains these named values |
| <ul><li> runtime: runtime for the invoked pipeline, in milliseconds |
| </li><li> totalHits: number of possible results for this query, i.e. all objects from an index that have a relevance score greater than the specified threshold (or zero). |
| </li><li> indexSize: complete number of objects in the searched index. |
| </li></ul> |
| </li></ul> |
| <ul><li> Score: Each result record should have a "result" annotation, too, giving at least the ranking score calculated by the search engine as named value "relevance" as a double value (usually 1 means: perfect match). |
| </li></ul> |
| <ul><li> Highlighting: TODO |
| </li></ul> |
| <ul><li> Facets: TODO |
| </li></ul> |
| <ul><li> Terms: TODO |
| </li></ul> |
| <a name="Helper_Classes"></a><h3> <span class="mw-headline"> Helper Classes </span></h3> |
| <p>There are some classes that help a client to create query records with their annotations and to read out result records and their annotation. You can find them in package <tt>org.eclipse.smila.search.api.helper</tt>: |
| </p> |
| <ul><li> <tt>QueryBuilder</tt>: helper class for building queries and sending the query to search service. Returns a result in the form of the next class: |
| </li><li> <tt>ResultAccessor</tt>: wrapper for the complete search result. Does not do much on its own, but basically creates instances of the following classes to access the records of the result. |
| </li><li> <tt>QueryRecordAccessor</tt>: Defines methods for accessing literals and annotations of the enriched query that is part of the search result. |
| </li><li> <tt>ResultRecordAccessor</tt>: Defines methods for reading literals and annotations of search result records. |
| </li></ul> |
| <p>See the source code or javadocs for more details of the provided methods. |
| </p><p><br /> |
| </p> |
| <a name="Servlet"></a><h3> <span class="mw-headline"> Servlet </span></h3> |
| <p>Additionally to this "search backend", SMILA contains a simple servlet that creates a query record from HTTP parameters and displays the result as an HTML page by converting the XML search result using an XSLT stylesheet. This servlet is intended for quick demos, not for productive use. It is usually deployed in the Tomcat instance that comes with SMILA at "/SMILA/search". On first invocation it currently creates a quite empty query record (it sets some default parameters like resultSize etc) and processes it with the default pipeline "SearchPipeline". The pipeline should be able to process such a query and return an empty result list, not an error. The XML representation of this empty result is then transformed using the default stylesheet ("SMILASearchDefault") to present an initial search page. |
| </p><p>Note that the servlet actually enriches the XML search result a bit, so the input for the XSLT stylsheet does not completely conform to the defined XML schema. Currently, it adds a section containing the names of indexes available in the LuceneSearchService so that the search page can display the names for selection on the left side: |
| </p> |
| <div dir="ltr" style="text-align: left;"><pre class="source-xml"><span class="sc3"><span class="re1"><SearchResult</span> <span class="re0">xmlns</span>=<span class="st0">"http://www.eclipse.org/smila/search"</span><span class="re2">></span></span> |
| <span class="sc3"><span class="re1"><Query<span class="re2">></span></span></span> |
| <span class="sc3"><span class="re1"></Query<span class="re2">></span></span></span> |
| <span class="sc3"><span class="re1"><RecordList</span> <span class="re0">xmlns</span>=<span class="st0">"http://www.eclipse.org/smila/record"</span><span class="re2">></span></span> |
| ... |
| <span class="sc3"><span class="re1"></RecordList<span class="re2">></span></span></span> |
| <span class="sc3"><span class="coMULTI"><!-- part added by SearchServlet --></span></span> |
| <span class="sc3"><span class="re1"><IndexNames<span class="re2">></span></span></span> |
| <span class="sc3"><span class="re1"><IndexName<span class="re2">></span></span></span>test_index<span class="sc3"><span class="re1"></IndexName<span class="re2">></span></span></span> |
| <span class="sc3"><span class="re1"></IndexNames<span class="re2">></span></span></span> |
| <span class="sc3"><span class="re1"></SearchResult<span class="re2">></span></span></span></pre></div> |
| <p>You can use the same mechanism to add other information to the XML that is necessary to display the search form but not contained in the search service result, you just have to implement your own servlet or extend the default servlet. Please refer to the source code for details. |
| </p> |
| <a name="XSLT_Stylehsheets_for_SMILA_search_and_result_pages"></a><h4> <span class="mw-headline"> XSLT Stylehsheets for SMILA search and result pages </span></h4> |
| <p>The stylesheets are loaded from the configuration directory "org.eclipse.smila.search.servlet" and select using the HTTP parameter "style". The value of this parameter must be the stylesheet filename without suffix, the suffix must bei <tt>.xsl</tt>. The servlet currently uses the hardcoded default name "SMILASearchDefault" if no other value is set. |
| </p><p>In the default application, three stylesheets are avaiable: |
| </p> |
| <ul><li> SMILASearchDefault: the default search page. Use this as a reference for how to describe simple queries and to present result lists, including paging through bigger results. |
| </li><li> SMILASearchAdvanced: same layout for the result list, but demostrates how to create more complex query records with attribute values and filters. |
| </li><li> SMILASearchTest: primitive layout, no paging, but demonstrates the setting of even more query features. |
| </li></ul> |
| <p>To start with another than the default stylesheet, you can add a "style" parameter to the initial URL. E.g., to start with the "advanced" stylesheet, use: <a href="http://localhost:8080/SMILA/search?style=SMILASearchAdvanced" class="external free" title="http://localhost:8080/SMILA/search?style=SMILASearchAdvanced" rel="nofollow">http://localhost:8080/SMILA/search?style=SMILASearchAdvanced</a>. |
| </p><p>In the following we will describe how to set query record features using the servlet. Please have a look at those sample stylesheets for complete examples of how to apply them, as we will not present something like a full tutorial here (-; |
| </p><p><br /> |
| </p> |
| <a name="Setting_parameters"></a><h4> <span class="mw-headline"> Setting parameters </span></h4> |
| <p>To set a parameter, just use the parameter name as the HTTP parameter name. All values for this HTTP parameter are added to the "parameters" annotation of the query record. E.g., to set the "resultSize" parameter to 7 using an HTML hidden input field, use: |
| </p> |
| <div dir="ltr" style="text-align: left;"><pre class="source-xml"><span class="sc3"><span class="re1"><input</span> <span class="re0">type</span>=<span class="st0">"hidden"</span> <span class="re0">name</span>=<span class="st0">"resultSize"</span> <span class="re0">value</span>=<span class="st0">"7"</span> <span class="re2">/></span></span></pre></div> |
| <p>See below for naming rules for the HTTP parameter names to set attribute literals and annotations. Note that you cannot set a parameter with a name that matches one of these rules. |
| </p><p><br /> |
| </p> |
| <a name="Setting_attributes"></a><h4> <span class="mw-headline"> Setting attributes </span></h4> |
| <p>You can add literal string values to attributes using "A.<AttributeName>" as the HTTP parameter name. E.g., to set a value from a HTML text input field as an literal in attribute "Title", use: |
| </p> |
| <div dir="ltr" style="text-align: left;"><pre class="source-xml"><span class="sc3"><span class="re1"><input</span> <span class="re0">type</span>=<span class="st0">"text"</span> <span class="re0">name</span>=<span class="st0">"A.Title"</span> <span class="re2">/></span></span></pre></div> |
| <p><br /> |
| </p> |
| <a name="Setting_other_annotations"></a><h4> <span class="mw-headline"> Setting other annotations </span></h4> |
| <p>To set a named value in the ranking annotation for the complete record or an attribute, use "R.<ValueName>[.<AttributeName>]". You are not limited to the predefined ranking value names "name" and "boost". E.g., the following input field sets add a named value "Operator=OR" to attribute "Content": |
| </p> |
| <div dir="ltr" style="text-align: left;"><pre class="source-xml"><span class="sc3"><span class="re1"><input</span> <span class="re0">type</span>=<span class="st0">"hidden"</span> <span class="re0">name</span>=<span class="st0">"R.Operator.Content"</span> <span class="re0">value</span>=<span class="st0">"OR"</span> <span class="re2">/></span></span></pre></div> |
| <p>To create a filter for an attribute, use HTTP params: |
| </p> |
| <ul><li> "F.<AttributeName>" to set the filter mode ("ALL", "ANY", "ONLY", "NONE") |
| </li><li> "Fval.<AttributeName>" to add filter values to an enumeration filter. |
| </li><li> "Fmin.<AttributeName>" and "Fmax.<AttributeName>" to set the lower/upper bounds of a range filter. |
| </li></ul> |
| <p>If both "Fval" and "Fmin/Fmax" paramaters are set, the servlet will create both an enumeration filter and a range filter with the same filter mode. It depends on the used search engine integration what happens in this case. E.g. |
| </p> |
| <ul><li> to set a filter for attribute "MimeType" restricting the result to HTML documents, use: |
| </li></ul> |
| <div dir="ltr" style="text-align: left;"><pre class="source-xml"><span class="sc3"><span class="re1"><input</span> <span class="re0">type</span>=<span class="st0">"hidden"</span> <span class="re0">name</span>=<span class="st0">"Fval.MimeType"</span> <span class="re0">value</span>=<span class="st0">"text/html"</span> <span class="re2">/></span></span></pre></div> |
| <ul><li> to set a filter for attribute "FileSize" restricting the result to document sizes between 1000 and 10000 bytes, use: |
| </li></ul> |
| <div dir="ltr" style="text-align: left;"><pre class="source-xml"><span class="sc3"><span class="re1"><input</span> <span class="re0">type</span>=<span class="st0">"hidden"</span> <span class="re0">name</span>=<span class="st0">"Fmin.FileSize"</span> <span class="re0">value</span>=<span class="st0">"1000"</span> <span class="re2">/></span></span> |
| <span class="sc3"><span class="re1"><input</span> <span class="re0">type</span>=<span class="st0">"hidden"</span> <span class="re0">name</span>=<span class="st0">"Fmax.FileSize"</span> <span class="re0">value</span>=<span class="st0">"10000"</span> <span class="re2">/></span></span></pre></div> |
| <p>To set named values in other attribute annotations, use "A.<AttributeName>.(<AnnotationName>.)+<ValueName>". Note that this does not work for attribute and annotation names containing "." characters. E.g., the following snippet create an annotation "highlight" on attribute "Concent", with a sub-annotation "HighlightingTransformer" and a named value "name=Sentence": |
| </p><p><br /> |
| </p> |
| <div dir="ltr" style="text-align: left;"><pre class="source-xml"><span class="sc3"><span class="re1"><input</span> <span class="re0">type</span>=<span class="st0">"hidden"</span> <span class="re0">name</span>=<span class="st0">"A.Content.highlight.HighlightingTransformer.name"</span> <span class="re0">value</span>=<span class="st0">"Sentence"</span> <span class="re2">/></span></span></pre></div> |
| |
| <!-- |
| NewPP limit report |
| Preprocessor node count: 72/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:18950-0!1!0!!en!2!edit=0 and timestamp 20110329131714 --> |
| <div class="printfooter"> |
| Retrieved from "<a href="Search.html">http://wiki.eclipse.org/SMILA/Documentation/Search</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 © 2011 The Eclipse Foundation. All Rights Reserved</span> |
| <p id="footercredit">This page was last modified 13:47, 8 March 2011 by <a href="http://wiki.eclipse.org/index.php?title=User:Juergen.schumacher.attensity.com&action=edit" class="new" title="User:Juergen.schumacher.attensity.com">Juergen Schumacher</a>. Based on work by <a href="http://wiki.eclipse.org/User:Juergen.schumacher.empolis.com" title="User:Juergen.schumacher.empolis.com">Juergen Schumacher</a>.</p> |
| <p id="footerviews">This page has been accessed 1,946 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.091 secs. --></body></html> |