blob: 57664f498eb48accc179e85adcbeb7e47b1818ed [file] [log] [blame]
<!DOCTYPE html>
<html lang="en" dir="ltr" class="client-nojs">
<head>
<meta charset="UTF-8" />
<title>SMILA/Documentation/Importing/Crawler/Feed - Eclipsepedia</title>
<meta http-equiv="X-UA-Compatible" content="IE=EDGE" />
<meta name="generator" content="MediaWiki 1.23.2" />
<link rel="shortcut icon" href="http://wiki.eclipse.org/eclipse.org-common/themes/solstice/public/images/favicon.ico" />
<link rel="search" type="application/opensearchdescription+xml" href="http://wiki.eclipse.org/opensearch_desc.php" title="Eclipsepedia (en)" />
<link rel="EditURI" type="application/rsd+xml" href="http://wiki.eclipse.org/api.php?action=rsd" />
<link rel="alternate" type="application/atom+xml" title="Eclipsepedia Atom feed" href="http://wiki.eclipse.org/index.php?title=Special:RecentChanges&amp;feed=atom" />
<link rel="stylesheet" href="http://wiki.eclipse.org/load.php?debug=false&amp;lang=en&amp;modules=mediawiki.legacy.commonPrint%2Cshared%7Cmediawiki.ui.button&amp;only=styles&amp;skin=solstice&amp;*" />
<link rel="stylesheet" href="http://wiki.eclipse.org/skins/solstice/public/stylesheets/styles.min.css?303" media="screen, print" /><meta name="ResourceLoaderDynamicStyles" content="" />
<style>a:lang(ar),a:lang(kk-arab),a:lang(mzn),a:lang(ps),a:lang(ur){text-decoration:none}
/* cache key: my_wiki:resourceloader:filter:minify-css:7:14ece53a42aa314864e5fd8c57f0d98f */</style>
<script src="http://wiki.eclipse.org/load.php?debug=false&amp;lang=en&amp;modules=startup&amp;only=scripts&amp;skin=solstice&amp;*"></script>
<script>if(window.mw){
mw.config.set({"wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"SMILA/Documentation/Importing/Crawler/Feed","wgTitle":"SMILA/Documentation/Importing/Crawler/Feed","wgCurRevisionId":377365,"wgRevisionId":377365,"wgArticleId":37960,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":[],"wgBreakFrames":false,"wgPageContentLanguage":"en","wgPageContentModel":"wikitext","wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateFormat":"dmy","wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgMonthNamesShort":["","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"wgRelevantPageName":"SMILA/Documentation/Importing/Crawler/Feed","wgIsProbablyEditable":false,"wgRestrictionEdit":[],"wgRestrictionMove":[],"wgWikiEditorEnabledModules":{"toolbar":false,"dialogs":false,"hidesig":true,"preview":false,"previewDialog":false,"publish":false},"wgCategoryTreePageCategoryOptions":"{\"mode\":0,\"hideprefix\":20,\"showcount\":true,\"namespaces\":false}"});
}</script><script>if(window.mw){
mw.loader.implement("user.options",function($,jQuery){mw.user.options.set({"ccmeonemails":0,"cols":80,"date":"default","diffonly":0,"disablemail":0,"editfont":"default","editondblclick":0,"editsectiononrightclick":0,"enotifminoredits":0,"enotifrevealaddr":0,"enotifusertalkpages":1,"enotifwatchlistpages":1,"extendwatchlist":0,"fancysig":0,"forceeditsummary":0,"gender":"unknown","hideminor":0,"hidepatrolled":0,"imagesize":2,"math":1,"minordefault":0,"newpageshidepatrolled":0,"nickname":"","norollbackdiff":0,"numberheadings":0,"previewonfirst":0,"previewontop":1,"rcdays":7,"rclimit":50,"rows":25,"showhiddencats":0,"shownumberswatching":1,"showtoolbar":1,"skin":"solstice","stubthreshold":0,"thumbsize":2,"underline":2,"uselivepreview":0,"usenewrc":0,"watchcreations":1,"watchdefault":1,"watchdeletion":0,"watchlistdays":3,"watchlisthideanons":0,"watchlisthidebots":0,"watchlisthideliu":0,"watchlisthideminor":0,"watchlisthideown":0,"watchlisthidepatrolled":0,"watchmoves":0,"wllimit":250,
"useeditwarning":1,"prefershttps":1,"language":"en","variant-gan":"gan","variant-iu":"iu","variant-kk":"kk","variant-ku":"ku","variant-shi":"shi","variant-sr":"sr","variant-tg":"tg","variant-uz":"uz","variant-zh":"zh","searchNs0":true,"searchNs1":false,"searchNs2":false,"searchNs3":false,"searchNs4":false,"searchNs5":false,"searchNs6":false,"searchNs7":false,"searchNs8":false,"searchNs9":false,"searchNs10":false,"searchNs11":false,"searchNs12":false,"searchNs13":false,"searchNs14":false,"searchNs15":false,"variant":"en"});},{},{});mw.loader.implement("user.tokens",function($,jQuery){mw.user.tokens.set({"editToken":"+\\","patrolToken":false,"watchToken":false});},{},{});
/* cache key: my_wiki:resourceloader:filter:minify-js:7:70d74423d3fc1e1c18fa9a1ff645a84a */
}</script>
<script>if(window.mw){
mw.loader.load(["mediawiki.page.startup","mediawiki.legacy.wikibits","mediawiki.legacy.ajax"]);
}</script>
<style type="text/css">/*<![CDATA[*/
.source-text {line-height: normal;}
.source-text li, .source-text pre {
line-height: normal; border: 0px none white;
}
/**
* GeSHi Dynamically Generated Stylesheet
* --------------------------------------
* Dynamically generated stylesheet for text
* CSS class: source-text, CSS id:
* GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
* (http://qbnz.com/highlighter/ and http://geshi.org/)
* --------------------------------------
*/
.text.source-text .de1, .text.source-text .de2 {font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;}
.text.source-text {font-family:monospace;}
.text.source-text .imp {font-weight: bold; color: red;}
.text.source-text li, .text.source-text .li1 {font-weight: normal; vertical-align:top;}
.text.source-text .ln {width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;}
.text.source-text .li2 {font-weight: bold; vertical-align:top;}
.text.source-text .ln-xtra, .text.source-text li.ln-xtra, .text.source-text div.ln-xtra {background-color: #ffc;}
.text.source-text span.xtra { display:block; }
/*]]>*/
</style><meta name="viewport" content="width=device-width, initial-scale=1.0"></head>
<body class="mediawiki ltr sitedir-ltr ns-0 ns-subject page-SMILA_Documentation_Importing_Crawler_Feed skin-solstice action-view" id="solstice">
<a class="sr-only" href="Feed.html#content">Skip to main content</a>
<div class="thin-header">
<header role="banner" class="hidden-print noprint">
<div class="container-fluid">
<div id="row-logo-search">
<div id="header-left">
<div class="row">
<div class="hidden-xs col-sm-6 logo-container">
<a href="https://www.eclipse.org/" ><img class="logo-eclipse-default" src="http://wiki.eclipse.org/skins/solstice/public/images/logo/eclipse-800x188.png" alt="Eclipsepedia"></a>
</div>
<div class="navbar col-sm-18 yamm" id="main-menu">
<div class="navbar-collapse collapse" id="navbar-collapse-1">
<ul class="nav navbar-nav">
<li><a target="_self" href="https://eclipse.org/downloads/">Download</a></li>
<li><a target="_self" href="https://eclipse.org/users/">Getting Started </a></li>
<li><a target="_self" href="https://eclipse.org/membership/">Members</a></li>
<li><a target="_self" href="https://eclipse.org/projects/">Projects</a></li>
<li class="dropdown visible-xs"><a class="dropdown-toggle" data-toggle="dropdown" href="Feed.html#">Community <b class="caret"></b></a><ul class="dropdown-menu"><li><a href="http://marketplace.eclipse.org">Marketplace</a></li><li><a href="http://events.eclipse.org">Events</a></li><li><a href="http://www.planeteclipse.org/">Planet Eclipse</a></li><li><a href="https://eclipse.org/community/eclipse_newsletter/">Newsletter</a></li><li><a href="https://www.youtube.com/user/EclipseFdn">Videos</a></li></ul></li><li class="dropdown visible-xs"><a class="dropdown-toggle" data-toggle="dropdown" href="Feed.html#">Participate <b class="caret"></b></a><ul class="dropdown-menu"><li><a href="https://bugs.eclipse.org/bugs/">Report a Bug</a></li><li><a href="https://eclipse.org/forums/">Forums</a></li><li><a href="https://eclipse.org/mail/">Mailing Lists</a></li><li><a href="https://wiki.eclipse.org/">Wiki</a></li><li><a href="https://wiki.eclipse.org/IRC">IRC</a></li><li><a href="https://eclipse.org/contribute/">How to Contribute</a></li></ul></li><li class="dropdown visible-xs"><a class="dropdown-toggle" data-toggle="dropdown" href="Feed.html#">Working Groups <b class="caret"></b></a><ul class="dropdown-menu"><li><a href="http://wiki.eclipse.org/Auto_IWG">Automotive</a></li><li><a href="http://iot.eclipse.org">Internet of Things</a></li><li><a href="http://locationtech.org">LocationTech</a></li><li><a href="http://lts.eclipse.org">Long-Term Support</a></li><li><a href="http://polarsys.org">PolarSys</a></li><li><a href="http://science.eclipse.org">Science</a></li><li><a href="http://openmdm.org">OpenMDM</a></li></ul></li><!-- More -->
<li class="dropdown hidden-xs"><a class="dropdown-toggle" data-toggle="dropdown">More<b class="caret"></b></a>
<ul class="dropdown-menu">
<li>
<!-- Content container to add padding -->
<div class="yamm-content">
<div class="row">
<ul class="col-sm-8 list-unstyled"><li><p><strong>Community</strong></p></li><li><a href="http://marketplace.eclipse.org">Marketplace</a></li><li><a href="http://events.eclipse.org">Events</a></li><li><a href="http://www.planeteclipse.org/">Planet Eclipse</a></li><li><a href="https://eclipse.org/community/eclipse_newsletter/">Newsletter</a></li><li><a href="https://www.youtube.com/user/EclipseFdn">Videos</a></li></ul><ul class="col-sm-8 list-unstyled"><li><p><strong>Participate</strong></p></li><li><a href="https://bugs.eclipse.org/bugs/">Report a Bug</a></li><li><a href="https://eclipse.org/forums/">Forums</a></li><li><a href="https://eclipse.org/mail/">Mailing Lists</a></li><li><a href="https://wiki.eclipse.org/">Wiki</a></li><li><a href="https://wiki.eclipse.org/IRC">IRC</a></li><li><a href="https://eclipse.org/contribute/">How to Contribute</a></li></ul><ul class="col-sm-8 list-unstyled"><li><p><strong>Working Groups</strong></p></li><li><a href="http://wiki.eclipse.org/Auto_IWG">Automotive</a></li><li><a href="http://iot.eclipse.org">Internet of Things</a></li><li><a href="http://locationtech.org">LocationTech</a></li><li><a href="http://lts.eclipse.org">Long-Term Support</a></li><li><a href="http://polarsys.org">PolarSys</a></li><li><a href="http://science.eclipse.org">Science</a></li><li><a href="http://openmdm.org">OpenMDM</a></li></ul> </div>
</div>
</li>
</ul>
</li>
</ul>
</div>
<div class="navbar-header">
<button data-target="#navbar-collapse-1" data-toggle="collapse" class="navbar-toggle" type="button">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a href="https://www.eclipse.org/" class="visible-xs navbar-brand"><img class="logo-eclipse-default" src="http://wiki.eclipse.org/skins/solstice/public/images/logo/eclipse-800x188.png" alt="Eclipsepedia" width="174"></a>
</div>
</div>
</div>
</div>
</div>
</div>
</header>
<section class="defaut-breadcrumbs hidden-print noprint hidden-print clearfix" id="breadcrumb">
<div>
<ol class="breadcrumb">
<li><a href="https://www.eclipse.org/">Home</a></li>
<li><a href="http://wiki.eclipse.org/Main_Page">Eclipse Wiki</a></li>
<li class="active">SMILA/Documentation/Importing/Crawler/Feed</li></ol>
</div>
</section>
</div>
<div class="toolbar-menu breadcrumbs-offset noprint hidden-print margin-bottom-0 clearfix">
<div class="col-md-24">
<ol class="breadcrumb" role="navigation">
<li id="pt-login">
<a href="http://wiki.eclipse.org/index.php?title=Special:UserLogin&amp;returnto=SMILA%2FDocumentation%2FImporting%2FCrawler%2FFeed">
<i class="fa fa-sign-in fa-fw orange"></i> Log in </a>
</li>
</ul>
</div>
</div>
<main role="main" class="background-grey">
<div class="container-full padding-top-25">
<!-- content -->
<section id="content" class="mw-body container-full clearfix 0">
<div id="mw-js-message" style="display:none;"></div>
<!-- bodyContent -->
<div id="bodyContent">
<!-- jumpto -->
<div id="jump-to-nav" class="mw-jump">
Jump to: <a href="Feed.html#mw-head">navigation</a>,
<a href="Feed.html#p-search">search</a>
</div>
<!-- /jumpto -->
<!-- leftcol -->
<aside class="col-md-4 noprint hidden-print" id="leftcol">
<form class="input-group" role="form" id="form-eclipse-search" action="http://wiki.eclipse.org/index.php" id="searchform">
<input id="searchInput" class="search-query form-control" type="search" accesskey="f" title="Special:Search" placeholder="Search" name="search" value="">
<span class="input-group-btn">
<button value="search" id="mw-searchButton" type="submit" class="btn btn-default" title="Search the pages for this text" name="fulltext">
<i class="fa fa-search"></i>
</button>
</span>
</form>
<select class="form-control margin-top-10 margin-bottom-10 visible-xs visible-sm" onchange="this.options[this.selectedIndex].value && (window.location = this.options[this.selectedIndex].value);"><option class="fw-700 "><span class="fw-700">---Navigation---</span></option><option value="/Main_Page">Main Page</option><option value="/Eclipsepedia:Community_portal">Community portal</option><option value="/Eclipsepedia:Current_events">Current events</option><option value="/Special:RecentChanges">Recent changes</option><option value="/Special:Random">Random page</option><option value="https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents">Help</option></select><ul class="ul-left-nav fa-ul hidden-print leftnav hidden-xs hidden-sm"><li class="separator"><span class="separator">Navigation</span></li> <li class=""><i class="fa fa-angle-double-right orange fa-fw"></i> <a href="http://wiki.eclipse.org/Main_Page" id="n-mainpage" title="Visit the main page [z]" accesskey="z">Main Page</a></li> <li class=""><i class="fa fa-angle-double-right orange fa-fw"></i> <a href="http://wiki.eclipse.org/Eclipsepedia:Community_portal" id="n-portal" title="About the project, what you can do, where to find things">Community portal</a></li> <li class=""><i class="fa fa-angle-double-right orange fa-fw"></i> <a href="http://wiki.eclipse.org/Eclipsepedia:Current_events" id="n-currentevents" title="Find background information on current events">Current events</a></li> <li class=""><i class="fa fa-angle-double-right orange fa-fw"></i> <a href="http://wiki.eclipse.org/Special:RecentChanges" id="n-recentchanges" title="A list of recent changes in the wiki [r]" accesskey="r">Recent changes</a></li> <li class=""><i class="fa fa-angle-double-right orange fa-fw"></i> <a href="http://wiki.eclipse.org/Special:Random" id="n-randompage" title="Load a random page [x]" accesskey="x">Random page</a></li> <li class=""><i class="fa fa-angle-double-right orange fa-fw"></i> <a href="https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents" id="n-help" title="The place to find out">Help</a></li></ul> <select class="form-control margin-top-10 margin-bottom-10 visible-xs visible-sm" onchange="this.options[this.selectedIndex].value && (window.location = this.options[this.selectedIndex].value);"><option class="fw-700 "><span class="fw-700">---Toolbox---</span></option><option value="/index.php?title=SMILA/Documentation/Importing/Crawler/Feed&amp;action=info">Page information</option><option value="/index.php?title=SMILA/Documentation/Importing/Crawler/Feed&amp;oldid=377365">Permanent link</option><option value="/index.php?title=SMILA/Documentation/Importing/Crawler/Feed&amp;printable=yes">Printable version</option><option value="/Special:SpecialPages">Special pages</option><option value="/Special:RecentChangesLinked/SMILA/Documentation/Importing/Crawler/Feed">Related changes</option><option value="/Special:WhatLinksHere/SMILA/Documentation/Importing/Crawler/Feed">What links here</option></select><ul class="ul-left-nav fa-ul hidden-print leftnav hidden-xs hidden-sm"><li class="separator"><span class="separator">Toolbox</span></li><li><i class="fa fa-angle-double-right orange fa-fw"></i> <a href="http://wiki.eclipse.org/index.php?title=SMILA/Documentation/Importing/Crawler/Feed&amp;action=info" id="t-info">Page information</a></li><li><i class="fa fa-angle-double-right orange fa-fw"></i> <a href="http://wiki.eclipse.org/index.php?title=SMILA/Documentation/Importing/Crawler/Feed&amp;oldid=377365" id="t-permalink" title="Permanent link to this revision of the page">Permanent link</a></li><li><i class="fa fa-angle-double-right orange fa-fw"></i> <a href="http://wiki.eclipse.org/index.php?title=SMILA/Documentation/Importing/Crawler/Feed&amp;printable=yes" id="t-print" rel="alternate" title="Printable version of this page [p]" accesskey="p">Printable version</a></li><li><i class="fa fa-angle-double-right orange fa-fw"></i> <a href="http://wiki.eclipse.org/Special:SpecialPages" id="t-specialpages" title="A list of all special pages [q]" accesskey="q">Special pages</a></li><li><i class="fa fa-angle-double-right orange fa-fw"></i> <a href="http://wiki.eclipse.org/Special:RecentChangesLinked/SMILA/Documentation/Importing/Crawler/Feed" id="t-recentchangeslinked" title="Recent changes in pages linked from this page [k]" accesskey="k">Related changes</a></li><li><i class="fa fa-angle-double-right orange fa-fw"></i> <a href="http://wiki.eclipse.org/Special:WhatLinksHere/SMILA/Documentation/Importing/Crawler/Feed" id="t-whatlinkshere" title="A list of all wiki pages that link here [j]" accesskey="j">What links here</a></li></ul> </aside>
<!-- /leftcol -->
<!-- mainContent -->
<div id="mainContent" class="col-md-20">
<ul class="nav nav-tabs noprint hidden-print" role="tablist">
<li id="ca-nstab-main" class="active"><a href="Feed.html" title="View the content page [c]" accesskey="c" tabindex="-1">Page</a></li>
<li id="ca-talk" class="new"><a href="http://wiki.eclipse.org/index.php?title=Talk:SMILA/Documentation/Importing/Crawler/Feed&amp;action=edit&amp;redlink=1" title="Discussion about the content page [t]" accesskey="t" tabindex="-1">Discussion</a></li>
<li id="ca-viewsource"><a href="http://wiki.eclipse.org/index.php?title=SMILA/Documentation/Importing/Crawler/Feed&amp;action=edit" title="This page is protected.&#10;You can view its source [e]" accesskey="e" tabindex="-1">View source</a></li>
<li id="ca-history" class="collapsible"><a href="http://wiki.eclipse.org/index.php?title=SMILA/Documentation/Importing/Crawler/Feed&amp;action=history" title="Past revisions of this page [h]" accesskey="h" tabindex="-1">History</a></li>
</ul> <div class="tab-content background-white">
<div id="tab-pane-main-page-content" class="tab-pane active">
<h1 id="firstHeading" class="firstHeading page-header">
<span dir="auto">SMILA/Documentation/Importing/Crawler/Feed</span>
</h1>
<div id="main-page-content">
<!-- subtitle -->
<div id="contentSub" class="alert alert-small alert-warning"><span class="subpages">&lt; <a href="../../../../SMILA.html" title="SMILA">SMILA</a>&lrm; | <a href="../../../Documentation.1.html" title="SMILA/Documentation">Documentation</a></span></div>
<!-- /subtitle -->
<div id="mw-content-text" lang="en" dir="ltr" class="mw-content-ltr"><p>The FeedCrawler is used to read RSS or Atom feed in importing workflows.
</p>
<div class="messagebox" style="background-color: #def3fe; border: 1px solid #c5d7e0; color: black; padding: 5px; margin: 1ex 0; min-height: 35px; padding-left: 45px;">
<div style="float: left; margin-left: -40px;"><a href="http://wiki.eclipse.org/File:Idea.png" class="image"><img alt="Idea.png" src="http://wiki.eclipse.org/images/a/a4/Idea.png" width="35" height="35" /></a></div>
<div><b>In contrast to the old FeedAgent component, the FeedCrawler does not support checking the feeds for new entries in regular time slots. You can simulate this currently by starting a job using the FeedCrawler regularly from outside, e.g. by using cron or other schedulers. We are planning to integrate an own scheduling component in SMILA in the future.</b><br /></div>
</div>
<p><br />
</p>
<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
<ul>
<li class="toclevel-1 tocsection-1"><a href="Feed.html#FeedCrawler"><span class="tocnumber">1</span> <span class="toctext">FeedCrawler</span></a>
<ul>
<li class="toclevel-2 tocsection-2"><a href="Feed.html#Configuration"><span class="tocnumber">1.1</span> <span class="toctext">Configuration</span></a>
<ul>
<li class="toclevel-3 tocsection-3"><a href="Feed.html#Delta_indexing_strategy"><span class="tocnumber">1.1.1</span> <span class="toctext">Delta indexing strategy</span></a></li>
<li class="toclevel-3 tocsection-4"><a href="Feed.html#Feed_properties"><span class="tocnumber">1.1.2</span> <span class="toctext">Feed properties</span></a></li>
<li class="toclevel-3 tocsection-5"><a href="Feed.html#Feed_Item_properties"><span class="tocnumber">1.1.3</span> <span class="toctext">Feed Item properties</span></a></li>
<li class="toclevel-3 tocsection-6"><a href="Feed.html#Properties_of_structured_feed.2Fitem_properties"><span class="tocnumber">1.1.4</span> <span class="toctext">Properties of structured feed/item properties</span></a></li>
</ul>
</li>
<li class="toclevel-2 tocsection-7"><a href="Feed.html#Processing"><span class="tocnumber">1.2</span> <span class="toctext">Processing</span></a></li>
</ul>
</li>
<li class="toclevel-1 tocsection-8"><a href="Feed.html#Sample_Feed_Crawler_Job"><span class="tocnumber">2</span> <span class="toctext">Sample Feed Crawler Job</span></a>
<ul>
<li class="toclevel-2 tocsection-9"><a href="Feed.html#Extending_feed_workflow_to_fetch_content"><span class="tocnumber">2.1</span> <span class="toctext">Extending feed workflow to fetch content</span></a></li>
<li class="toclevel-2 tocsection-10"><a href="Feed.html#Crawling_feeds_specified_in_input_records"><span class="tocnumber">2.2</span> <span class="toctext">Crawling feeds specified in input records</span></a></li>
</ul>
</li>
</ul>
</div>
<h3><span class="mw-headline" id="FeedCrawler">FeedCrawler</span></h3>
<p>The Feed crawler offers the functionality to read RSS and Atom feeds. The implementation uses <a rel="nofollow" class="external text" href="https://rometools.jira.com/wiki/display/ROME/Home">ROME Fetcher</a> to retrieve and parse the feeds. ROME supports the following feed formats:
</p>
<ul>
<li> RSS 0.90
</li>
<li> RSS 0.91 Netscape
</li>
<li> RSS 0.91 Userland
</li>
<li> RSS 0.92
</li>
<li> RSS 0.93
</li>
<li> RSS 0.94
</li>
<li> RSS 1.0
</li>
<li> RSS 2.0
</li>
<li> Atom 0.3
</li>
<li> Atom 1.0
</li>
</ul>
<h4><span class="mw-headline" id="Configuration">Configuration</span></h4>
<p>The FeedCrawler worker can be used as the first worker in a workflow and the job is started in <tt>runOnce</tt> mode. It then gets the feed contents from the URLs specified in the job definition. It is also possible to use the worker as a "feed fetcher" worker that reads the feed URL from input records created by e.g. by a bulkbuilder or another crawler worker (it is currently not possible to set any other part of the job parameters in input records).
</p>
<ul>
<li> Worker name: <tt>feedCrawler</tt>
</li>
<li> Parameters:
<ul>
<li> <tt>dataSource</tt> <i>(req.)</i> value for attribute <tt>_source</tt>, needed e.g. by the delta service
</li>
<li> <tt>feedUrls</tt> <i>(req.)</i> URLs (usually HTTP) of the feeds to read. Can be a single string value or a list of string values. Currently, all feeds are read in a single task. The actual parameter value is ignored if the worker is used with an input slot, but it must be set to some value nevertheless.
</li>
<li> <tt>mapping</tt> <i>(req.)</i> Mapping of feed and feed item properties to record attribute names. See below for the available property names.
</li>
<li> <tt>deltaProperties</tt> <i>(opt.)</i> a list of feed or feed item property names (see below) used to generate the value for attribute _deltaHash. If not set or if the configured properties don't yield any values for the feed, the _deltaHash is calculated from all mapped properties of the current record.
</li>
<li> <tt>maxRecordsPerBulk</tt> <i>(opt.)</i> maximum number of item records in one bulk in the output bucket. (default: 1000)
</li>
</ul>
</li>
<li> Input slot
<ul>
<li> <tt>linksToCrawl</tt> (optional, data type recordBulks): Each input record can contain an attribute "httpUrl" that contains a single string value specifying a feed URL to fetch. Each record can contain only one URL, you have to send a separate record for each feed to crawl. The parameter "feedUrls" is ignored when this slot is connected, but must have a dummy value nevertheless. Attributes from input records are copied to all records created from the feed specified in the httpUrl attribute, if the are not overwritten by attributes created by the feed crawler (record ID, datasource, mapped feed properties, deltaHash and feedSourceUrl).
</li>
</ul>
</li>
<li> Output slots:
<ul>
<li> <tt>crawledRecords</tt>: One record per item read from the feeds specified in the input records or job definition (if running as a start worker), with attributes created from feed properties as specified in the <tt>mapping</tt> parameters given in the job definition.
</li>
</ul>
</li>
</ul>
<p>You can enable the use of an HTTP proxy for fetching the feeds by setting the system properties <tt>http.proxyHost</tt> and <tt>http.proxyPort</tt>. You can do this by adding them to the <tt>SMILA.ini</tt> file before starting SMILA:
</p>
<div dir="ltr" class="mw-geshi mw-code mw-content-ltr"><div class="text source-text"><pre class="de1">...
-Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
-Dlog4j.configuration=file:log4j.properties
-Dhttp.proxyHost=proxy.example.com
-Dhttp.proxyPort=3128</pre></div></div>
<p>For additional information about proxy usage in Java see <a rel="nofollow" class="external text" href="http://docs.oracle.com/javase/7/docs/technotes/guides/net/proxies.html">JavaSE documentation</a>.
</p>
<h5><span class="mw-headline" id="Delta_indexing_strategy">Delta indexing strategy</span></h5>
<p>When regularly crawling a feed and not wanting to lose older entries, it makes sense to use the <i>additive</i> strategy for delta import in your job parameters:
</p>
<pre>
&quot;paramters&quot;:{
...
&quot;deltaImportStrategy&quot;:&quot;additive&quot;,
...
}
</pre>
<p>This ensures that entries from former crawling won't be deleted, but items already indexed are filtered out. But keep in mind, this also means that the items are <i>never</i> deleted from the index by delta indexing. (see also <a href="../DeltaCheck.html" title="SMILA/Documentation/Importing/DeltaCheck">DeltaCheck</a> and <a href="../UpdatePusher.html" title="SMILA/Documentation/Importing/UpdatePusher">UpdatePusher</a> worker.)
</p>
<h5><span class="mw-headline" id="Feed_properties">Feed properties</span></h5>
<p>These are properties of the feed that can be mapped to record attributes. The values will be identical for all records created from entries of a single feed. Some are not only simple values, but structured, i.e. (mostly list of) maps. The attributes of these map objects are described in further tables below, they cannot be changed via the mapping. Attributes associated to structured properties are not set to empty objects, e.g. a list attribute is either not set at all or the list does indeed have elements.
</p>
<table class="wikitable" border="1">
<tr>
<th> Property
</th>
<th> Type
</th>
<th> Description
</th></tr>
<tr>
<td> <tt>feedSourceUrl</tt>
</td>
<td> String
</td>
<td> The URL from which the feed was read, as given in the job definition, not parsed from the feed content.
</td></tr>
<tr>
<td> <tt>feedAuthors</tt>
</td>
<td> Sequence&lt;Person&gt;
</td>
<td> Returns the feed authors
</td></tr>
<tr>
<td> <tt>feedCategories</tt>
</td>
<td> Sequence&lt;Category&gt;
</td>
<td> Returns the feed categories
</td></tr>
<tr>
<td> <tt>feedContributors</tt>
</td>
<td> Sequence&lt;Person&gt;
</td>
<td> Returns the feed contributors
</td></tr>
<tr>
<td> <tt>feedCopyright</tt>
</td>
<td> String
</td>
<td> Returns the feed copyright information
</td></tr>
<tr>
<td> <tt>feedDescription</tt>
</td>
<td> String
</td>
<td> Returns the feed description
</td></tr>
<tr>
<td> <tt>feedEncoding</tt>
</td>
<td> String
</td>
<td> Returns the charset encoding of the feed
</td></tr>
<tr>
<td> <tt>feedType</tt>
</td>
<td> String
</td>
<td> Returns the feed type
</td></tr>
<tr>
<td> <tt>feedImage</tt>
</td>
<td> Image
</td>
<td> Returns the feed image
</td></tr>
<tr>
<td> <tt>feedLanguage</tt>
</td>
<td> String
</td>
<td> Returns the feed language
</td></tr>
<tr>
<td> <tt>feedLinks</tt>
</td>
<td> Sequence&lt;Link&gt;
</td>
<td> Returns the feed links
</td></tr>
<tr>
<td> <tt>feedPublishDate</tt>
</td>
<td> DateTime
</td>
<td> Returns the feed published date
</td></tr>
<tr>
<td> <tt>feedTitle</tt>
</td>
<td> String
</td>
<td> Returns the feed title
</td></tr>
<tr>
<td> <tt>feedUri</tt>
</td>
<td> String
</td>
<td> Returns the feed uri
</td></tr>
</table>
<h5><span class="mw-headline" id="Feed_Item_properties">Feed Item properties</span></h5>
<p>And these are properties extracted from the single feed items:
</p>
<table class="wikitable" border="1">
<tr>
<th> Attribute
</th>
<th> Type
</th>
<th> Description
</th></tr>
<tr>
<td> <tt>itemAuthors</tt>
</td>
<td> Sequence&lt;Person&gt;
</td>
<td> Returns a feed entry authors
</td></tr>
<tr>
<td> <tt>itemCategories</tt>
</td>
<td> Sequence&lt;Category&gt;
</td>
<td> Returns a feed entry categories
</td></tr>
<tr>
<td> <tt>itemContents</tt>
</td>
<td> Sequence&lt;Content&gt;
</td>
<td> Returns a feed entry contents
</td></tr>
<tr>
<td> <tt>itemContributors</tt>
</td>
<td> Sequence&lt;Person&gt;
</td>
<td> Returns a feed entry contributors
</td></tr>
<tr>
<td> <tt>itemDescription</tt>
</td>
<td> Content
</td>
<td> Returns a feed entry description
</td></tr>
<tr>
<td> <tt>itemEnclosures</tt>
</td>
<td> Sequence&lt;Enclosure&gt;
</td>
<td> Returns a feed entry enclosures
</td></tr>
<tr>
<td> <tt>itemLinks</tt>
</td>
<td> Sequence&lt;Link&gt;
</td>
<td> Returns a feed entry links
</td></tr>
<tr>
<td> <tt>itemPublishDate</tt>
</td>
<td> DateTime
</td>
<td> Returns a feed entry publish date
</td></tr>
<tr>
<td> <tt>itemTitle</tt>
</td>
<td> String
</td>
<td> Returns a feed entry title
</td></tr>
<tr>
<td> <tt>itemUpdateDate</tt>
</td>
<td> DateTime
</td>
<td> Returns a feed entry update date.
</td></tr>
<tr>
<td> <tt>itemUri</tt>
</td>
<td> String
</td>
<td> Returns a feed entry uri.
</td></tr>
</table>
<h5><span class="mw-headline" id="Properties_of_structured_feed.2Fitem_properties">Properties of structured feed/item properties</span></h5>
<p><b>Content</b> maps can contain these properties:
</p>
<ul>
<li> <tt>Mode</tt>: String
</li>
<li> <tt>Value</tt>: String
</li>
<li> <tt>Type</tt>: String
</li>
</ul>
<p><b>Person</b> maps can contain these properties:
</p>
<ul>
<li> <tt>Email</tt>: String
</li>
<li> <tt>Name</tt>: String
</li>
<li> <tt>Uri</tt>: String
</li>
</ul>
<p><b>Image</b> maps can contain these properties:
</p>
<ul>
<li> <tt>Link</tt>: String
</li>
<li> <tt>Title</tt>: String
</li>
<li> <tt>Url</tt>: String
</li>
<li> <tt>Description</tt>: String
</li>
</ul>
<p><b>Category</b> maps can contain these properties:
</p>
<ul>
<li> <tt>Name</tt>: String
</li>
<li> <tt>TaxanomyUri</tt>: String
</li>
</ul>
<p><b>Enclosure</b> maps can contain these properties:
</p>
<ul>
<li> <tt>Type</tt>: String
</li>
<li> <tt>Url</tt>: String
</li>
<li> <tt>Length</tt>: Integer
</li>
</ul>
<p><b>Link</b> maps can contain these properties:
</p>
<ul>
<li> <tt>Href</tt>: String
</li>
<li> <tt>Hreflang</tt>: String
</li>
<li> <tt>Rel</tt>: Integer
</li>
<li> <tt>Title</tt>: String
</li>
<li> <tt>Type</tt>: String
</li>
<li> <tt>Length</tt>: Integer
</li>
</ul>
<h4><span class="mw-headline" id="Processing">Processing</span></h4>
<p>The FeedCrawler is relatively simple: It uses ROME to fetch and parse the configured feed URLs and creates a record for each item read from the feeds according to the configured mapping. These records are written to the output bulks. No follow-up "to-crawl" bulks are created, and therefore no follow-up tasks will be needed.
</p><p>If none of the configured feed URLs can be fetched and parsed successfully, the task and therefore the complete job will fail. If at least one URL can be used successfully the task will be finished with successful, warnings about the missing feeds will be written to the log.
</p><p>It depends very much on the feed content which properties are set and which not, so you will have to try with the actual feeds you want to crawl: Not every feed provides everything, and some elements are often used for different purposes in different feeds. You may find more information about how the content of the feed is mapped to properties described above in the <a rel="nofollow" class="external text" href="https://rometools.jira.com/wiki/display/ROME/Home">ROME Wiki</a>.
</p>
<h3><span class="mw-headline" id="Sample_Feed_Crawler_Job">Sample Feed Crawler Job</span></h3>
<p>SMILA already provides a sample feed crawling job "crawlFeed" which uses the "feedCrawling" workflow. Crawled feed item records are pushed to the job "indexUpdateFeed" which uses the BPEL pipeline "AddFeedPipeline" for transforming and indexing the data.
</p><p>Here's another simple example of a feed crawling job definition:
</p>
<pre>
{
&quot;name&quot;:&quot;crawlSpiegelFeed&quot;,
&quot;workflow&quot;:&quot;feedCrawling&quot;,
&quot;parameters&quot;:{
&quot;tempStore&quot;:&quot;temp&quot;,
&quot;dataSource&quot;:&quot;feed&quot;,
&quot;jobToPushTo&quot;:&quot;indexUpdateFeed&quot;,
&quot;feedUrls&quot;:&quot;http://www.spiegel.de/schlagzeilen/tops/index.rss&quot;,
&quot;mapping&quot;: {
&quot;itemUri&quot;:&quot;Url&quot;,
&quot;itemTitle&quot;:&quot;Title&quot;,
&quot;itemUpdateDate&quot;:&quot;LastModifiedDate&quot;,
&quot;itemContents&quot;: &quot;Contents&quot;
}
}
}
</pre>
<p>For testing a one-time crawling of the feed you can start the indexing job "indexUpdateFeed" and the crawl job "crawlSpiegelFeed" and (after a short time) you should be able to <a rel="nofollow" class="external text" href="http://localhost:8080/SMILA/search">search</a>.
</p>
<h4><span class="mw-headline" id="Extending_feed_workflow_to_fetch_content">Extending feed workflow to fetch content</span></h4>
<p>The job described above uses the text from the feed items as indexing content. In most feeds this is just a summary of the content of an underlying web site which is linked in the feed item. In the following, we describe how to extend the szenario above for indexing the content of the underlying web site instead of the feed item's summary.
</p><p>What we do in short:
</p>
<ul>
<li> create a new feed crawling workflow with a "webFetcher" worker to get the content as attachment
</li>
<li> create a new feed crawling job with parameters for the "webFetcher" worker
</li>
<li> create a new pipeline for indexing the attachment content
</li>
<li> create a new feed indexing job which uses the the new pipeline
</li>
</ul>
<p><b>Creating the new feed crawling workflow</b>
</p><p>The new workflow is just a copy of the original "feedCrawling" workflow which additionally uses a "webFetcher" worker:
</p>
<pre>
{
&quot;name&quot;:&quot;feedCrawlingWithFetching&quot;,
&quot;modes&quot;:[
&quot;runOnce&quot;
],
&quot;startAction&quot;:{
&quot;worker&quot;:&quot;feedCrawler&quot;,
&quot;output&quot;:{
&quot;crawledRecords&quot;:&quot;crawledRecordsBucket&quot;
}
},
&quot;actions&quot;:[
{
&quot;worker&quot;:&quot;deltaChecker&quot;,
&quot;input&quot;:{
&quot;recordsToCheck&quot;:&quot;crawledRecordsBucket&quot;
},
&quot;output&quot;:{
&quot;updatedRecords&quot;:&quot;updatedLinksBucket&quot;
}
},
{
&quot;worker&quot;:&quot;webFetcher&quot;,
&quot;input&quot;:{
&quot;linksToFetch&quot;:&quot;updatedLinksBucket&quot;
},
&quot;output&quot;:{
&quot;fetchedLinks&quot;:&quot;fetchedLinksBucket&quot;
}
},
{
&quot;worker&quot;:&quot;updatePusher&quot;,
&quot;input&quot;:{
&quot;recordsToPush&quot;:&quot;fetchedLinksBucket&quot;
}
}
]
}
</pre>
<p><br />
<b>Creating the new feed crawling job</b>
</p><p>The new job is just a copy of the original "crawlFeed" job with the following changes:
</p>
<ul>
<li> no mapping entry for the feed item's "itemContents"
</li>
<li> additional parameters for the "webFetcher" worker
</li>
<li> we use another indexing job (see below), so "jobToPushTo" changes to "indexUpdateFeedWithFetching"
</li>
</ul>
<pre>
{
&quot;name&quot;:&quot;crawlFeedWithFetching&quot;,
&quot;workflow&quot;:&quot;feedCrawlingWithFetching&quot;,
&quot;parameters&quot;:{
&quot;tempStore&quot;:&quot;temp&quot;,
&quot;dataSource&quot;:&quot;feed&quot;,
&quot;jobToPushTo&quot;:&quot;indexUpdateFeedWithFetching&quot;,
&quot;feedUrls&quot;:&quot;http://www.spiegel.de/schlagzeilen/tops/index.rss&quot;,
&quot;mapping&quot;: {
&quot;itemUri&quot;:&quot;Url&quot;,
&quot;itemTitle&quot;:&quot;Title&quot;,
&quot;itemUpdateDate&quot;:&quot;LastModifiedDate&quot;,
&quot;httpCharset&quot;: &quot;Charset&quot;,
&quot;httpContenttype&quot;: &quot;ContentType&quot;,
&quot;httpMimetype&quot;: &quot;MimeType&quot;,
&quot;httpSize&quot;: &quot;Size&quot;,
&quot;httpUrl&quot;: &quot;Url&quot;,
&quot;httpContent&quot;: &quot;Content&quot;
}
}
}
</pre>
<p><b>Creating the new indexing pipeline</b>
</p><p>The new pipeline "AddFeedWithFetchingPipeline" is just a copy of the "AddFeedPipeline" with the some changes:
</p>
<pre>
&lt;process name=&quot;AddFeedWithFetchingPipeline&quot; ...
...
</pre>
<p>The activities "extractMimeType" and "extractContent" are not needed here, so we can remove them:
</p>
<pre>
&lt;!-- extract mimetype --&gt;
&lt;extensionActivity&gt;
&lt;proc:invokePipelet name=&quot;extractMimeType&quot;&gt;
...
&lt;/extensionActivity&gt;
</pre>
<pre>
&lt;!-- extract content --&gt;
&lt;extensionActivity&gt;
&lt;proc:invokePipelet name=&quot;extractContent&quot;&gt;
...
&lt;/extensionActivity&gt;
</pre>
<p>The web fetcher delivers the content as attachment, so the activity "extractTextFromHTML" must use inputType ATTACHMENT:
</p>
<pre>
&lt;extensionActivity&gt;
&lt;proc:invokePipelet name=&quot;extractTextFromHTML&quot;&gt;
...
&lt;proc:configuration&gt;
&lt;rec:Val key=&quot;inputType&quot;&gt;ATTACHMENT&lt;/rec:Val&gt;
...
&lt;/proc:configuration&gt;
&lt;/proc:invokePipelet&gt;
&lt;/extensionActivity&gt;
</pre>
<p><b>Creating the new indexing job</b>
</p><p>Now we create an indexing job which uses the new pipeline:
</p>
<pre>
{
&quot;name&quot;:&quot;indexUpdateFeedWithFetching&quot;,
&quot;workflow&quot;:&quot;importToPipeline&quot;,
&quot;parameters&quot;:{
&quot;tempStore&quot;:&quot;temp&quot;,
&quot;addPipeline&quot;:&quot;AddFeedWithFetchingPipeline&quot;
&quot;deletePipeline&quot;:&quot;AddFeedWithFetchingPipeline&quot;
}
}
</pre>
<p>That's it! Now you can start the new indexing and crawl job as described before, and (after a short time) you should be able to <a rel="nofollow" class="external text" href="http://localhost:8080/SMILA/search">search</a>.
</p>
<h4><span class="mw-headline" id="Crawling_feeds_specified_in_input_records">Crawling feeds specified in input records</span></h4>
<p>Create a new workflow definition:
</p>
<pre>
POST http://localhost:8080/smila/jobmanager/workflows
{
&quot;name&quot;:&quot;bulkFeedCrawling&quot;,
&quot;modes&quot;:[
&quot;standard&quot;
],
&quot;parameters&quot;: {
&quot;feedUrls&quot;:&quot;&lt;send feed URLs via bulkbuilder&gt;&quot;
},
&quot;startAction&quot;:{
&quot;worker&quot;:&quot;bulkbuilder&quot;,
&quot;output&quot;:{
&quot;insertedRecords&quot;:&quot;feedUrlsBucket&quot;
}
},
&quot;actions&quot;:[
{
&quot;worker&quot;:&quot;feedCrawler&quot;,
&quot;input&quot;:{
&quot;linksToCrawl&quot;:&quot;feedUrlsBucket&quot;
},
&quot;output&quot;:{
&quot;crawledRecords&quot;:&quot;crawledRecordsBucket&quot;
}
},
{
&quot;worker&quot;:&quot;deltaChecker&quot;,
&quot;input&quot;:{
&quot;recordsToCheck&quot;:&quot;crawledRecordsBucket&quot;
},
&quot;output&quot;:{
&quot;updatedRecords&quot;:&quot;recordsToPushBucket&quot;
}
},
{
&quot;worker&quot;:&quot;updatePusher&quot;,
&quot;input&quot;:{
&quot;recordsToPush&quot;:&quot;recordsToPushBucket&quot;
}
}
]
}
</pre>
<p>Note: The parameter "feedUrls" of the FeedCrawlerWorker is still required and must be set to dummy value. By doing this in the workflow definition, you don't need to care about it in the job definition later.
</p><p>Add a new job for this workflow. It's not necessary to set the feedUrls parameter in the job definition:
</p>
<pre>
{
&quot;name&quot;:&quot;crawlFeedRecord&quot;,
&quot;workflow&quot;:&quot;bulkFeedCrawling&quot;,
&quot;parameters&quot;:{
&quot;tempStore&quot;:&quot;temp&quot;,
&quot;dataSource&quot;:&quot;feed&quot;,
&quot;jobToPushTo&quot;:&quot;indexUpdateFeed&quot;,
&quot;deltaProperties&quot;: [&quot;itemPublishDate&quot;, &quot;itemUpdateDate&quot;],
&quot;deltaImportStrategy&quot;:&quot;additive&quot;,
&quot;mapping&quot;: {
&quot;itemUri&quot;:&quot;Url&quot;,
&quot;itemTitle&quot;:&quot;Title&quot;,
&quot;itemUpdateDate&quot;:&quot;LastModifiedDate&quot;,
&quot;itemContents&quot;: &quot;Contents&quot;,
&quot;itemDescription&quot;: &quot;Description&quot;,
&quot;itemAuthors&quot;: &quot;Authors&quot;,
&quot;itemLinks&quot;: &quot;Links&quot;
}
}
}
</pre>
<p>Start the job and push records containing feed URLs:
</p>
<pre>
POST http://localhost:8080/smila/job/crawlFeedRecord/record
{
&quot;_recordid&quot;:&quot;smila-forum-feed&quot;,
&quot;httpUrl&quot;:&quot;https://www.eclipse.org/forums/feed.php?mode=m&amp;l=1&amp;basic=1&amp;frm=36&amp;n=100&quot;
}
POST http://localhost:8080/smila/job/crawlFeedRecord/record
{
&quot;_recordid&quot;:&quot;smila-userlist-feed&quot;,
&quot;httpUrl&quot;:&quot;https://dev.eclipse.org/mhonarc/lists/smila-user/maillist.rss&quot;
}
POST http://localhost:8080/smila/job/crawlFeedRecord/record
{
&quot;_recordid&quot;:&quot;smila-devlist-feed&quot;,
&quot;httpUrl&quot;:&quot;https://dev.eclipse.org/mhonarc/lists/smila-dev/maillist.rss&quot;
}
</pre>
<p>Note: The _recordid is just a dummy value, too. The records created by the feed crawler will have record IDs containing the dataSource parameter and the feed entry URL, just like in the "runOnce" case.
</p><p>After a while the crawled feed entries should appear in the search results on <a rel="nofollow" class="external autonumber" href="http://localhost:8080/SMILA/search">[1]</a>.
</p>
<!--
NewPP limit report
CPU time usage: 0.128 seconds
Real time usage: 0.132 seconds
Preprocessor visited node count: 173/1000000
Preprocessor generated node count: 511/1000000
Post‐expand include size: 1617/2097152 bytes
Template argument size: 1085/2097152 bytes
Highest expansion depth: 5/40
Expensive parser function count: 0/100
-->
<!-- Saved in parser cache with key my_wiki:pcache:idhash:37960-0!*!0!!en!2!* and timestamp 20150413202142 and revision id 377365
-->
</div>
<!-- catlinks -->
<div id='catlinks' class='catlinks catlinks-allhidden'></div> <!-- /catlinks -->
</div>
</div>
</div>
</div>
<!-- /maincontent -->
<!-- printfooter -->
<div class="printfooter">
Retrieved from "<a href="http://wiki.eclipse.org/index.php?title=SMILA/Documentation/Importing/Crawler/Feed&amp;oldid=377365">http://wiki.eclipse.org/index.php?title=SMILA/Documentation/Importing/Crawler/Feed&amp;oldid=377365</a>" </div>
<!-- /printfooter -->
<!-- debughtml -->
<!-- /debughtml -->
</div>
<!-- /bodyContent -->
</section>
<!-- /content -->
<!-- footer -->
</div> <section id="footer-contribution-info" style="border-top:1px solid #ccc;" class="footer-offset background-white margin-top-25"><div class="container text-center padding-top-10 padding-bottom-10"><p id="footercredit">This page was last modified 04:21, 2 February 2015 by <a href="http://wiki.eclipse.org/User:Juergen.schumacher.empolis.com" title="User:Juergen.schumacher.empolis.com">Juergen Schumacher</a>. Based on work by <a href="http://wiki.eclipse.org/User:Andreas.weber.empolis.com" title="User:Andreas.weber.empolis.com">Andreas Weber</a>.</p><p id="footerviews">This page has been accessed 2,172 times.</p></div></section> </main> <!-- /#main-content-container-row -->
<p id="back-to-top" class="noprint hidden-print">
<a class="visible-xs" href="Feed.html#top">Back to the top</a>
</p>
<footer role="contentinfo" class="noprint hidden-print">
<div class="container">
<div class="row">
<section id="footer-eclipse-foundation" class="col-xs-offset-1 col-xs-11 col-sm-7 col-md-6 col-md-offset-0">
<h2 class="section-title">Eclipse Foundation</h2>
<ul class="nav">
<li><a href="https://eclipse.org/org/">About us</a></li>
<li><a href="https://eclipse.org/org/foundation/contact.php">Contact Us</a></li>
<li><a href="https://eclipse.org/donate">Donate</a></li>
<li><a href="https://eclipse.org/org/documents/">Governance</a></li>
<li><a href="https://eclipse.org/artwork/">Logo and Artwork</a></li>
<li><a href="https://eclipse.org/org/foundation/directors.php">Board of Directors</a></li>
</ul>
</section>
<section id="footer-legal" class="col-xs-offset-1 col-xs-11 col-sm-7 col-md-6 col-md-offset-0">
<h2 class="section-title">Legal</h2>
<ul class="nav">
<li><a href="https://eclipse.org/legal/privacy.php">Privacy Policy</a></li>
<li><a href="https://eclipse.org/legal/termsofuse.php">Terms of Use</a></li>
<li><a href="https://eclipse.org/legal/copyright.php">Copyright Agent</a></li>
<li><a href="https://eclipse.org/org/documents/epl-v10.php">Eclipse Public License </a></li>
<li><a href="https://eclipse.org/legal/">Legal Resources </a></li>
</ul>
</section>
<section id="footer-useful-links" class="col-xs-offset-1 col-xs-11 col-sm-7 col-md-6 col-md-offset-0">
<h2 class="section-title">Useful Links</h2>
<ul class="nav">
<li><a href="https://bugs.eclipse.org/bugs/">Report a Bug</a></li>
<li><a href="http://help.eclipse.org/">Documentation</a></li>
<li><a href="https://eclipse.org/contribute/">How to Contribute</a></li>
<li><a href="https://eclipse.org/mail/">Mailing Lists</a></li>
<li><a href="https://eclipse.org/forums/">Forums</a></li>
<li><a href="http://marketplace.eclipse.org/">Marketplace</a></li>
</ul>
</section>
<section id="footer-other" class="col-xs-offset-1 col-xs-11 col-sm-7 col-md-6 col-md-offset-0">
<h2 class="section-title">Other</h2>
<ul class="nav">
<li><a href="https://eclipse.org/ide/">IDE and Tools</a></li>
<li><a href="https://eclipse.org/projects">Community of Projects</a></li>
<li><a href="https://eclipse.org/org/workinggroups/">Working Groups</a></li>
</ul>
<ul class="list-inline social-media">
<li><a href="https://twitter.com/EclipseFdn"><i class="fa fa-twitter-square"></i></a></li>
<li><a href="https://plus.google.com/+Eclipse"><i class="fa fa-google-plus-square"></i></a></li>
<li><a href="https://www.facebook.com/eclipse.org"><i class="fa fa-facebook-square"></i> </a></li>
<li><a href="https://www.youtube.com/user/EclipseFdn"><i class="fa fa-youtube-square"></i></a></li>
</ul>
</section>
<div id="copyright" class="col-xs-offset-1 col-sm-14 col-md-24 col-md-offset-0">
<div>
<span><img src="http://eclipse.org/eclipse.org-common/themes/solstice/public/images/logo/eclipse-logo-bw-800x188.png" alt="Eclipse.org black and white logo" width="166" height="39" id="logo-eclipse-white"/></span>
<p id="copyright-text">Copyright &copy; 2014 The Eclipse Foundation. All Rights Reserved.</p>
</div>
</div>
<a href="Feed.html#" class="scrollup">Back to the top</a>
</div>
</div>
</footer>
<script src="http://wiki.eclipse.org/skins/solstice/public/javascript/main.min.js"></script>
<!-- Placed at the end of the document so the pages load faster -->
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-910670-2']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script> <!-- /footer -->
<script>/*<![CDATA[*/window.jQuery && jQuery.ready();/*]]>*/</script><script>if(window.mw){
mw.loader.state({"skins.solstice":"loading","site":"ready","user":"ready","user.groups":"ready"});
}</script>
<script src="http://wiki.eclipse.org/load.php?debug=false&amp;lang=en&amp;modules=skins.solstice&amp;only=scripts&amp;skin=solstice&amp;*"></script>
<script>if(window.mw){
mw.loader.load(["mediawiki.action.view.postEdit","mediawiki.user","mediawiki.hidpi","mediawiki.page.ready","mediawiki.searchSuggest"],null,true);
}</script>
<script>if(window.mw){
mw.config.set({"wgBackendResponseTime":397});
}</script> </body>
</html>