<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <title>Apache Wink : 7.7 OpenSearch</title>
	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
    </head>

    <body>
	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
		    <tr>
			    <td valign="top" class="pagebody">
				    <div class="pageheader">
					    <span class="pagetitle">
                            Apache Wink : 7.7 OpenSearch
                                                    </span>
				    </div>
				    <div class="pagesubheading">
					    This page last changed on Oct 14, 2009 by <font color="#0050B2">michael</font>.
				    </div>

				    <h2><a name="7.7OpenSearch-OpenSearchOverview"></a>OpenSearch Overview</h2>

<p>OpenSearch is a collection of simple formats for the sharing of search results.<br/>
The OpenSearch description document format is used to describe a search engine that can be used by search client applications.</p>

<p>The OpenSearch response elements can be used to extend existing syndication formats, such as RSS and Atom, with the extra metadata needed to return search results. The OpenSearch document is associated with the "application/opensearchdescription+xml"  mime type.</p>

<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Note</b><br />For more detailed information about Open Search, refers to the Open Search home page at <a href="http://www.opensearch.org/Home">http://www.opensearch.org/Home</a></td></tr></table></div>

<h3><a name="7.7OpenSearch-DataModel"></a>Data Model</h3>

<p>Apache Wink provides an Open Search data model for producing  Open Search Documents. of the model classes are located under the org.apache.wink.common.model.opensearch package. OpenSearchDescription class is used by an application to build Open Search Description documents.</p>


<h4><a name="7.7OpenSearch-OpenSearchSupport"></a>OpenSearch Support</h4>

<p>The following table shows the OpenSearch data model and representation in which it can be serialized and de-serialized.</p>


<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'>&nbsp;</th>
<th class='confluenceTh'> Supported </th>
<th class='confluenceTh'> Media Types <br clear="all" /> </th>
<th class='confluenceTh'> Data Model <br clear="all" /> </th>
<th class='confluenceTh'> Provider registration <br clear="all" /> </th>
</tr>
<tr>
<td class='confluenceTd'> Read <br clear="all" /> </td>
<td class='confluenceTd'> Yes <br clear="all" /> </td>
<td class='confluenceTd'> NA <br clear="all" /> </td>
<td class='confluenceTd'> NA </td>
<td class='confluenceTd'> NA <br clear="all" /> </td>
</tr>
<tr>
<td class='confluenceTd'> Write <br clear="all" /> </td>
<td class='confluenceTd'> Yes </td>
<td class='confluenceTd'> application/ <br clear="all" />
opensearchdescription+xml <br clear="all" /> </td>
<td class='confluenceTd'> org.apache.wink <br clear="all" />
.common.model<br clear="all" />
 .opensearch<br clear="all" />
 .OpenSearchDescription </td>
<td class='confluenceTd'> Not required. Registered by default <br clear="all" /> </td>
</tr>
</tbody></table>




<h3><a name="7.7OpenSearch-ProducinganOpenSearchDocumentExample"></a>Producing an OpenSearch Document Example</h3>

<p>The following example demonstrates the creation of an OpenSearch document.</p>



<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">      @GET
    @Produces(MediaTypeUtils.OPENSEARCH)
    <span class="code-keyword">public</span> OpenSearchDescription getOpenSearch(@Context UriInfo info) {
        <span class="code-object">String</span> baseUri = info.getAbsolutePath().toString();
        OpenSearchDescription openSearchDescription = <span class="code-keyword">new</span> OpenSearchDescription();
        openSearchDescription.setShortName(<span class="code-quote">"Example search engine"</span>);
        ...
        <span class="code-keyword">return</span> openSearchDescription;
}
</pre>
</div></div>

<h5><a name="7.7OpenSearch-"></a></h5>

				    
                    			    </td>
		    </tr>
	    </table>
	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
			<tr>
				<td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
			</tr>
		    <tr>
			    <td align="center"><font color="grey">Document generated by Confluence on Nov 11, 2009 06:57</font></td>
		    </tr>
	    </table>
    </body>
</html>