<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wandora.org/w/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://wandora.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Olli</id>
		<title>WandoraWiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://wandora.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Olli"/>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/Special:Contributions/Olli"/>
		<updated>2026-04-18T08:25:08Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.19.1</generator>

	<entry>
		<id>http://wandora.org/wiki/Wandora</id>
		<title>Wandora</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/Wandora"/>
				<updated>2015-05-29T12:52:34Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: /* Extractors */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page collects Wandora's documentation. The documentation is a work in progress and incomplete. Also note some documentation may be out of date as the application is developed actively. If you need any specific help, write your question to the [http://wandora.org/forum/ discussion forum]. [https://www.youtube.com/channel/UClJoFDmiThA02RmAUT5YEcw Wandora's YouTube channel] has several tutorial videos reviewing some application features. Would you like to edit this wiki, send an email to {{wandora email address}} with your name and information about how you'd like to contribute. Please, remember to add keyword WANDORA to the title of your email. If you just popped in this wiki and don't know Wandora, please see also our landing page at http://wandora.org/ for a general information.&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Wandora is a general purpose information management application. The application is written in [http://www.oracle.com/technetwork/java/index.html Java programming language] and it's internal data model is based on [[Topic Maps]]. Also, Wandora is a desktop application with a graphical user interface, layered data storage, huge collection of data extraction, import and export options and embedded HTTP server. Wandora's license is [http://www.gnu.org/licenses/gpl-3.0.txt GNU GPL version 3].&lt;br /&gt;
&lt;br /&gt;
* [[General FAQ]]&lt;br /&gt;
* Wandora poster in [http://wandora.org/download/other/poster09.pdf PDF] or [http://wandora.org/download/other/poster09.gif GIF] formats.&lt;br /&gt;
* [[Features]]&lt;br /&gt;
* [[Screenshots]]&lt;br /&gt;
* [http://wandora.org/www/news Wandora news]&lt;br /&gt;
* [[License of Wandora|License]]&lt;br /&gt;
&lt;br /&gt;
== Starting with Wandora ==&lt;br /&gt;
&lt;br /&gt;
Wandora is a desktop application written in Java version 7. You need a Java Runtime Environment (JRE) to execute the application. Wandora has two distribution packages. A binary distribution package contains a runnable version of the application. Wandora's source code is available as a source code distribution package. Both packages are zip compressed file repositories. Use one of the startup scripts in '''bin''' folder to start the Wandora application.&lt;br /&gt;
&lt;br /&gt;
* [[System requirements]]&lt;br /&gt;
* [[Change log]]&lt;br /&gt;
* [[Download|Download Wandora]] (build date {{build date}})&lt;br /&gt;
* [[How to install Wandora|Installing Wandora]]&lt;br /&gt;
* [[Running Wandora]]&lt;br /&gt;
* [[Tuning Wandora for Mac OS]]&lt;br /&gt;
* [[Quickstart]]&lt;br /&gt;
&lt;br /&gt;
== Topic Maps ==&lt;br /&gt;
&lt;br /&gt;
Wandora's internal datamodel is based on Topic Maps. [http://en.wikipedia.org/wiki/Topic_Maps Wikipedia defines Topic Maps] as a standard for the representation and interchange of knowledge, with an emphasis on the findability of information. A topic map represents information using ''topics'', ''associations'' and ''occurrences''. Topic represents any concept, from people, countries, and organizations to software modules, individual files, and events. Associations are hypergraph relationships between topics. Occurrence is an information resource relevant to a particular topic. If you are not familiar with Topic Maps, you can think it as a special kind of graph with nodes and edges. Wandora's topic map model is limited. These model limitations are explained in [[Reduced Topic Maps|Topic maps in Wandora]] page.&lt;br /&gt;
&lt;br /&gt;
* [[Topic Maps|About topic maps]]&lt;br /&gt;
* [[Reduced Topic Maps|Topic maps in Wandora]]&lt;br /&gt;
&lt;br /&gt;
See also '''Topic map layers''' section below. Wandora Team has converted several well known ontologies to Topic Maps format. These ontologies: WordNet, OpenCyc, Gene Ontology, Gellish, and Finnish General Upper Ontology (YSO) are available at [[Topic map gallery]].&lt;br /&gt;
&lt;br /&gt;
== Using Wandora ==&lt;br /&gt;
&lt;br /&gt;
This section contains basic tutorials for Wandora. If you are a novice Wandora user, please start here. See also tutorial videos on [http://wandora.org/wandora/tv/ wandoratv].&lt;br /&gt;
&lt;br /&gt;
* [[Quickstart]]&lt;br /&gt;
* [[Opening a topic]]&lt;br /&gt;
&lt;br /&gt;
Wandora has a rich set of topic, association and occurrence editing features. Usually a topic is edited in a topic panel one by one. Editing an association takes place in a separate association editor. Similarly, editing an occurrence takes place in an occurrence editor. Next pages discuss about creating and editing topics and associations.&lt;br /&gt;
&lt;br /&gt;
* [[Create new topic]]&lt;br /&gt;
* [[Delete topic]]&lt;br /&gt;
* [[Create new association]]&lt;br /&gt;
* [[Delete association]]&lt;br /&gt;
* [[Editing topics and associations]]&lt;br /&gt;
&lt;br /&gt;
Wandora saves all topic maps in a Wandora project file. Addition to project files, Wandora can read and write topic map serializations. See also chapter Import and Export below.&lt;br /&gt;
&lt;br /&gt;
* [[How to save and load project]]&lt;br /&gt;
* [[How to import existing topic map to Wandora]]&lt;br /&gt;
* [[How to export topic map in Wandora]]&lt;br /&gt;
&lt;br /&gt;
Next pages discuss some other features of the Wandora application.&lt;br /&gt;
&lt;br /&gt;
* [[Finding a topic]]&lt;br /&gt;
* [[Topic shortcuts]]&lt;br /&gt;
* [[Working with topic tables]]&lt;br /&gt;
* [[Working with topic trees]]&lt;br /&gt;
* [[Drag and drop topics]]&lt;br /&gt;
* [[Creating custom topic trees]]&lt;br /&gt;
* [[View all variant names of a topic]]&lt;br /&gt;
* [[Transform variant names to topics and associations]]&lt;br /&gt;
* [[Undo and redo]]&lt;br /&gt;
&lt;br /&gt;
== Topic panels ==&lt;br /&gt;
&lt;br /&gt;
Topic panel is Wandora's user interface element to view and edit topics. Wandora supports several different topic panel types. Topic panels are managed with menu options under '''View'''. Wandora can view several topic panels simultaneously. Traditional topic panel views all topic elements in a table while tabbed panel views topic details in separate tabs. Graph topic panel is used for graph visualizations. Custom topic panel is based on user specific queries related to the current topic.&lt;br /&gt;
&lt;br /&gt;
* [[Working with topic panels]]&lt;br /&gt;
&lt;br /&gt;
Different topic panels are&lt;br /&gt;
&lt;br /&gt;
* [[Traditional topic panel]]&lt;br /&gt;
* [[Tabbed topic panel]]&lt;br /&gt;
* [[Graph topic panel]]&lt;br /&gt;
* [[Custom topic panel]]&lt;br /&gt;
* [[Treemap topic panel]]&lt;br /&gt;
* [[R topic panel]]&lt;br /&gt;
* [[Processing topic panel]]&lt;br /&gt;
* [[Sketch grid]]&lt;br /&gt;
* [[Webview]]&lt;br /&gt;
* [[Tree panel]]&lt;br /&gt;
* [[Search panel]]&lt;br /&gt;
* [[Layer info panel]]&lt;br /&gt;
* [[Query editor topic panel]]&lt;br /&gt;
&lt;br /&gt;
== Topic map layers ==&lt;br /&gt;
&lt;br /&gt;
Wandora supports layered topic maps. Layered topic map contains one or more topic maps stacked into an ordered array. Any topic in the layered topic map is a superposition of all merging topics in different layers. Wandora views all layered topic maps as a single topic map but allows layer specific operations too. It really matters what layer is active. As user can focus on one layer at a time or replace any layer at any time, the composition of information is flexible. User can easily try different scenarios. Layer specific application options and tools locate in '''Layers''' menu. Layered topic maps are very close to the concept of [http://arxiv.org/abs/1309.7233 multilayer networks].&lt;br /&gt;
&lt;br /&gt;
* [[Introduction to Layered Topic Maps]]&lt;br /&gt;
* [[Creating new layers]]&lt;br /&gt;
* [[Deleting layer]]&lt;br /&gt;
* [[Layer order and arranging layers]]&lt;br /&gt;
* [[Merging layers]]&lt;br /&gt;
* [[Topic's layer distribution]]&lt;br /&gt;
&lt;br /&gt;
'''Different layer types'''&lt;br /&gt;
* [[Layered topic map]]&lt;br /&gt;
* [[Memory topic map]]&lt;br /&gt;
* [[Database topic map]]&lt;br /&gt;
* [[Linked topic map]]&lt;br /&gt;
* [[Query topic map]]&lt;br /&gt;
&amp;lt;!-- * [[Remote topic map]] --&amp;gt;&lt;br /&gt;
* [[Web service topic map]]&lt;br /&gt;
&lt;br /&gt;
'''Other'''&lt;br /&gt;
* [[Compare topic maps]]&lt;br /&gt;
* [[Topic map patcher]]&lt;br /&gt;
&lt;br /&gt;
== Import and Export ==&lt;br /&gt;
&lt;br /&gt;
Wandora has been designed for easy aggregation of information and features a wide range of import and export tools. Wandora imports not just different Topic Maps formats such as XTM1, XTM2, and LTM but also RDF as XML, N3, and Turtle. Also, Wandora imports bio-ontologies in OBO flat file format. To get an up-to-date overview of Wandora's import options see menu '''File &amp;gt; Import'''. Addition to import options, Wandora features a wide range of export options from different Topic Maps formats to different graph formats. See menu options in '''File &amp;gt; Export'''. Wandora's native file format is Wandora project, with a file suffix WPR, which is a collection of XTM2 topic maps and a configuration file within a zip package.&lt;br /&gt;
&lt;br /&gt;
* [[How to save and load project]]&lt;br /&gt;
* [[How to import existing topic map to Wandora]]&lt;br /&gt;
* [[How to export topic map in Wandora]]&lt;br /&gt;
* [[Waiana import and export]]&lt;br /&gt;
** [[Maiana import and export]]&lt;br /&gt;
* [[Transferring data with clipboard]]&lt;br /&gt;
* [[Importing RDF]] (see also extractors below)&lt;br /&gt;
* [[OBO flat file import|Importing OBO flat file ontologies]]&lt;br /&gt;
* [[Gene Ontology Annotation file import]]&lt;br /&gt;
* [[Importing XML with XSL]]&lt;br /&gt;
* [[Generic SQL database import]]&lt;br /&gt;
* [[Exporting WWW site]]&lt;br /&gt;
* [[Lucene search index export]]&lt;br /&gt;
* [[SQL Dump Export]]&lt;br /&gt;
* [[IoT Pinger]]&lt;br /&gt;
&lt;br /&gt;
'''Graph and matrix imports'''&lt;br /&gt;
* [[Adjacency list import]]&lt;br /&gt;
* [[Adjacency matrix import]]&lt;br /&gt;
* [[Incidence matrix import]]&lt;br /&gt;
&lt;br /&gt;
'''Graph and matrix exports'''&lt;br /&gt;
* [[Graph Modeling Language export]]&lt;br /&gt;
* [[GraphML export]]&lt;br /&gt;
* [[GraphXML export]]&lt;br /&gt;
* [[GXL graph export]]&lt;br /&gt;
* [[Export adjacency matrix]]&lt;br /&gt;
* [[Export incidence matrix]]&lt;br /&gt;
* See also page [[Graph topic panel]] and it's chapter Export options.&lt;br /&gt;
&lt;br /&gt;
For additional information about Wandora's export capabilities see also '''Wandora as a server''' section below. For additional information about Wandora's import capabilities see also '''Extractors''' section below. &amp;lt;!-- [[Image:import_export_diagram.gif|center]] --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Extractors ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Wandoras_extractors.gif|center]]&lt;br /&gt;
&lt;br /&gt;
Wandora is great for information mashups. With Wandora you can easily mashup information from various sources. Extractors are specific Wandora tools used to extract topics and associations out of different file formats and sources. For example, Wandora can extract data from MP3 and JPG files. To see what extractors your Wandora has installed see menu options in '''File &amp;gt; Extract'''. To start an extractor select the extractor in the menu or use drag and drop extractor. Wandora also features an add-on for Mozilla Firefox WWW browser. With this add-on you can perform extractions directly in Firefox www browser or in Thunderbird email client.&lt;br /&gt;
&lt;br /&gt;
* [[Drag and drop extractor]]&lt;br /&gt;
* [[Wandora Firefox plugin|Firefox plugin]] to extract directly from Firefox WWW browser and Thunderbird email client.&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot; background-color=&amp;quot;transparent&amp;quot; &lt;br /&gt;
| style=&amp;quot;border:none; margin:none; padding:0px;&amp;quot; valign=&amp;quot;top&amp;quot; | &amp;lt;!-- LEFT COLUMN --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Search engine extractors'''&lt;br /&gt;
* [[Bing extractor]]&lt;br /&gt;
* [[Yahoo! BOSS extractor]]&lt;br /&gt;
* [[DuckDuckGo extractor]]&lt;br /&gt;
'''Simple files extractors'''&lt;br /&gt;
* [[JPG binary metadata extractor]]&lt;br /&gt;
* [[PDF extractor]]&lt;br /&gt;
* [[File system extractor]]&lt;br /&gt;
* [[Simple Text Document Extractor|Convert simple text documents to topic map occurrences]]&lt;br /&gt;
* [[Simple CSV association extractor]]&lt;br /&gt;
* [[OCR Extractor]]&lt;br /&gt;
'''Media extractors'''&lt;br /&gt;
* [[Europeana extractor]]&lt;br /&gt;
* [[MP3 ID3v1 and ID3v2 extractor]]&lt;br /&gt;
* [[IMDB extractor]]&lt;br /&gt;
* [[FreeDB extractor]]&lt;br /&gt;
* [[Last.fm extractors|Convert Last.fm XML feeds to a topic map]]&lt;br /&gt;
* [[Flickr extractors]]&lt;br /&gt;
* &amp;lt;strike&amp;gt;[[Ovi shared media extractors]]&amp;lt;/strike&amp;gt;&lt;br /&gt;
* [[YouTube extractor]]s&lt;br /&gt;
* [[Rekognition extractor]]&lt;br /&gt;
'''Social and Bookmark extractors'''&lt;br /&gt;
* [[Facebook Graph extractor]]&lt;br /&gt;
* [[Twitter extractor]]&lt;br /&gt;
* [[Twitter JSON extractor]]&lt;br /&gt;
* [[Reddit extractor]]&lt;br /&gt;
* [[Digg extractors]]&lt;br /&gt;
* &amp;lt;strike&amp;gt;[[Delicious extractors]]&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;[[Diigo bookmark extractor]]&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;[[Twine RDF extractor]]&amp;lt;/strike&amp;gt;&lt;br /&gt;
'''Bibliographical extractors'''&lt;br /&gt;
* [[MARCXML extractor]]&lt;br /&gt;
* [[Dublin Core XML extractor]]&lt;br /&gt;
* [[Bibtex extractor|Convert BibTeX files to a topic map]]&lt;br /&gt;
* [[RIS extractor]]&lt;br /&gt;
* [[HelMet library data extractor]]&lt;br /&gt;
'''Classifications'''&lt;br /&gt;
* [[GATE/ANNIE integration|GATE/ANNIE]]&lt;br /&gt;
* [[Stanford Named Entity Recognizer integration|Stanford Named Entity Recognizer (NER)]]&lt;br /&gt;
* [[OpenCalais classifier]]&lt;br /&gt;
* [[AlchemyAPI extractors]]&lt;br /&gt;
* [[Yahoo! YQL term extractor]]&lt;br /&gt;
* &amp;lt;strike&amp;gt;[[Tagthe extractor]]&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;[[SemanticHacker classifier]]&amp;lt;/strike&amp;gt;&lt;br /&gt;
* [[Zemanta extractor]]&lt;br /&gt;
* [[UClassify integration]]&lt;br /&gt;
* [[Simple Word Matching Extractor]]&lt;br /&gt;
* [[Similarity Word Extractor]]&lt;br /&gt;
&lt;br /&gt;
'''Knowledge extractors'''&lt;br /&gt;
* [[OpenCyc extractor]]&lt;br /&gt;
* &amp;lt;strike&amp;gt;[[Subj3ct record extractor]]&amp;lt;/strike&amp;gt;&lt;br /&gt;
* [[DBpedia extractor]]&lt;br /&gt;
* [[Freebase extractor]]&lt;br /&gt;
* [[Umbel extractors]]&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;border: 1; margin:5; padding-left: 20px;&amp;quot; valign=&amp;quot;top&amp;quot;| &amp;lt;!-- RIGHT COLUMN --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''HTML structures extractors'''&lt;br /&gt;
* [[HTML superclass-subclass list extractor]]&lt;br /&gt;
* [[HTML instance list extractor]]&lt;br /&gt;
* [[HTML property table extractor]]&lt;br /&gt;
* [[HTML association table extractor]]&lt;br /&gt;
* [[HTML link extractor]]&lt;br /&gt;
'''News and syndication extractors'''&lt;br /&gt;
* [[RSS 2.0 Extractor]] and [[RSS 1.0 RDF Extractor]]&lt;br /&gt;
* [[Atom extractor]]&lt;br /&gt;
* [[New York Times Article Search API extractor]]&lt;br /&gt;
* [[New York Times Event API extractor]]&lt;br /&gt;
* [[Guardian open platform extractor]]&lt;br /&gt;
'''Microformat extractors'''&lt;br /&gt;
* [[Any23 extractor]]&lt;br /&gt;
* [[Geo microformat extractor|Convert geo microformat snippets to topic maps]]&lt;br /&gt;
* [[Adr microformat extractor|Convert adr microformat snippets to topic maps]]&lt;br /&gt;
* [[HCalendar microformat extractor|Convert hcalendar microformat snippets to topic maps]]&lt;br /&gt;
* [[HCard microformat extractor|Convert hcard microformat snippets to topic maps]]&lt;br /&gt;
'''Wiki extractors'''&lt;br /&gt;
* [[Wikipedia extractor]]&lt;br /&gt;
* [[MediaWiki Content Extractor]]&lt;br /&gt;
* More general [[MediaWiki extractor]]&lt;br /&gt;
'''Simple RDF extractors'''&lt;br /&gt;
* [[SKOS RDF extractor]]&lt;br /&gt;
* [[Dublin Core RDF extractor]]&lt;br /&gt;
* [[FOAF RDF extractor]]&lt;br /&gt;
* [[IIIF RDF extractor]]&lt;br /&gt;
'''Language'''&lt;br /&gt;
* [[Big Huge Thesaurus API extractor]]&lt;br /&gt;
* [[VerbOcean extractor]]&lt;br /&gt;
* [[Moby thesaurus extractor]]&lt;br /&gt;
* [[Stands4 word describer]]&lt;br /&gt;
'''Databases'''&lt;br /&gt;
* [[Generic SQL database import | Importing SQL database]]&lt;br /&gt;
* [[SQL query result set extractor]]&lt;br /&gt;
* [[Excel extractors]]&lt;br /&gt;
'''Other'''&lt;br /&gt;
* [[Email extractor]]&lt;br /&gt;
* [[Geonames extractors]]&lt;br /&gt;
* [[Gellish ontology extractor]]&lt;br /&gt;
* [[GEDCOM extractor]]&lt;br /&gt;
* [[SPARQL extractor]]&lt;br /&gt;
* [[Oma kaupunki extractor]]&lt;br /&gt;
* [[iCal calendar format extractor]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
See [[Refining occurrences]] for some practical examples of how to extract associations and topics out of occurrences.&lt;br /&gt;
&lt;br /&gt;
== Generators ==&lt;br /&gt;
&lt;br /&gt;
Generators are special tools that generate topics and associations algorithmically. Generators help you construct basic building blocks for your topic maps. Generators are also a nice test suite for Wandora and topic maps in general. Generators locate in Wandora's '''File &amp;gt; Generate''' menu. Available generators are&lt;br /&gt;
&lt;br /&gt;
* [[Random graph generator]]&lt;br /&gt;
* [[Fully connected graph generator]]&lt;br /&gt;
* [[Tree graph generator]]&lt;br /&gt;
* [[Linear list graph generator]]&lt;br /&gt;
* [[Finite group graph generator]]&lt;br /&gt;
* [[Platonic solid graph generator]]&lt;br /&gt;
* [[Hypercube graph generator]]&lt;br /&gt;
* [[Tiling graph generator]] (square, triangular, and hexagonal tilings)&lt;br /&gt;
* [[Edge generator]]&lt;br /&gt;
* [[L-system generator]]&lt;br /&gt;
* [[Cylinder graph generator]]&lt;br /&gt;
* [[Lattice graph generator]]&lt;br /&gt;
&lt;br /&gt;
== Schema ==&lt;br /&gt;
&lt;br /&gt;
Schema is a collection of specific topics and associations that Wandora uses to construct the user interface of association editor, occurrence editor and topic name panel. Schema eases many topic map operations such as association and occurrence construction. Schema also defines the language support of Wandora application.&lt;br /&gt;
&lt;br /&gt;
* [[Schema]] to ease association and occurrence creation and modification&lt;br /&gt;
&lt;br /&gt;
== Language support ==&lt;br /&gt;
&lt;br /&gt;
Wandora supports only one base name per topic. However, a topic may contain several different variant names. Each variant name has a type and a language. Similarly, a topic may contain several different occurrences, text fragments. Each occurrence has a type and a language also. Wandora supports both Microsoft Translator and Google translate API and can convert both variant names and occurrences to other languages.&lt;br /&gt;
&lt;br /&gt;
* [[How to add a language to Wandora]]&lt;br /&gt;
* [[How to add a name type to Wandora]]&lt;br /&gt;
* [[Translating variant names with Google]]&lt;br /&gt;
* [[Translating occurrences with Google]]&lt;br /&gt;
* [[Translating variant names with Microsoft Translator]]&lt;br /&gt;
* [[Translating occurrences with Microsoft Translator]]&lt;br /&gt;
* [[View all variant names of a topic]]&lt;br /&gt;
&lt;br /&gt;
== Analyzing and querying topic maps ==&lt;br /&gt;
&lt;br /&gt;
Generally these tools locate in '''Layers &amp;gt; Statistics''' menu. As an exception SOM classifier is found in association table menu and topic map comparison in '''File''' menu. Wandora provides also a bridge to R language. R language is a comprehensive statistical and graphing environment. With Wandora's R integration, the user can access Wandora's information structures in R environment. This opens up interesting possibilities if used together with information extractors.&lt;br /&gt;
&lt;br /&gt;
* [[Topic map info]]&lt;br /&gt;
* [[Topic map connection statistics]]&lt;br /&gt;
* [[Topic map diameter]]&lt;br /&gt;
* [[Merge ratio matrix]]&lt;br /&gt;
* [[Export similarity matrix|Topic similarity matrix]]&lt;br /&gt;
* [[Clustering coefficient]] of topic map&lt;br /&gt;
* [[SOM classifier]] (Self Organizing Maps classifier)&lt;br /&gt;
* [[Asset weight of a topic]]&lt;br /&gt;
* [[Compare topic maps]]&lt;br /&gt;
* [[R in Wandora]]&lt;br /&gt;
** [[Statistical analysis of Topic Maps in R]]&lt;br /&gt;
* [[Query language]]&lt;br /&gt;
* [[TMQL]]&lt;br /&gt;
&lt;br /&gt;
See the '''Extract''' section and especially the subsection '''Classifications''' above also.&lt;br /&gt;
&lt;br /&gt;
== Tools and tool manager ==&lt;br /&gt;
&lt;br /&gt;
A tool packs certain Wandora functionality into a single software component, specifically a Java class. When ever the user performs an action in Wandora, Wandora runs the tool that is responsible for the action. The Tool manager is a specific tool used to manage tools and tool sources. The user can  install new tools to the Wandora. To develop a tool for the Wandora, the user writes a Java class source using a Java IDE, preferably Netbeans, and compiles the source using Java JDK.&lt;br /&gt;
&lt;br /&gt;
* [[Tool manager]]&lt;br /&gt;
* [[:Category:Tools|Available tools]]&lt;br /&gt;
* [[Writing your own tool]]&lt;br /&gt;
* [[Installing your own tool]]&lt;br /&gt;
* [[Tool locks]]&lt;br /&gt;
* [[Configuring tools]]&lt;br /&gt;
* [[Additional tool help]]&lt;br /&gt;
* [[Developing Wandora]]&lt;br /&gt;
&lt;br /&gt;
== Wandora as a server ==&lt;br /&gt;
&lt;br /&gt;
The Wandora application contains an HTTP server. The embedded HTTP server generates various output formats and interactive visualizations out of the information stored in the Wandora. The embedded server hosts service modules. A service module is a software component that serves some information out of the Wandora. For example, '''HTML service module''' generates a navigable HTML site out of the topics in the Wandora. '''D3 graph service module''' generates an interactive graph out of all topics in the Wandora. More over, '''XTM topic map service module''' outputs current topic in the Wandora in an XTM format. It provides a data access point for external applications, or for other instances of the Wandora application. Some service modules rely on extracted information. Such service modules are '''Timeline service module''' and '''Google Maps service module'''.&lt;br /&gt;
&lt;br /&gt;
* [[Embedded HTTP server]]&lt;br /&gt;
** [[HTML service module]] &lt;br /&gt;
** [[Mobile HTML service module]]&lt;br /&gt;
** [[RSS feed service module]]&lt;br /&gt;
** [[SOAP web service module]] &lt;br /&gt;
** [[Drupal service module]]&lt;br /&gt;
** [[Firefox and Thunderbird plugin service module]]&lt;br /&gt;
** [[XTM topic map service module]] &lt;br /&gt;
** [[JTM topic map service module]]&lt;br /&gt;
** [[RDF service module]]&lt;br /&gt;
** [[GRAPHML service module]]&lt;br /&gt;
** [[Screencast service module]]&lt;br /&gt;
** [[Flash graph service module]]&lt;br /&gt;
** [[Timeline service module]]&lt;br /&gt;
** [[Google Maps service module]]&lt;br /&gt;
** [[D3 graph service module]]&lt;br /&gt;
** [[D3 word cloud service module]]&lt;br /&gt;
** [[D3 partition service module]]&lt;br /&gt;
** [[D3 tree service module]]&lt;br /&gt;
** [[D3 matrix service module]]&lt;br /&gt;
** [[D3 layer visualization]]&lt;br /&gt;
** [[Waiana service module]]&lt;br /&gt;
** [[SameAs service module]]&lt;br /&gt;
&lt;br /&gt;
Wandora team has also built several service modules for Drupal content management system and an extra for Joomla content management system. These modules can be used to publish Wandora stored information in these CMSes.&lt;br /&gt;
&lt;br /&gt;
* [[Wandora Drupal extras]]&lt;br /&gt;
* [[Wandora's Joomla Topic Reader]]&lt;br /&gt;
* [[JQuery Mobile based topic map browser]]&lt;br /&gt;
&lt;br /&gt;
Wandora's embedded HTTP server contains a service module for SOAP web service. There is additional information available for Wandora's web service. &lt;br /&gt;
&lt;br /&gt;
* [[Wandora Web Service]]&lt;br /&gt;
&lt;br /&gt;
Also included is a [[Wandora modules framework|modular framework]] for building webapps in Apache Tomcat or similar servlet containers. Topic maps and features of Wandora can be included in the servlet using this framework. The same framework can also be used in the embedded server.&lt;br /&gt;
&lt;br /&gt;
== Developing and hacking Wandora == &lt;br /&gt;
&lt;br /&gt;
Wandora project is developed with [http://netbeans.org/ Netbeans IDE]. Wandora's source code distribution package contains a Netbeans IDE project. You can download Wandora's source code distribution package from [[Download]] page. However, we suggest that you clone [https://github.com/wandora-team/wandora Wandora's repository] at Github. Perhaps you want to push some fixes or new features back.&lt;br /&gt;
&lt;br /&gt;
* [[Change log]]&lt;br /&gt;
* [https://github.com/wandora-team/wandora Wandora @ Github]&lt;br /&gt;
* [[Download]] (build date {{build date}})&lt;br /&gt;
* [[License of Wandora|License]]&lt;br /&gt;
* [[Developing Wandora]]&lt;br /&gt;
* [http://wandora.org/api/ Wandora Javadocs], [http://wandora.org/api/wandora-javadoc.zip download]&lt;br /&gt;
* [[Wandora's configuration file]]&lt;br /&gt;
* [[Upcoming features]]&lt;br /&gt;
* [[Open bugs]]&lt;br /&gt;
&lt;br /&gt;
See also section '''Tools and tool manager''' above.&lt;br /&gt;
&lt;br /&gt;
== Papers and presentations ==&lt;br /&gt;
&lt;br /&gt;
This section lists some papers and presentations related to Wandora and semantic web technologies created by the inner circle of Wandora Team. For a more wider selection of works related to Wandora see [http://wandora.org/forum/viewforum.php?f=10&amp;amp;sid=57134deccd5ba47132334f2f1215b520 Use cases at Wandora forum].&lt;br /&gt;
&lt;br /&gt;
* [http://tmra.de/2010/ TMRA 2010] tutorial slides: [http://wandora.org/download/other/tmra10/wandora_workshop_tmra2010.pdf Converting information to Topic Maps using Wandora].&lt;br /&gt;
* [http://tmra.de/2009/ TMRA 2009] workshop presentation [http://www.slideshare.net/tmra/semantic-mashups-with-wandora Semantic Mashups with Wandora]. [http://wandora.org/wandora/download/other/tmra09/wandora_tutorial_leipzig.zip Example data set] is available for brave experimenters.&lt;br /&gt;
* Wandora poster in [http://wandora.org/wandora/download/other/poster09.pdf PDF] or [http://wandora.org/wandora/download/other/poster09.gif GIF] formats.&lt;br /&gt;
* Kivelä A.: [http://wandora.org/download/other/gradu_kivela.pdf OBO-ontologioiden kuvaaminen Topic Map-muotoon]. MSc Theses, 2008. (in Finnish). (English Abstract: [http://wandora.org/wandora/download/other/gradu_kivela_abstract_en.pdf Converting OBO ontologies to Topic Maps]).&lt;br /&gt;
* Lyytinen O.: [http://www.wandora.org/download/other/gradu_lyytinen.pdf Semanttisen webin tekniikoiden soveltaminen Wikisovelluksissa]. MSc Theses, 2008. (in Finnish) &lt;br /&gt;
* Kivelä A.: [http://www.wandora.org/download/other/wandora_xml_finland.pdf Topic Maps, Wandora ja kourallinen julkaisuprojekteja] (in Finnish). Presentation held in XML Finland meeting November 14th, 2007. &lt;br /&gt;
* Lyytinen O.: [http://wandora.net/wandora/download/other/step06.pdf Building Internet Services with Layered Topic Maps]. Presentation held in The Finnish Artificial Intelligence Conference (STeP 2006), 2006-10-26.&lt;br /&gt;
* Kivelä A., Lyytinen O.: [http://wandora.net/wiki/images/Topic_map_aided_publishing.pdf Topic Map Aided Publishing – A Case Study of Assembly Media Archive]. ''Web Intelligence. STeP 2004 - The 11th Finnish Artificial Intelligence Conference Proceedings - Vol. 2'', 2004.&lt;br /&gt;
&lt;br /&gt;
== Wandora @ World ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/wandora-team/wandora Github]&lt;br /&gt;
* [http://twitter.com/#!/wandora_app Twitter]&lt;br /&gt;
* [https://www.youtube.com/channel/UClJoFDmiThA02RmAUT5YEcw YouTube]&lt;br /&gt;
* [http://freecode.com/projects/wandora/ Freecode]&lt;br /&gt;
* [http://sourceforge.net/projects/wandora/ SourceForge.net]&lt;br /&gt;
&amp;lt;!-- * [http://www.garshol.priv.no/tmtools/product.jsp?id=wandora Topic Maps Tools] --&amp;gt;&lt;br /&gt;
* [http://www.topicmapslab.de/projects/wandora?locale=en Topic Maps Lab]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
As said in the very beginning, the documentation is a work in progress and incomplete. If the available documentation didn't answer your question, please drop a line to Wandora forum and we'll try to find an answer for you. &lt;br /&gt;
&lt;br /&gt;
* [[General FAQ]]&lt;br /&gt;
* [[FAQ for Wandora user]] reveals some nifty details of Wandora application.&lt;br /&gt;
* [http://wandora.org/tv Wandora tv]&lt;br /&gt;
* [http://wandora.org/forum/ Wandora forum]&lt;br /&gt;
* [[Open bugs]]&lt;br /&gt;
&lt;br /&gt;
If you are interested in Topic Maps and information technology related news see [http://planet.topicmaps.org/ Planet Topic Maps] and [http://planetrdf.com/ Planet RDF].&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/IIIF_Export</id>
		<title>IIIF Export</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/IIIF_Export"/>
				<updated>2015-05-29T12:23:47Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: Protected &amp;quot;IIIF Export&amp;quot; (‎[edit=sysop] (indefinite) ‎[move=sysop] (indefinite))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;IIIF Export tool exports image data in the [http://iiif.io/ International Image Interoperability Framework] JSON-LD format. To use the IIIF Export, select the menu item '''File &amp;gt; Export &amp;gt; Export IIIF JSON-LD...'''.&lt;br /&gt;
&lt;br /&gt;
IIIF manifest files can be used with some 3rd party image viewers, such as the [https://github.com/IIIF/mirador Mirador Viewer]. However, at the moment Mirador does not support static image links in the manifest but instead requires an IIIF image server to host the images. As such, the simple IIIF manifest files exported from Wandora may not be usable in Mirador. The Full IIIF Builder (described below) will export the image server information, if it was specified in the topic map, and as long as the images are correctly hosted on the server, these files should then work in Mirador.&lt;br /&gt;
&lt;br /&gt;
There are several options in how the image data is gathered from the topic map. You can change this by launching the tool with holding down the control key and then changing the IIIF Builder option. The different builders are described below.&lt;br /&gt;
&lt;br /&gt;
'''Simple Selection Builder''' takes the selected topics and looks for images in their subject locator. An IIIF image manifest is then generated from these images. Topic display names are used as labels of the images but no other information is used from the topic map. As such, this is a very simple way to export the selected image topics as IIIF JSON-LD.&lt;br /&gt;
&lt;br /&gt;
'''Selection Instances Builder''' is similar to the simple selection builder, but instead it checks the instances of the selected topics for image subject locators rather than the selected topics themselves. For example, you might have a topic called ''images'' which is the type of all your image topics. You'd then select just the type topic and all its instances would be exported.&lt;br /&gt;
&lt;br /&gt;
'''Full IIIF Builder''' uses the same topic maps schema as is produced by the [[IIIF RDF extractor]] tool. You need to select the manifest topic and then the tool will look for the associated sequences, canvases etc. This is the most full featured IIIF export tool. &lt;br /&gt;
&lt;br /&gt;
See also [[IIIF RDF extractor]].&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/IIIF_Export</id>
		<title>IIIF Export</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/IIIF_Export"/>
				<updated>2015-05-29T12:23:41Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;IIIF Export tool exports image data in the [http://iiif.io/ International Image Interoperability Framework] JSON-LD format. To use the IIIF Export, select the menu item '''File &amp;gt; Export &amp;gt; Export IIIF JSON-LD...'''.&lt;br /&gt;
&lt;br /&gt;
IIIF manifest files can be used with some 3rd party image viewers, such as the [https://github.com/IIIF/mirador Mirador Viewer]. However, at the moment Mirador does not support static image links in the manifest but instead requires an IIIF image server to host the images. As such, the simple IIIF manifest files exported from Wandora may not be usable in Mirador. The Full IIIF Builder (described below) will export the image server information, if it was specified in the topic map, and as long as the images are correctly hosted on the server, these files should then work in Mirador.&lt;br /&gt;
&lt;br /&gt;
There are several options in how the image data is gathered from the topic map. You can change this by launching the tool with holding down the control key and then changing the IIIF Builder option. The different builders are described below.&lt;br /&gt;
&lt;br /&gt;
'''Simple Selection Builder''' takes the selected topics and looks for images in their subject locator. An IIIF image manifest is then generated from these images. Topic display names are used as labels of the images but no other information is used from the topic map. As such, this is a very simple way to export the selected image topics as IIIF JSON-LD.&lt;br /&gt;
&lt;br /&gt;
'''Selection Instances Builder''' is similar to the simple selection builder, but instead it checks the instances of the selected topics for image subject locators rather than the selected topics themselves. For example, you might have a topic called ''images'' which is the type of all your image topics. You'd then select just the type topic and all its instances would be exported.&lt;br /&gt;
&lt;br /&gt;
'''Full IIIF Builder''' uses the same topic maps schema as is produced by the [[IIIF RDF extractor]] tool. You need to select the manifest topic and then the tool will look for the associated sequences, canvases etc. This is the most full featured IIIF export tool. &lt;br /&gt;
&lt;br /&gt;
See also [[IIIF RDF extractor]].&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/IIIF_Export</id>
		<title>IIIF Export</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/IIIF_Export"/>
				<updated>2015-05-29T12:18:36Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: Created page with &amp;quot;IIIF Export tool exports image data in the [http://iiif.io/ International Image Interoperability Framework] JSON-LD format. To use the IIIF Export, select the menu item '''Fil...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;IIIF Export tool exports image data in the [http://iiif.io/ International Image Interoperability Framework] JSON-LD format. To use the IIIF Export, select the menu item '''File &amp;gt; Export &amp;gt; Export IIIF JSON-LD...'''.&lt;br /&gt;
&lt;br /&gt;
There are several options in how the image data is gathered from the topic map. You can change this by launching the tool with holding down the control key and then changing the IIIF Builder option. The different builders are described below.&lt;br /&gt;
&lt;br /&gt;
'''Simple Selection Builder''' takes the selected topics and looks for images in their subject locator. An IIIF image manifest is then generated from these images. Topic display names are used as labels of the images but no other information is used from the topic map. As such, this is a very simple way to export the selected image topics as IIIF JSON-LD.&lt;br /&gt;
&lt;br /&gt;
'''Selection Instances Builder''' is similar to the simple selection builder, but instead it checks the instances of the selected topics for image subject locators rather than the selected topics themselves. For example, you might have a topic called ''images'' which is the type of all your image topics. You'd then select just the type topic and all its instances would be exported.&lt;br /&gt;
&lt;br /&gt;
'''Full IIIF Builder''' uses the same topic maps schema as is produced by the [[IIIF RDF extractor]] tool. You need to select the manifest topic and then the tool will look for the associated sequences, canvases etc. This is the most full featured IIIF export tool.&lt;br /&gt;
&lt;br /&gt;
See also [[IIIF RDF extractor]].&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/IIIF_RDF_extractor</id>
		<title>IIIF RDF extractor</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/IIIF_RDF_extractor"/>
				<updated>2015-05-29T12:10:53Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The IIIF RDF Extractor reads JSON-LD files conforming to the [http://iiif.io/ International Image Interoperability Framework]. To use the IIIF RDF Extractor, select the menu item '''File &amp;gt; Extract &amp;gt; Simple RDF formats &amp;gt; IIIF JSON-LD extractor...'''&lt;br /&gt;
&lt;br /&gt;
The JSON-LD format is in the end an RDF serialisation format and as such, the extractor is a slightly modified RDF importer. Most commonly used RDF predicates are cleanly converted to equivalent topic maps structures. However, the imported data may contain any RDF triplets whatsoever and some might be lacking special handling instructions. These will be imported as generic RDF triplets the same way [[Importing RDF | RDF import]] does.&lt;br /&gt;
&lt;br /&gt;
You can also import IIIF JSON-LD with the generic RDF import tool, you will then get all the triplets in the raw format without any processing.&lt;br /&gt;
&lt;br /&gt;
See also [[IIIF Export]].&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/IIIF_RDF_extractor</id>
		<title>IIIF RDF extractor</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/IIIF_RDF_extractor"/>
				<updated>2015-05-29T12:09:45Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The IIIF RDF Extractor reads JSON-LD files conforming to the [http://iiif.io/ International Image Interoperability Framework]. To use the IIIF RDF Extractor, select the menu item '''File &amp;gt; Extract &amp;gt; Simple RDF formats &amp;gt; IIIF JSON-LD extractor...'''&lt;br /&gt;
&lt;br /&gt;
The JSON-LD format is in the end an RDF serialisation format and as such, the extractor is a slightly modified RDF importer. Most commonly used RDF predicates are cleanly converted to equivalent topic maps structures. However, the imported data may contain any RDF triplets whatsoever and some might be lacking special handling instructions. These will be imported as generic RDF triplets the same way [[Importing RDF | RDF import]] does.&lt;br /&gt;
&lt;br /&gt;
You can also import IIIF JSON-LD with the generic RDF import tool, you will then get all the triplets in the raw format without any processing.&lt;br /&gt;
&lt;br /&gt;
See also [[IIIF RDF Export]].&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/IIIF_RDF_extractor</id>
		<title>IIIF RDF extractor</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/IIIF_RDF_extractor"/>
				<updated>2015-05-29T12:08:29Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The IIIF RDF Extractor reads JSON-LD files conforming to the [http://iiif.io/ International Image Interoperability Framework]. The JSON-LD format is in the end an RDF serialisation format and as such, the extractor is a slightly modified RDF importer. Most commonly used RDF predicates are cleanly converted to equivalent topic maps structures. However, the imported data may contain any RDF triplets whatsoever and some might be lacking special handling instructions. These will be imported as generic RDF triplets the same way [[Importing RDF | RDF import]] does.&lt;br /&gt;
&lt;br /&gt;
You can also import IIIF JSON-LD with the generic RDF import tool, you will then get all the triplets in the raw format without any processing.&lt;br /&gt;
&lt;br /&gt;
See also [[IIIF RDF Export]].&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/IIIF_RDF_extractor</id>
		<title>IIIF RDF extractor</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/IIIF_RDF_extractor"/>
				<updated>2015-05-29T12:07:18Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: Protected &amp;quot;IIIF RDF extractor&amp;quot; (‎[edit=sysop] (indefinite) ‎[move=sysop] (indefinite))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The IIIF RDF Extractor reads JSON-LD files conforming to the [http://iiif.io/ International Image Interoperability Framework]. The JSON-LD format is in the end an RDF serialisation format and as such, the extractor is a slightly modified RDF importer. Most commonly used RDF predicates are cleanly converted to equivalent topic maps structures. However, the imported data may contain any RDF triplets whatsoever and some might be lacking special handling instructions. These will be imported as generic RDF triplets the same way [[Importing RDF | RDF import]] does.&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/IIIF_RDF_extractor</id>
		<title>IIIF RDF extractor</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/IIIF_RDF_extractor"/>
				<updated>2015-05-29T12:07:08Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: Created page with &amp;quot;The IIIF RDF Extractor reads JSON-LD files conforming to the [http://iiif.io/ International Image Interoperability Framework]. The JSON-LD format is in the end an RDF serialis...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The IIIF RDF Extractor reads JSON-LD files conforming to the [http://iiif.io/ International Image Interoperability Framework]. The JSON-LD format is in the end an RDF serialisation format and as such, the extractor is a slightly modified RDF importer. Most commonly used RDF predicates are cleanly converted to equivalent topic maps structures. However, the imported data may contain any RDF triplets whatsoever and some might be lacking special handling instructions. These will be imported as generic RDF triplets the same way [[Importing RDF | RDF import]] does.&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/Importing_RDF</id>
		<title>Importing RDF</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/Importing_RDF"/>
				<updated>2015-05-29T12:02:01Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: /* See also */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wandora reads [http://www.w3.org/RDF/ RDF] XML, N3, Turtle and JSON-LD files. Import starts with '''File &amp;gt; Import &amp;gt; [[SimpleRDFImport|Simple RDF XML Import...]]''' or '''File &amp;gt; Import &amp;gt; [[SimpleN3Import|Simple RDF N3 Import...]]''' or '''File &amp;gt; Import &amp;gt; Simple RDF Turtle Import...''' or '''File &amp;gt; Import &amp;gt; Simple RDF JSON-LD Import...'''. Optionally you can drag and drop RDF files to layer stack. Layer stack automatically imports dropped RDF file and creates a new layer for the file. Wandora converts imported RDF triplets to topics, associations and occurrences. Convert schema is very simple and pays no attention to semantics of RDF file. Lets see the conversion process more detailed.&lt;br /&gt;
&lt;br /&gt;
* A topic is always created for RDF '''subject''' and '''predicate'''. Topics created for the '''subject''' and '''predicate''' are typed with Wandora's predefined type topics.&lt;br /&gt;
&lt;br /&gt;
* If '''object''' is RDF literal, an occurrence (text data) is created for the '''subject''' topic. Occurrence's type is the '''predicate''' topic and occurrence's value the RDF literal. Occurrence's scope is derived from ''lang'' attribute. If ''lang'' attribute is not found, scope is language independent.&lt;br /&gt;
&lt;br /&gt;
* If '''object''' is not RDF literal, a topic is created for the '''object''' and the topic is associated with the '''subject''' topic. Association's type is the '''predicate''' topic. Both roles are Wandora's predefined topics. '''Object''' topic is typed with Wandora's predefined type topic.&lt;br /&gt;
&lt;br /&gt;
Created topics doesn't contain base names or variant names. Created topics inherit one subject identifier from equivalent RDF resource. Subject identifier is the URI of equivalent RDF resource. Wandora employs [http://jena.apache.org/ Jena RDF framework] to read RDF files. Below is the Java code snippet used to handle RDF statements in Wandora. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    public void handleStatement(Statement stmt, TopicMap map,&lt;br /&gt;
                                Topic subjectType,&lt;br /&gt;
                                Topic predicateType,&lt;br /&gt;
                                Topic objectType) throws TopicMapException {&lt;br /&gt;
        &lt;br /&gt;
        Resource subject   = stmt.getSubject();     // get the subject&lt;br /&gt;
        Property predicate = stmt.getPredicate();   // get the predicate&lt;br /&gt;
        RDFNode object     = stmt.getObject();      // get the object&lt;br /&gt;
        String lan         = null;                  // language attribute&lt;br /&gt;
        &lt;br /&gt;
        Topic subjectTopic = getOrCreateTopic(map, subject.toString());&lt;br /&gt;
        Topic predicateTopic = getOrCreateTopic(map, predicate.toString());&lt;br /&gt;
        &lt;br /&gt;
        subjectTopic.addType(subjectType);&lt;br /&gt;
        predicateTopic.addType(predicateType);&lt;br /&gt;
       &lt;br /&gt;
        if(object.isLiteral()) {&lt;br /&gt;
            try { lan = stmt.getLanguage(); } catch(Exception e) { /* LANG ATTRIBUTE NOT FOUND! */ }&lt;br /&gt;
            if(lan==null || lan.length()==0) {&lt;br /&gt;
               subjectTopic.setData(predicateTopic,&lt;br /&gt;
                                 getOrCreateTopic(map, occurrenceScopeSI),&lt;br /&gt;
                                                  ((Literal) object).getString());&lt;br /&gt;
            }&lt;br /&gt;
            else {&lt;br /&gt;
               subjectTopic.setData(predicateTopic,&lt;br /&gt;
                                 getOrCreateTopic(map, XTMPSI.getLang(lan)),&lt;br /&gt;
                                                  ((Literal) object).getString());&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if(object.isResource()) {&lt;br /&gt;
            Topic objectTopic = getOrCreateTopic(map, object.toString());&lt;br /&gt;
            Association association = map.createAssociation(predicateTopic);&lt;br /&gt;
            association.addPlayer(subjectTopic, subjectType);&lt;br /&gt;
            association.addPlayer(objectTopic, objectType);&lt;br /&gt;
            objectTopic.addType(objectType);&lt;br /&gt;
        }&lt;br /&gt;
        else if(object.isURIResource()) {&lt;br /&gt;
            log(&amp;quot;URIResource found but not handled!&amp;quot;);&lt;br /&gt;
        }        &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Post-processing the imported RDF==&lt;br /&gt;
&lt;br /&gt;
To make the imported RDF more topic mappish you may want to modify it after import. This chapter discusses about the post-processing techniques to make the RDF-imported topic map more convenient.&lt;br /&gt;
&lt;br /&gt;
=== Constructing base names ===&lt;br /&gt;
&lt;br /&gt;
RDF(S) originated topics contain no base names. First step is to add base names to the imported topics. You can create a base name with topic's subject identifier using '''[[MakeBasenameWithSI|Make base name with SI]]''' tool found in topic table's context menu under '''Topics &amp;gt; Base names'''. Base name is automatically constructed using filename and anchor of the subject identifier URLs. If the created topic map contains subject identifiers with identical filenames, take extra care of these topics to prevent automatic merge of topics.&lt;br /&gt;
&lt;br /&gt;
Second step is to clean up base names. You can use '''Topics &amp;gt; Base names &amp;gt; [[BasenameRegexReplacer|Regex replace...]]''' to filter out undesired parts of the base names. If you start the tool in context of layer, tool processes all base names found in layer's topic map. For example, to filter out starting '''prefix''' string in base names you could use regular expression &lt;br /&gt;
&lt;br /&gt;
 prefix(.+)&lt;br /&gt;
&lt;br /&gt;
and replacement&lt;br /&gt;
&lt;br /&gt;
 $1&lt;br /&gt;
&lt;br /&gt;
=== Constructing variant names ===&lt;br /&gt;
&lt;br /&gt;
Third step is to generate variant names from RDF label occurrences. Generally RDF document carries labels attached to RDF concepts. Labels may be language dependent. If such labels exists, a label occurrence is associated to RDF topic. To generate variant names from RDF label occurrences, select all RDF topics and use tool '''Topics &amp;gt; Variant names &amp;gt; Make display variants with occurrences'''. Tool copies occurrence texts to variant names.&lt;br /&gt;
&lt;br /&gt;
If variant construction was successful, you may want to remove label occurrences. To remove occurrences of given type use tool '''Topics &amp;gt; Occurrences &amp;gt; Delete occurrences with type...'''. Tool seeks all possible occurrence types and asks which occurrences to remove. Once again, if you want to process every topic in topic map, start the tool in context of layer.&lt;br /&gt;
&lt;br /&gt;
=== Processing associations ===&lt;br /&gt;
&lt;br /&gt;
Final step is to change roles of RDF originated associations. By default these roles are &lt;br /&gt;
&lt;br /&gt;
* http://wandora.net/si/core/rdf-subject&lt;br /&gt;
* http://wandora.net/si/core/rdf-object&lt;br /&gt;
&lt;br /&gt;
You can not rename role topics as all players share same roles. Instead you need to modify associations with '''[[ChangeAssociationRole|Change association role...]]''' and '''[[ChangeAssociationType|Change association type...]]''' tools found in context menu of association table. In general this step includes subtasks:&lt;br /&gt;
&lt;br /&gt;
* Create all '''new''' role and association type topics&lt;br /&gt;
* For each association type&lt;br /&gt;
** Open association type topic&lt;br /&gt;
** Select all associations within the association table&lt;br /&gt;
** Use tool '''[[ChangeAssociationRole|Change association role...]]''' to change each role&lt;br /&gt;
** Use tool '''[[ChangeAssociationType|Change association type...]]''' if necessary&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
Wandora contains also several different RDF extractors that can automatically recognize RDF's name space and create valid base names and association roles for extracted topics and associations. By default these simple RDF extractors locate in '''File &amp;gt; Extract &amp;gt; Simple RDF extract''' menu. Current RDF extractors are&lt;br /&gt;
&lt;br /&gt;
* [[Twine RDF extractor]]&lt;br /&gt;
* [[SKOS RDF extractor]]&lt;br /&gt;
* [[Dublin Core RDF extractor]]&lt;br /&gt;
* [[FOAF RDF extractor]]&lt;br /&gt;
* [[IIIF RDF extractor]]&lt;br /&gt;
* OWL Extractor&lt;br /&gt;
* RDFS Extractor&lt;br /&gt;
* RSS 1.0 RDF Extractor&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/Importing_RDF</id>
		<title>Importing RDF</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/Importing_RDF"/>
				<updated>2015-05-29T12:01:41Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wandora reads [http://www.w3.org/RDF/ RDF] XML, N3, Turtle and JSON-LD files. Import starts with '''File &amp;gt; Import &amp;gt; [[SimpleRDFImport|Simple RDF XML Import...]]''' or '''File &amp;gt; Import &amp;gt; [[SimpleN3Import|Simple RDF N3 Import...]]''' or '''File &amp;gt; Import &amp;gt; Simple RDF Turtle Import...''' or '''File &amp;gt; Import &amp;gt; Simple RDF JSON-LD Import...'''. Optionally you can drag and drop RDF files to layer stack. Layer stack automatically imports dropped RDF file and creates a new layer for the file. Wandora converts imported RDF triplets to topics, associations and occurrences. Convert schema is very simple and pays no attention to semantics of RDF file. Lets see the conversion process more detailed.&lt;br /&gt;
&lt;br /&gt;
* A topic is always created for RDF '''subject''' and '''predicate'''. Topics created for the '''subject''' and '''predicate''' are typed with Wandora's predefined type topics.&lt;br /&gt;
&lt;br /&gt;
* If '''object''' is RDF literal, an occurrence (text data) is created for the '''subject''' topic. Occurrence's type is the '''predicate''' topic and occurrence's value the RDF literal. Occurrence's scope is derived from ''lang'' attribute. If ''lang'' attribute is not found, scope is language independent.&lt;br /&gt;
&lt;br /&gt;
* If '''object''' is not RDF literal, a topic is created for the '''object''' and the topic is associated with the '''subject''' topic. Association's type is the '''predicate''' topic. Both roles are Wandora's predefined topics. '''Object''' topic is typed with Wandora's predefined type topic.&lt;br /&gt;
&lt;br /&gt;
Created topics doesn't contain base names or variant names. Created topics inherit one subject identifier from equivalent RDF resource. Subject identifier is the URI of equivalent RDF resource. Wandora employs [http://jena.apache.org/ Jena RDF framework] to read RDF files. Below is the Java code snippet used to handle RDF statements in Wandora. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    public void handleStatement(Statement stmt, TopicMap map,&lt;br /&gt;
                                Topic subjectType,&lt;br /&gt;
                                Topic predicateType,&lt;br /&gt;
                                Topic objectType) throws TopicMapException {&lt;br /&gt;
        &lt;br /&gt;
        Resource subject   = stmt.getSubject();     // get the subject&lt;br /&gt;
        Property predicate = stmt.getPredicate();   // get the predicate&lt;br /&gt;
        RDFNode object     = stmt.getObject();      // get the object&lt;br /&gt;
        String lan         = null;                  // language attribute&lt;br /&gt;
        &lt;br /&gt;
        Topic subjectTopic = getOrCreateTopic(map, subject.toString());&lt;br /&gt;
        Topic predicateTopic = getOrCreateTopic(map, predicate.toString());&lt;br /&gt;
        &lt;br /&gt;
        subjectTopic.addType(subjectType);&lt;br /&gt;
        predicateTopic.addType(predicateType);&lt;br /&gt;
       &lt;br /&gt;
        if(object.isLiteral()) {&lt;br /&gt;
            try { lan = stmt.getLanguage(); } catch(Exception e) { /* LANG ATTRIBUTE NOT FOUND! */ }&lt;br /&gt;
            if(lan==null || lan.length()==0) {&lt;br /&gt;
               subjectTopic.setData(predicateTopic,&lt;br /&gt;
                                 getOrCreateTopic(map, occurrenceScopeSI),&lt;br /&gt;
                                                  ((Literal) object).getString());&lt;br /&gt;
            }&lt;br /&gt;
            else {&lt;br /&gt;
               subjectTopic.setData(predicateTopic,&lt;br /&gt;
                                 getOrCreateTopic(map, XTMPSI.getLang(lan)),&lt;br /&gt;
                                                  ((Literal) object).getString());&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if(object.isResource()) {&lt;br /&gt;
            Topic objectTopic = getOrCreateTopic(map, object.toString());&lt;br /&gt;
            Association association = map.createAssociation(predicateTopic);&lt;br /&gt;
            association.addPlayer(subjectTopic, subjectType);&lt;br /&gt;
            association.addPlayer(objectTopic, objectType);&lt;br /&gt;
            objectTopic.addType(objectType);&lt;br /&gt;
        }&lt;br /&gt;
        else if(object.isURIResource()) {&lt;br /&gt;
            log(&amp;quot;URIResource found but not handled!&amp;quot;);&lt;br /&gt;
        }        &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Post-processing the imported RDF==&lt;br /&gt;
&lt;br /&gt;
To make the imported RDF more topic mappish you may want to modify it after import. This chapter discusses about the post-processing techniques to make the RDF-imported topic map more convenient.&lt;br /&gt;
&lt;br /&gt;
=== Constructing base names ===&lt;br /&gt;
&lt;br /&gt;
RDF(S) originated topics contain no base names. First step is to add base names to the imported topics. You can create a base name with topic's subject identifier using '''[[MakeBasenameWithSI|Make base name with SI]]''' tool found in topic table's context menu under '''Topics &amp;gt; Base names'''. Base name is automatically constructed using filename and anchor of the subject identifier URLs. If the created topic map contains subject identifiers with identical filenames, take extra care of these topics to prevent automatic merge of topics.&lt;br /&gt;
&lt;br /&gt;
Second step is to clean up base names. You can use '''Topics &amp;gt; Base names &amp;gt; [[BasenameRegexReplacer|Regex replace...]]''' to filter out undesired parts of the base names. If you start the tool in context of layer, tool processes all base names found in layer's topic map. For example, to filter out starting '''prefix''' string in base names you could use regular expression &lt;br /&gt;
&lt;br /&gt;
 prefix(.+)&lt;br /&gt;
&lt;br /&gt;
and replacement&lt;br /&gt;
&lt;br /&gt;
 $1&lt;br /&gt;
&lt;br /&gt;
=== Constructing variant names ===&lt;br /&gt;
&lt;br /&gt;
Third step is to generate variant names from RDF label occurrences. Generally RDF document carries labels attached to RDF concepts. Labels may be language dependent. If such labels exists, a label occurrence is associated to RDF topic. To generate variant names from RDF label occurrences, select all RDF topics and use tool '''Topics &amp;gt; Variant names &amp;gt; Make display variants with occurrences'''. Tool copies occurrence texts to variant names.&lt;br /&gt;
&lt;br /&gt;
If variant construction was successful, you may want to remove label occurrences. To remove occurrences of given type use tool '''Topics &amp;gt; Occurrences &amp;gt; Delete occurrences with type...'''. Tool seeks all possible occurrence types and asks which occurrences to remove. Once again, if you want to process every topic in topic map, start the tool in context of layer.&lt;br /&gt;
&lt;br /&gt;
=== Processing associations ===&lt;br /&gt;
&lt;br /&gt;
Final step is to change roles of RDF originated associations. By default these roles are &lt;br /&gt;
&lt;br /&gt;
* http://wandora.net/si/core/rdf-subject&lt;br /&gt;
* http://wandora.net/si/core/rdf-object&lt;br /&gt;
&lt;br /&gt;
You can not rename role topics as all players share same roles. Instead you need to modify associations with '''[[ChangeAssociationRole|Change association role...]]''' and '''[[ChangeAssociationType|Change association type...]]''' tools found in context menu of association table. In general this step includes subtasks:&lt;br /&gt;
&lt;br /&gt;
* Create all '''new''' role and association type topics&lt;br /&gt;
* For each association type&lt;br /&gt;
** Open association type topic&lt;br /&gt;
** Select all associations within the association table&lt;br /&gt;
** Use tool '''[[ChangeAssociationRole|Change association role...]]''' to change each role&lt;br /&gt;
** Use tool '''[[ChangeAssociationType|Change association type...]]''' if necessary&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
Wandora contains also several different RDF extractors that can automatically recognize RDF's name space and create valid base names and association roles for extracted topics and associations. By default these simple RDF extractors locate in '''File &amp;gt; Extract &amp;gt; Simple RDF extract''' menu. Current RDF extractors are&lt;br /&gt;
&lt;br /&gt;
* [[Twine RDF extractor]]&lt;br /&gt;
* [[SKOS RDF extractor]]&lt;br /&gt;
* [[Dublin Core RDF extractor]]&lt;br /&gt;
* [[FOAF RDF extractor]]&lt;br /&gt;
* OWL Extractor&lt;br /&gt;
* RDFS Extractor&lt;br /&gt;
* RSS 1.0 RDF Extractor&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/Query_editor_topic_panel</id>
		<title>Query editor topic panel</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/Query_editor_topic_panel"/>
				<updated>2015-04-24T09:49:50Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: /* Executing queries */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''This is an upcoming feature and is not included yet in the public release.'''&lt;br /&gt;
&lt;br /&gt;
Query editor topic panel is one of several different [[topic panels]] in Wandora. Its main purpose is to provide a graphical editor for the Wandora [[query language]], and a way to execute the queries in a topic panel. If you have a query ready, you can just open it in the editor and then execute it by double clicking a topic elsewhere in Wandora. This will open the topic in the current topic panel, which in this case means executing the query using the selected topic as the context. This way you can have a topic panel which gathers information about a selected topic through a customisable query.&lt;br /&gt;
&lt;br /&gt;
[[File:Queryeditor.png|center]]&lt;br /&gt;
&lt;br /&gt;
== Opening the topic panel ==&lt;br /&gt;
&lt;br /&gt;
You can open the query editor topic panel by selecting '''New panel &amp;gt; Query editor''' from the '''View''' menu. This will open the panel and its subpanels that you use to open or build a query.&lt;br /&gt;
&lt;br /&gt;
== Building queries ==&lt;br /&gt;
&lt;br /&gt;
=== Basics ===&lt;br /&gt;
&lt;br /&gt;
Queries are built graphically in the ''Graph Editor'' subpanel, which usually occupies most of the space. Please see the separate page [[query language]] for details about the general principles behind queries. As explained there, queries consist of directives, each of which perform a specific task. In the graphical editor, directives are represented by grey boxes, with the directive name as the title of the box.&lt;br /&gt;
&lt;br /&gt;
Directives can be moved around the editor so that the structure of the query is easier to grasp. The position of directives in the graph does not affect the behaviour of the directive or the whole query at all, it is purely for the benefit of the human looking at the query in the editor.&lt;br /&gt;
&lt;br /&gt;
By clicking the title of a directive you can select it which opens it in the ''Inspector'' sub panel, usually at the lower right corner. The parameters and some other details of the directive can be modified here. Note that some of the parameters are reflected in a compact form in the directive box in the editor graph. This is for information only so that it's a bit easier to see what a specific directive does without opening it in the inspector. The parameters cannot be modified in the graph, only in the inspector.&lt;br /&gt;
&lt;br /&gt;
In addition to all the other directives comprising your query, a box titled ''Final result'' will be present in the graph editor. This isn't strictly speaking a directive but it looks and acts like one. It's a sink where the final result of the query will be taken from. Thus, you'll want to direct the results of your query in there.&lt;br /&gt;
&lt;br /&gt;
=== Adding directives from the directives list ===&lt;br /&gt;
&lt;br /&gt;
You can add directives into the graph editor by dragging them from the ''Directives list'' subpanel, usually located in the top right corner. The same corner contains the ''Query library'' subpanel in a separate tab, you may need to select the list tab to access it.&lt;br /&gt;
&lt;br /&gt;
All the directives are organised in the list by their category. You can add a directive onto the graph editor by dragging it from the list onto the graph. After this, you can move the directive around in the graph, modify it with the inspector and so on.&lt;br /&gt;
&lt;br /&gt;
=== Connecting directives ===&lt;br /&gt;
&lt;br /&gt;
In the query language model, directives take as an input a single result row, and usually only use the active value of the row. However the directives are usually organised by using the [[From (query directive) |From directive]] which essentially makes one directive take any number of rows as input.&lt;br /&gt;
&lt;br /&gt;
Just like the textual script form has a special syntax for using from directives due to their special nature, so does the graphical editor. In the graphical editor from directives are usually represented as arrows going from one directive to another. The directive boxes themselves have two arrows in the top right and left corners. The arrow in the top left corner represents the output of a directive while the arrow in the top right corner represents the input. To create a connection between directives, drag with your mouse from the output arrow to the input arrow of a different directive. Behind the scenes, a from directive is created to connect the two directives, but in the graph you will only see an arrow.&lt;br /&gt;
&lt;br /&gt;
It is possible to add from directives as actual directive boxes into the graph by dragging them from the directives list. This however is hardly ever needed and makes the directive graph cluttered.&lt;br /&gt;
&lt;br /&gt;
The from directive arrows always go from the left side of one directive box to the right side of another. In the graph you may also have arrows which connect to the bottom of a directive box. These do not represent from directives, they are directives used as parameters for other directives. These are explained in the next section.&lt;br /&gt;
&lt;br /&gt;
Only a single directive can go as input to any one directive. However, you can join directives together by using the [[Join (query directive) |Join directive]]. Just drag it from the directive list onto the graph like any other directive. Then the directives that are to be joined are added in as parameters for the join directive, this is covered in the next section.&lt;br /&gt;
&lt;br /&gt;
=== Editing directives with the inspector ===&lt;br /&gt;
&lt;br /&gt;
When you click the title of a directive box in the query editor, that directive is opened in the directive ''Inspector'' panel, usually located in the bottom right corner.&lt;br /&gt;
&lt;br /&gt;
The inspector works based on the underlying Java classes. Thus the documentation of all the directives in the [[query language]] page will be handy. In the inspector, you need to first select the constructor to use. Some directives only have a single choice but many have a few options. The different choices usually create slight variations of the directive.&lt;br /&gt;
&lt;br /&gt;
After selecting the constructor you will get fields for all the constructor parameters. Depending on the parameter type the fields may look slightly different. Textual values get simple text fields; directive values get a drop element where another directive can be dragged and dropped; operands can be specified in different forms, so you'll need to first select how you intend to specify the operand value; finally arrays and collections will have buttons to add and remove new elements and then fields to specify each element.&lt;br /&gt;
&lt;br /&gt;
As mentioned in the previous section, some directives are connected to other directives by being their parameters rather than through the from directive. The parameter directives connect to the bottom edge of another directive in the graph. To make the connection, first select the directive whose parameter you want to set. Then drag the outgoing arrow of another directive into the parameter drop target in the inspector.&lt;br /&gt;
&lt;br /&gt;
The bottom of the inspector panel also has an ''Addons'' section. Directives have additional methods in them which may further modify the directive behaviour. Some of these addon methods are common to all directives, being inherited from the base Directive class. Some are unique to certain directives. To use addons, select the addon you wish to use from the list and click ''Add addon''. After this, you get a section with the parameters for the addon. You can fill in the parameters as you do for the constructor, including possibly using other directives as parameter values.&lt;br /&gt;
&lt;br /&gt;
You can also remove a directive from the editor using the inspector. First select the directive in the graph and then click the ''Remove'' button at the top right corner of the inspector subpanel.&lt;br /&gt;
&lt;br /&gt;
=== Query flow ===&lt;br /&gt;
&lt;br /&gt;
When executing a query, some kind of an input row is used as the starting point. Ordinarily this will just contain the single selected topic. The execution of the query starts from the Final result box, which can be treated as directive even though it isn't really one. It gets the input row and then checks if another directive is connected to it using the from directive, in other words, if there is an incoming arrow. If there is one, then the input row and execution is passed onto the connected directive. That directive will then do its own thing and eventually return a set of result rows. The pseudo-directive Final result takes these result rows one at a time and then performs its own processing on each one separately. In this case, the processing can be said to be gathering the rows and then displaying them in a table.&lt;br /&gt;
&lt;br /&gt;
The execution works similarly for any other directive. For example, take the [[Instances (query directive) |Instances directive]]. It takes an input row, then checks if any other directive is connected to it and if so the input and execution is passed onto the connected directive. When the connected directive returns a set of result rows, the instances directive starts doing its job. It takes the result rows of the connected directive, one at a time, and then gets all the instances of the topic in the active column in the result row. The results of each individual input row are then combined and given as the final result of the instances directive and given to whichever directive preceded it.&lt;br /&gt;
&lt;br /&gt;
Thus the execution goes from the Final result pseudo directive at the top all the way down the graph to the directives at the end of the chain. The initial input row gets passed down untouched until it reaches the directives at the end of the chain. Those then do their job with the initial input and their output works as the actual input to the higher up directives as the execution returns up the chain. And the Final result then takes the final output at the top of the chain.&lt;br /&gt;
&lt;br /&gt;
If a directive contains other directives as parameters, they get processed when the execution returns to the directive after reaching the end of the chain first. The exact nature of how they are processed may depend on the directive taking them as parameters but the [[Count (query directive) |Count directive]], for example, gives a good idea of what generally happens. When execution returns to the count directive, after having gone through the whole chain, it starts doing its own processing. This processing is executing the parameter directive, using the input that Count got as the returning input from its connected directive. The results of the parameter directive are then counted and the count number is the output from the count directive. If there are multiple input rows, the parameter directive gets executed multiple times, once for each input. The parameter directive thus represents instructions on what exactly is to be counted, while the input to count acts as the context of where those instructions are applied. The instructions are the same for each input row, but the context is different so each input may get a different result.&lt;br /&gt;
&lt;br /&gt;
This also demonstrates the typical difference between a parameter directive and a from directive, or the two different types of arrows in the graph. A parameter directive defines the behaviour of its containing directive while the from directive just redirects input rows. As another example, the [[Join (query directive) |Join directive]] joins the results of two (or more) directives using a cartesian product. The directives that are to be joined are given as parameters to the join directive. A from directive can also be used to specify what acts as input to the join, and subsequently to all its parameter directives.&lt;br /&gt;
&lt;br /&gt;
Finally, some directives take as parameters something called operands. An operand can be just a static value or it can be another directive. For example, the association type that a [[Players (query directive) |Players directive]] would use is given as a parameter. It can be just a topic you pick from a topic selector, and often is, but you can also set it to be a directive which returns a topic using the input row. In this way, the parameters can also ultimately come from the directives connected using the from mechanism. However, even in this case the idea that a parameter directive defines the behaviour and from gives the context still applies. The defined behaviour just happens to tap into the context as well. Still, often it is possible to achieve the same end result by having certain directives connected using from directives or under the parameter directives. So there isn't always a strict line of where and how directives need to be connected.&lt;br /&gt;
&lt;br /&gt;
=== Saving and loading queries ===&lt;br /&gt;
&lt;br /&gt;
Queries can be saved and loaded using the ''Query library'' subpanel, usually located in the top right corner. It shares the corner with the ''Directive list'' subpanel so you may need to select it from the tab list first. To save a query, give it a name and then click the save button. To open one, select one from the list and then click the open button. You can also delete queries by selecting them and then clicking the delete button.&lt;br /&gt;
&lt;br /&gt;
== Executing queries ==&lt;br /&gt;
&lt;br /&gt;
After constructing a query with the editor or loading one from the library, you can execute it with different topics given as context. Double clicking a topic elsewhere in Wandora will usually open it in the active topic panel. In the case of the query editor topic panel this means executing the current query with the topic as the context. To see the results, you need to change to the ''Query results'' tab in the main subpanel, select the tab at the bottom of the window. In this tab, you may also select a context topic manually using the context button at the top and then run the query with the ''Run'' button.&lt;br /&gt;
&lt;br /&gt;
The results are displayed in a table in which you may perform other actions similarly to other topic tables in Wandora. For example, you can double click topics to open them in the same query editor topic panel and execute the query with them as the context.&lt;br /&gt;
&lt;br /&gt;
You can also build the script for the query. This can then be used in some of the other query tools in Wandora. To do this, click the ''Build script'' button in the toolbar at the top of the graph editor. Note that the button is present only in the editor tab, not the results tab.&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/Query_editor_topic_panel</id>
		<title>Query editor topic panel</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/Query_editor_topic_panel"/>
				<updated>2015-04-24T09:49:06Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: /* Executing queries */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''This is an upcoming feature and is not included yet in the public release.'''&lt;br /&gt;
&lt;br /&gt;
Query editor topic panel is one of several different [[topic panels]] in Wandora. Its main purpose is to provide a graphical editor for the Wandora [[query language]], and a way to execute the queries in a topic panel. If you have a query ready, you can just open it in the editor and then execute it by double clicking a topic elsewhere in Wandora. This will open the topic in the current topic panel, which in this case means executing the query using the selected topic as the context. This way you can have a topic panel which gathers information about a selected topic through a customisable query.&lt;br /&gt;
&lt;br /&gt;
[[File:Queryeditor.png|center]]&lt;br /&gt;
&lt;br /&gt;
== Opening the topic panel ==&lt;br /&gt;
&lt;br /&gt;
You can open the query editor topic panel by selecting '''New panel &amp;gt; Query editor''' from the '''View''' menu. This will open the panel and its subpanels that you use to open or build a query.&lt;br /&gt;
&lt;br /&gt;
== Building queries ==&lt;br /&gt;
&lt;br /&gt;
=== Basics ===&lt;br /&gt;
&lt;br /&gt;
Queries are built graphically in the ''Graph Editor'' subpanel, which usually occupies most of the space. Please see the separate page [[query language]] for details about the general principles behind queries. As explained there, queries consist of directives, each of which perform a specific task. In the graphical editor, directives are represented by grey boxes, with the directive name as the title of the box.&lt;br /&gt;
&lt;br /&gt;
Directives can be moved around the editor so that the structure of the query is easier to grasp. The position of directives in the graph does not affect the behaviour of the directive or the whole query at all, it is purely for the benefit of the human looking at the query in the editor.&lt;br /&gt;
&lt;br /&gt;
By clicking the title of a directive you can select it which opens it in the ''Inspector'' sub panel, usually at the lower right corner. The parameters and some other details of the directive can be modified here. Note that some of the parameters are reflected in a compact form in the directive box in the editor graph. This is for information only so that it's a bit easier to see what a specific directive does without opening it in the inspector. The parameters cannot be modified in the graph, only in the inspector.&lt;br /&gt;
&lt;br /&gt;
In addition to all the other directives comprising your query, a box titled ''Final result'' will be present in the graph editor. This isn't strictly speaking a directive but it looks and acts like one. It's a sink where the final result of the query will be taken from. Thus, you'll want to direct the results of your query in there.&lt;br /&gt;
&lt;br /&gt;
=== Adding directives from the directives list ===&lt;br /&gt;
&lt;br /&gt;
You can add directives into the graph editor by dragging them from the ''Directives list'' subpanel, usually located in the top right corner. The same corner contains the ''Query library'' subpanel in a separate tab, you may need to select the list tab to access it.&lt;br /&gt;
&lt;br /&gt;
All the directives are organised in the list by their category. You can add a directive onto the graph editor by dragging it from the list onto the graph. After this, you can move the directive around in the graph, modify it with the inspector and so on.&lt;br /&gt;
&lt;br /&gt;
=== Connecting directives ===&lt;br /&gt;
&lt;br /&gt;
In the query language model, directives take as an input a single result row, and usually only use the active value of the row. However the directives are usually organised by using the [[From (query directive) |From directive]] which essentially makes one directive take any number of rows as input.&lt;br /&gt;
&lt;br /&gt;
Just like the textual script form has a special syntax for using from directives due to their special nature, so does the graphical editor. In the graphical editor from directives are usually represented as arrows going from one directive to another. The directive boxes themselves have two arrows in the top right and left corners. The arrow in the top left corner represents the output of a directive while the arrow in the top right corner represents the input. To create a connection between directives, drag with your mouse from the output arrow to the input arrow of a different directive. Behind the scenes, a from directive is created to connect the two directives, but in the graph you will only see an arrow.&lt;br /&gt;
&lt;br /&gt;
It is possible to add from directives as actual directive boxes into the graph by dragging them from the directives list. This however is hardly ever needed and makes the directive graph cluttered.&lt;br /&gt;
&lt;br /&gt;
The from directive arrows always go from the left side of one directive box to the right side of another. In the graph you may also have arrows which connect to the bottom of a directive box. These do not represent from directives, they are directives used as parameters for other directives. These are explained in the next section.&lt;br /&gt;
&lt;br /&gt;
Only a single directive can go as input to any one directive. However, you can join directives together by using the [[Join (query directive) |Join directive]]. Just drag it from the directive list onto the graph like any other directive. Then the directives that are to be joined are added in as parameters for the join directive, this is covered in the next section.&lt;br /&gt;
&lt;br /&gt;
=== Editing directives with the inspector ===&lt;br /&gt;
&lt;br /&gt;
When you click the title of a directive box in the query editor, that directive is opened in the directive ''Inspector'' panel, usually located in the bottom right corner.&lt;br /&gt;
&lt;br /&gt;
The inspector works based on the underlying Java classes. Thus the documentation of all the directives in the [[query language]] page will be handy. In the inspector, you need to first select the constructor to use. Some directives only have a single choice but many have a few options. The different choices usually create slight variations of the directive.&lt;br /&gt;
&lt;br /&gt;
After selecting the constructor you will get fields for all the constructor parameters. Depending on the parameter type the fields may look slightly different. Textual values get simple text fields; directive values get a drop element where another directive can be dragged and dropped; operands can be specified in different forms, so you'll need to first select how you intend to specify the operand value; finally arrays and collections will have buttons to add and remove new elements and then fields to specify each element.&lt;br /&gt;
&lt;br /&gt;
As mentioned in the previous section, some directives are connected to other directives by being their parameters rather than through the from directive. The parameter directives connect to the bottom edge of another directive in the graph. To make the connection, first select the directive whose parameter you want to set. Then drag the outgoing arrow of another directive into the parameter drop target in the inspector.&lt;br /&gt;
&lt;br /&gt;
The bottom of the inspector panel also has an ''Addons'' section. Directives have additional methods in them which may further modify the directive behaviour. Some of these addon methods are common to all directives, being inherited from the base Directive class. Some are unique to certain directives. To use addons, select the addon you wish to use from the list and click ''Add addon''. After this, you get a section with the parameters for the addon. You can fill in the parameters as you do for the constructor, including possibly using other directives as parameter values.&lt;br /&gt;
&lt;br /&gt;
You can also remove a directive from the editor using the inspector. First select the directive in the graph and then click the ''Remove'' button at the top right corner of the inspector subpanel.&lt;br /&gt;
&lt;br /&gt;
=== Query flow ===&lt;br /&gt;
&lt;br /&gt;
When executing a query, some kind of an input row is used as the starting point. Ordinarily this will just contain the single selected topic. The execution of the query starts from the Final result box, which can be treated as directive even though it isn't really one. It gets the input row and then checks if another directive is connected to it using the from directive, in other words, if there is an incoming arrow. If there is one, then the input row and execution is passed onto the connected directive. That directive will then do its own thing and eventually return a set of result rows. The pseudo-directive Final result takes these result rows one at a time and then performs its own processing on each one separately. In this case, the processing can be said to be gathering the rows and then displaying them in a table.&lt;br /&gt;
&lt;br /&gt;
The execution works similarly for any other directive. For example, take the [[Instances (query directive) |Instances directive]]. It takes an input row, then checks if any other directive is connected to it and if so the input and execution is passed onto the connected directive. When the connected directive returns a set of result rows, the instances directive starts doing its job. It takes the result rows of the connected directive, one at a time, and then gets all the instances of the topic in the active column in the result row. The results of each individual input row are then combined and given as the final result of the instances directive and given to whichever directive preceded it.&lt;br /&gt;
&lt;br /&gt;
Thus the execution goes from the Final result pseudo directive at the top all the way down the graph to the directives at the end of the chain. The initial input row gets passed down untouched until it reaches the directives at the end of the chain. Those then do their job with the initial input and their output works as the actual input to the higher up directives as the execution returns up the chain. And the Final result then takes the final output at the top of the chain.&lt;br /&gt;
&lt;br /&gt;
If a directive contains other directives as parameters, they get processed when the execution returns to the directive after reaching the end of the chain first. The exact nature of how they are processed may depend on the directive taking them as parameters but the [[Count (query directive) |Count directive]], for example, gives a good idea of what generally happens. When execution returns to the count directive, after having gone through the whole chain, it starts doing its own processing. This processing is executing the parameter directive, using the input that Count got as the returning input from its connected directive. The results of the parameter directive are then counted and the count number is the output from the count directive. If there are multiple input rows, the parameter directive gets executed multiple times, once for each input. The parameter directive thus represents instructions on what exactly is to be counted, while the input to count acts as the context of where those instructions are applied. The instructions are the same for each input row, but the context is different so each input may get a different result.&lt;br /&gt;
&lt;br /&gt;
This also demonstrates the typical difference between a parameter directive and a from directive, or the two different types of arrows in the graph. A parameter directive defines the behaviour of its containing directive while the from directive just redirects input rows. As another example, the [[Join (query directive) |Join directive]] joins the results of two (or more) directives using a cartesian product. The directives that are to be joined are given as parameters to the join directive. A from directive can also be used to specify what acts as input to the join, and subsequently to all its parameter directives.&lt;br /&gt;
&lt;br /&gt;
Finally, some directives take as parameters something called operands. An operand can be just a static value or it can be another directive. For example, the association type that a [[Players (query directive) |Players directive]] would use is given as a parameter. It can be just a topic you pick from a topic selector, and often is, but you can also set it to be a directive which returns a topic using the input row. In this way, the parameters can also ultimately come from the directives connected using the from mechanism. However, even in this case the idea that a parameter directive defines the behaviour and from gives the context still applies. The defined behaviour just happens to tap into the context as well. Still, often it is possible to achieve the same end result by having certain directives connected using from directives or under the parameter directives. So there isn't always a strict line of where and how directives need to be connected.&lt;br /&gt;
&lt;br /&gt;
=== Saving and loading queries ===&lt;br /&gt;
&lt;br /&gt;
Queries can be saved and loaded using the ''Query library'' subpanel, usually located in the top right corner. It shares the corner with the ''Directive list'' subpanel so you may need to select it from the tab list first. To save a query, give it a name and then click the save button. To open one, select one from the list and then click the open button. You can also delete queries by selecting them and then clicking the delete button.&lt;br /&gt;
&lt;br /&gt;
== Executing queries ==&lt;br /&gt;
&lt;br /&gt;
After constructing a query with the editor or loading one from the library, you can execute it with different topics given as context. Double clicking a topic elsewhere in Wandora will usually open it in the active topic panel. In the case of the query editor topic panel this means executing the current query with the topic as the context. To see the results, you need to change to the ''Query results'' tab in the main subpanel, select the tab at the bottom of the window. In this tab, you may also select a context topic manually using the context button at the top.&lt;br /&gt;
&lt;br /&gt;
The results are displayed in a table in which you may perform other actions similarly to other topic tables in Wandora. For example, you can double click topics to open them in the same query editor topic panel and execute the query with them as the context.&lt;br /&gt;
&lt;br /&gt;
You can also build the script for the query. This can then be used in some of the other query tools in Wandora. To do this, click the ''Build script'' button in the toolbar at the top of the graph editor. Note that the button is present only in the editor tab, not the results tab.&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/Wandora</id>
		<title>Wandora</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/Wandora"/>
				<updated>2015-04-23T13:50:28Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: /* Topic panels */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page collects Wandora's documentation. The documentation is a work in progress and incomplete. Also note some documentation may be out of date as the application is developed actively. If you need any specific help, write your question to the [http://wandora.org/forum/ discussion forum]. [https://www.youtube.com/channel/UClJoFDmiThA02RmAUT5YEcw Wandora's YouTube channel] has several tutorial videos reviewing some application features. Would you like to edit this wiki, send an email to {{wandora email address}} with your name and information about how you'd like to contribute. Please, remember to add keyword WANDORA to the title of your email. If you just popped in this wiki and don't know Wandora, please see also our landing page at http://wandora.org/ for a general information.&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Wandora is a general purpose information management application. The application is written in [http://www.oracle.com/technetwork/java/index.html Java programming language] and it's internal data model is based on [[Topic Maps]]. Also, Wandora is a desktop application with a graphical user interface, layered data storage, huge collection of data extraction, import and export options and embedded HTTP server. Wandora's license is [http://www.gnu.org/licenses/gpl-3.0.txt GNU GPL version 3].&lt;br /&gt;
&lt;br /&gt;
* [[General FAQ]]&lt;br /&gt;
* Wandora poster in [http://wandora.org/download/other/poster09.pdf PDF] or [http://wandora.org/download/other/poster09.gif GIF] formats.&lt;br /&gt;
* [[Features]]&lt;br /&gt;
* [[Screenshots]]&lt;br /&gt;
* [http://wandora.org/www/news Wandora news]&lt;br /&gt;
* [[License of Wandora|License]]&lt;br /&gt;
&lt;br /&gt;
== Starting with Wandora ==&lt;br /&gt;
&lt;br /&gt;
Wandora is a desktop application written in Java version 7. You need a Java Runtime Environment (JRE) to execute the application. Wandora has two distribution packages. A binary distribution package contains a runnable version of the application. Wandora's source code is available as a source code distribution package. Both packages are zip compressed file repositories. Use one of the startup scripts in '''bin''' folder to start the Wandora application.&lt;br /&gt;
&lt;br /&gt;
* [[System requirements]]&lt;br /&gt;
* [[Change log]]&lt;br /&gt;
* [[Download|Download Wandora]] (build date {{build date}})&lt;br /&gt;
* [[How to install Wandora|Installing Wandora]]&lt;br /&gt;
* [[Running Wandora]]&lt;br /&gt;
* [[Tuning Wandora for Mac OS]]&lt;br /&gt;
* [[Quickstart]]&lt;br /&gt;
&lt;br /&gt;
== Topic Maps ==&lt;br /&gt;
&lt;br /&gt;
Wandora's internal datamodel is based on Topic Maps. [http://en.wikipedia.org/wiki/Topic_Maps Wikipedia defines Topic Maps] as a standard for the representation and interchange of knowledge, with an emphasis on the findability of information. A topic map represents information using ''topics'', ''associations'' and ''occurrences''. Topic represents any concept, from people, countries, and organizations to software modules, individual files, and events. Associations are hypergraph relationships between topics. Occurrence is an information resource relevant to a particular topic. If you are not familiar with Topic Maps, you can think it as a special kind of graph with nodes and edges. Wandora's topic map model is limited. These model limitations are explained in [[Reduced Topic Maps|Topic maps in Wandora]] page.&lt;br /&gt;
&lt;br /&gt;
* [[Topic Maps|About topic maps]]&lt;br /&gt;
* [[Reduced Topic Maps|Topic maps in Wandora]]&lt;br /&gt;
&lt;br /&gt;
See also '''Topic map layers''' section below. Wandora Team has converted several well known ontologies to Topic Maps format. These ontologies: WordNet, OpenCyc, Gene Ontology, Gellish, and Finnish General Upper Ontology (YSO) are available at [[Topic map gallery]].&lt;br /&gt;
&lt;br /&gt;
== Using Wandora ==&lt;br /&gt;
&lt;br /&gt;
This section contains basic tutorials for Wandora. If you are a novice Wandora user, please start here. See also tutorial videos on [http://wandora.org/wandora/tv/ wandoratv].&lt;br /&gt;
&lt;br /&gt;
* [[Quickstart]]&lt;br /&gt;
* [[Opening a topic]]&lt;br /&gt;
&lt;br /&gt;
Wandora has a rich set of topic, association and occurrence editing features. Usually a topic is edited in a topic panel one by one. Editing an association takes place in a separate association editor. Similarly, editing an occurrence takes place in an occurrence editor. Next pages discuss about creating and editing topics and associations.&lt;br /&gt;
&lt;br /&gt;
* [[Create new topic]]&lt;br /&gt;
* [[Delete topic]]&lt;br /&gt;
* [[Create new association]]&lt;br /&gt;
* [[Delete association]]&lt;br /&gt;
* [[Editing topics and associations]]&lt;br /&gt;
&lt;br /&gt;
Wandora saves all topic maps in a Wandora project file. Addition to project files, Wandora can read and write topic map serializations. See also chapter Import and Export below.&lt;br /&gt;
&lt;br /&gt;
* [[How to save and load project]]&lt;br /&gt;
* [[How to import existing topic map to Wandora]]&lt;br /&gt;
* [[How to export topic map in Wandora]]&lt;br /&gt;
&lt;br /&gt;
Next pages discuss some other features of the Wandora application.&lt;br /&gt;
&lt;br /&gt;
* [[Finding a topic]]&lt;br /&gt;
* [[Topic shortcuts]]&lt;br /&gt;
* [[Working with topic tables]]&lt;br /&gt;
* [[Working with topic trees]]&lt;br /&gt;
* [[Drag and drop topics]]&lt;br /&gt;
* [[Creating custom topic trees]]&lt;br /&gt;
* [[View all variant names of a topic]]&lt;br /&gt;
* [[Transform variant names to topics and associations]]&lt;br /&gt;
* [[Undo and redo]]&lt;br /&gt;
&lt;br /&gt;
== Topic panels ==&lt;br /&gt;
&lt;br /&gt;
Topic panel is Wandora's user interface element to view and edit topics. Wandora supports several different topic panel types. Topic panels are managed with menu options under '''View'''. Wandora can view several topic panels simultaneously. Traditional topic panel views all topic elements in a table while tabbed panel views topic details in separate tabs. Graph topic panel is used for graph visualizations. Custom topic panel is based on user specific queries related to the current topic.&lt;br /&gt;
&lt;br /&gt;
* [[Working with topic panels]]&lt;br /&gt;
&lt;br /&gt;
Different topic panels are&lt;br /&gt;
&lt;br /&gt;
* [[Traditional topic panel]]&lt;br /&gt;
* [[Tabbed topic panel]]&lt;br /&gt;
* [[Graph topic panel]]&lt;br /&gt;
* [[Custom topic panel]]&lt;br /&gt;
* [[Treemap topic panel]]&lt;br /&gt;
* [[R topic panel]]&lt;br /&gt;
* [[Processing topic panel]]&lt;br /&gt;
* [[Sketch grid]]&lt;br /&gt;
* [[Webview]]&lt;br /&gt;
* [[Tree panel]]&lt;br /&gt;
* [[Search panel]]&lt;br /&gt;
* [[Layer info panel]]&lt;br /&gt;
* [[Query editor topic panel]]&lt;br /&gt;
&lt;br /&gt;
== Topic map layers ==&lt;br /&gt;
&lt;br /&gt;
Wandora supports layered topic maps. Layered topic map contains one or more topic maps stacked into an ordered array. Any topic in the layered topic map is a superposition of all merging topics in different layers. Wandora views all layered topic maps as a single topic map but allows layer specific operations too. It really matters what layer is active. As user can focus on one layer at a time or replace any layer at any time, the composition of information is flexible. User can easily try different scenarios. Layer specific application options and tools locate in '''Layers''' menu. &lt;br /&gt;
&lt;br /&gt;
* [[Introduction to Layered Topic Maps]]&lt;br /&gt;
* [[Creating new layers]]&lt;br /&gt;
* [[Deleting layer]]&lt;br /&gt;
* [[Layer order and arranging layers]]&lt;br /&gt;
* [[Merging layers]]&lt;br /&gt;
* [[Topic's layer distribution]]&lt;br /&gt;
&lt;br /&gt;
'''Different layer types'''&lt;br /&gt;
* [[Layered topic map]]&lt;br /&gt;
* [[Memory topic map]]&lt;br /&gt;
* [[Database topic map]]&lt;br /&gt;
* [[Linked topic map]]&lt;br /&gt;
* [[Query topic map]]&lt;br /&gt;
&amp;lt;!-- * [[Remote topic map]] --&amp;gt;&lt;br /&gt;
* [[Web service topic map]]&lt;br /&gt;
&lt;br /&gt;
'''Other'''&lt;br /&gt;
* [[Compare topic maps]]&lt;br /&gt;
* [[Topic map patcher]]&lt;br /&gt;
&lt;br /&gt;
== Import and Export ==&lt;br /&gt;
&lt;br /&gt;
Wandora has been designed for easy aggregation of information and features a wide range of import and export tools. Wandora imports not just different Topic Maps formats such as XTM1, XTM2, and LTM but also RDF as XML, N3, and Turtle. Also, Wandora imports bio-ontologies in OBO flat file format. To get an up-to-date overview of Wandora's import options see menu '''File &amp;gt; Import'''. Addition to import options, Wandora features a wide range of export options from different Topic Maps formats to different graph formats. See menu options in '''File &amp;gt; Export'''. Wandora's native file format is Wandora project, with a file suffix WPR, which is a collection of XTM2 topic maps and a configuration file within a zip package.&lt;br /&gt;
&lt;br /&gt;
* [[How to save and load project]]&lt;br /&gt;
* [[How to import existing topic map to Wandora]]&lt;br /&gt;
* [[How to export topic map in Wandora]]&lt;br /&gt;
* [[Waiana import and export]]&lt;br /&gt;
** [[Maiana import and export]]&lt;br /&gt;
* [[Transferring data with clipboard]]&lt;br /&gt;
* [[Importing RDF]] (see also extractors below)&lt;br /&gt;
* [[OBO flat file import|Importing OBO flat file ontologies]]&lt;br /&gt;
* [[Gene Ontology Annotation file import]]&lt;br /&gt;
* [[Importing XML with XSL]]&lt;br /&gt;
* [[Generic SQL database import]]&lt;br /&gt;
* [[Exporting WWW site]]&lt;br /&gt;
* [[Lucene search index export]]&lt;br /&gt;
* [[SQL Dump Export]]&lt;br /&gt;
&lt;br /&gt;
'''Graph and matrix imports'''&lt;br /&gt;
* [[Adjacency list import]]&lt;br /&gt;
* [[Adjacency matrix import]]&lt;br /&gt;
* [[Incidence matrix import]]&lt;br /&gt;
&lt;br /&gt;
'''Graph and matrix exports'''&lt;br /&gt;
* [[Graph Modeling Language export]]&lt;br /&gt;
* [[GraphML export]]&lt;br /&gt;
* [[GraphXML export]]&lt;br /&gt;
* [[GXL graph export]]&lt;br /&gt;
* [[Export adjacency matrix]]&lt;br /&gt;
* [[Export incidence matrix]]&lt;br /&gt;
* See also page [[Graph topic panel]] and it's chapter Export options.&lt;br /&gt;
&lt;br /&gt;
For additional information about Wandora's export capabilities see also '''Wandora as a server''' section below. For additional information about Wandora's import capabilities see also '''Extractors''' section below. &amp;lt;!-- [[Image:import_export_diagram.gif|center]] --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Extractors ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Wandoras_extractors.gif|center]]&lt;br /&gt;
&lt;br /&gt;
Wandora is great for information mashups. With Wandora you can easily mashup information from various sources. Extractors are specific Wandora tools used to extract topics and associations out of different file formats and sources. For example, Wandora can extract data from MP3 and JPG files. To see what extractors your Wandora has installed see menu options in '''File &amp;gt; Extract'''. To start an extractor select the extractor in the menu or use drag and drop extractor. Wandora also features an add-on for Mozilla Firefox WWW browser. With this add-on you can perform extractions directly in Firefox www browser or in Thunderbird email client.&lt;br /&gt;
&lt;br /&gt;
* [[Drag and drop extractor]]&lt;br /&gt;
* [[Wandora Firefox plugin|Firefox plugin]] to extract directly from Firefox WWW browser and Thunderbird email client.&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot; background-color=&amp;quot;transparent&amp;quot; &lt;br /&gt;
| style=&amp;quot;border:none; margin:none; padding:0px;&amp;quot; valign=&amp;quot;top&amp;quot; | &amp;lt;!-- LEFT COLUMN --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Search engine extractors'''&lt;br /&gt;
* [[Bing extractor]]&lt;br /&gt;
* [[Yahoo! BOSS extractor]]&lt;br /&gt;
* [[DuckDuckGo extractor]]&lt;br /&gt;
'''Simple files extractors'''&lt;br /&gt;
* [[JPG binary metadata extractor]]&lt;br /&gt;
* [[PDF extractor]]&lt;br /&gt;
* [[File system extractor]]&lt;br /&gt;
* [[Simple Text Document Extractor|Convert simple text documents to topic map occurrences]]&lt;br /&gt;
* [[Simple CSV association extractor]]&lt;br /&gt;
* [[OCR Extractor]]&lt;br /&gt;
'''Media extractors'''&lt;br /&gt;
* [[Europeana extractor]]&lt;br /&gt;
* [[MP3 ID3v1 and ID3v2 extractor]]&lt;br /&gt;
* [[IMDB extractor]]&lt;br /&gt;
* [[FreeDB extractor]]&lt;br /&gt;
* [[Last.fm extractors|Convert Last.fm XML feeds to a topic map]]&lt;br /&gt;
* [[Flickr extractors]]&lt;br /&gt;
* &amp;lt;strike&amp;gt;[[Ovi shared media extractors]]&amp;lt;/strike&amp;gt;&lt;br /&gt;
* [[YouTube extractor]]s&lt;br /&gt;
* [[Rekognition extractor]]&lt;br /&gt;
'''Social and Bookmark extractors'''&lt;br /&gt;
* [[Facebook Graph extractor]]&lt;br /&gt;
* [[Twitter extractor]]&lt;br /&gt;
* [[Reddit extractor]]&lt;br /&gt;
* [[Digg extractors]]&lt;br /&gt;
* &amp;lt;strike&amp;gt;[[Delicious extractors]]&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;[[Diigo bookmark extractor]]&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;[[Twine RDF extractor]]&amp;lt;/strike&amp;gt;&lt;br /&gt;
'''Bibliographical extractors'''&lt;br /&gt;
* [[MARCXML extractor]]&lt;br /&gt;
* [[Dublin Core XML extractor]]&lt;br /&gt;
* [[Bibtex extractor|Convert BibTeX files to a topic map]]&lt;br /&gt;
* [[RIS extractor]]&lt;br /&gt;
* [[HelMet library data extractor]]&lt;br /&gt;
'''Classifications'''&lt;br /&gt;
* [[GATE/ANNIE integration|GATE/ANNIE]]&lt;br /&gt;
* [[Stanford Named Entity Recognizer integration|Stanford Named Entity Recognizer (NER)]]&lt;br /&gt;
* [[OpenCalais classifier]]&lt;br /&gt;
* [[AlchemyAPI extractors]]&lt;br /&gt;
* [[Yahoo! YQL term extractor]]&lt;br /&gt;
* &amp;lt;strike&amp;gt;[[Tagthe extractor]]&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;[[SemanticHacker classifier]]&amp;lt;/strike&amp;gt;&lt;br /&gt;
* [[Zemanta extractor]]&lt;br /&gt;
* [[UClassify integration]]&lt;br /&gt;
'''Knowledge extractors'''&lt;br /&gt;
* [[OpenCyc extractor]]&lt;br /&gt;
* &amp;lt;strike&amp;gt;[[Subj3ct record extractor]]&amp;lt;/strike&amp;gt;&lt;br /&gt;
* [[DBpedia extractor]]&lt;br /&gt;
* [[Freebase extractor]]&lt;br /&gt;
* [[Umbel extractors]]&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;border: 1; margin:5; padding-left: 20px;&amp;quot; valign=&amp;quot;top&amp;quot;| &amp;lt;!-- RIGHT COLUMN --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''HTML structures extractors'''&lt;br /&gt;
* [[HTML superclass-subclass list extractor]]&lt;br /&gt;
* [[HTML instance list extractor]]&lt;br /&gt;
* [[HTML property table extractor]]&lt;br /&gt;
* [[HTML association table extractor]]&lt;br /&gt;
* [[HTML link extractor]]&lt;br /&gt;
'''News and syndication extractors'''&lt;br /&gt;
* [[RSS 2.0 Extractor]] and [[RSS 1.0 RDF Extractor]]&lt;br /&gt;
* [[Atom extractor]]&lt;br /&gt;
* [[New York Times Article Search API extractor]]&lt;br /&gt;
* [[New York Times Event API extractor]]&lt;br /&gt;
* [[Guardian open platform extractor]]&lt;br /&gt;
'''Microformat extractors'''&lt;br /&gt;
* [[Any23 extractor]]&lt;br /&gt;
* [[Geo microformat extractor|Convert geo microformat snippets to topic maps]]&lt;br /&gt;
* [[Adr microformat extractor|Convert adr microformat snippets to topic maps]]&lt;br /&gt;
* [[HCalendar microformat extractor|Convert hcalendar microformat snippets to topic maps]]&lt;br /&gt;
* [[HCard microformat extractor|Convert hcard microformat snippets to topic maps]]&lt;br /&gt;
'''Wiki extractors'''&lt;br /&gt;
* [[Wikipedia extractor]]&lt;br /&gt;
* [[MediaWiki Content Extractor]]&lt;br /&gt;
* More general [[MediaWiki extractor]]&lt;br /&gt;
'''Simple RDF extractors'''&lt;br /&gt;
* [[SKOS RDF extractor]]&lt;br /&gt;
* [[Dublin Core RDF extractor]]&lt;br /&gt;
* [[FOAF RDF extractor]]&lt;br /&gt;
'''Language'''&lt;br /&gt;
* [[Big Huge Thesaurus API extractor]]&lt;br /&gt;
* [[VerbOcean extractor]]&lt;br /&gt;
* [[Moby thesaurus extractor]]&lt;br /&gt;
* [[Stands4 word describer]]&lt;br /&gt;
'''Databases'''&lt;br /&gt;
* [[Generic SQL database import | Importing SQL database]]&lt;br /&gt;
* [[SQL query result set extractor]]&lt;br /&gt;
* [[Excel extractors]]&lt;br /&gt;
'''Other'''&lt;br /&gt;
* [[Email extractor]]&lt;br /&gt;
* [[Geonames extractors]]&lt;br /&gt;
* [[Gellish ontology extractor]]&lt;br /&gt;
* [[GEDCOM extractor]]&lt;br /&gt;
* [[SPARQL extractor]]&lt;br /&gt;
* [[Oma kaupunki extractor]]&lt;br /&gt;
* [[iCal calendar format extractor]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
See [[Refining occurrences]] for some practical examples of how to extract associations and topics out of occurrences.&lt;br /&gt;
&lt;br /&gt;
== Generators ==&lt;br /&gt;
&lt;br /&gt;
Generators are special tools that generate topics and associations algorithmically. Generators help you construct basic building blocks for your topic maps. Generators are also a nice test suite for Wandora and topic maps in general. Generators locate in Wandora's '''File &amp;gt; Generate''' menu. Available generators are&lt;br /&gt;
&lt;br /&gt;
* [[Random graph generator]]&lt;br /&gt;
* [[Fully connected graph generator]]&lt;br /&gt;
* [[Tree graph generator]]&lt;br /&gt;
* [[Linear list graph generator]]&lt;br /&gt;
* [[Finite group graph generator]]&lt;br /&gt;
* [[Platonic solid graph generator]]&lt;br /&gt;
* [[Hypercube graph generator]]&lt;br /&gt;
* [[Tiling graph generator]] (square, triangular, and hexagonal tilings)&lt;br /&gt;
* [[Edge generator]]&lt;br /&gt;
* [[L-system generator]]&lt;br /&gt;
* [[Cylinder graph generator]]&lt;br /&gt;
* [[Lattice graph generator]]&lt;br /&gt;
&lt;br /&gt;
== Schema ==&lt;br /&gt;
&lt;br /&gt;
Schema is a collection of specific topics and associations that Wandora uses to construct the user interface of association editor, occurrence editor and topic name panel. Schema eases many topic map operations such as association and occurrence construction. Schema also defines the language support of Wandora application.&lt;br /&gt;
&lt;br /&gt;
* [[Schema]] to ease association and occurrence creation and modification&lt;br /&gt;
&lt;br /&gt;
== Language support ==&lt;br /&gt;
&lt;br /&gt;
Wandora supports only one base name per topic. However, a topic may contain several different variant names. Each variant name has a type and a language. Similarly, a topic may contain several different occurrences, text fragments. Each occurrence has a type and a language also. Wandora supports both Microsoft Translator and Google translate API and can convert both variant names and occurrences to other languages.&lt;br /&gt;
&lt;br /&gt;
* [[How to add a language to Wandora]]&lt;br /&gt;
* [[How to add a name type to Wandora]]&lt;br /&gt;
* [[Translating variant names with Google]]&lt;br /&gt;
* [[Translating occurrences with Google]]&lt;br /&gt;
* [[Translating variant names with Microsoft Translator]]&lt;br /&gt;
* [[Translating occurrences with Microsoft Translator]]&lt;br /&gt;
* [[View all variant names of a topic]]&lt;br /&gt;
&lt;br /&gt;
== Analyzing and querying topic maps ==&lt;br /&gt;
&lt;br /&gt;
Generally these tools locate in '''Layers &amp;gt; Statistics''' menu. As an exception SOM classifier is found in association table menu and topic map comparison in '''File''' menu. Wandora provides also a bridge to R language. R language is a comprehensive statistical and graphing environment. With Wandora's R integration, the user can access Wandora's information structures in R environment. This opens up interesting possibilities if used together with information extractors.&lt;br /&gt;
&lt;br /&gt;
* [[Topic map info]]&lt;br /&gt;
* [[Topic map connection statistics]]&lt;br /&gt;
* [[Topic map diameter]]&lt;br /&gt;
* [[Merge ratio matrix]]&lt;br /&gt;
* [[Export similarity matrix|Topic similarity matrix]]&lt;br /&gt;
* [[Clustering coefficient]] of topic map&lt;br /&gt;
* [[SOM classifier]] (Self Organizing Maps classifier)&lt;br /&gt;
* [[Asset weight of a topic]]&lt;br /&gt;
* [[Compare topic maps]]&lt;br /&gt;
* [[R in Wandora]]&lt;br /&gt;
** [[Statistical analysis of Topic Maps in R]]&lt;br /&gt;
* [[Query language]]&lt;br /&gt;
* [[TMQL]]&lt;br /&gt;
&lt;br /&gt;
See the '''Extract''' section and especially the subsection '''Classifications''' above also.&lt;br /&gt;
&lt;br /&gt;
== Tools and tool manager ==&lt;br /&gt;
&lt;br /&gt;
A tool packs certain Wandora functionality into a single software component, specifically a Java class. When ever the user performs an action in Wandora, Wandora runs the tool that is responsible for the action. The Tool manager is a specific tool used to manage tools and tool sources. The user can  install new tools to the Wandora. To develop a tool for the Wandora, the user writes a Java class source using a Java IDE, preferably Netbeans, and compiles the source using Java JDK.&lt;br /&gt;
&lt;br /&gt;
* [[Tool manager]]&lt;br /&gt;
* [[:Category:Tools|Available tools]]&lt;br /&gt;
* [[Writing your own tool]]&lt;br /&gt;
* [[Installing your own tool]]&lt;br /&gt;
* [[Tool locks]]&lt;br /&gt;
* [[Configuring tools]]&lt;br /&gt;
* [[Additional tool help]]&lt;br /&gt;
* [[Developing Wandora]]&lt;br /&gt;
&lt;br /&gt;
== Wandora as a server ==&lt;br /&gt;
&lt;br /&gt;
The Wandora application contains an HTTP server. The embedded HTTP server generates various output formats and interactive visualizations out of the information stored in the Wandora. The embedded server hosts service modules. A service module is a software component that serves some information out of the Wandora. For example, '''HTML service module''' generates a navigable HTML site out of the topics in the Wandora. '''D3 graph service module''' generates an interactive graph out of all topics in the Wandora. More over, '''XTM topic map service module''' outputs current topic in the Wandora in an XTM format. It provides a data access point for external applications, or for other instances of the Wandora application. Some service modules rely on extracted information. Such service modules are '''Timeline service module''' and '''Google Maps service module'''.&lt;br /&gt;
&lt;br /&gt;
* [[Embedded HTTP server]]&lt;br /&gt;
** [[HTML service module]] &lt;br /&gt;
** [[Mobile HTML service module]]&lt;br /&gt;
** [[RSS feed service module]]&lt;br /&gt;
** [[SOAP web service module]] &lt;br /&gt;
** [[Drupal service module]]&lt;br /&gt;
** [[Firefox and Thunderbird plugin service module]]&lt;br /&gt;
** [[XTM topic map service module]] &lt;br /&gt;
** [[JTM topic map service module]]&lt;br /&gt;
** [[RDF service module]]&lt;br /&gt;
** [[GRAPHML service module]]&lt;br /&gt;
** [[Screencast service module]]&lt;br /&gt;
** [[Flash graph service module]]&lt;br /&gt;
** [[Timeline service module]]&lt;br /&gt;
** [[Google Maps service module]]&lt;br /&gt;
** [[D3 graph service module]]&lt;br /&gt;
** [[D3 word cloud service module]]&lt;br /&gt;
** [[D3 partition service module]]&lt;br /&gt;
** [[D3 tree service module]]&lt;br /&gt;
** [[D3 matrix service module]]&lt;br /&gt;
** [[D3 layer visualization]]&lt;br /&gt;
** [[Waiana service module]]&lt;br /&gt;
** [[SameAs service module]]&lt;br /&gt;
&lt;br /&gt;
Wandora team has also built several service modules for Drupal content management system and an extra for Joomla content management system. These modules can be used to publish Wandora stored information in these CMSes.&lt;br /&gt;
&lt;br /&gt;
* [[Wandora Drupal extras]]&lt;br /&gt;
* [[Wandora's Joomla Topic Reader]]&lt;br /&gt;
* [[JQuery Mobile based topic map browser]]&lt;br /&gt;
&lt;br /&gt;
Wandora's embedded HTTP server contains a service module for SOAP web service. There is additional information available for Wandora's web service. &lt;br /&gt;
&lt;br /&gt;
* [[Wandora Web Service]]&lt;br /&gt;
&lt;br /&gt;
Also included is a [[Wandora modules framework|modular framework]] for building webapps in Apache Tomcat or similar servlet containers. Topic maps and features of Wandora can be included in the servlet using this framework. The same framework can also be used in the embedded server.&lt;br /&gt;
&lt;br /&gt;
== Developing and hacking Wandora == &lt;br /&gt;
&lt;br /&gt;
Wandora project is developed with [http://netbeans.org/ Netbeans IDE]. Wandora's source code distribution package contains a Netbeans IDE project. You can download Wandora's source code distribution package from [[Download]] page. However, we suggest that you clone [https://github.com/wandora-team/wandora Wandora's repository] at Github. Perhaps you want to push some fixes or new features back.&lt;br /&gt;
&lt;br /&gt;
* [[Change log]]&lt;br /&gt;
* [https://github.com/wandora-team/wandora Wandora @ Github]&lt;br /&gt;
* [[Download]] (build date {{build date}})&lt;br /&gt;
* [[License of Wandora|License]]&lt;br /&gt;
* [[Developing Wandora]]&lt;br /&gt;
* [http://wandora.org/api/ Wandora Javadocs], [http://wandora.org/api/wandora-javadoc.zip download]&lt;br /&gt;
* [[Wandora's configuration file]]&lt;br /&gt;
* [[Upcoming features]]&lt;br /&gt;
* [[Open bugs]]&lt;br /&gt;
&lt;br /&gt;
See also section '''Tools and tool manager''' above.&lt;br /&gt;
&lt;br /&gt;
== Papers and presentations ==&lt;br /&gt;
&lt;br /&gt;
This section lists some papers and presentations related to Wandora and semantic web technologies created by the inner circle of Wandora Team. For a more wider selection of works related to Wandora see [http://wandora.org/forum/viewforum.php?f=10&amp;amp;sid=57134deccd5ba47132334f2f1215b520 Use cases at Wandora forum].&lt;br /&gt;
&lt;br /&gt;
* [http://tmra.de/2010/ TMRA 2010] tutorial slides: [http://wandora.org/download/other/tmra10/wandora_workshop_tmra2010.pdf Converting information to Topic Maps using Wandora].&lt;br /&gt;
* [http://tmra.de/2009/ TMRA 2009] workshop presentation [http://www.slideshare.net/tmra/semantic-mashups-with-wandora Semantic Mashups with Wandora]. [http://wandora.org/wandora/download/other/tmra09/wandora_tutorial_leipzig.zip Example data set] is available for brave experimenters.&lt;br /&gt;
* Wandora poster in [http://wandora.org/wandora/download/other/poster09.pdf PDF] or [http://wandora.org/wandora/download/other/poster09.gif GIF] formats.&lt;br /&gt;
* Kivelä A.: [http://wandora.org/download/other/gradu_kivela.pdf OBO-ontologioiden kuvaaminen Topic Map-muotoon]. MSc Theses, 2008. (in Finnish). (English Abstract: [http://wandora.org/wandora/download/other/gradu_kivela_abstract_en.pdf Converting OBO ontologies to Topic Maps]).&lt;br /&gt;
* Lyytinen O.: [http://www.wandora.org/download/other/gradu_lyytinen.pdf Semanttisen webin tekniikoiden soveltaminen Wikisovelluksissa]. MSc Theses, 2008. (in Finnish) &lt;br /&gt;
* Kivelä A.: [http://www.wandora.org/download/other/wandora_xml_finland.pdf Topic Maps, Wandora ja kourallinen julkaisuprojekteja] (in Finnish). Presentation held in XML Finland meeting November 14th, 2007. &lt;br /&gt;
* Lyytinen O.: [http://wandora.net/wandora/download/other/step06.pdf Building Internet Services with Layered Topic Maps]. Presentation held in The Finnish Artificial Intelligence Conference (STeP 2006), 2006-10-26.&lt;br /&gt;
* Kivelä A., Lyytinen O.: [http://wandora.net/wiki/images/Topic_map_aided_publishing.pdf Topic Map Aided Publishing – A Case Study of Assembly Media Archive]. ''Web Intelligence. STeP 2004 - The 11th Finnish Artificial Intelligence Conference Proceedings - Vol. 2'', 2004.&lt;br /&gt;
&lt;br /&gt;
== Wandora @ World ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/wandora-team/wandora Github]&lt;br /&gt;
* [http://twitter.com/#!/wandora_app Twitter]&lt;br /&gt;
* [https://www.youtube.com/channel/UClJoFDmiThA02RmAUT5YEcw YouTube]&lt;br /&gt;
* [http://freecode.com/projects/wandora/ Freecode]&lt;br /&gt;
* [http://sourceforge.net/projects/wandora/ SourceForge.net]&lt;br /&gt;
&amp;lt;!-- * [http://www.garshol.priv.no/tmtools/product.jsp?id=wandora Topic Maps Tools] --&amp;gt;&lt;br /&gt;
* [http://www.topicmapslab.de/projects/wandora?locale=en Topic Maps Lab]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
As said in the very beginning, the documentation is a work in progress and incomplete. If the available documentation didn't answer your question, please drop a line to Wandora forum and we'll try to find an answer for you. &lt;br /&gt;
&lt;br /&gt;
* [[General FAQ]]&lt;br /&gt;
* [[FAQ for Wandora user]] reveals some nifty details of Wandora application.&lt;br /&gt;
* [http://wandora.org/tv Wandora tv]&lt;br /&gt;
* [http://wandora.org/forum/ Wandora forum]&lt;br /&gt;
* [[Open bugs]]&lt;br /&gt;
&lt;br /&gt;
If you are interested in Topic Maps and information technology related news see [http://planet.topicmaps.org/ Planet Topic Maps] and [http://planetrdf.com/ Planet RDF].&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/Query_editor_topic_panel</id>
		<title>Query editor topic panel</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/Query_editor_topic_panel"/>
				<updated>2015-04-23T13:20:57Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: /* Executing queries */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''This is an upcoming feature and is not included yet in the public release.'''&lt;br /&gt;
&lt;br /&gt;
Query editor topic panel is one of several different [[topic panels]] in Wandora. Its main purpose is to provide a graphical editor for the Wandora [[query language]], and a way to execute the queries in a topic panel. If you have a query ready, you can just open it in the editor and then execute it by double clicking a topic elsewhere in Wandora. This will open the topic in the current topic panel, which in this case means executing the query using the selected topic as the context. This way you can have a topic panel which gathers information about a selected topic through a customisable query.&lt;br /&gt;
&lt;br /&gt;
[[File:Queryeditor.png|center]]&lt;br /&gt;
&lt;br /&gt;
== Opening the topic panel ==&lt;br /&gt;
&lt;br /&gt;
You can open the query editor topic panel by selecting '''New panel &amp;gt; Query editor''' from the '''View''' menu. This will open the panel and its subpanels that you use to open or build a query.&lt;br /&gt;
&lt;br /&gt;
== Building queries ==&lt;br /&gt;
&lt;br /&gt;
=== Basics ===&lt;br /&gt;
&lt;br /&gt;
Queries are built graphically in the ''Graph Editor'' subpanel, which usually occupies most of the space. Please see the separate page [[query language]] for details about the general principles behind queries. As explained there, queries consist of directives, each of which perform a specific task. In the graphical editor, directives are represented by grey boxes, with the directive name as the title of the box.&lt;br /&gt;
&lt;br /&gt;
Directives can be moved around the editor so that the structure of the query is easier to grasp. The position of directives in the graph does not affect the behaviour of the directive or the whole query at all, it is purely for the benefit of the human looking at the query in the editor.&lt;br /&gt;
&lt;br /&gt;
By clicking the title of a directive you can select it which opens it in the ''Inspector'' sub panel, usually at the lower right corner. The parameters and some other details of the directive can be modified here. Note that some of the parameters are reflected in a compact form in the directive box in the editor graph. This is for information only so that it's a bit easier to see what a specific directive does without opening it in the inspector. The parameters cannot be modified in the graph, only in the inspector.&lt;br /&gt;
&lt;br /&gt;
In addition to all the other directives comprising your query, a box titled ''Final result'' will be present in the graph editor. This isn't strictly speaking a directive but it looks and acts like one. It's a sink where the final result of the query will be taken from. Thus, you'll want to direct the results of your query in there.&lt;br /&gt;
&lt;br /&gt;
=== Adding directives from the directives list ===&lt;br /&gt;
&lt;br /&gt;
You can add directives into the graph editor by dragging them from the ''Directives list'' subpanel, usually located in the top right corner. The same corner contains the ''Query library'' subpanel in a separate tab, you may need to select the list tab to access it.&lt;br /&gt;
&lt;br /&gt;
All the directives are organised in the list by their category. You can add a directive onto the graph editor by dragging it from the list onto the graph. After this, you can move the directive around in the graph, modify it with the inspector and so on.&lt;br /&gt;
&lt;br /&gt;
=== Connecting directives ===&lt;br /&gt;
&lt;br /&gt;
In the query language model, directives take as an input a single result row, and usually only use the active value of the row. However the directives are usually organised by using the [[From (query directive) |From directive]] which essentially makes one directive take any number of rows as input.&lt;br /&gt;
&lt;br /&gt;
Just like the textual script form has a special syntax for using from directives due to their special nature, so does the graphical editor. In the graphical editor from directives are usually represented as arrows going from one directive to another. The directive boxes themselves have two arrows in the top right and left corners. The arrow in the top left corner represents the output of a directive while the arrow in the top right corner represents the input. To create a connection between directives, drag with your mouse from the output arrow to the input arrow of a different directive. Behind the scenes, a from directive is created to connect the two directives, but in the graph you will only see an arrow.&lt;br /&gt;
&lt;br /&gt;
It is possible to add from directives as actual directive boxes into the graph by dragging them from the directives list. This however is hardly ever needed and makes the directive graph cluttered.&lt;br /&gt;
&lt;br /&gt;
The from directive arrows always go from the left side of one directive box to the right side of another. In the graph you may also have arrows which connect to the bottom of a directive box. These do not represent from directives, they are directives used as parameters for other directives. These are explained in the next section.&lt;br /&gt;
&lt;br /&gt;
Only a single directive can go as input to any one directive. However, you can join directives together by using the [[Join (query directive) |Join directive]]. Just drag it from the directive list onto the graph like any other directive. Then the directives that are to be joined are added in as parameters for the join directive, this is covered in the next section.&lt;br /&gt;
&lt;br /&gt;
=== Editing directives with the inspector ===&lt;br /&gt;
&lt;br /&gt;
When you click the title of a directive box in the query editor, that directive is opened in the directive ''Inspector'' panel, usually located in the bottom right corner.&lt;br /&gt;
&lt;br /&gt;
The inspector works based on the underlying Java classes. Thus the documentation of all the directives in the [[query language]] page will be handy. In the inspector, you need to first select the constructor to use. Some directives only have a single choice but many have a few options. The different choices usually create slight variations of the directive.&lt;br /&gt;
&lt;br /&gt;
After selecting the constructor you will get fields for all the constructor parameters. Depending on the parameter type the fields may look slightly different. Textual values get simple text fields; directive values get a drop element where another directive can be dragged and dropped; operands can be specified in different forms, so you'll need to first select how you intend to specify the operand value; finally arrays and collections will have buttons to add and remove new elements and then fields to specify each element.&lt;br /&gt;
&lt;br /&gt;
As mentioned in the previous section, some directives are connected to other directives by being their parameters rather than through the from directive. The parameter directives connect to the bottom edge of another directive in the graph. To make the connection, first select the directive whose parameter you want to set. Then drag the outgoing arrow of another directive into the parameter drop target in the inspector.&lt;br /&gt;
&lt;br /&gt;
The bottom of the inspector panel also has an ''Addons'' section. Directives have additional methods in them which may further modify the directive behaviour. Some of these addon methods are common to all directives, being inherited from the base Directive class. Some are unique to certain directives. To use addons, select the addon you wish to use from the list and click ''Add addon''. After this, you get a section with the parameters for the addon. You can fill in the parameters as you do for the constructor, including possibly using other directives as parameter values.&lt;br /&gt;
&lt;br /&gt;
You can also remove a directive from the editor using the inspector. First select the directive in the graph and then click the ''Remove'' button at the top right corner of the inspector subpanel.&lt;br /&gt;
&lt;br /&gt;
=== Query flow ===&lt;br /&gt;
&lt;br /&gt;
When executing a query, some kind of an input row is used as the starting point. Ordinarily this will just contain the single selected topic. The execution of the query starts from the Final result box, which can be treated as directive even though it isn't really one. It gets the input row and then checks if another directive is connected to it using the from directive, in other words, if there is an incoming arrow. If there is one, then the input row and execution is passed onto the connected directive. That directive will then do its own thing and eventually return a set of result rows. The pseudo-directive Final result takes these result rows one at a time and then performs its own processing on each one separately. In this case, the processing can be said to be gathering the rows and then displaying them in a table.&lt;br /&gt;
&lt;br /&gt;
The execution works similarly for any other directive. For example, take the [[Instances (query directive) |Instances directive]]. It takes an input row, then checks if any other directive is connected to it and if so the input and execution is passed onto the connected directive. When the connected directive returns a set of result rows, the instances directive starts doing its job. It takes the result rows of the connected directive, one at a time, and then gets all the instances of the topic in the active column in the result row. The results of each individual input row are then combined and given as the final result of the instances directive and given to whichever directive preceded it.&lt;br /&gt;
&lt;br /&gt;
Thus the execution goes from the Final result pseudo directive at the top all the way down the graph to the directives at the end of the chain. The initial input row gets passed down untouched until it reaches the directives at the end of the chain. Those then do their job with the initial input and their output works as the actual input to the higher up directives as the execution returns up the chain. And the Final result then takes the final output at the top of the chain.&lt;br /&gt;
&lt;br /&gt;
If a directive contains other directives as parameters, they get processed when the execution returns to the directive after reaching the end of the chain first. The exact nature of how they are processed may depend on the directive taking them as parameters but the [[Count (query directive) |Count directive]], for example, gives a good idea of what generally happens. When execution returns to the count directive, after having gone through the whole chain, it starts doing its own processing. This processing is executing the parameter directive, using the input that Count got as the returning input from its connected directive. The results of the parameter directive are then counted and the count number is the output from the count directive. If there are multiple input rows, the parameter directive gets executed multiple times, once for each input. The parameter directive thus represents instructions on what exactly is to be counted, while the input to count acts as the context of where those instructions are applied. The instructions are the same for each input row, but the context is different so each input may get a different result.&lt;br /&gt;
&lt;br /&gt;
This also demonstrates the typical difference between a parameter directive and a from directive, or the two different types of arrows in the graph. A parameter directive defines the behaviour of its containing directive while the from directive just redirects input rows. As another example, the [[Join (query directive) |Join directive]] joins the results of two (or more) directives using a cartesian product. The directives that are to be joined are given as parameters to the join directive. A from directive can also be used to specify what acts as input to the join, and subsequently to all its parameter directives.&lt;br /&gt;
&lt;br /&gt;
Finally, some directives take as parameters something called operands. An operand can be just a static value or it can be another directive. For example, the association type that a [[Players (query directive) |Players directive]] would use is given as a parameter. It can be just a topic you pick from a topic selector, and often is, but you can also set it to be a directive which returns a topic using the input row. In this way, the parameters can also ultimately come from the directives connected using the from mechanism. However, even in this case the idea that a parameter directive defines the behaviour and from gives the context still applies. The defined behaviour just happens to tap into the context as well. Still, often it is possible to achieve the same end result by having certain directives connected using from directives or under the parameter directives. So there isn't always a strict line of where and how directives need to be connected.&lt;br /&gt;
&lt;br /&gt;
=== Saving and loading queries ===&lt;br /&gt;
&lt;br /&gt;
Queries can be saved and loaded using the ''Query library'' subpanel, usually located in the top right corner. It shares the corner with the ''Directive list'' subpanel so you may need to select it from the tab list first. To save a query, give it a name and then click the save button. To open one, select one from the list and then click the open button. You can also delete queries by selecting them and then clicking the delete button.&lt;br /&gt;
&lt;br /&gt;
== Executing queries ==&lt;br /&gt;
&lt;br /&gt;
After constructing a query with the editor or loading one from the library, you can execute it with different topics given as context. Double clicking a topic elsewhere in Wandora will usually open it in the active topic panel. In the case of the query editor topic panel this means executing the current query with the topic as the context. You can also switch to the ''Query results'' tab in the main subpanel and select a context topic there and run the query, or click the ''Run'' button at the top of the graph editor which will run the query with the currently selected topic as context.&lt;br /&gt;
&lt;br /&gt;
The results are displayed in a table in which you may perform other actions similarly to other topic tables in Wandora. For example, you can double click topics to open them in the same query editor topic panel and execute the query with them as the context.&lt;br /&gt;
&lt;br /&gt;
You can also build the script for the query. This can then be used in some of the other query tools in Wandora. To do this, click the ''Build script'' button in the toolbar at the top of the graph editor.&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/Query_editor_topic_panel</id>
		<title>Query editor topic panel</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/Query_editor_topic_panel"/>
				<updated>2015-04-23T13:20:28Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: /* Executing queries */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''This is an upcoming feature and is not included yet in the public release.'''&lt;br /&gt;
&lt;br /&gt;
Query editor topic panel is one of several different [[topic panels]] in Wandora. Its main purpose is to provide a graphical editor for the Wandora [[query language]], and a way to execute the queries in a topic panel. If you have a query ready, you can just open it in the editor and then execute it by double clicking a topic elsewhere in Wandora. This will open the topic in the current topic panel, which in this case means executing the query using the selected topic as the context. This way you can have a topic panel which gathers information about a selected topic through a customisable query.&lt;br /&gt;
&lt;br /&gt;
[[File:Queryeditor.png|center]]&lt;br /&gt;
&lt;br /&gt;
== Opening the topic panel ==&lt;br /&gt;
&lt;br /&gt;
You can open the query editor topic panel by selecting '''New panel &amp;gt; Query editor''' from the '''View''' menu. This will open the panel and its subpanels that you use to open or build a query.&lt;br /&gt;
&lt;br /&gt;
== Building queries ==&lt;br /&gt;
&lt;br /&gt;
=== Basics ===&lt;br /&gt;
&lt;br /&gt;
Queries are built graphically in the ''Graph Editor'' subpanel, which usually occupies most of the space. Please see the separate page [[query language]] for details about the general principles behind queries. As explained there, queries consist of directives, each of which perform a specific task. In the graphical editor, directives are represented by grey boxes, with the directive name as the title of the box.&lt;br /&gt;
&lt;br /&gt;
Directives can be moved around the editor so that the structure of the query is easier to grasp. The position of directives in the graph does not affect the behaviour of the directive or the whole query at all, it is purely for the benefit of the human looking at the query in the editor.&lt;br /&gt;
&lt;br /&gt;
By clicking the title of a directive you can select it which opens it in the ''Inspector'' sub panel, usually at the lower right corner. The parameters and some other details of the directive can be modified here. Note that some of the parameters are reflected in a compact form in the directive box in the editor graph. This is for information only so that it's a bit easier to see what a specific directive does without opening it in the inspector. The parameters cannot be modified in the graph, only in the inspector.&lt;br /&gt;
&lt;br /&gt;
In addition to all the other directives comprising your query, a box titled ''Final result'' will be present in the graph editor. This isn't strictly speaking a directive but it looks and acts like one. It's a sink where the final result of the query will be taken from. Thus, you'll want to direct the results of your query in there.&lt;br /&gt;
&lt;br /&gt;
=== Adding directives from the directives list ===&lt;br /&gt;
&lt;br /&gt;
You can add directives into the graph editor by dragging them from the ''Directives list'' subpanel, usually located in the top right corner. The same corner contains the ''Query library'' subpanel in a separate tab, you may need to select the list tab to access it.&lt;br /&gt;
&lt;br /&gt;
All the directives are organised in the list by their category. You can add a directive onto the graph editor by dragging it from the list onto the graph. After this, you can move the directive around in the graph, modify it with the inspector and so on.&lt;br /&gt;
&lt;br /&gt;
=== Connecting directives ===&lt;br /&gt;
&lt;br /&gt;
In the query language model, directives take as an input a single result row, and usually only use the active value of the row. However the directives are usually organised by using the [[From (query directive) |From directive]] which essentially makes one directive take any number of rows as input.&lt;br /&gt;
&lt;br /&gt;
Just like the textual script form has a special syntax for using from directives due to their special nature, so does the graphical editor. In the graphical editor from directives are usually represented as arrows going from one directive to another. The directive boxes themselves have two arrows in the top right and left corners. The arrow in the top left corner represents the output of a directive while the arrow in the top right corner represents the input. To create a connection between directives, drag with your mouse from the output arrow to the input arrow of a different directive. Behind the scenes, a from directive is created to connect the two directives, but in the graph you will only see an arrow.&lt;br /&gt;
&lt;br /&gt;
It is possible to add from directives as actual directive boxes into the graph by dragging them from the directives list. This however is hardly ever needed and makes the directive graph cluttered.&lt;br /&gt;
&lt;br /&gt;
The from directive arrows always go from the left side of one directive box to the right side of another. In the graph you may also have arrows which connect to the bottom of a directive box. These do not represent from directives, they are directives used as parameters for other directives. These are explained in the next section.&lt;br /&gt;
&lt;br /&gt;
Only a single directive can go as input to any one directive. However, you can join directives together by using the [[Join (query directive) |Join directive]]. Just drag it from the directive list onto the graph like any other directive. Then the directives that are to be joined are added in as parameters for the join directive, this is covered in the next section.&lt;br /&gt;
&lt;br /&gt;
=== Editing directives with the inspector ===&lt;br /&gt;
&lt;br /&gt;
When you click the title of a directive box in the query editor, that directive is opened in the directive ''Inspector'' panel, usually located in the bottom right corner.&lt;br /&gt;
&lt;br /&gt;
The inspector works based on the underlying Java classes. Thus the documentation of all the directives in the [[query language]] page will be handy. In the inspector, you need to first select the constructor to use. Some directives only have a single choice but many have a few options. The different choices usually create slight variations of the directive.&lt;br /&gt;
&lt;br /&gt;
After selecting the constructor you will get fields for all the constructor parameters. Depending on the parameter type the fields may look slightly different. Textual values get simple text fields; directive values get a drop element where another directive can be dragged and dropped; operands can be specified in different forms, so you'll need to first select how you intend to specify the operand value; finally arrays and collections will have buttons to add and remove new elements and then fields to specify each element.&lt;br /&gt;
&lt;br /&gt;
As mentioned in the previous section, some directives are connected to other directives by being their parameters rather than through the from directive. The parameter directives connect to the bottom edge of another directive in the graph. To make the connection, first select the directive whose parameter you want to set. Then drag the outgoing arrow of another directive into the parameter drop target in the inspector.&lt;br /&gt;
&lt;br /&gt;
The bottom of the inspector panel also has an ''Addons'' section. Directives have additional methods in them which may further modify the directive behaviour. Some of these addon methods are common to all directives, being inherited from the base Directive class. Some are unique to certain directives. To use addons, select the addon you wish to use from the list and click ''Add addon''. After this, you get a section with the parameters for the addon. You can fill in the parameters as you do for the constructor, including possibly using other directives as parameter values.&lt;br /&gt;
&lt;br /&gt;
You can also remove a directive from the editor using the inspector. First select the directive in the graph and then click the ''Remove'' button at the top right corner of the inspector subpanel.&lt;br /&gt;
&lt;br /&gt;
=== Query flow ===&lt;br /&gt;
&lt;br /&gt;
When executing a query, some kind of an input row is used as the starting point. Ordinarily this will just contain the single selected topic. The execution of the query starts from the Final result box, which can be treated as directive even though it isn't really one. It gets the input row and then checks if another directive is connected to it using the from directive, in other words, if there is an incoming arrow. If there is one, then the input row and execution is passed onto the connected directive. That directive will then do its own thing and eventually return a set of result rows. The pseudo-directive Final result takes these result rows one at a time and then performs its own processing on each one separately. In this case, the processing can be said to be gathering the rows and then displaying them in a table.&lt;br /&gt;
&lt;br /&gt;
The execution works similarly for any other directive. For example, take the [[Instances (query directive) |Instances directive]]. It takes an input row, then checks if any other directive is connected to it and if so the input and execution is passed onto the connected directive. When the connected directive returns a set of result rows, the instances directive starts doing its job. It takes the result rows of the connected directive, one at a time, and then gets all the instances of the topic in the active column in the result row. The results of each individual input row are then combined and given as the final result of the instances directive and given to whichever directive preceded it.&lt;br /&gt;
&lt;br /&gt;
Thus the execution goes from the Final result pseudo directive at the top all the way down the graph to the directives at the end of the chain. The initial input row gets passed down untouched until it reaches the directives at the end of the chain. Those then do their job with the initial input and their output works as the actual input to the higher up directives as the execution returns up the chain. And the Final result then takes the final output at the top of the chain.&lt;br /&gt;
&lt;br /&gt;
If a directive contains other directives as parameters, they get processed when the execution returns to the directive after reaching the end of the chain first. The exact nature of how they are processed may depend on the directive taking them as parameters but the [[Count (query directive) |Count directive]], for example, gives a good idea of what generally happens. When execution returns to the count directive, after having gone through the whole chain, it starts doing its own processing. This processing is executing the parameter directive, using the input that Count got as the returning input from its connected directive. The results of the parameter directive are then counted and the count number is the output from the count directive. If there are multiple input rows, the parameter directive gets executed multiple times, once for each input. The parameter directive thus represents instructions on what exactly is to be counted, while the input to count acts as the context of where those instructions are applied. The instructions are the same for each input row, but the context is different so each input may get a different result.&lt;br /&gt;
&lt;br /&gt;
This also demonstrates the typical difference between a parameter directive and a from directive, or the two different types of arrows in the graph. A parameter directive defines the behaviour of its containing directive while the from directive just redirects input rows. As another example, the [[Join (query directive) |Join directive]] joins the results of two (or more) directives using a cartesian product. The directives that are to be joined are given as parameters to the join directive. A from directive can also be used to specify what acts as input to the join, and subsequently to all its parameter directives.&lt;br /&gt;
&lt;br /&gt;
Finally, some directives take as parameters something called operands. An operand can be just a static value or it can be another directive. For example, the association type that a [[Players (query directive) |Players directive]] would use is given as a parameter. It can be just a topic you pick from a topic selector, and often is, but you can also set it to be a directive which returns a topic using the input row. In this way, the parameters can also ultimately come from the directives connected using the from mechanism. However, even in this case the idea that a parameter directive defines the behaviour and from gives the context still applies. The defined behaviour just happens to tap into the context as well. Still, often it is possible to achieve the same end result by having certain directives connected using from directives or under the parameter directives. So there isn't always a strict line of where and how directives need to be connected.&lt;br /&gt;
&lt;br /&gt;
=== Saving and loading queries ===&lt;br /&gt;
&lt;br /&gt;
Queries can be saved and loaded using the ''Query library'' subpanel, usually located in the top right corner. It shares the corner with the ''Directive list'' subpanel so you may need to select it from the tab list first. To save a query, give it a name and then click the save button. To open one, select one from the list and then click the open button. You can also delete queries by selecting them and then clicking the delete button.&lt;br /&gt;
&lt;br /&gt;
== Executing queries ==&lt;br /&gt;
&lt;br /&gt;
After constructing a query with the editor or loading one from the library, you can execute it with different topics given as context. Double clicking a topic elsewhere in Wandora will usually open it in the active topic panel. In the case of the query editor topic panel this means executing the current query with the topic as the context. You can also switch to the ''Query results'' tab in the main subpanel and select a context topic there and run the query, or click the ''Run'' button at the top of the graph editor which will run the query with the currently selected topic as context.&lt;br /&gt;
&lt;br /&gt;
The results are displayed in a table in which you may perform other actions similarly to other topic tables in Wandora. For example, you can double click topics to open them in the same query editor topic panel and execute the query with them as the context.&lt;br /&gt;
&lt;br /&gt;
You can also build the script for the query. This can then be used in some of the other query tools in Wandora.&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/Query_editor_topic_panel</id>
		<title>Query editor topic panel</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/Query_editor_topic_panel"/>
				<updated>2015-04-23T13:18:44Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: /* Editing directives with the inspector */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''This is an upcoming feature and is not included yet in the public release.'''&lt;br /&gt;
&lt;br /&gt;
Query editor topic panel is one of several different [[topic panels]] in Wandora. Its main purpose is to provide a graphical editor for the Wandora [[query language]], and a way to execute the queries in a topic panel. If you have a query ready, you can just open it in the editor and then execute it by double clicking a topic elsewhere in Wandora. This will open the topic in the current topic panel, which in this case means executing the query using the selected topic as the context. This way you can have a topic panel which gathers information about a selected topic through a customisable query.&lt;br /&gt;
&lt;br /&gt;
[[File:Queryeditor.png|center]]&lt;br /&gt;
&lt;br /&gt;
== Opening the topic panel ==&lt;br /&gt;
&lt;br /&gt;
You can open the query editor topic panel by selecting '''New panel &amp;gt; Query editor''' from the '''View''' menu. This will open the panel and its subpanels that you use to open or build a query.&lt;br /&gt;
&lt;br /&gt;
== Building queries ==&lt;br /&gt;
&lt;br /&gt;
=== Basics ===&lt;br /&gt;
&lt;br /&gt;
Queries are built graphically in the ''Graph Editor'' subpanel, which usually occupies most of the space. Please see the separate page [[query language]] for details about the general principles behind queries. As explained there, queries consist of directives, each of which perform a specific task. In the graphical editor, directives are represented by grey boxes, with the directive name as the title of the box.&lt;br /&gt;
&lt;br /&gt;
Directives can be moved around the editor so that the structure of the query is easier to grasp. The position of directives in the graph does not affect the behaviour of the directive or the whole query at all, it is purely for the benefit of the human looking at the query in the editor.&lt;br /&gt;
&lt;br /&gt;
By clicking the title of a directive you can select it which opens it in the ''Inspector'' sub panel, usually at the lower right corner. The parameters and some other details of the directive can be modified here. Note that some of the parameters are reflected in a compact form in the directive box in the editor graph. This is for information only so that it's a bit easier to see what a specific directive does without opening it in the inspector. The parameters cannot be modified in the graph, only in the inspector.&lt;br /&gt;
&lt;br /&gt;
In addition to all the other directives comprising your query, a box titled ''Final result'' will be present in the graph editor. This isn't strictly speaking a directive but it looks and acts like one. It's a sink where the final result of the query will be taken from. Thus, you'll want to direct the results of your query in there.&lt;br /&gt;
&lt;br /&gt;
=== Adding directives from the directives list ===&lt;br /&gt;
&lt;br /&gt;
You can add directives into the graph editor by dragging them from the ''Directives list'' subpanel, usually located in the top right corner. The same corner contains the ''Query library'' subpanel in a separate tab, you may need to select the list tab to access it.&lt;br /&gt;
&lt;br /&gt;
All the directives are organised in the list by their category. You can add a directive onto the graph editor by dragging it from the list onto the graph. After this, you can move the directive around in the graph, modify it with the inspector and so on.&lt;br /&gt;
&lt;br /&gt;
=== Connecting directives ===&lt;br /&gt;
&lt;br /&gt;
In the query language model, directives take as an input a single result row, and usually only use the active value of the row. However the directives are usually organised by using the [[From (query directive) |From directive]] which essentially makes one directive take any number of rows as input.&lt;br /&gt;
&lt;br /&gt;
Just like the textual script form has a special syntax for using from directives due to their special nature, so does the graphical editor. In the graphical editor from directives are usually represented as arrows going from one directive to another. The directive boxes themselves have two arrows in the top right and left corners. The arrow in the top left corner represents the output of a directive while the arrow in the top right corner represents the input. To create a connection between directives, drag with your mouse from the output arrow to the input arrow of a different directive. Behind the scenes, a from directive is created to connect the two directives, but in the graph you will only see an arrow.&lt;br /&gt;
&lt;br /&gt;
It is possible to add from directives as actual directive boxes into the graph by dragging them from the directives list. This however is hardly ever needed and makes the directive graph cluttered.&lt;br /&gt;
&lt;br /&gt;
The from directive arrows always go from the left side of one directive box to the right side of another. In the graph you may also have arrows which connect to the bottom of a directive box. These do not represent from directives, they are directives used as parameters for other directives. These are explained in the next section.&lt;br /&gt;
&lt;br /&gt;
Only a single directive can go as input to any one directive. However, you can join directives together by using the [[Join (query directive) |Join directive]]. Just drag it from the directive list onto the graph like any other directive. Then the directives that are to be joined are added in as parameters for the join directive, this is covered in the next section.&lt;br /&gt;
&lt;br /&gt;
=== Editing directives with the inspector ===&lt;br /&gt;
&lt;br /&gt;
When you click the title of a directive box in the query editor, that directive is opened in the directive ''Inspector'' panel, usually located in the bottom right corner.&lt;br /&gt;
&lt;br /&gt;
The inspector works based on the underlying Java classes. Thus the documentation of all the directives in the [[query language]] page will be handy. In the inspector, you need to first select the constructor to use. Some directives only have a single choice but many have a few options. The different choices usually create slight variations of the directive.&lt;br /&gt;
&lt;br /&gt;
After selecting the constructor you will get fields for all the constructor parameters. Depending on the parameter type the fields may look slightly different. Textual values get simple text fields; directive values get a drop element where another directive can be dragged and dropped; operands can be specified in different forms, so you'll need to first select how you intend to specify the operand value; finally arrays and collections will have buttons to add and remove new elements and then fields to specify each element.&lt;br /&gt;
&lt;br /&gt;
As mentioned in the previous section, some directives are connected to other directives by being their parameters rather than through the from directive. The parameter directives connect to the bottom edge of another directive in the graph. To make the connection, first select the directive whose parameter you want to set. Then drag the outgoing arrow of another directive into the parameter drop target in the inspector.&lt;br /&gt;
&lt;br /&gt;
The bottom of the inspector panel also has an ''Addons'' section. Directives have additional methods in them which may further modify the directive behaviour. Some of these addon methods are common to all directives, being inherited from the base Directive class. Some are unique to certain directives. To use addons, select the addon you wish to use from the list and click ''Add addon''. After this, you get a section with the parameters for the addon. You can fill in the parameters as you do for the constructor, including possibly using other directives as parameter values.&lt;br /&gt;
&lt;br /&gt;
You can also remove a directive from the editor using the inspector. First select the directive in the graph and then click the ''Remove'' button at the top right corner of the inspector subpanel.&lt;br /&gt;
&lt;br /&gt;
=== Query flow ===&lt;br /&gt;
&lt;br /&gt;
When executing a query, some kind of an input row is used as the starting point. Ordinarily this will just contain the single selected topic. The execution of the query starts from the Final result box, which can be treated as directive even though it isn't really one. It gets the input row and then checks if another directive is connected to it using the from directive, in other words, if there is an incoming arrow. If there is one, then the input row and execution is passed onto the connected directive. That directive will then do its own thing and eventually return a set of result rows. The pseudo-directive Final result takes these result rows one at a time and then performs its own processing on each one separately. In this case, the processing can be said to be gathering the rows and then displaying them in a table.&lt;br /&gt;
&lt;br /&gt;
The execution works similarly for any other directive. For example, take the [[Instances (query directive) |Instances directive]]. It takes an input row, then checks if any other directive is connected to it and if so the input and execution is passed onto the connected directive. When the connected directive returns a set of result rows, the instances directive starts doing its job. It takes the result rows of the connected directive, one at a time, and then gets all the instances of the topic in the active column in the result row. The results of each individual input row are then combined and given as the final result of the instances directive and given to whichever directive preceded it.&lt;br /&gt;
&lt;br /&gt;
Thus the execution goes from the Final result pseudo directive at the top all the way down the graph to the directives at the end of the chain. The initial input row gets passed down untouched until it reaches the directives at the end of the chain. Those then do their job with the initial input and their output works as the actual input to the higher up directives as the execution returns up the chain. And the Final result then takes the final output at the top of the chain.&lt;br /&gt;
&lt;br /&gt;
If a directive contains other directives as parameters, they get processed when the execution returns to the directive after reaching the end of the chain first. The exact nature of how they are processed may depend on the directive taking them as parameters but the [[Count (query directive) |Count directive]], for example, gives a good idea of what generally happens. When execution returns to the count directive, after having gone through the whole chain, it starts doing its own processing. This processing is executing the parameter directive, using the input that Count got as the returning input from its connected directive. The results of the parameter directive are then counted and the count number is the output from the count directive. If there are multiple input rows, the parameter directive gets executed multiple times, once for each input. The parameter directive thus represents instructions on what exactly is to be counted, while the input to count acts as the context of where those instructions are applied. The instructions are the same for each input row, but the context is different so each input may get a different result.&lt;br /&gt;
&lt;br /&gt;
This also demonstrates the typical difference between a parameter directive and a from directive, or the two different types of arrows in the graph. A parameter directive defines the behaviour of its containing directive while the from directive just redirects input rows. As another example, the [[Join (query directive) |Join directive]] joins the results of two (or more) directives using a cartesian product. The directives that are to be joined are given as parameters to the join directive. A from directive can also be used to specify what acts as input to the join, and subsequently to all its parameter directives.&lt;br /&gt;
&lt;br /&gt;
Finally, some directives take as parameters something called operands. An operand can be just a static value or it can be another directive. For example, the association type that a [[Players (query directive) |Players directive]] would use is given as a parameter. It can be just a topic you pick from a topic selector, and often is, but you can also set it to be a directive which returns a topic using the input row. In this way, the parameters can also ultimately come from the directives connected using the from mechanism. However, even in this case the idea that a parameter directive defines the behaviour and from gives the context still applies. The defined behaviour just happens to tap into the context as well. Still, often it is possible to achieve the same end result by having certain directives connected using from directives or under the parameter directives. So there isn't always a strict line of where and how directives need to be connected.&lt;br /&gt;
&lt;br /&gt;
=== Saving and loading queries ===&lt;br /&gt;
&lt;br /&gt;
Queries can be saved and loaded using the ''Query library'' subpanel, usually located in the top right corner. It shares the corner with the ''Directive list'' subpanel so you may need to select it from the tab list first. To save a query, give it a name and then click the save button. To open one, select one from the list and then click the open button. You can also delete queries by selecting them and then clicking the delete button.&lt;br /&gt;
&lt;br /&gt;
== Executing queries ==&lt;br /&gt;
&lt;br /&gt;
After constructing a query with the editor or loading one from the library, you can execute it with different topics given as context. Double clicking a topic elsewhere in Wandora will usually open it in the active topic panel. In the case of the query editor topic panel this means executing the current query with the topic as the context. You can also switch to the ''Query results'' tab in the main subpanel and select a context topic there and run the query.&lt;br /&gt;
&lt;br /&gt;
The results are displayed in a table in which you may perform other actions similarly to other topic tables in Wandora. For example, you can double click topics to open them in the same query editor topic panel and execute the query with them as the context.&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/Query_editor_topic_panel</id>
		<title>Query editor topic panel</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/Query_editor_topic_panel"/>
				<updated>2015-04-23T12:52:26Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: /* Executing queries */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''This is an upcoming feature and is not included yet in the public release.'''&lt;br /&gt;
&lt;br /&gt;
Query editor topic panel is one of several different [[topic panels]] in Wandora. Its main purpose is to provide a graphical editor for the Wandora [[query language]], and a way to execute the queries in a topic panel. If you have a query ready, you can just open it in the editor and then execute it by double clicking a topic elsewhere in Wandora. This will open the topic in the current topic panel, which in this case means executing the query using the selected topic as the context. This way you can have a topic panel which gathers information about a selected topic through a customisable query.&lt;br /&gt;
&lt;br /&gt;
[[File:Queryeditor.png|center]]&lt;br /&gt;
&lt;br /&gt;
== Opening the topic panel ==&lt;br /&gt;
&lt;br /&gt;
You can open the query editor topic panel by selecting '''New panel &amp;gt; Query editor''' from the '''View''' menu. This will open the panel and its subpanels that you use to open or build a query.&lt;br /&gt;
&lt;br /&gt;
== Building queries ==&lt;br /&gt;
&lt;br /&gt;
=== Basics ===&lt;br /&gt;
&lt;br /&gt;
Queries are built graphically in the ''Graph Editor'' subpanel, which usually occupies most of the space. Please see the separate page [[query language]] for details about the general principles behind queries. As explained there, queries consist of directives, each of which perform a specific task. In the graphical editor, directives are represented by grey boxes, with the directive name as the title of the box.&lt;br /&gt;
&lt;br /&gt;
Directives can be moved around the editor so that the structure of the query is easier to grasp. The position of directives in the graph does not affect the behaviour of the directive or the whole query at all, it is purely for the benefit of the human looking at the query in the editor.&lt;br /&gt;
&lt;br /&gt;
By clicking the title of a directive you can select it which opens it in the ''Inspector'' sub panel, usually at the lower right corner. The parameters and some other details of the directive can be modified here. Note that some of the parameters are reflected in a compact form in the directive box in the editor graph. This is for information only so that it's a bit easier to see what a specific directive does without opening it in the inspector. The parameters cannot be modified in the graph, only in the inspector.&lt;br /&gt;
&lt;br /&gt;
In addition to all the other directives comprising your query, a box titled ''Final result'' will be present in the graph editor. This isn't strictly speaking a directive but it looks and acts like one. It's a sink where the final result of the query will be taken from. Thus, you'll want to direct the results of your query in there.&lt;br /&gt;
&lt;br /&gt;
=== Adding directives from the directives list ===&lt;br /&gt;
&lt;br /&gt;
You can add directives into the graph editor by dragging them from the ''Directives list'' subpanel, usually located in the top right corner. The same corner contains the ''Query library'' subpanel in a separate tab, you may need to select the list tab to access it.&lt;br /&gt;
&lt;br /&gt;
All the directives are organised in the list by their category. You can add a directive onto the graph editor by dragging it from the list onto the graph. After this, you can move the directive around in the graph, modify it with the inspector and so on.&lt;br /&gt;
&lt;br /&gt;
=== Connecting directives ===&lt;br /&gt;
&lt;br /&gt;
In the query language model, directives take as an input a single result row, and usually only use the active value of the row. However the directives are usually organised by using the [[From (query directive) |From directive]] which essentially makes one directive take any number of rows as input.&lt;br /&gt;
&lt;br /&gt;
Just like the textual script form has a special syntax for using from directives due to their special nature, so does the graphical editor. In the graphical editor from directives are usually represented as arrows going from one directive to another. The directive boxes themselves have two arrows in the top right and left corners. The arrow in the top left corner represents the output of a directive while the arrow in the top right corner represents the input. To create a connection between directives, drag with your mouse from the output arrow to the input arrow of a different directive. Behind the scenes, a from directive is created to connect the two directives, but in the graph you will only see an arrow.&lt;br /&gt;
&lt;br /&gt;
It is possible to add from directives as actual directive boxes into the graph by dragging them from the directives list. This however is hardly ever needed and makes the directive graph cluttered.&lt;br /&gt;
&lt;br /&gt;
The from directive arrows always go from the left side of one directive box to the right side of another. In the graph you may also have arrows which connect to the bottom of a directive box. These do not represent from directives, they are directives used as parameters for other directives. These are explained in the next section.&lt;br /&gt;
&lt;br /&gt;
Only a single directive can go as input to any one directive. However, you can join directives together by using the [[Join (query directive) |Join directive]]. Just drag it from the directive list onto the graph like any other directive. Then the directives that are to be joined are added in as parameters for the join directive, this is covered in the next section.&lt;br /&gt;
&lt;br /&gt;
=== Editing directives with the inspector ===&lt;br /&gt;
&lt;br /&gt;
When you click the title of a directive box in the query editor, that directive is opened in the directive ''Inspector'' panel, usually located in the bottom right corner.&lt;br /&gt;
&lt;br /&gt;
The inspector works based on the underlying Java classes. Thus the documentation of all the directives in the [[query language]] page will be handy. In the inspector, you need to first select the constructor to use. Some directives only have a single choice but many have a few options. The different choices usually create slight variations of the directive.&lt;br /&gt;
&lt;br /&gt;
After selecting the constructor you will get fields for all the constructor parameters. Depending on the parameter type the fields may look slightly different. Textual values get simple text fields; directive values get a drop element where another directive can be dragged and dropped; operands can be specified in different forms, so you'll need to first select how you intend to specify the operand value; finally arrays and collections will have buttons to add and remove new elements and then fields to specify each element.&lt;br /&gt;
&lt;br /&gt;
As mentioned in the previous section, some directives are connected to other directives by being their parameters rather than through the from directive. The parameter directives connect to the bottom edge of another directive in the graph. To make the connection, first select the directive whose parameter you want to set. Then drag the outgoing arrow of another directive into the parameter drop target in the inspector.&lt;br /&gt;
&lt;br /&gt;
The bottom of the inspector panel also has an ''Addons'' section. Directives have additional methods in them which may further modify the directive behaviour. Some of these addon methods are common to all directives, being inherited from the base Directive class. Some are unique to certain directives. To use addons, select the addon you wish to use from the list and click ''Add addon''. After this, you get a section with the parameters for the addon. You can fill in the parameters as you do for the constructor, including possibly using other directives as parameter values.&lt;br /&gt;
&lt;br /&gt;
=== Query flow ===&lt;br /&gt;
&lt;br /&gt;
When executing a query, some kind of an input row is used as the starting point. Ordinarily this will just contain the single selected topic. The execution of the query starts from the Final result box, which can be treated as directive even though it isn't really one. It gets the input row and then checks if another directive is connected to it using the from directive, in other words, if there is an incoming arrow. If there is one, then the input row and execution is passed onto the connected directive. That directive will then do its own thing and eventually return a set of result rows. The pseudo-directive Final result takes these result rows one at a time and then performs its own processing on each one separately. In this case, the processing can be said to be gathering the rows and then displaying them in a table.&lt;br /&gt;
&lt;br /&gt;
The execution works similarly for any other directive. For example, take the [[Instances (query directive) |Instances directive]]. It takes an input row, then checks if any other directive is connected to it and if so the input and execution is passed onto the connected directive. When the connected directive returns a set of result rows, the instances directive starts doing its job. It takes the result rows of the connected directive, one at a time, and then gets all the instances of the topic in the active column in the result row. The results of each individual input row are then combined and given as the final result of the instances directive and given to whichever directive preceded it.&lt;br /&gt;
&lt;br /&gt;
Thus the execution goes from the Final result pseudo directive at the top all the way down the graph to the directives at the end of the chain. The initial input row gets passed down untouched until it reaches the directives at the end of the chain. Those then do their job with the initial input and their output works as the actual input to the higher up directives as the execution returns up the chain. And the Final result then takes the final output at the top of the chain.&lt;br /&gt;
&lt;br /&gt;
If a directive contains other directives as parameters, they get processed when the execution returns to the directive after reaching the end of the chain first. The exact nature of how they are processed may depend on the directive taking them as parameters but the [[Count (query directive) |Count directive]], for example, gives a good idea of what generally happens. When execution returns to the count directive, after having gone through the whole chain, it starts doing its own processing. This processing is executing the parameter directive, using the input that Count got as the returning input from its connected directive. The results of the parameter directive are then counted and the count number is the output from the count directive. If there are multiple input rows, the parameter directive gets executed multiple times, once for each input. The parameter directive thus represents instructions on what exactly is to be counted, while the input to count acts as the context of where those instructions are applied. The instructions are the same for each input row, but the context is different so each input may get a different result.&lt;br /&gt;
&lt;br /&gt;
This also demonstrates the typical difference between a parameter directive and a from directive, or the two different types of arrows in the graph. A parameter directive defines the behaviour of its containing directive while the from directive just redirects input rows. As another example, the [[Join (query directive) |Join directive]] joins the results of two (or more) directives using a cartesian product. The directives that are to be joined are given as parameters to the join directive. A from directive can also be used to specify what acts as input to the join, and subsequently to all its parameter directives.&lt;br /&gt;
&lt;br /&gt;
Finally, some directives take as parameters something called operands. An operand can be just a static value or it can be another directive. For example, the association type that a [[Players (query directive) |Players directive]] would use is given as a parameter. It can be just a topic you pick from a topic selector, and often is, but you can also set it to be a directive which returns a topic using the input row. In this way, the parameters can also ultimately come from the directives connected using the from mechanism. However, even in this case the idea that a parameter directive defines the behaviour and from gives the context still applies. The defined behaviour just happens to tap into the context as well. Still, often it is possible to achieve the same end result by having certain directives connected using from directives or under the parameter directives. So there isn't always a strict line of where and how directives need to be connected.&lt;br /&gt;
&lt;br /&gt;
=== Saving and loading queries ===&lt;br /&gt;
&lt;br /&gt;
Queries can be saved and loaded using the ''Query library'' subpanel, usually located in the top right corner. It shares the corner with the ''Directive list'' subpanel so you may need to select it from the tab list first. To save a query, give it a name and then click the save button. To open one, select one from the list and then click the open button. You can also delete queries by selecting them and then clicking the delete button.&lt;br /&gt;
&lt;br /&gt;
== Executing queries ==&lt;br /&gt;
&lt;br /&gt;
After constructing a query with the editor or loading one from the library, you can execute it with different topics given as context. Double clicking a topic elsewhere in Wandora will usually open it in the active topic panel. In the case of the query editor topic panel this means executing the current query with the topic as the context. You can also switch to the ''Query results'' tab in the main subpanel and select a context topic there and run the query.&lt;br /&gt;
&lt;br /&gt;
The results are displayed in a table in which you may perform other actions similarly to other topic tables in Wandora. For example, you can double click topics to open them in the same query editor topic panel and execute the query with them as the context.&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/Query_editor_topic_panel</id>
		<title>Query editor topic panel</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/Query_editor_topic_panel"/>
				<updated>2015-04-23T10:23:02Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: /* Query flow */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''This is an upcoming feature and is not included yet in the public release.'''&lt;br /&gt;
&lt;br /&gt;
Query editor topic panel is one of several different [[topic panels]] in Wandora. Its main purpose is to provide a graphical editor for the Wandora [[query language]], and a way to execute the queries in a topic panel. If you have a query ready, you can just open it in the editor and then execute it by double clicking a topic elsewhere in Wandora. This will open the topic in the current topic panel, which in this case means executing the query using the selected topic as the context. This way you can have a topic panel which gathers information about a selected topic through a customisable query.&lt;br /&gt;
&lt;br /&gt;
[[File:Queryeditor.png|center]]&lt;br /&gt;
&lt;br /&gt;
== Opening the topic panel ==&lt;br /&gt;
&lt;br /&gt;
You can open the query editor topic panel by selecting '''New panel &amp;gt; Query editor''' from the '''View''' menu. This will open the panel and its subpanels that you use to open or build a query.&lt;br /&gt;
&lt;br /&gt;
== Building queries ==&lt;br /&gt;
&lt;br /&gt;
=== Basics ===&lt;br /&gt;
&lt;br /&gt;
Queries are built graphically in the ''Graph Editor'' subpanel, which usually occupies most of the space. Please see the separate page [[query language]] for details about the general principles behind queries. As explained there, queries consist of directives, each of which perform a specific task. In the graphical editor, directives are represented by grey boxes, with the directive name as the title of the box.&lt;br /&gt;
&lt;br /&gt;
Directives can be moved around the editor so that the structure of the query is easier to grasp. The position of directives in the graph does not affect the behaviour of the directive or the whole query at all, it is purely for the benefit of the human looking at the query in the editor.&lt;br /&gt;
&lt;br /&gt;
By clicking the title of a directive you can select it which opens it in the ''Inspector'' sub panel, usually at the lower right corner. The parameters and some other details of the directive can be modified here. Note that some of the parameters are reflected in a compact form in the directive box in the editor graph. This is for information only so that it's a bit easier to see what a specific directive does without opening it in the inspector. The parameters cannot be modified in the graph, only in the inspector.&lt;br /&gt;
&lt;br /&gt;
In addition to all the other directives comprising your query, a box titled ''Final result'' will be present in the graph editor. This isn't strictly speaking a directive but it looks and acts like one. It's a sink where the final result of the query will be taken from. Thus, you'll want to direct the results of your query in there.&lt;br /&gt;
&lt;br /&gt;
=== Adding directives from the directives list ===&lt;br /&gt;
&lt;br /&gt;
You can add directives into the graph editor by dragging them from the ''Directives list'' subpanel, usually located in the top right corner. The same corner contains the ''Query library'' subpanel in a separate tab, you may need to select the list tab to access it.&lt;br /&gt;
&lt;br /&gt;
All the directives are organised in the list by their category. You can add a directive onto the graph editor by dragging it from the list onto the graph. After this, you can move the directive around in the graph, modify it with the inspector and so on.&lt;br /&gt;
&lt;br /&gt;
=== Connecting directives ===&lt;br /&gt;
&lt;br /&gt;
In the query language model, directives take as an input a single result row, and usually only use the active value of the row. However the directives are usually organised by using the [[From (query directive) |From directive]] which essentially makes one directive take any number of rows as input.&lt;br /&gt;
&lt;br /&gt;
Just like the textual script form has a special syntax for using from directives due to their special nature, so does the graphical editor. In the graphical editor from directives are usually represented as arrows going from one directive to another. The directive boxes themselves have two arrows in the top right and left corners. The arrow in the top left corner represents the output of a directive while the arrow in the top right corner represents the input. To create a connection between directives, drag with your mouse from the output arrow to the input arrow of a different directive. Behind the scenes, a from directive is created to connect the two directives, but in the graph you will only see an arrow.&lt;br /&gt;
&lt;br /&gt;
It is possible to add from directives as actual directive boxes into the graph by dragging them from the directives list. This however is hardly ever needed and makes the directive graph cluttered.&lt;br /&gt;
&lt;br /&gt;
The from directive arrows always go from the left side of one directive box to the right side of another. In the graph you may also have arrows which connect to the bottom of a directive box. These do not represent from directives, they are directives used as parameters for other directives. These are explained in the next section.&lt;br /&gt;
&lt;br /&gt;
Only a single directive can go as input to any one directive. However, you can join directives together by using the [[Join (query directive) |Join directive]]. Just drag it from the directive list onto the graph like any other directive. Then the directives that are to be joined are added in as parameters for the join directive, this is covered in the next section.&lt;br /&gt;
&lt;br /&gt;
=== Editing directives with the inspector ===&lt;br /&gt;
&lt;br /&gt;
When you click the title of a directive box in the query editor, that directive is opened in the directive ''Inspector'' panel, usually located in the bottom right corner.&lt;br /&gt;
&lt;br /&gt;
The inspector works based on the underlying Java classes. Thus the documentation of all the directives in the [[query language]] page will be handy. In the inspector, you need to first select the constructor to use. Some directives only have a single choice but many have a few options. The different choices usually create slight variations of the directive.&lt;br /&gt;
&lt;br /&gt;
After selecting the constructor you will get fields for all the constructor parameters. Depending on the parameter type the fields may look slightly different. Textual values get simple text fields; directive values get a drop element where another directive can be dragged and dropped; operands can be specified in different forms, so you'll need to first select how you intend to specify the operand value; finally arrays and collections will have buttons to add and remove new elements and then fields to specify each element.&lt;br /&gt;
&lt;br /&gt;
As mentioned in the previous section, some directives are connected to other directives by being their parameters rather than through the from directive. The parameter directives connect to the bottom edge of another directive in the graph. To make the connection, first select the directive whose parameter you want to set. Then drag the outgoing arrow of another directive into the parameter drop target in the inspector.&lt;br /&gt;
&lt;br /&gt;
The bottom of the inspector panel also has an ''Addons'' section. Directives have additional methods in them which may further modify the directive behaviour. Some of these addon methods are common to all directives, being inherited from the base Directive class. Some are unique to certain directives. To use addons, select the addon you wish to use from the list and click ''Add addon''. After this, you get a section with the parameters for the addon. You can fill in the parameters as you do for the constructor, including possibly using other directives as parameter values.&lt;br /&gt;
&lt;br /&gt;
=== Query flow ===&lt;br /&gt;
&lt;br /&gt;
When executing a query, some kind of an input row is used as the starting point. Ordinarily this will just contain the single selected topic. The execution of the query starts from the Final result box, which can be treated as directive even though it isn't really one. It gets the input row and then checks if another directive is connected to it using the from directive, in other words, if there is an incoming arrow. If there is one, then the input row and execution is passed onto the connected directive. That directive will then do its own thing and eventually return a set of result rows. The pseudo-directive Final result takes these result rows one at a time and then performs its own processing on each one separately. In this case, the processing can be said to be gathering the rows and then displaying them in a table.&lt;br /&gt;
&lt;br /&gt;
The execution works similarly for any other directive. For example, take the [[Instances (query directive) |Instances directive]]. It takes an input row, then checks if any other directive is connected to it and if so the input and execution is passed onto the connected directive. When the connected directive returns a set of result rows, the instances directive starts doing its job. It takes the result rows of the connected directive, one at a time, and then gets all the instances of the topic in the active column in the result row. The results of each individual input row are then combined and given as the final result of the instances directive and given to whichever directive preceded it.&lt;br /&gt;
&lt;br /&gt;
Thus the execution goes from the Final result pseudo directive at the top all the way down the graph to the directives at the end of the chain. The initial input row gets passed down untouched until it reaches the directives at the end of the chain. Those then do their job with the initial input and their output works as the actual input to the higher up directives as the execution returns up the chain. And the Final result then takes the final output at the top of the chain.&lt;br /&gt;
&lt;br /&gt;
If a directive contains other directives as parameters, they get processed when the execution returns to the directive after reaching the end of the chain first. The exact nature of how they are processed may depend on the directive taking them as parameters but the [[Count (query directive) |Count directive]], for example, gives a good idea of what generally happens. When execution returns to the count directive, after having gone through the whole chain, it starts doing its own processing. This processing is executing the parameter directive, using the input that Count got as the returning input from its connected directive. The results of the parameter directive are then counted and the count number is the output from the count directive. If there are multiple input rows, the parameter directive gets executed multiple times, once for each input. The parameter directive thus represents instructions on what exactly is to be counted, while the input to count acts as the context of where those instructions are applied. The instructions are the same for each input row, but the context is different so each input may get a different result.&lt;br /&gt;
&lt;br /&gt;
This also demonstrates the typical difference between a parameter directive and a from directive, or the two different types of arrows in the graph. A parameter directive defines the behaviour of its containing directive while the from directive just redirects input rows. As another example, the [[Join (query directive) |Join directive]] joins the results of two (or more) directives using a cartesian product. The directives that are to be joined are given as parameters to the join directive. A from directive can also be used to specify what acts as input to the join, and subsequently to all its parameter directives.&lt;br /&gt;
&lt;br /&gt;
Finally, some directives take as parameters something called operands. An operand can be just a static value or it can be another directive. For example, the association type that a [[Players (query directive) |Players directive]] would use is given as a parameter. It can be just a topic you pick from a topic selector, and often is, but you can also set it to be a directive which returns a topic using the input row. In this way, the parameters can also ultimately come from the directives connected using the from mechanism. However, even in this case the idea that a parameter directive defines the behaviour and from gives the context still applies. The defined behaviour just happens to tap into the context as well. Still, often it is possible to achieve the same end result by having certain directives connected using from directives or under the parameter directives. So there isn't always a strict line of where and how directives need to be connected.&lt;br /&gt;
&lt;br /&gt;
=== Saving and loading queries ===&lt;br /&gt;
&lt;br /&gt;
Queries can be saved and loaded using the ''Query library'' subpanel, usually located in the top right corner. It shares the corner with the ''Directive list'' subpanel so you may need to select it from the tab list first. To save a query, give it a name and then click the save button. To open one, select one from the list and then click the open button. You can also delete queries by selecting them and then clicking the delete button.&lt;br /&gt;
&lt;br /&gt;
== Executing queries ==&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/Query_editor_topic_panel</id>
		<title>Query editor topic panel</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/Query_editor_topic_panel"/>
				<updated>2015-04-23T10:22:20Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: /* Query flow */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''This is an upcoming feature and is not included yet in the public release.'''&lt;br /&gt;
&lt;br /&gt;
Query editor topic panel is one of several different [[topic panels]] in Wandora. Its main purpose is to provide a graphical editor for the Wandora [[query language]], and a way to execute the queries in a topic panel. If you have a query ready, you can just open it in the editor and then execute it by double clicking a topic elsewhere in Wandora. This will open the topic in the current topic panel, which in this case means executing the query using the selected topic as the context. This way you can have a topic panel which gathers information about a selected topic through a customisable query.&lt;br /&gt;
&lt;br /&gt;
[[File:Queryeditor.png|center]]&lt;br /&gt;
&lt;br /&gt;
== Opening the topic panel ==&lt;br /&gt;
&lt;br /&gt;
You can open the query editor topic panel by selecting '''New panel &amp;gt; Query editor''' from the '''View''' menu. This will open the panel and its subpanels that you use to open or build a query.&lt;br /&gt;
&lt;br /&gt;
== Building queries ==&lt;br /&gt;
&lt;br /&gt;
=== Basics ===&lt;br /&gt;
&lt;br /&gt;
Queries are built graphically in the ''Graph Editor'' subpanel, which usually occupies most of the space. Please see the separate page [[query language]] for details about the general principles behind queries. As explained there, queries consist of directives, each of which perform a specific task. In the graphical editor, directives are represented by grey boxes, with the directive name as the title of the box.&lt;br /&gt;
&lt;br /&gt;
Directives can be moved around the editor so that the structure of the query is easier to grasp. The position of directives in the graph does not affect the behaviour of the directive or the whole query at all, it is purely for the benefit of the human looking at the query in the editor.&lt;br /&gt;
&lt;br /&gt;
By clicking the title of a directive you can select it which opens it in the ''Inspector'' sub panel, usually at the lower right corner. The parameters and some other details of the directive can be modified here. Note that some of the parameters are reflected in a compact form in the directive box in the editor graph. This is for information only so that it's a bit easier to see what a specific directive does without opening it in the inspector. The parameters cannot be modified in the graph, only in the inspector.&lt;br /&gt;
&lt;br /&gt;
In addition to all the other directives comprising your query, a box titled ''Final result'' will be present in the graph editor. This isn't strictly speaking a directive but it looks and acts like one. It's a sink where the final result of the query will be taken from. Thus, you'll want to direct the results of your query in there.&lt;br /&gt;
&lt;br /&gt;
=== Adding directives from the directives list ===&lt;br /&gt;
&lt;br /&gt;
You can add directives into the graph editor by dragging them from the ''Directives list'' subpanel, usually located in the top right corner. The same corner contains the ''Query library'' subpanel in a separate tab, you may need to select the list tab to access it.&lt;br /&gt;
&lt;br /&gt;
All the directives are organised in the list by their category. You can add a directive onto the graph editor by dragging it from the list onto the graph. After this, you can move the directive around in the graph, modify it with the inspector and so on.&lt;br /&gt;
&lt;br /&gt;
=== Connecting directives ===&lt;br /&gt;
&lt;br /&gt;
In the query language model, directives take as an input a single result row, and usually only use the active value of the row. However the directives are usually organised by using the [[From (query directive) |From directive]] which essentially makes one directive take any number of rows as input.&lt;br /&gt;
&lt;br /&gt;
Just like the textual script form has a special syntax for using from directives due to their special nature, so does the graphical editor. In the graphical editor from directives are usually represented as arrows going from one directive to another. The directive boxes themselves have two arrows in the top right and left corners. The arrow in the top left corner represents the output of a directive while the arrow in the top right corner represents the input. To create a connection between directives, drag with your mouse from the output arrow to the input arrow of a different directive. Behind the scenes, a from directive is created to connect the two directives, but in the graph you will only see an arrow.&lt;br /&gt;
&lt;br /&gt;
It is possible to add from directives as actual directive boxes into the graph by dragging them from the directives list. This however is hardly ever needed and makes the directive graph cluttered.&lt;br /&gt;
&lt;br /&gt;
The from directive arrows always go from the left side of one directive box to the right side of another. In the graph you may also have arrows which connect to the bottom of a directive box. These do not represent from directives, they are directives used as parameters for other directives. These are explained in the next section.&lt;br /&gt;
&lt;br /&gt;
Only a single directive can go as input to any one directive. However, you can join directives together by using the [[Join (query directive) |Join directive]]. Just drag it from the directive list onto the graph like any other directive. Then the directives that are to be joined are added in as parameters for the join directive, this is covered in the next section.&lt;br /&gt;
&lt;br /&gt;
=== Editing directives with the inspector ===&lt;br /&gt;
&lt;br /&gt;
When you click the title of a directive box in the query editor, that directive is opened in the directive ''Inspector'' panel, usually located in the bottom right corner.&lt;br /&gt;
&lt;br /&gt;
The inspector works based on the underlying Java classes. Thus the documentation of all the directives in the [[query language]] page will be handy. In the inspector, you need to first select the constructor to use. Some directives only have a single choice but many have a few options. The different choices usually create slight variations of the directive.&lt;br /&gt;
&lt;br /&gt;
After selecting the constructor you will get fields for all the constructor parameters. Depending on the parameter type the fields may look slightly different. Textual values get simple text fields; directive values get a drop element where another directive can be dragged and dropped; operands can be specified in different forms, so you'll need to first select how you intend to specify the operand value; finally arrays and collections will have buttons to add and remove new elements and then fields to specify each element.&lt;br /&gt;
&lt;br /&gt;
As mentioned in the previous section, some directives are connected to other directives by being their parameters rather than through the from directive. The parameter directives connect to the bottom edge of another directive in the graph. To make the connection, first select the directive whose parameter you want to set. Then drag the outgoing arrow of another directive into the parameter drop target in the inspector.&lt;br /&gt;
&lt;br /&gt;
The bottom of the inspector panel also has an ''Addons'' section. Directives have additional methods in them which may further modify the directive behaviour. Some of these addon methods are common to all directives, being inherited from the base Directive class. Some are unique to certain directives. To use addons, select the addon you wish to use from the list and click ''Add addon''. After this, you get a section with the parameters for the addon. You can fill in the parameters as you do for the constructor, including possibly using other directives as parameter values.&lt;br /&gt;
&lt;br /&gt;
=== Query flow ===&lt;br /&gt;
&lt;br /&gt;
When executing a query, some kind of an input row is used as the starting point. Ordinarily this will just contain the single selected topic. The execution of the query starts from the Final result box, which can be treated as directive even though it isn't really one. It gets the input row and then checks if another directive is connected to it using the from directive, in other words, if there is an incoming arrow. If there is one, then the input row and execution is passed onto the connected directive. That directive will then do its own thing and eventually return a set of result rows. The pseudo-directive Final result takes these result rows one at a time and then performs its own processing on each one separately. In this case, the processing can be said to be gathering the rows and then displaying them in a table.&lt;br /&gt;
&lt;br /&gt;
The execution works similarly for any other directive. For example, take the [[Instances (query language) |Instances directive]]. It takes an input row, then checks if any other directive is connected to it and if so the input and execution is passed onto the connected directive. When the connected directive returns a set of result rows, the instances directive starts doing its job. It takes the result rows of the connected directive, one at a time, and then gets all the instances of the topic in the active column in the result row. The results of each individual input row are then combined and given as the final result of the instances directive and given to whichever directive preceded it.&lt;br /&gt;
&lt;br /&gt;
Thus the execution goes from the Final result pseudo directive at the top all the way down the graph to the directives at the end of the chain. The initial input row gets passed down untouched until it reaches the directives at the end of the chain. Those then do their job with the initial input and their output works as the actual input to the higher up directives as the execution returns up the chain. And the Final result then takes the final output at the top of the chain.&lt;br /&gt;
&lt;br /&gt;
If a directive contains other directives as parameters, they get processed when the execution returns to the directive after reaching the end of the chain first. The exact nature of how they are processed may depend on the directive taking them as parameters but the [[Count (query language |Count directive]], for example, gives a good idea of what generally happens. When execution returns to the count directive, after having gone through the whole chain, it starts doing its own processing. This processing is executing the parameter directive, using the input that Count got as the returning input from its connected directive. The results of the parameter directive are then counted and the count number is the output from the count directive. If there are multiple input rows, the parameter directive gets executed multiple times, once for each input. The parameter directive thus represents instructions on what exactly is to be counted, while the input to count acts as the context of where those instructions are applied. The instructions are the same for each input row, but the context is different so each input may get a different result.&lt;br /&gt;
&lt;br /&gt;
This also demonstrates the typical difference between a parameter directive and a from directive, or the two different types of arrows in the graph. A parameter directive defines the behaviour of its containing directive while the from directive just redirects input rows. As another example, the [[Join (query language) |Join directive]] joins the results of two (or more) directives using a cartesian product. The directives that are to be joined are given as parameters to the join directive. A from directive can also be used to specify what acts as input to the join, and subsequently to all its parameter directives.&lt;br /&gt;
&lt;br /&gt;
Finally, some directives take as parameters something called operands. An operand can be just a static value or it can be another directive. For example, the association type that a [[Players (query language) |Players directive]] would use is given as a parameter. It can be just a topic you pick from a topic selector, and often is, but you can also set it to be a directive which returns a topic using the input row. In this way, the parameters can also ultimately come from the directives connected using the from mechanism. However, even in this case the idea that a parameter directive defines the behaviour and from gives the context still applies. The defined behaviour just happens to tap into the context as well. Still, often it is possible to achieve the same end result by having certain directives connected using from directives or under the parameter directives. So there isn't always a strict line of where and how directives need to be connected.&lt;br /&gt;
&lt;br /&gt;
=== Saving and loading queries ===&lt;br /&gt;
&lt;br /&gt;
Queries can be saved and loaded using the ''Query library'' subpanel, usually located in the top right corner. It shares the corner with the ''Directive list'' subpanel so you may need to select it from the tab list first. To save a query, give it a name and then click the save button. To open one, select one from the list and then click the open button. You can also delete queries by selecting them and then clicking the delete button.&lt;br /&gt;
&lt;br /&gt;
== Executing queries ==&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/Query_editor_topic_panel</id>
		<title>Query editor topic panel</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/Query_editor_topic_panel"/>
				<updated>2015-04-23T10:10:54Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: /* Query flow */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''This is an upcoming feature and is not included yet in the public release.'''&lt;br /&gt;
&lt;br /&gt;
Query editor topic panel is one of several different [[topic panels]] in Wandora. Its main purpose is to provide a graphical editor for the Wandora [[query language]], and a way to execute the queries in a topic panel. If you have a query ready, you can just open it in the editor and then execute it by double clicking a topic elsewhere in Wandora. This will open the topic in the current topic panel, which in this case means executing the query using the selected topic as the context. This way you can have a topic panel which gathers information about a selected topic through a customisable query.&lt;br /&gt;
&lt;br /&gt;
[[File:Queryeditor.png|center]]&lt;br /&gt;
&lt;br /&gt;
== Opening the topic panel ==&lt;br /&gt;
&lt;br /&gt;
You can open the query editor topic panel by selecting '''New panel &amp;gt; Query editor''' from the '''View''' menu. This will open the panel and its subpanels that you use to open or build a query.&lt;br /&gt;
&lt;br /&gt;
== Building queries ==&lt;br /&gt;
&lt;br /&gt;
=== Basics ===&lt;br /&gt;
&lt;br /&gt;
Queries are built graphically in the ''Graph Editor'' subpanel, which usually occupies most of the space. Please see the separate page [[query language]] for details about the general principles behind queries. As explained there, queries consist of directives, each of which perform a specific task. In the graphical editor, directives are represented by grey boxes, with the directive name as the title of the box.&lt;br /&gt;
&lt;br /&gt;
Directives can be moved around the editor so that the structure of the query is easier to grasp. The position of directives in the graph does not affect the behaviour of the directive or the whole query at all, it is purely for the benefit of the human looking at the query in the editor.&lt;br /&gt;
&lt;br /&gt;
By clicking the title of a directive you can select it which opens it in the ''Inspector'' sub panel, usually at the lower right corner. The parameters and some other details of the directive can be modified here. Note that some of the parameters are reflected in a compact form in the directive box in the editor graph. This is for information only so that it's a bit easier to see what a specific directive does without opening it in the inspector. The parameters cannot be modified in the graph, only in the inspector.&lt;br /&gt;
&lt;br /&gt;
In addition to all the other directives comprising your query, a box titled ''Final result'' will be present in the graph editor. This isn't strictly speaking a directive but it looks and acts like one. It's a sink where the final result of the query will be taken from. Thus, you'll want to direct the results of your query in there.&lt;br /&gt;
&lt;br /&gt;
=== Adding directives from the directives list ===&lt;br /&gt;
&lt;br /&gt;
You can add directives into the graph editor by dragging them from the ''Directives list'' subpanel, usually located in the top right corner. The same corner contains the ''Query library'' subpanel in a separate tab, you may need to select the list tab to access it.&lt;br /&gt;
&lt;br /&gt;
All the directives are organised in the list by their category. You can add a directive onto the graph editor by dragging it from the list onto the graph. After this, you can move the directive around in the graph, modify it with the inspector and so on.&lt;br /&gt;
&lt;br /&gt;
=== Connecting directives ===&lt;br /&gt;
&lt;br /&gt;
In the query language model, directives take as an input a single result row, and usually only use the active value of the row. However the directives are usually organised by using the [[From (query directive) |From directive]] which essentially makes one directive take any number of rows as input.&lt;br /&gt;
&lt;br /&gt;
Just like the textual script form has a special syntax for using from directives due to their special nature, so does the graphical editor. In the graphical editor from directives are usually represented as arrows going from one directive to another. The directive boxes themselves have two arrows in the top right and left corners. The arrow in the top left corner represents the output of a directive while the arrow in the top right corner represents the input. To create a connection between directives, drag with your mouse from the output arrow to the input arrow of a different directive. Behind the scenes, a from directive is created to connect the two directives, but in the graph you will only see an arrow.&lt;br /&gt;
&lt;br /&gt;
It is possible to add from directives as actual directive boxes into the graph by dragging them from the directives list. This however is hardly ever needed and makes the directive graph cluttered.&lt;br /&gt;
&lt;br /&gt;
The from directive arrows always go from the left side of one directive box to the right side of another. In the graph you may also have arrows which connect to the bottom of a directive box. These do not represent from directives, they are directives used as parameters for other directives. These are explained in the next section.&lt;br /&gt;
&lt;br /&gt;
Only a single directive can go as input to any one directive. However, you can join directives together by using the [[Join (query directive) |Join directive]]. Just drag it from the directive list onto the graph like any other directive. Then the directives that are to be joined are added in as parameters for the join directive, this is covered in the next section.&lt;br /&gt;
&lt;br /&gt;
=== Editing directives with the inspector ===&lt;br /&gt;
&lt;br /&gt;
When you click the title of a directive box in the query editor, that directive is opened in the directive ''Inspector'' panel, usually located in the bottom right corner.&lt;br /&gt;
&lt;br /&gt;
The inspector works based on the underlying Java classes. Thus the documentation of all the directives in the [[query language]] page will be handy. In the inspector, you need to first select the constructor to use. Some directives only have a single choice but many have a few options. The different choices usually create slight variations of the directive.&lt;br /&gt;
&lt;br /&gt;
After selecting the constructor you will get fields for all the constructor parameters. Depending on the parameter type the fields may look slightly different. Textual values get simple text fields; directive values get a drop element where another directive can be dragged and dropped; operands can be specified in different forms, so you'll need to first select how you intend to specify the operand value; finally arrays and collections will have buttons to add and remove new elements and then fields to specify each element.&lt;br /&gt;
&lt;br /&gt;
As mentioned in the previous section, some directives are connected to other directives by being their parameters rather than through the from directive. The parameter directives connect to the bottom edge of another directive in the graph. To make the connection, first select the directive whose parameter you want to set. Then drag the outgoing arrow of another directive into the parameter drop target in the inspector.&lt;br /&gt;
&lt;br /&gt;
The bottom of the inspector panel also has an ''Addons'' section. Directives have additional methods in them which may further modify the directive behaviour. Some of these addon methods are common to all directives, being inherited from the base Directive class. Some are unique to certain directives. To use addons, select the addon you wish to use from the list and click ''Add addon''. After this, you get a section with the parameters for the addon. You can fill in the parameters as you do for the constructor, including possibly using other directives as parameter values.&lt;br /&gt;
&lt;br /&gt;
=== Query flow ===&lt;br /&gt;
&lt;br /&gt;
When executing a query, some kind of an input row is used as the starting point. Ordinarily this will just contain the single selected topic. The execution of the query starts from the Final result box, which can be treated as directive even though it isn't really one. It gets the input row and then checks if another directive is connected to it using the from directive, in other words, if there is an incoming arrow. If there is one, then the input row and execution is passed onto the connected directive. That directive will then do its own thing and eventually return a set of result rows. The pseudo-directive Final result takes these result rows one at a time and then performs its own processing on each one separately. In this case, the processing can be said to be gathering the rows and then displaying them in a table.&lt;br /&gt;
&lt;br /&gt;
The execution works similarly for any other directive. For example, take the [[Instances (query language) |Instances directive]]. It takes an input row, then checks if any other directive is connected to it and if so the input and execution is passed onto the connected directive. When the connected directive returns a set of result rows, the instances directive starts doing its job. It takes the result rows of the connected directive, one at a time, and then gets all the instances of the topic in the active column in the result row. The results of each individual input row are then combined and given as the final result of the instances directive and given to whichever directive preceded it.&lt;br /&gt;
&lt;br /&gt;
Thus the execution goes from the Final result pseudo directive at the top all the way down the graph to the directives at the end of the chain. The initial input row gets passed down untouched until it reaches the directives at the end of the chain. Those then do their job with the initial input and their output works as the actual input to the higher up directives as the execution returns up the chain. And the Final result then takes the final output at the top of the chain.&lt;br /&gt;
&lt;br /&gt;
If a directive contains other directives as parameters, they get processed when the execution returns to the directive after reaching the end of the chain first. The exact nature of how they are processed may depend on the directive taking them as parameters but the [[Count (query language |Count directive]], for example, gives a good idea of what generally happens. When execution returns to the count directive, after having gone through the whole chain, it starts doing its own processing. This processing is executing the parameter directive, using the input that Count got as the returning input from its connected directive. The results of the parameter directive are then counted and the count number is the output from the count directive. If there are multiple input rows, the parameter directive gets executed multiple times, once for each input. The parameter directive thus represents instructions on what exactly is to be counted, while the input to count acts as the context of where those instructions are applied. The instructions are the same for each input row, but the context is different so each input may get a different result.&lt;br /&gt;
&lt;br /&gt;
This also demonstrates the typical difference between a parameter directive and a from directive, or the two different types of arrows in the graph. A parameter directive defines the behaviour of its containing directive while the from directive just redirects input rows. As another example, the [[Join (query language) |Join directive]] joins the results of two (or more) directives using a cartesian product. The directives that are to be joined are given as parameters to the join directive. A from directive can also be used to specify what acts as input to the join, and subsequently to all its parameter directives.&lt;br /&gt;
&lt;br /&gt;
=== Saving and loading queries ===&lt;br /&gt;
&lt;br /&gt;
Queries can be saved and loaded using the ''Query library'' subpanel, usually located in the top right corner. It shares the corner with the ''Directive list'' subpanel so you may need to select it from the tab list first. To save a query, give it a name and then click the save button. To open one, select one from the list and then click the open button. You can also delete queries by selecting them and then clicking the delete button.&lt;br /&gt;
&lt;br /&gt;
== Executing queries ==&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/Query_editor_topic_panel</id>
		<title>Query editor topic panel</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/Query_editor_topic_panel"/>
				<updated>2015-04-23T09:36:14Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: /* Editing directives with the inspector */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''This is an upcoming feature and is not included yet in the public release.'''&lt;br /&gt;
&lt;br /&gt;
Query editor topic panel is one of several different [[topic panels]] in Wandora. Its main purpose is to provide a graphical editor for the Wandora [[query language]], and a way to execute the queries in a topic panel. If you have a query ready, you can just open it in the editor and then execute it by double clicking a topic elsewhere in Wandora. This will open the topic in the current topic panel, which in this case means executing the query using the selected topic as the context. This way you can have a topic panel which gathers information about a selected topic through a customisable query.&lt;br /&gt;
&lt;br /&gt;
[[File:Queryeditor.png|center]]&lt;br /&gt;
&lt;br /&gt;
== Opening the topic panel ==&lt;br /&gt;
&lt;br /&gt;
You can open the query editor topic panel by selecting '''New panel &amp;gt; Query editor''' from the '''View''' menu. This will open the panel and its subpanels that you use to open or build a query.&lt;br /&gt;
&lt;br /&gt;
== Building queries ==&lt;br /&gt;
&lt;br /&gt;
=== Basics ===&lt;br /&gt;
&lt;br /&gt;
Queries are built graphically in the ''Graph Editor'' subpanel, which usually occupies most of the space. Please see the separate page [[query language]] for details about the general principles behind queries. As explained there, queries consist of directives, each of which perform a specific task. In the graphical editor, directives are represented by grey boxes, with the directive name as the title of the box.&lt;br /&gt;
&lt;br /&gt;
Directives can be moved around the editor so that the structure of the query is easier to grasp. The position of directives in the graph does not affect the behaviour of the directive or the whole query at all, it is purely for the benefit of the human looking at the query in the editor.&lt;br /&gt;
&lt;br /&gt;
By clicking the title of a directive you can select it which opens it in the ''Inspector'' sub panel, usually at the lower right corner. The parameters and some other details of the directive can be modified here. Note that some of the parameters are reflected in a compact form in the directive box in the editor graph. This is for information only so that it's a bit easier to see what a specific directive does without opening it in the inspector. The parameters cannot be modified in the graph, only in the inspector.&lt;br /&gt;
&lt;br /&gt;
In addition to all the other directives comprising your query, a box titled ''Final result'' will be present in the graph editor. This isn't strictly speaking a directive but it looks and acts like one. It's a sink where the final result of the query will be taken from. Thus, you'll want to direct the results of your query in there.&lt;br /&gt;
&lt;br /&gt;
=== Adding directives from the directives list ===&lt;br /&gt;
&lt;br /&gt;
You can add directives into the graph editor by dragging them from the ''Directives list'' subpanel, usually located in the top right corner. The same corner contains the ''Query library'' subpanel in a separate tab, you may need to select the list tab to access it.&lt;br /&gt;
&lt;br /&gt;
All the directives are organised in the list by their category. You can add a directive onto the graph editor by dragging it from the list onto the graph. After this, you can move the directive around in the graph, modify it with the inspector and so on.&lt;br /&gt;
&lt;br /&gt;
=== Connecting directives ===&lt;br /&gt;
&lt;br /&gt;
In the query language model, directives take as an input a single result row, and usually only use the active value of the row. However the directives are usually organised by using the [[From (query directive) |From directive]] which essentially makes one directive take any number of rows as input.&lt;br /&gt;
&lt;br /&gt;
Just like the textual script form has a special syntax for using from directives due to their special nature, so does the graphical editor. In the graphical editor from directives are usually represented as arrows going from one directive to another. The directive boxes themselves have two arrows in the top right and left corners. The arrow in the top left corner represents the output of a directive while the arrow in the top right corner represents the input. To create a connection between directives, drag with your mouse from the output arrow to the input arrow of a different directive. Behind the scenes, a from directive is created to connect the two directives, but in the graph you will only see an arrow.&lt;br /&gt;
&lt;br /&gt;
It is possible to add from directives as actual directive boxes into the graph by dragging them from the directives list. This however is hardly ever needed and makes the directive graph cluttered.&lt;br /&gt;
&lt;br /&gt;
The from directive arrows always go from the left side of one directive box to the right side of another. In the graph you may also have arrows which connect to the bottom of a directive box. These do not represent from directives, they are directives used as parameters for other directives. These are explained in the next section.&lt;br /&gt;
&lt;br /&gt;
Only a single directive can go as input to any one directive. However, you can join directives together by using the [[Join (query directive) |Join directive]]. Just drag it from the directive list onto the graph like any other directive. Then the directives that are to be joined are added in as parameters for the join directive, this is covered in the next section.&lt;br /&gt;
&lt;br /&gt;
=== Editing directives with the inspector ===&lt;br /&gt;
&lt;br /&gt;
When you click the title of a directive box in the query editor, that directive is opened in the directive ''Inspector'' panel, usually located in the bottom right corner.&lt;br /&gt;
&lt;br /&gt;
The inspector works based on the underlying Java classes. Thus the documentation of all the directives in the [[query language]] page will be handy. In the inspector, you need to first select the constructor to use. Some directives only have a single choice but many have a few options. The different choices usually create slight variations of the directive.&lt;br /&gt;
&lt;br /&gt;
After selecting the constructor you will get fields for all the constructor parameters. Depending on the parameter type the fields may look slightly different. Textual values get simple text fields; directive values get a drop element where another directive can be dragged and dropped; operands can be specified in different forms, so you'll need to first select how you intend to specify the operand value; finally arrays and collections will have buttons to add and remove new elements and then fields to specify each element.&lt;br /&gt;
&lt;br /&gt;
As mentioned in the previous section, some directives are connected to other directives by being their parameters rather than through the from directive. The parameter directives connect to the bottom edge of another directive in the graph. To make the connection, first select the directive whose parameter you want to set. Then drag the outgoing arrow of another directive into the parameter drop target in the inspector.&lt;br /&gt;
&lt;br /&gt;
The bottom of the inspector panel also has an ''Addons'' section. Directives have additional methods in them which may further modify the directive behaviour. Some of these addon methods are common to all directives, being inherited from the base Directive class. Some are unique to certain directives. To use addons, select the addon you wish to use from the list and click ''Add addon''. After this, you get a section with the parameters for the addon. You can fill in the parameters as you do for the constructor, including possibly using other directives as parameter values.&lt;br /&gt;
&lt;br /&gt;
=== Query flow ===&lt;br /&gt;
&lt;br /&gt;
When executing a query, some kind of an input row is used as the starting point. Ordinarily this will just contain the single selected topic. The execution of the query starts from the Final result box, which can be treated as directive even though it isn't really one. It gets the input row and then checks if another directive is connected to it using the from directive. If there is one, then the input row and execution is passed onto it. Whatever directive is connected, it will do its own thing and eventually return a set of result rows. The pseudo-directive Final result takes these result rows one at a time and then performs its own processing on each one separately. In this case, the processing can be said to be gathering the rows and then displaying them in a table.&lt;br /&gt;
&lt;br /&gt;
The execution works similarly for any other directive. For example, take the [[Instances (query language) |Instances directive]]. It takes an input row, then checks if any other directive is connected and if so the input and execution is passed onto them. When they return with a set of result rows, the instances directive starts doing its job. It takes the result rows of the connected directive, one at a time, and then gets all the instances of the active column in the result row. The results of each individual input row are then combined and given as the final result of the instances directive and given to whichever directive preceded it.&lt;br /&gt;
&lt;br /&gt;
Thus the execution goes from the Final result pseudo directive at the top all the way down the graph to the directives at the end of the chain. The initial input row gets passed down untouched until it reaches the directives at the end of the chain. Those then do their job with the initial input and their output works as the actual input to the higher up directives as the execution returns up the chain. And the Final result then takes the final output at the top of the chain.&lt;br /&gt;
&lt;br /&gt;
If a directive contains other directives as parameters, they get processed when the execution returns to the directive after reaching the end of the chain first. The exact nature of how they are processed may depend on the directive taking them as parameters but the [[Count (query language |Count directive]], for example, gives a good idea of what generally happens. When execution returns to the count directive, after having gone through the whole chain, it starts doing its own processing. This processing is executing the parameter directive, using the input that Count got as the returning input from its connected directive. The results of the parameter directive are then counted and the count number is the output from the count directive. If there are multiple input rows, the parameter directive gets executed multiple times, once for each input. The parameter directive thus represents instructions on what exactly is to be counted, while the input to count acts as the context of where those instructions are applied. The instructions are the same for each input row, but the context is different so each input may get a different result.&lt;br /&gt;
&lt;br /&gt;
This also demonstrates the typical difference between a parameter directive and a from directive, or the two different types of arrows in the graph. A parameter directive defines the behaviour of its containing directive somehow while the from directive just redirects input rows. As another example, the [[Join (query language) |Join directive]] joins the results of two (or more) directives using a cartesian product. The directives that are to be joined are given as parameters to the join directive. A from directive can also be used to specify what acts as input to the join, and subsequently to all its parameter directives.&lt;br /&gt;
&lt;br /&gt;
=== Saving and loading queries ===&lt;br /&gt;
&lt;br /&gt;
Queries can be saved and loaded using the ''Query library'' subpanel, usually located in the top right corner. It shares the corner with the ''Directive list'' subpanel so you may need to select it from the tab list first. To save a query, give it a name and then click the save button. To open one, select one from the list and then click the open button. You can also delete queries by selecting them and then clicking the delete button.&lt;br /&gt;
&lt;br /&gt;
== Executing queries ==&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/Query_editor_topic_panel</id>
		<title>Query editor topic panel</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/Query_editor_topic_panel"/>
				<updated>2015-04-23T09:33:38Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: /* Connecting directives */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''This is an upcoming feature and is not included yet in the public release.'''&lt;br /&gt;
&lt;br /&gt;
Query editor topic panel is one of several different [[topic panels]] in Wandora. Its main purpose is to provide a graphical editor for the Wandora [[query language]], and a way to execute the queries in a topic panel. If you have a query ready, you can just open it in the editor and then execute it by double clicking a topic elsewhere in Wandora. This will open the topic in the current topic panel, which in this case means executing the query using the selected topic as the context. This way you can have a topic panel which gathers information about a selected topic through a customisable query.&lt;br /&gt;
&lt;br /&gt;
[[File:Queryeditor.png|center]]&lt;br /&gt;
&lt;br /&gt;
== Opening the topic panel ==&lt;br /&gt;
&lt;br /&gt;
You can open the query editor topic panel by selecting '''New panel &amp;gt; Query editor''' from the '''View''' menu. This will open the panel and its subpanels that you use to open or build a query.&lt;br /&gt;
&lt;br /&gt;
== Building queries ==&lt;br /&gt;
&lt;br /&gt;
=== Basics ===&lt;br /&gt;
&lt;br /&gt;
Queries are built graphically in the ''Graph Editor'' subpanel, which usually occupies most of the space. Please see the separate page [[query language]] for details about the general principles behind queries. As explained there, queries consist of directives, each of which perform a specific task. In the graphical editor, directives are represented by grey boxes, with the directive name as the title of the box.&lt;br /&gt;
&lt;br /&gt;
Directives can be moved around the editor so that the structure of the query is easier to grasp. The position of directives in the graph does not affect the behaviour of the directive or the whole query at all, it is purely for the benefit of the human looking at the query in the editor.&lt;br /&gt;
&lt;br /&gt;
By clicking the title of a directive you can select it which opens it in the ''Inspector'' sub panel, usually at the lower right corner. The parameters and some other details of the directive can be modified here. Note that some of the parameters are reflected in a compact form in the directive box in the editor graph. This is for information only so that it's a bit easier to see what a specific directive does without opening it in the inspector. The parameters cannot be modified in the graph, only in the inspector.&lt;br /&gt;
&lt;br /&gt;
In addition to all the other directives comprising your query, a box titled ''Final result'' will be present in the graph editor. This isn't strictly speaking a directive but it looks and acts like one. It's a sink where the final result of the query will be taken from. Thus, you'll want to direct the results of your query in there.&lt;br /&gt;
&lt;br /&gt;
=== Adding directives from the directives list ===&lt;br /&gt;
&lt;br /&gt;
You can add directives into the graph editor by dragging them from the ''Directives list'' subpanel, usually located in the top right corner. The same corner contains the ''Query library'' subpanel in a separate tab, you may need to select the list tab to access it.&lt;br /&gt;
&lt;br /&gt;
All the directives are organised in the list by their category. You can add a directive onto the graph editor by dragging it from the list onto the graph. After this, you can move the directive around in the graph, modify it with the inspector and so on.&lt;br /&gt;
&lt;br /&gt;
=== Connecting directives ===&lt;br /&gt;
&lt;br /&gt;
In the query language model, directives take as an input a single result row, and usually only use the active value of the row. However the directives are usually organised by using the [[From (query directive) |From directive]] which essentially makes one directive take any number of rows as input.&lt;br /&gt;
&lt;br /&gt;
Just like the textual script form has a special syntax for using from directives due to their special nature, so does the graphical editor. In the graphical editor from directives are usually represented as arrows going from one directive to another. The directive boxes themselves have two arrows in the top right and left corners. The arrow in the top left corner represents the output of a directive while the arrow in the top right corner represents the input. To create a connection between directives, drag with your mouse from the output arrow to the input arrow of a different directive. Behind the scenes, a from directive is created to connect the two directives, but in the graph you will only see an arrow.&lt;br /&gt;
&lt;br /&gt;
It is possible to add from directives as actual directive boxes into the graph by dragging them from the directives list. This however is hardly ever needed and makes the directive graph cluttered.&lt;br /&gt;
&lt;br /&gt;
The from directive arrows always go from the left side of one directive box to the right side of another. In the graph you may also have arrows which connect to the bottom of a directive box. These do not represent from directives, they are directives used as parameters for other directives. These are explained in the next section.&lt;br /&gt;
&lt;br /&gt;
Only a single directive can go as input to any one directive. However, you can join directives together by using the [[Join (query directive) |Join directive]]. Just drag it from the directive list onto the graph like any other directive. Then the directives that are to be joined are added in as parameters for the join directive, this is covered in the next section.&lt;br /&gt;
&lt;br /&gt;
=== Editing directives with the inspector ===&lt;br /&gt;
&lt;br /&gt;
When you click the title of a directive box in the query editor, that directive is opened in the directive ''Inspector'' panel, usually located in the bottom right corner.&lt;br /&gt;
&lt;br /&gt;
The inspector works based on the underlying Java classes. Thus the documentation of all the directives in the [[query language]] page will be handy. In the inspector, you need to first select the constructor to use. Some directives only have a single choice but many have a few options. The different choices usually create slight variations of the directive.&lt;br /&gt;
&lt;br /&gt;
After selecting the constructor, you will get fields for all the constructor parameters. Depending on the parameter type, the fields may look slightly different. Textual values get simple text fields; directive values get a drop element where another directive can be dragged and dropped; operands can be specified in different forms, so you'll need to first select how you intend to specify the operand value; finally arrays and collections will have buttons to add and remove new elements and then fields to specify each element.&lt;br /&gt;
&lt;br /&gt;
As mentioned in the previous section, some directives are connected to other directives by being their parameters rather than through the form directive. The parameter directives connect to the bottom edge of another directive in the graph. To make the connection, first select the directive whose parameter you want to set. Then drag the outgoing arrow of another directive into the parameter drop target in the inspector.&lt;br /&gt;
&lt;br /&gt;
The bottom of the inspector panel also has an ''Addons'' section. Directives have additional methods in them which may further modify the directive behaviour. Some of these addon methods are common to all directives, being inherited from the base Directive class. Some are unique to certain directives. To use addons, select the addon you wish to use from the list and click ''Add addon''. After this, you get a section with the parameters for the addon. You can fill in the parameters as you do for the constructor, including possibly using other directives as parameter values.&lt;br /&gt;
&lt;br /&gt;
=== Query flow ===&lt;br /&gt;
&lt;br /&gt;
When executing a query, some kind of an input row is used as the starting point. Ordinarily this will just contain the single selected topic. The execution of the query starts from the Final result box, which can be treated as directive even though it isn't really one. It gets the input row and then checks if another directive is connected to it using the from directive. If there is one, then the input row and execution is passed onto it. Whatever directive is connected, it will do its own thing and eventually return a set of result rows. The pseudo-directive Final result takes these result rows one at a time and then performs its own processing on each one separately. In this case, the processing can be said to be gathering the rows and then displaying them in a table.&lt;br /&gt;
&lt;br /&gt;
The execution works similarly for any other directive. For example, take the [[Instances (query language) |Instances directive]]. It takes an input row, then checks if any other directive is connected and if so the input and execution is passed onto them. When they return with a set of result rows, the instances directive starts doing its job. It takes the result rows of the connected directive, one at a time, and then gets all the instances of the active column in the result row. The results of each individual input row are then combined and given as the final result of the instances directive and given to whichever directive preceded it.&lt;br /&gt;
&lt;br /&gt;
Thus the execution goes from the Final result pseudo directive at the top all the way down the graph to the directives at the end of the chain. The initial input row gets passed down untouched until it reaches the directives at the end of the chain. Those then do their job with the initial input and their output works as the actual input to the higher up directives as the execution returns up the chain. And the Final result then takes the final output at the top of the chain.&lt;br /&gt;
&lt;br /&gt;
If a directive contains other directives as parameters, they get processed when the execution returns to the directive after reaching the end of the chain first. The exact nature of how they are processed may depend on the directive taking them as parameters but the [[Count (query language |Count directive]], for example, gives a good idea of what generally happens. When execution returns to the count directive, after having gone through the whole chain, it starts doing its own processing. This processing is executing the parameter directive, using the input that Count got as the returning input from its connected directive. The results of the parameter directive are then counted and the count number is the output from the count directive. If there are multiple input rows, the parameter directive gets executed multiple times, once for each input. The parameter directive thus represents instructions on what exactly is to be counted, while the input to count acts as the context of where those instructions are applied. The instructions are the same for each input row, but the context is different so each input may get a different result.&lt;br /&gt;
&lt;br /&gt;
This also demonstrates the typical difference between a parameter directive and a from directive, or the two different types of arrows in the graph. A parameter directive defines the behaviour of its containing directive somehow while the from directive just redirects input rows. As another example, the [[Join (query language) |Join directive]] joins the results of two (or more) directives using a cartesian product. The directives that are to be joined are given as parameters to the join directive. A from directive can also be used to specify what acts as input to the join, and subsequently to all its parameter directives.&lt;br /&gt;
&lt;br /&gt;
=== Saving and loading queries ===&lt;br /&gt;
&lt;br /&gt;
Queries can be saved and loaded using the ''Query library'' subpanel, usually located in the top right corner. It shares the corner with the ''Directive list'' subpanel so you may need to select it from the tab list first. To save a query, give it a name and then click the save button. To open one, select one from the list and then click the open button. You can also delete queries by selecting them and then clicking the delete button.&lt;br /&gt;
&lt;br /&gt;
== Executing queries ==&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/Query_editor_topic_panel</id>
		<title>Query editor topic panel</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/Query_editor_topic_panel"/>
				<updated>2015-04-23T09:25:22Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: /* Basics */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''This is an upcoming feature and is not included yet in the public release.'''&lt;br /&gt;
&lt;br /&gt;
Query editor topic panel is one of several different [[topic panels]] in Wandora. Its main purpose is to provide a graphical editor for the Wandora [[query language]], and a way to execute the queries in a topic panel. If you have a query ready, you can just open it in the editor and then execute it by double clicking a topic elsewhere in Wandora. This will open the topic in the current topic panel, which in this case means executing the query using the selected topic as the context. This way you can have a topic panel which gathers information about a selected topic through a customisable query.&lt;br /&gt;
&lt;br /&gt;
[[File:Queryeditor.png|center]]&lt;br /&gt;
&lt;br /&gt;
== Opening the topic panel ==&lt;br /&gt;
&lt;br /&gt;
You can open the query editor topic panel by selecting '''New panel &amp;gt; Query editor''' from the '''View''' menu. This will open the panel and its subpanels that you use to open or build a query.&lt;br /&gt;
&lt;br /&gt;
== Building queries ==&lt;br /&gt;
&lt;br /&gt;
=== Basics ===&lt;br /&gt;
&lt;br /&gt;
Queries are built graphically in the ''Graph Editor'' subpanel, which usually occupies most of the space. Please see the separate page [[query language]] for details about the general principles behind queries. As explained there, queries consist of directives, each of which perform a specific task. In the graphical editor, directives are represented by grey boxes, with the directive name as the title of the box.&lt;br /&gt;
&lt;br /&gt;
Directives can be moved around the editor so that the structure of the query is easier to grasp. The position of directives in the graph does not affect the behaviour of the directive or the whole query at all, it is purely for the benefit of the human looking at the query in the editor.&lt;br /&gt;
&lt;br /&gt;
By clicking the title of a directive you can select it which opens it in the ''Inspector'' sub panel, usually at the lower right corner. The parameters and some other details of the directive can be modified here. Note that some of the parameters are reflected in a compact form in the directive box in the editor graph. This is for information only so that it's a bit easier to see what a specific directive does without opening it in the inspector. The parameters cannot be modified in the graph, only in the inspector.&lt;br /&gt;
&lt;br /&gt;
In addition to all the other directives comprising your query, a box titled ''Final result'' will be present in the graph editor. This isn't strictly speaking a directive but it looks and acts like one. It's a sink where the final result of the query will be taken from. Thus, you'll want to direct the results of your query in there.&lt;br /&gt;
&lt;br /&gt;
=== Adding directives from the directives list ===&lt;br /&gt;
&lt;br /&gt;
You can add directives into the graph editor by dragging them from the ''Directives list'' subpanel, usually located in the top right corner. The same corner contains the ''Query library'' subpanel in a separate tab, you may need to select the list tab to access it.&lt;br /&gt;
&lt;br /&gt;
All the directives are organised in the list by their category. You can add a directive onto the graph editor by dragging it from the list onto the graph. After this, you can move the directive around in the graph, modify it with the inspector and so on.&lt;br /&gt;
&lt;br /&gt;
=== Connecting directives ===&lt;br /&gt;
&lt;br /&gt;
In the query language model, directives take as an input a single result row, and usually only use the active value of the row. However the directives are usually organised by using the [[From (query directive) |From directive]] which essentially makes one directive take any number of rows as input.&lt;br /&gt;
&lt;br /&gt;
Just like the textual script form has a special syntax for using from directives due to their special nature, so does the graphical editor. In the graphical editor from directives are usually represented as arrows going from one directive to another. The directive boxes themselves have two arrows in the top right and left corners. The arrow in the top left corner represents the output of a directive while the arrow in the top right corner represents the input. You can drag from the output arrow to the input arrow of a different directive to connect the two directives. Behind the scenes, a from directive is created to connect the two directives, but in the graph you will only see an arrow.&lt;br /&gt;
&lt;br /&gt;
It is possible to add from directives as actual directive boxes into the graph by dragging them from the directives list. This however is hardly ever needed and makes the directive graph cluttered.&lt;br /&gt;
&lt;br /&gt;
The from directive arrows always go from the left side of one directive box to the right side of another. In the graph you may also have arrows which connect to the bottom of a directive box. These do not represent from directives, they are directives used as parameters for other directives. These are explained in the next section.&lt;br /&gt;
&lt;br /&gt;
Only a single directive can go as input to any one directive. However, you can join directives together by using the [[Join (query directive) |Join directive]]. Just drag it from the directive list onto the graph like any other directive. Then the directives that are to be joined are added in as parameters for the join directive, this is covered in the next section.&lt;br /&gt;
&lt;br /&gt;
=== Editing directives with the inspector ===&lt;br /&gt;
&lt;br /&gt;
When you click the title of a directive box in the query editor, that directive is opened in the directive ''Inspector'' panel, usually located in the bottom right corner.&lt;br /&gt;
&lt;br /&gt;
The inspector works based on the underlying Java classes. Thus the documentation of all the directives in the [[query language]] page will be handy. In the inspector, you need to first select the constructor to use. Some directives only have a single choice but many have a few options. The different choices usually create slight variations of the directive.&lt;br /&gt;
&lt;br /&gt;
After selecting the constructor, you will get fields for all the constructor parameters. Depending on the parameter type, the fields may look slightly different. Textual values get simple text fields; directive values get a drop element where another directive can be dragged and dropped; operands can be specified in different forms, so you'll need to first select how you intend to specify the operand value; finally arrays and collections will have buttons to add and remove new elements and then fields to specify each element.&lt;br /&gt;
&lt;br /&gt;
As mentioned in the previous section, some directives are connected to other directives by being their parameters rather than through the form directive. The parameter directives connect to the bottom edge of another directive in the graph. To make the connection, first select the directive whose parameter you want to set. Then drag the outgoing arrow of another directive into the parameter drop target in the inspector.&lt;br /&gt;
&lt;br /&gt;
The bottom of the inspector panel also has an ''Addons'' section. Directives have additional methods in them which may further modify the directive behaviour. Some of these addon methods are common to all directives, being inherited from the base Directive class. Some are unique to certain directives. To use addons, select the addon you wish to use from the list and click ''Add addon''. After this, you get a section with the parameters for the addon. You can fill in the parameters as you do for the constructor, including possibly using other directives as parameter values.&lt;br /&gt;
&lt;br /&gt;
=== Query flow ===&lt;br /&gt;
&lt;br /&gt;
When executing a query, some kind of an input row is used as the starting point. Ordinarily this will just contain the single selected topic. The execution of the query starts from the Final result box, which can be treated as directive even though it isn't really one. It gets the input row and then checks if another directive is connected to it using the from directive. If there is one, then the input row and execution is passed onto it. Whatever directive is connected, it will do its own thing and eventually return a set of result rows. The pseudo-directive Final result takes these result rows one at a time and then performs its own processing on each one separately. In this case, the processing can be said to be gathering the rows and then displaying them in a table.&lt;br /&gt;
&lt;br /&gt;
The execution works similarly for any other directive. For example, take the [[Instances (query language) |Instances directive]]. It takes an input row, then checks if any other directive is connected and if so the input and execution is passed onto them. When they return with a set of result rows, the instances directive starts doing its job. It takes the result rows of the connected directive, one at a time, and then gets all the instances of the active column in the result row. The results of each individual input row are then combined and given as the final result of the instances directive and given to whichever directive preceded it.&lt;br /&gt;
&lt;br /&gt;
Thus the execution goes from the Final result pseudo directive at the top all the way down the graph to the directives at the end of the chain. The initial input row gets passed down untouched until it reaches the directives at the end of the chain. Those then do their job with the initial input and their output works as the actual input to the higher up directives as the execution returns up the chain. And the Final result then takes the final output at the top of the chain.&lt;br /&gt;
&lt;br /&gt;
If a directive contains other directives as parameters, they get processed when the execution returns to the directive after reaching the end of the chain first. The exact nature of how they are processed may depend on the directive taking them as parameters but the [[Count (query language |Count directive]], for example, gives a good idea of what generally happens. When execution returns to the count directive, after having gone through the whole chain, it starts doing its own processing. This processing is executing the parameter directive, using the input that Count got as the returning input from its connected directive. The results of the parameter directive are then counted and the count number is the output from the count directive. If there are multiple input rows, the parameter directive gets executed multiple times, once for each input. The parameter directive thus represents instructions on what exactly is to be counted, while the input to count acts as the context of where those instructions are applied. The instructions are the same for each input row, but the context is different so each input may get a different result.&lt;br /&gt;
&lt;br /&gt;
This also demonstrates the typical difference between a parameter directive and a from directive, or the two different types of arrows in the graph. A parameter directive defines the behaviour of its containing directive somehow while the from directive just redirects input rows. As another example, the [[Join (query language) |Join directive]] joins the results of two (or more) directives using a cartesian product. The directives that are to be joined are given as parameters to the join directive. A from directive can also be used to specify what acts as input to the join, and subsequently to all its parameter directives.&lt;br /&gt;
&lt;br /&gt;
=== Saving and loading queries ===&lt;br /&gt;
&lt;br /&gt;
Queries can be saved and loaded using the ''Query library'' subpanel, usually located in the top right corner. It shares the corner with the ''Directive list'' subpanel so you may need to select it from the tab list first. To save a query, give it a name and then click the save button. To open one, select one from the list and then click the open button. You can also delete queries by selecting them and then clicking the delete button.&lt;br /&gt;
&lt;br /&gt;
== Executing queries ==&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/Query_editor_topic_panel</id>
		<title>Query editor topic panel</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/Query_editor_topic_panel"/>
				<updated>2015-04-23T09:24:41Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: /* Basics */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''This is an upcoming feature and is not included yet in the public release.'''&lt;br /&gt;
&lt;br /&gt;
Query editor topic panel is one of several different [[topic panels]] in Wandora. Its main purpose is to provide a graphical editor for the Wandora [[query language]], and a way to execute the queries in a topic panel. If you have a query ready, you can just open it in the editor and then execute it by double clicking a topic elsewhere in Wandora. This will open the topic in the current topic panel, which in this case means executing the query using the selected topic as the context. This way you can have a topic panel which gathers information about a selected topic through a customisable query.&lt;br /&gt;
&lt;br /&gt;
[[File:Queryeditor.png|center]]&lt;br /&gt;
&lt;br /&gt;
== Opening the topic panel ==&lt;br /&gt;
&lt;br /&gt;
You can open the query editor topic panel by selecting '''New panel &amp;gt; Query editor''' from the '''View''' menu. This will open the panel and its subpanels that you use to open or build a query.&lt;br /&gt;
&lt;br /&gt;
== Building queries ==&lt;br /&gt;
&lt;br /&gt;
=== Basics ===&lt;br /&gt;
&lt;br /&gt;
Queries are built graphically in the ''Graph Editor'' subpanel, which usually occupies most of the space. Please see the separate page [[query language]] for details about the general principles behind queries. As explained there, queries consist of directives, each of which perform a specific task. In the graphical editor, directives are represented by grey boxes, with the directive name as the title of the box.&lt;br /&gt;
&lt;br /&gt;
Directives can be moved around the editor so that the structure of the query is easier to grasp. The position of directives in the graph does not affect the behaviour of the directive or the whole query at all, it is purely for the benefit of the human looking at the query in the editor.&lt;br /&gt;
&lt;br /&gt;
By clicking the title of a directive you can select it which opens it in the ''Inspector'' sub panel, usually at the lower right corner. The parameters and some other details of the directive can be modified here. Note that some of the parameters are reflected in a compact form in the directive box in the editor graph. This is for information only so that it's a bit easier to see what a specific directive does without opening it in the inspector. The parameters cannot be modified in the graph, only in the inspector.&lt;br /&gt;
&lt;br /&gt;
In addition to all the other directives comprising your query, a box titled '''Final result'' will be present in the graph editor. This isn't strictly speaking a directive but it looks and acts like one. It's a sink where the final result of the query will be taken from. Thus, you'll want to direct the results of your query in there.&lt;br /&gt;
&lt;br /&gt;
=== Adding directives from the directives list ===&lt;br /&gt;
&lt;br /&gt;
You can add directives into the graph editor by dragging them from the ''Directives list'' subpanel, usually located in the top right corner. The same corner contains the ''Query library'' subpanel in a separate tab, you may need to select the list tab to access it.&lt;br /&gt;
&lt;br /&gt;
All the directives are organised in the list by their category. You can add a directive onto the graph editor by dragging it from the list onto the graph. After this, you can move the directive around in the graph, modify it with the inspector and so on.&lt;br /&gt;
&lt;br /&gt;
=== Connecting directives ===&lt;br /&gt;
&lt;br /&gt;
In the query language model, directives take as an input a single result row, and usually only use the active value of the row. However the directives are usually organised by using the [[From (query directive) |From directive]] which essentially makes one directive take any number of rows as input.&lt;br /&gt;
&lt;br /&gt;
Just like the textual script form has a special syntax for using from directives due to their special nature, so does the graphical editor. In the graphical editor from directives are usually represented as arrows going from one directive to another. The directive boxes themselves have two arrows in the top right and left corners. The arrow in the top left corner represents the output of a directive while the arrow in the top right corner represents the input. You can drag from the output arrow to the input arrow of a different directive to connect the two directives. Behind the scenes, a from directive is created to connect the two directives, but in the graph you will only see an arrow.&lt;br /&gt;
&lt;br /&gt;
It is possible to add from directives as actual directive boxes into the graph by dragging them from the directives list. This however is hardly ever needed and makes the directive graph cluttered.&lt;br /&gt;
&lt;br /&gt;
The from directive arrows always go from the left side of one directive box to the right side of another. In the graph you may also have arrows which connect to the bottom of a directive box. These do not represent from directives, they are directives used as parameters for other directives. These are explained in the next section.&lt;br /&gt;
&lt;br /&gt;
Only a single directive can go as input to any one directive. However, you can join directives together by using the [[Join (query directive) |Join directive]]. Just drag it from the directive list onto the graph like any other directive. Then the directives that are to be joined are added in as parameters for the join directive, this is covered in the next section.&lt;br /&gt;
&lt;br /&gt;
=== Editing directives with the inspector ===&lt;br /&gt;
&lt;br /&gt;
When you click the title of a directive box in the query editor, that directive is opened in the directive ''Inspector'' panel, usually located in the bottom right corner.&lt;br /&gt;
&lt;br /&gt;
The inspector works based on the underlying Java classes. Thus the documentation of all the directives in the [[query language]] page will be handy. In the inspector, you need to first select the constructor to use. Some directives only have a single choice but many have a few options. The different choices usually create slight variations of the directive.&lt;br /&gt;
&lt;br /&gt;
After selecting the constructor, you will get fields for all the constructor parameters. Depending on the parameter type, the fields may look slightly different. Textual values get simple text fields; directive values get a drop element where another directive can be dragged and dropped; operands can be specified in different forms, so you'll need to first select how you intend to specify the operand value; finally arrays and collections will have buttons to add and remove new elements and then fields to specify each element.&lt;br /&gt;
&lt;br /&gt;
As mentioned in the previous section, some directives are connected to other directives by being their parameters rather than through the form directive. The parameter directives connect to the bottom edge of another directive in the graph. To make the connection, first select the directive whose parameter you want to set. Then drag the outgoing arrow of another directive into the parameter drop target in the inspector.&lt;br /&gt;
&lt;br /&gt;
The bottom of the inspector panel also has an ''Addons'' section. Directives have additional methods in them which may further modify the directive behaviour. Some of these addon methods are common to all directives, being inherited from the base Directive class. Some are unique to certain directives. To use addons, select the addon you wish to use from the list and click ''Add addon''. After this, you get a section with the parameters for the addon. You can fill in the parameters as you do for the constructor, including possibly using other directives as parameter values.&lt;br /&gt;
&lt;br /&gt;
=== Query flow ===&lt;br /&gt;
&lt;br /&gt;
When executing a query, some kind of an input row is used as the starting point. Ordinarily this will just contain the single selected topic. The execution of the query starts from the Final result box, which can be treated as directive even though it isn't really one. It gets the input row and then checks if another directive is connected to it using the from directive. If there is one, then the input row and execution is passed onto it. Whatever directive is connected, it will do its own thing and eventually return a set of result rows. The pseudo-directive Final result takes these result rows one at a time and then performs its own processing on each one separately. In this case, the processing can be said to be gathering the rows and then displaying them in a table.&lt;br /&gt;
&lt;br /&gt;
The execution works similarly for any other directive. For example, take the [[Instances (query language) |Instances directive]]. It takes an input row, then checks if any other directive is connected and if so the input and execution is passed onto them. When they return with a set of result rows, the instances directive starts doing its job. It takes the result rows of the connected directive, one at a time, and then gets all the instances of the active column in the result row. The results of each individual input row are then combined and given as the final result of the instances directive and given to whichever directive preceded it.&lt;br /&gt;
&lt;br /&gt;
Thus the execution goes from the Final result pseudo directive at the top all the way down the graph to the directives at the end of the chain. The initial input row gets passed down untouched until it reaches the directives at the end of the chain. Those then do their job with the initial input and their output works as the actual input to the higher up directives as the execution returns up the chain. And the Final result then takes the final output at the top of the chain.&lt;br /&gt;
&lt;br /&gt;
If a directive contains other directives as parameters, they get processed when the execution returns to the directive after reaching the end of the chain first. The exact nature of how they are processed may depend on the directive taking them as parameters but the [[Count (query language |Count directive]], for example, gives a good idea of what generally happens. When execution returns to the count directive, after having gone through the whole chain, it starts doing its own processing. This processing is executing the parameter directive, using the input that Count got as the returning input from its connected directive. The results of the parameter directive are then counted and the count number is the output from the count directive. If there are multiple input rows, the parameter directive gets executed multiple times, once for each input. The parameter directive thus represents instructions on what exactly is to be counted, while the input to count acts as the context of where those instructions are applied. The instructions are the same for each input row, but the context is different so each input may get a different result.&lt;br /&gt;
&lt;br /&gt;
This also demonstrates the typical difference between a parameter directive and a from directive, or the two different types of arrows in the graph. A parameter directive defines the behaviour of its containing directive somehow while the from directive just redirects input rows. As another example, the [[Join (query language) |Join directive]] joins the results of two (or more) directives using a cartesian product. The directives that are to be joined are given as parameters to the join directive. A from directive can also be used to specify what acts as input to the join, and subsequently to all its parameter directives.&lt;br /&gt;
&lt;br /&gt;
=== Saving and loading queries ===&lt;br /&gt;
&lt;br /&gt;
Queries can be saved and loaded using the ''Query library'' subpanel, usually located in the top right corner. It shares the corner with the ''Directive list'' subpanel so you may need to select it from the tab list first. To save a query, give it a name and then click the save button. To open one, select one from the list and then click the open button. You can also delete queries by selecting them and then clicking the delete button.&lt;br /&gt;
&lt;br /&gt;
== Executing queries ==&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/Query_editor_topic_panel</id>
		<title>Query editor topic panel</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/Query_editor_topic_panel"/>
				<updated>2015-04-22T14:16:51Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: /* Saving and loading directives */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''This is an upcoming feature and is not included yet in the public release.'''&lt;br /&gt;
&lt;br /&gt;
Query editor topic panel is one of several different [[topic panels]] in Wandora. Its main purpose is to provide a graphical editor for the Wandora [[query language]], and a way to execute the queries in a topic panel. If you have a query ready, you can just open it in the editor and then execute it by double clicking a topic elsewhere in Wandora. This will open the topic in the current topic panel, which in this case means executing the query using the selected topic as the context. This way you can have a topic panel which gathers information about a selected topic through a customisable query.&lt;br /&gt;
&lt;br /&gt;
[[File:Queryeditor.png|center]]&lt;br /&gt;
&lt;br /&gt;
== Opening the topic panel ==&lt;br /&gt;
&lt;br /&gt;
You can open the query editor topic panel by selecting '''New panel &amp;gt; Query editor''' from the '''View''' menu. This will open the panel and its subpanels that you use to open or build a query.&lt;br /&gt;
&lt;br /&gt;
== Building queries ==&lt;br /&gt;
&lt;br /&gt;
=== Basics ===&lt;br /&gt;
&lt;br /&gt;
Queries are built graphically in the ''Graph Editor'' subpanel, which usually occupies most of the space. Please see the separate page [[query language]] for details about the general principles behind queries. As explained there, queries consist of directives, each of which perform a specific task. In the graphical editor, directives are represented by grey boxes, with the directive name as the title of the box.&lt;br /&gt;
&lt;br /&gt;
Directives can be moved around the editor so that the structure of the query is easier to grasp. The position of directives in the graph does not affect the behaviour of the directive itself at all.&lt;br /&gt;
&lt;br /&gt;
By clicking the title of a directive you can select it which opens it in the ''Inspector'' sub panel, usually at the lower right corner. The parameters and some other details of the directive can be modified here. Note that some of the parameters are reflected in a compact form in the directive box in the editor graph. This is for information only so that it's a bit easier to see what a specific directive does without opening it in the inspector. The parameters cannot be modified in the graph, only in the inspector.&lt;br /&gt;
&lt;br /&gt;
In addition to all the other directives comprising your query, a box titled '''Final result'' will be present in the graph editor. This isn't strictly speaking a directive but it looks and acts like one. It's a sink where the final result of the query will be taken from. Thus, you'll want to direct the results of your query in there.&lt;br /&gt;
&lt;br /&gt;
=== Adding directives from the directives list ===&lt;br /&gt;
&lt;br /&gt;
You can add directives into the graph editor by dragging them from the ''Directives list'' subpanel, usually located in the top right corner. The same corner contains the ''Query library'' subpanel in a separate tab, you may need to select the list tab to access it.&lt;br /&gt;
&lt;br /&gt;
All the directives are organised in the list by their category. You can add a directive onto the graph editor by dragging it from the list onto the graph. After this, you can move the directive around in the graph, modify it with the inspector and so on.&lt;br /&gt;
&lt;br /&gt;
=== Connecting directives ===&lt;br /&gt;
&lt;br /&gt;
In the query language model, directives take as an input a single result row, and usually only use the active value of the row. However the directives are usually organised by using the [[From (query directive) |From directive]] which essentially makes one directive take any number of rows as input.&lt;br /&gt;
&lt;br /&gt;
Just like the textual script form has a special syntax for using from directives due to their special nature, so does the graphical editor. In the graphical editor from directives are usually represented as arrows going from one directive to another. The directive boxes themselves have two arrows in the top right and left corners. The arrow in the top left corner represents the output of a directive while the arrow in the top right corner represents the input. You can drag from the output arrow to the input arrow of a different directive to connect the two directives. Behind the scenes, a from directive is created to connect the two directives, but in the graph you will only see an arrow.&lt;br /&gt;
&lt;br /&gt;
It is possible to add from directives as actual directive boxes into the graph by dragging them from the directives list. This however is hardly ever needed and makes the directive graph cluttered.&lt;br /&gt;
&lt;br /&gt;
The from directive arrows always go from the left side of one directive box to the right side of another. In the graph you may also have arrows which connect to the bottom of a directive box. These do not represent from directives, they are directives used as parameters for other directives. These are explained in the next section.&lt;br /&gt;
&lt;br /&gt;
Only a single directive can go as input to any one directive. However, you can join directives together by using the [[Join (query directive) |Join directive]]. Just drag it from the directive list onto the graph like any other directive. Then the directives that are to be joined are added in as parameters for the join directive, this is covered in the next section.&lt;br /&gt;
&lt;br /&gt;
=== Editing directives with the inspector ===&lt;br /&gt;
&lt;br /&gt;
When you click the title of a directive box in the query editor, that directive is opened in the directive ''Inspector'' panel, usually located in the bottom right corner.&lt;br /&gt;
&lt;br /&gt;
The inspector works based on the underlying Java classes. Thus the documentation of all the directives in the [[query language]] page will be handy. In the inspector, you need to first select the constructor to use. Some directives only have a single choice but many have a few options. The different choices usually create slight variations of the directive.&lt;br /&gt;
&lt;br /&gt;
After selecting the constructor, you will get fields for all the constructor parameters. Depending on the parameter type, the fields may look slightly different. Textual values get simple text fields; directive values get a drop element where another directive can be dragged and dropped; operands can be specified in different forms, so you'll need to first select how you intend to specify the operand value; finally arrays and collections will have buttons to add and remove new elements and then fields to specify each element.&lt;br /&gt;
&lt;br /&gt;
As mentioned in the previous section, some directives are connected to other directives by being their parameters rather than through the form directive. The parameter directives connect to the bottom edge of another directive in the graph. To make the connection, first select the directive whose parameter you want to set. Then drag the outgoing arrow of another directive into the parameter drop target in the inspector.&lt;br /&gt;
&lt;br /&gt;
The bottom of the inspector panel also has an ''Addons'' section. Directives have additional methods in them which may further modify the directive behaviour. Some of these addon methods are common to all directives, being inherited from the base Directive class. Some are unique to certain directives. To use addons, select the addon you wish to use from the list and click ''Add addon''. After this, you get a section with the parameters for the addon. You can fill in the parameters as you do for the constructor, including possibly using other directives as parameter values.&lt;br /&gt;
&lt;br /&gt;
=== Query flow ===&lt;br /&gt;
&lt;br /&gt;
When executing a query, some kind of an input row is used as the starting point. Ordinarily this will just contain the single selected topic. The execution of the query starts from the Final result box, which can be treated as directive even though it isn't really one. It gets the input row and then checks if another directive is connected to it using the from directive. If there is one, then the input row and execution is passed onto it. Whatever directive is connected, it will do its own thing and eventually return a set of result rows. The pseudo-directive Final result takes these result rows one at a time and then performs its own processing on each one separately. In this case, the processing can be said to be gathering the rows and then displaying them in a table.&lt;br /&gt;
&lt;br /&gt;
The execution works similarly for any other directive. For example, take the [[Instances (query language) |Instances directive]]. It takes an input row, then checks if any other directive is connected and if so the input and execution is passed onto them. When they return with a set of result rows, the instances directive starts doing its job. It takes the result rows of the connected directive, one at a time, and then gets all the instances of the active column in the result row. The results of each individual input row are then combined and given as the final result of the instances directive and given to whichever directive preceded it.&lt;br /&gt;
&lt;br /&gt;
Thus the execution goes from the Final result pseudo directive at the top all the way down the graph to the directives at the end of the chain. The initial input row gets passed down untouched until it reaches the directives at the end of the chain. Those then do their job with the initial input and their output works as the actual input to the higher up directives as the execution returns up the chain. And the Final result then takes the final output at the top of the chain.&lt;br /&gt;
&lt;br /&gt;
If a directive contains other directives as parameters, they get processed when the execution returns to the directive after reaching the end of the chain first. The exact nature of how they are processed may depend on the directive taking them as parameters but the [[Count (query language |Count directive]], for example, gives a good idea of what generally happens. When execution returns to the count directive, after having gone through the whole chain, it starts doing its own processing. This processing is executing the parameter directive, using the input that Count got as the returning input from its connected directive. The results of the parameter directive are then counted and the count number is the output from the count directive. If there are multiple input rows, the parameter directive gets executed multiple times, once for each input. The parameter directive thus represents instructions on what exactly is to be counted, while the input to count acts as the context of where those instructions are applied. The instructions are the same for each input row, but the context is different so each input may get a different result.&lt;br /&gt;
&lt;br /&gt;
This also demonstrates the typical difference between a parameter directive and a from directive, or the two different types of arrows in the graph. A parameter directive defines the behaviour of its containing directive somehow while the from directive just redirects input rows. As another example, the [[Join (query language) |Join directive]] joins the results of two (or more) directives using a cartesian product. The directives that are to be joined are given as parameters to the join directive. A from directive can also be used to specify what acts as input to the join, and subsequently to all its parameter directives.&lt;br /&gt;
&lt;br /&gt;
=== Saving and loading queries ===&lt;br /&gt;
&lt;br /&gt;
Queries can be saved and loaded using the ''Query library'' subpanel, usually located in the top right corner. It shares the corner with the ''Directive list'' subpanel so you may need to select it from the tab list first. To save a query, give it a name and then click the save button. To open one, select one from the list and then click the open button. You can also delete queries by selecting them and then clicking the delete button.&lt;br /&gt;
&lt;br /&gt;
== Executing queries ==&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/Query_editor_topic_panel</id>
		<title>Query editor topic panel</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/Query_editor_topic_panel"/>
				<updated>2015-04-22T14:13:31Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: /* Query flow */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''This is an upcoming feature and is not included yet in the public release.'''&lt;br /&gt;
&lt;br /&gt;
Query editor topic panel is one of several different [[topic panels]] in Wandora. Its main purpose is to provide a graphical editor for the Wandora [[query language]], and a way to execute the queries in a topic panel. If you have a query ready, you can just open it in the editor and then execute it by double clicking a topic elsewhere in Wandora. This will open the topic in the current topic panel, which in this case means executing the query using the selected topic as the context. This way you can have a topic panel which gathers information about a selected topic through a customisable query.&lt;br /&gt;
&lt;br /&gt;
[[File:Queryeditor.png|center]]&lt;br /&gt;
&lt;br /&gt;
== Opening the topic panel ==&lt;br /&gt;
&lt;br /&gt;
You can open the query editor topic panel by selecting '''New panel &amp;gt; Query editor''' from the '''View''' menu. This will open the panel and its subpanels that you use to open or build a query.&lt;br /&gt;
&lt;br /&gt;
== Building queries ==&lt;br /&gt;
&lt;br /&gt;
=== Basics ===&lt;br /&gt;
&lt;br /&gt;
Queries are built graphically in the ''Graph Editor'' subpanel, which usually occupies most of the space. Please see the separate page [[query language]] for details about the general principles behind queries. As explained there, queries consist of directives, each of which perform a specific task. In the graphical editor, directives are represented by grey boxes, with the directive name as the title of the box.&lt;br /&gt;
&lt;br /&gt;
Directives can be moved around the editor so that the structure of the query is easier to grasp. The position of directives in the graph does not affect the behaviour of the directive itself at all.&lt;br /&gt;
&lt;br /&gt;
By clicking the title of a directive you can select it which opens it in the ''Inspector'' sub panel, usually at the lower right corner. The parameters and some other details of the directive can be modified here. Note that some of the parameters are reflected in a compact form in the directive box in the editor graph. This is for information only so that it's a bit easier to see what a specific directive does without opening it in the inspector. The parameters cannot be modified in the graph, only in the inspector.&lt;br /&gt;
&lt;br /&gt;
In addition to all the other directives comprising your query, a box titled '''Final result'' will be present in the graph editor. This isn't strictly speaking a directive but it looks and acts like one. It's a sink where the final result of the query will be taken from. Thus, you'll want to direct the results of your query in there.&lt;br /&gt;
&lt;br /&gt;
=== Adding directives from the directives list ===&lt;br /&gt;
&lt;br /&gt;
You can add directives into the graph editor by dragging them from the ''Directives list'' subpanel, usually located in the top right corner. The same corner contains the ''Query library'' subpanel in a separate tab, you may need to select the list tab to access it.&lt;br /&gt;
&lt;br /&gt;
All the directives are organised in the list by their category. You can add a directive onto the graph editor by dragging it from the list onto the graph. After this, you can move the directive around in the graph, modify it with the inspector and so on.&lt;br /&gt;
&lt;br /&gt;
=== Connecting directives ===&lt;br /&gt;
&lt;br /&gt;
In the query language model, directives take as an input a single result row, and usually only use the active value of the row. However the directives are usually organised by using the [[From (query directive) |From directive]] which essentially makes one directive take any number of rows as input.&lt;br /&gt;
&lt;br /&gt;
Just like the textual script form has a special syntax for using from directives due to their special nature, so does the graphical editor. In the graphical editor from directives are usually represented as arrows going from one directive to another. The directive boxes themselves have two arrows in the top right and left corners. The arrow in the top left corner represents the output of a directive while the arrow in the top right corner represents the input. You can drag from the output arrow to the input arrow of a different directive to connect the two directives. Behind the scenes, a from directive is created to connect the two directives, but in the graph you will only see an arrow.&lt;br /&gt;
&lt;br /&gt;
It is possible to add from directives as actual directive boxes into the graph by dragging them from the directives list. This however is hardly ever needed and makes the directive graph cluttered.&lt;br /&gt;
&lt;br /&gt;
The from directive arrows always go from the left side of one directive box to the right side of another. In the graph you may also have arrows which connect to the bottom of a directive box. These do not represent from directives, they are directives used as parameters for other directives. These are explained in the next section.&lt;br /&gt;
&lt;br /&gt;
Only a single directive can go as input to any one directive. However, you can join directives together by using the [[Join (query directive) |Join directive]]. Just drag it from the directive list onto the graph like any other directive. Then the directives that are to be joined are added in as parameters for the join directive, this is covered in the next section.&lt;br /&gt;
&lt;br /&gt;
=== Editing directives with the inspector ===&lt;br /&gt;
&lt;br /&gt;
When you click the title of a directive box in the query editor, that directive is opened in the directive ''Inspector'' panel, usually located in the bottom right corner.&lt;br /&gt;
&lt;br /&gt;
The inspector works based on the underlying Java classes. Thus the documentation of all the directives in the [[query language]] page will be handy. In the inspector, you need to first select the constructor to use. Some directives only have a single choice but many have a few options. The different choices usually create slight variations of the directive.&lt;br /&gt;
&lt;br /&gt;
After selecting the constructor, you will get fields for all the constructor parameters. Depending on the parameter type, the fields may look slightly different. Textual values get simple text fields; directive values get a drop element where another directive can be dragged and dropped; operands can be specified in different forms, so you'll need to first select how you intend to specify the operand value; finally arrays and collections will have buttons to add and remove new elements and then fields to specify each element.&lt;br /&gt;
&lt;br /&gt;
As mentioned in the previous section, some directives are connected to other directives by being their parameters rather than through the form directive. The parameter directives connect to the bottom edge of another directive in the graph. To make the connection, first select the directive whose parameter you want to set. Then drag the outgoing arrow of another directive into the parameter drop target in the inspector.&lt;br /&gt;
&lt;br /&gt;
The bottom of the inspector panel also has an ''Addons'' section. Directives have additional methods in them which may further modify the directive behaviour. Some of these addon methods are common to all directives, being inherited from the base Directive class. Some are unique to certain directives. To use addons, select the addon you wish to use from the list and click ''Add addon''. After this, you get a section with the parameters for the addon. You can fill in the parameters as you do for the constructor, including possibly using other directives as parameter values.&lt;br /&gt;
&lt;br /&gt;
=== Query flow ===&lt;br /&gt;
&lt;br /&gt;
When executing a query, some kind of an input row is used as the starting point. Ordinarily this will just contain the single selected topic. The execution of the query starts from the Final result box, which can be treated as directive even though it isn't really one. It gets the input row and then checks if another directive is connected to it using the from directive. If there is one, then the input row and execution is passed onto it. Whatever directive is connected, it will do its own thing and eventually return a set of result rows. The pseudo-directive Final result takes these result rows one at a time and then performs its own processing on each one separately. In this case, the processing can be said to be gathering the rows and then displaying them in a table.&lt;br /&gt;
&lt;br /&gt;
The execution works similarly for any other directive. For example, take the [[Instances (query language) |Instances directive]]. It takes an input row, then checks if any other directive is connected and if so the input and execution is passed onto them. When they return with a set of result rows, the instances directive starts doing its job. It takes the result rows of the connected directive, one at a time, and then gets all the instances of the active column in the result row. The results of each individual input row are then combined and given as the final result of the instances directive and given to whichever directive preceded it.&lt;br /&gt;
&lt;br /&gt;
Thus the execution goes from the Final result pseudo directive at the top all the way down the graph to the directives at the end of the chain. The initial input row gets passed down untouched until it reaches the directives at the end of the chain. Those then do their job with the initial input and their output works as the actual input to the higher up directives as the execution returns up the chain. And the Final result then takes the final output at the top of the chain.&lt;br /&gt;
&lt;br /&gt;
If a directive contains other directives as parameters, they get processed when the execution returns to the directive after reaching the end of the chain first. The exact nature of how they are processed may depend on the directive taking them as parameters but the [[Count (query language |Count directive]], for example, gives a good idea of what generally happens. When execution returns to the count directive, after having gone through the whole chain, it starts doing its own processing. This processing is executing the parameter directive, using the input that Count got as the returning input from its connected directive. The results of the parameter directive are then counted and the count number is the output from the count directive. If there are multiple input rows, the parameter directive gets executed multiple times, once for each input. The parameter directive thus represents instructions on what exactly is to be counted, while the input to count acts as the context of where those instructions are applied. The instructions are the same for each input row, but the context is different so each input may get a different result.&lt;br /&gt;
&lt;br /&gt;
This also demonstrates the typical difference between a parameter directive and a from directive, or the two different types of arrows in the graph. A parameter directive defines the behaviour of its containing directive somehow while the from directive just redirects input rows. As another example, the [[Join (query language) |Join directive]] joins the results of two (or more) directives using a cartesian product. The directives that are to be joined are given as parameters to the join directive. A from directive can also be used to specify what acts as input to the join, and subsequently to all its parameter directives.&lt;br /&gt;
&lt;br /&gt;
=== Saving and loading directives ===&lt;br /&gt;
&lt;br /&gt;
== Executing queries ==&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/Query_editor_topic_panel</id>
		<title>Query editor topic panel</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/Query_editor_topic_panel"/>
				<updated>2015-04-22T14:01:50Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: /* Building queries */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''This is an upcoming feature and is not included yet in the public release.'''&lt;br /&gt;
&lt;br /&gt;
Query editor topic panel is one of several different [[topic panels]] in Wandora. Its main purpose is to provide a graphical editor for the Wandora [[query language]], and a way to execute the queries in a topic panel. If you have a query ready, you can just open it in the editor and then execute it by double clicking a topic elsewhere in Wandora. This will open the topic in the current topic panel, which in this case means executing the query using the selected topic as the context. This way you can have a topic panel which gathers information about a selected topic through a customisable query.&lt;br /&gt;
&lt;br /&gt;
[[File:Queryeditor.png|center]]&lt;br /&gt;
&lt;br /&gt;
== Opening the topic panel ==&lt;br /&gt;
&lt;br /&gt;
You can open the query editor topic panel by selecting '''New panel &amp;gt; Query editor''' from the '''View''' menu. This will open the panel and its subpanels that you use to open or build a query.&lt;br /&gt;
&lt;br /&gt;
== Building queries ==&lt;br /&gt;
&lt;br /&gt;
=== Basics ===&lt;br /&gt;
&lt;br /&gt;
Queries are built graphically in the ''Graph Editor'' subpanel, which usually occupies most of the space. Please see the separate page [[query language]] for details about the general principles behind queries. As explained there, queries consist of directives, each of which perform a specific task. In the graphical editor, directives are represented by grey boxes, with the directive name as the title of the box.&lt;br /&gt;
&lt;br /&gt;
Directives can be moved around the editor so that the structure of the query is easier to grasp. The position of directives in the graph does not affect the behaviour of the directive itself at all.&lt;br /&gt;
&lt;br /&gt;
By clicking the title of a directive you can select it which opens it in the ''Inspector'' sub panel, usually at the lower right corner. The parameters and some other details of the directive can be modified here. Note that some of the parameters are reflected in a compact form in the directive box in the editor graph. This is for information only so that it's a bit easier to see what a specific directive does without opening it in the inspector. The parameters cannot be modified in the graph, only in the inspector.&lt;br /&gt;
&lt;br /&gt;
In addition to all the other directives comprising your query, a box titled '''Final result'' will be present in the graph editor. This isn't strictly speaking a directive but it looks and acts like one. It's a sink where the final result of the query will be taken from. Thus, you'll want to direct the results of your query in there.&lt;br /&gt;
&lt;br /&gt;
=== Adding directives from the directives list ===&lt;br /&gt;
&lt;br /&gt;
You can add directives into the graph editor by dragging them from the ''Directives list'' subpanel, usually located in the top right corner. The same corner contains the ''Query library'' subpanel in a separate tab, you may need to select the list tab to access it.&lt;br /&gt;
&lt;br /&gt;
All the directives are organised in the list by their category. You can add a directive onto the graph editor by dragging it from the list onto the graph. After this, you can move the directive around in the graph, modify it with the inspector and so on.&lt;br /&gt;
&lt;br /&gt;
=== Connecting directives ===&lt;br /&gt;
&lt;br /&gt;
In the query language model, directives take as an input a single result row, and usually only use the active value of the row. However the directives are usually organised by using the [[From (query directive) |From directive]] which essentially makes one directive take any number of rows as input.&lt;br /&gt;
&lt;br /&gt;
Just like the textual script form has a special syntax for using from directives due to their special nature, so does the graphical editor. In the graphical editor from directives are usually represented as arrows going from one directive to another. The directive boxes themselves have two arrows in the top right and left corners. The arrow in the top left corner represents the output of a directive while the arrow in the top right corner represents the input. You can drag from the output arrow to the input arrow of a different directive to connect the two directives. Behind the scenes, a from directive is created to connect the two directives, but in the graph you will only see an arrow.&lt;br /&gt;
&lt;br /&gt;
It is possible to add from directives as actual directive boxes into the graph by dragging them from the directives list. This however is hardly ever needed and makes the directive graph cluttered.&lt;br /&gt;
&lt;br /&gt;
The from directive arrows always go from the left side of one directive box to the right side of another. In the graph you may also have arrows which connect to the bottom of a directive box. These do not represent from directives, they are directives used as parameters for other directives. These are explained in the next section.&lt;br /&gt;
&lt;br /&gt;
Only a single directive can go as input to any one directive. However, you can join directives together by using the [[Join (query directive) |Join directive]]. Just drag it from the directive list onto the graph like any other directive. Then the directives that are to be joined are added in as parameters for the join directive, this is covered in the next section.&lt;br /&gt;
&lt;br /&gt;
=== Editing directives with the inspector ===&lt;br /&gt;
&lt;br /&gt;
When you click the title of a directive box in the query editor, that directive is opened in the directive ''Inspector'' panel, usually located in the bottom right corner.&lt;br /&gt;
&lt;br /&gt;
The inspector works based on the underlying Java classes. Thus the documentation of all the directives in the [[query language]] page will be handy. In the inspector, you need to first select the constructor to use. Some directives only have a single choice but many have a few options. The different choices usually create slight variations of the directive.&lt;br /&gt;
&lt;br /&gt;
After selecting the constructor, you will get fields for all the constructor parameters. Depending on the parameter type, the fields may look slightly different. Textual values get simple text fields; directive values get a drop element where another directive can be dragged and dropped; operands can be specified in different forms, so you'll need to first select how you intend to specify the operand value; finally arrays and collections will have buttons to add and remove new elements and then fields to specify each element.&lt;br /&gt;
&lt;br /&gt;
As mentioned in the previous section, some directives are connected to other directives by being their parameters rather than through the form directive. The parameter directives connect to the bottom edge of another directive in the graph. To make the connection, first select the directive whose parameter you want to set. Then drag the outgoing arrow of another directive into the parameter drop target in the inspector.&lt;br /&gt;
&lt;br /&gt;
The bottom of the inspector panel also has an ''Addons'' section. Directives have additional methods in them which may further modify the directive behaviour. Some of these addon methods are common to all directives, being inherited from the base Directive class. Some are unique to certain directives. To use addons, select the addon you wish to use from the list and click ''Add addon''. After this, you get a section with the parameters for the addon. You can fill in the parameters as you do for the constructor, including possibly using other directives as parameter values.&lt;br /&gt;
&lt;br /&gt;
=== Query flow ===&lt;br /&gt;
&lt;br /&gt;
When executing a query, some kind of an input row is used as the starting point. Ordinarily this will just contain the single selected topic. The execution of the query starts from the Final result box, which can be treated as directive even though it isn't really one. It gets the input row and then checks if another directive is connected to it using the from directive. If there is one, then the input row and execution is passed onto it. Whatever directive is connected, it will do its own thing and eventually return a set of result rows. The pseudo-directive Final result takes these result rows one at a time and then performs its own processing on each one separately. In this case, the processing can be said to be gathering the rows and then displaying them in a table.&lt;br /&gt;
&lt;br /&gt;
The execution works similarly for any other directive. For example, take the [[Instances (query language) |Instances directive]]. It takes an input row, then checks if any other directive is connected and if so the input and execution is passed onto them. When they return with a set of result rows, the instances directive starts doing its job. It takes the result rows of the connected directive, one at a time, and then gets all the instances of the active column in the result row. The results of each individual input row are then combined and given as the final result of the instances directive and given to whichever directive preceded it.&lt;br /&gt;
&lt;br /&gt;
Thus the execution goes from the Final result pseudo directive at the top all the way down the graph to the directives at the end of the chain. The initial input row gets passed down untouched until it reaches the directives at the end of the chain. Those then do their job with the initial input and their output works as the actual input to the higher up directives as the execution returns up the chain. And the Final result then takes the final output at the top of the chain.&lt;br /&gt;
&lt;br /&gt;
If a directive contains other directives as parameters, they get processed when the execution returns to the directive after reaching the end of the chain first. The exact nature of how they are processed may depend on the directive taking them as parameters but the [[Count (query language |Count directive]], for example, gives a good idea of what generally happens. When execution returns to the count directive, after having gone through the whole chain, it starts doing its own processing. This processing is executing the parameter directive, using the input that Count got as actual input from its connected directive. The results of the parameter directive are then counted and the count number is the output from the count directive. If there are multiple input rows, the parameter directive gets executed multiple times, once for each input. The parameter directive thus represents instructions on what exactly is to be counted, while the input to count acts as the context of where those instructions are applied.&lt;br /&gt;
&lt;br /&gt;
The difference between a parameter directive and a from directive is that a parameter directive changes the behaviour of another directive somehow while the from directive just redirects input rows. For example, a players directive gets players of an association. It takes the type and roles of the association as parameters. These change the behaviour of the players directive by changing which associations and roles are used. The same association type and roles are used for all inputs. The from directive, on the other hand, just redirects different input rows for the players directive. &lt;br /&gt;
&lt;br /&gt;
=== Saving and loading directives ===&lt;br /&gt;
&lt;br /&gt;
== Executing queries ==&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/Query_editor_topic_panel</id>
		<title>Query editor topic panel</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/Query_editor_topic_panel"/>
				<updated>2015-04-22T13:36:56Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: /* Building queries */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''This is an upcoming feature and is not included yet in the public release.'''&lt;br /&gt;
&lt;br /&gt;
Query editor topic panel is one of several different [[topic panels]] in Wandora. Its main purpose is to provide a graphical editor for the Wandora [[query language]], and a way to execute the queries in a topic panel. If you have a query ready, you can just open it in the editor and then execute it by double clicking a topic elsewhere in Wandora. This will open the topic in the current topic panel, which in this case means executing the query using the selected topic as the context. This way you can have a topic panel which gathers information about a selected topic through a customisable query.&lt;br /&gt;
&lt;br /&gt;
[[File:Queryeditor.png|center]]&lt;br /&gt;
&lt;br /&gt;
== Opening the topic panel ==&lt;br /&gt;
&lt;br /&gt;
You can open the query editor topic panel by selecting '''New panel &amp;gt; Query editor''' from the '''View''' menu. This will open the panel and its subpanels that you use to open or build a query.&lt;br /&gt;
&lt;br /&gt;
== Building queries ==&lt;br /&gt;
&lt;br /&gt;
=== Basics ===&lt;br /&gt;
&lt;br /&gt;
Queries are built graphically in the ''Graph Editor'' subpanel, which usually occupies most of the space. Please see the separate page [[query language]] for details about the general principles behind queries. As explained there, queries consist of directives, each of which perform a specific task. In the graphical editor, directives are represented by grey boxes, with the directive name as the title of the box.&lt;br /&gt;
&lt;br /&gt;
Directives can be moved around the editor so that the structure of the query is easier to grasp. The position of directives in the graph does not affect the behaviour of the directive itself at all.&lt;br /&gt;
&lt;br /&gt;
By clicking the title of a directive you can select it which opens it in the ''Inspector'' sub panel, usually at the lower right corner. The parameters and some other details of the directive can be modified here. Note that some of the parameters are reflected in a compact form in the directive box in the editor graph. This is for information only so that it's a bit easier to see what a specific directive does without opening it in the inspector. The parameters cannot be modified in the graph, only in the inspector.&lt;br /&gt;
&lt;br /&gt;
In addition to all the other directives comprising your query, a box titled '''Final result'' will be present in the graph editor. This isn't strictly speaking a directive but it looks and acts like one. It's a sink where the final result of the query will be taken from. Thus, you'll want to direct the results of your query in there.&lt;br /&gt;
&lt;br /&gt;
=== Adding directives from the directives list ===&lt;br /&gt;
&lt;br /&gt;
You can add directives into the graph editor by dragging them from the ''Directives list'' subpanel, usually located in the top right corner. The same corner contains the ''Query library'' subpanel in a separate tab, you may need to select the list tab to access it.&lt;br /&gt;
&lt;br /&gt;
All the directives are organised in the list by their category. You can add a directive onto the graph editor by dragging it from the list onto the graph. After this, you can move the directive around in the graph, modify it with the inspector and so on.&lt;br /&gt;
&lt;br /&gt;
=== Connecting directives ===&lt;br /&gt;
&lt;br /&gt;
In the query language model, directives take as an input a single result row, and usually only use the active value of the row. However the directives are usually organised by using the [[From (query directive) |From directive]] which essentially makes one directive take any number of rows as input.&lt;br /&gt;
&lt;br /&gt;
Just like the textual script form has a special syntax for using from directives due to their special nature, so does the graphical editor. In the graphical editor from directives are usually represented as arrows going from one directive to another. The directive boxes themselves have two arrows in the top right and left corners. The arrow in the top left corner represents the output of a directive while the arrow in the top right corner represents the input. You can drag from the output arrow to the input arrow of a different directive to connect the two directives. Behind the scenes, a from directive is created to connect the two directives, but in the graph you will only see an arrow.&lt;br /&gt;
&lt;br /&gt;
It is possible to add from directives as actual directive boxes into the graph by dragging them from the directives list. This however is hardly ever needed and makes the directive graph cluttered.&lt;br /&gt;
&lt;br /&gt;
The from directive arrows always go from the left side of one directive box to the right side of another. In the graph you may also have arrows which connect to the bottom of a directive box. These do not represent from directives, they are directives used as parameters for other directives. These are explained in the next section.&lt;br /&gt;
&lt;br /&gt;
Only a single directive can go as input to any one directive. However, you can join directives together by using the [[Join (query directive) |Join directive]]. Just drag it from the directive list onto the graph like any other directive. Then the directives that are to be joined are added in as parameters for the join directive, this is covered in the next section.&lt;br /&gt;
&lt;br /&gt;
=== Editing directives with the inspector ===&lt;br /&gt;
&lt;br /&gt;
When you click the title of a directive box in the query editor, that directive is opened in the directive ''Inspector'' panel, usually located in the bottom right corner.&lt;br /&gt;
&lt;br /&gt;
The inspector works based on the underlying Java classes. Thus the documentation of all the directives in the [[query language]] page will be handy. In the inspector, you need to first select the constructor to use. Some directives only have a single choice but many have a few options. The different choices usually create slight variations of the directive.&lt;br /&gt;
&lt;br /&gt;
After selecting the constructor, you will get fields for all the constructor parameters. Depending on the parameter type, the fields may look slightly different. Textual values get simple text fields; directive values get a drop element where another directive can be dragged and dropped; operands can be specified in different forms, so you'll need to first select how you intend to specify the operand value; finally arrays and collections will have buttons to add and remove new elements and then fields to specify each element.&lt;br /&gt;
&lt;br /&gt;
As mentioned in the previous section, some directives are connected to other directives by being their parameters rather than through the form directive. The parameter directives connect to the bottom edge of another directive in the graph. To make the connection, first select the directive whose parameter you want to set. Then drag the outgoing arrow of another directive into the parameter drop target in the inspector.&lt;br /&gt;
&lt;br /&gt;
The difference between a parameter directive and a from directive is that a parameter directive changes the behaviour of another directive somehow while the from directive just redirects input rows. For example, a players directive gets players of an association. It takes the type and roles of the association as parameters. These change the behaviour of the players directive by changing which associations and roles are used. The same association type and roles are used for all inputs. The from directive, on the other hand, just redirects different input rows for the players directive. &lt;br /&gt;
&lt;br /&gt;
The bottom of the inspector panel also has an ''Addons'' section. Directives have additional methods in them which may further modify the directive behaviour. Some of these addon methods are common to all directives, being inherited from the base Directive class. Some are unique to certain directives. To use addons, select the addon you wish to use from the list and click ''Add addon''. After this, you get a section with the parameters for the addon. You can fill in the parameters as you do for the constructor, including possibly using other directives as parameter values.&lt;br /&gt;
&lt;br /&gt;
=== Saving and loading directives ===&lt;br /&gt;
&lt;br /&gt;
== Executing queries ==&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/Query_editor_topic_panel</id>
		<title>Query editor topic panel</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/Query_editor_topic_panel"/>
				<updated>2015-04-22T12:29:14Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''This is an upcoming feature and is not included yet in the public release.'''&lt;br /&gt;
&lt;br /&gt;
Query editor topic panel is one of several different [[topic panels]] in Wandora. Its main purpose is to provide a graphical editor for the Wandora [[query language]], and a way to execute the queries in a topic panel. If you have a query ready, you can just open it in the editor and then execute it by double clicking a topic elsewhere in Wandora. This will open the topic in the current topic panel, which in this case means executing the query using the selected topic as the context. This way you can have a topic panel which gathers information about a selected topic through a customisable query.&lt;br /&gt;
&lt;br /&gt;
[[File:Queryeditor.png|center]]&lt;br /&gt;
&lt;br /&gt;
== Opening the topic panel ==&lt;br /&gt;
&lt;br /&gt;
You can open the query editor topic panel by selecting '''New panel &amp;gt; Query editor''' from the '''View''' menu. This will open the panel and its subpanels that you use to open or build a query.&lt;br /&gt;
&lt;br /&gt;
== Building queries ==&lt;br /&gt;
&lt;br /&gt;
=== Basics ===&lt;br /&gt;
&lt;br /&gt;
Queries are built graphically in the ''Graph Editor'' subpanel, which usually occupies most of the space. Please see the separate page [[query language]] for details about the general principles behind queries. As explained there, queries consist of directives, each of which perform a specific task. In the graphical editor, directives are represented by grey boxes, with the directive name as the title of the box.&lt;br /&gt;
&lt;br /&gt;
Directives can be moved around the editor so that the structure of the query is easier to grasp. The position of directives in the graph does not affect the behaviour of the directive itself at all.&lt;br /&gt;
&lt;br /&gt;
By clicking the title of a directive you can select it which opens it in the ''Inspector'' sub panel, usually at the lower right corner. The parameters and some other details of the directive can be modified here. Note that some of the parameters are reflected in a compact form in the directive box in the editor graph. This is for information only so that it's a bit easier to see what a specific directive does without opening it in the inspector. The parameters cannot be modified in the graph, only in the inspector.&lt;br /&gt;
&lt;br /&gt;
In addition to all the other directives comprising your query, a box titled '''Final result'' will be present in the graph editor. This isn't strictly speaking a directive but it looks and acts like one. It's a sink where the final result of the query will be taken from. Thus, you'll want to direct the results of your query in there.&lt;br /&gt;
&lt;br /&gt;
=== Adding directives from the directives list ===&lt;br /&gt;
&lt;br /&gt;
You can add directives into the graph editor by dragging them from the ''Directives list'' subpanel, usually located in the top right corner. The same corner contains the ''Query library'' subpanel in a separate tab, you may need to select the list tab to access it.&lt;br /&gt;
&lt;br /&gt;
All the directives are organised in the list by their category. You can add a directive onto the graph editor by dragging it from the list onto the graph. After this, you can move the directive around in the graph, modify it with the inspector and so on.&lt;br /&gt;
&lt;br /&gt;
=== Connecting directives ===&lt;br /&gt;
&lt;br /&gt;
In the query language model, directives take as an input a single result row, and usually only use the active value of the row. However the directives are usually organised by using the [[From (query directive) |From directive]] which essentially makes one directive take any number of rows as input.&lt;br /&gt;
&lt;br /&gt;
Just like the textual script form has a special syntax for using from directives due to their special nature, so does the graphical editor. In the graphical editor from directives are usually represented as arrows going into other directives. The directive boxes themselves have two arrows in the top right and left corners. The arrow in the top left corner represents the output of a directive while the arrow in the top right corner represents the input. You can drag from the output arrow to the input arrow of a different directive to connect the two directives. Behind the scenes, a from directive is created to connect the two directives, but in the graph you will only see an arrow.&lt;br /&gt;
&lt;br /&gt;
It is possible to add from directives as actual directive boxes into the graph by dragging them from the directives list. This however is hardly ever needed and makes the directive graph cluttered.&lt;br /&gt;
&lt;br /&gt;
In the graph you may also have arrows which connect to the bottom of a directive box. These do not represent from directives, they are directives used as parameters for other directives. These are explained in the next section.&lt;br /&gt;
&lt;br /&gt;
=== Editing directives with the inspector ===&lt;br /&gt;
&lt;br /&gt;
=== Saving and loading directives ===&lt;br /&gt;
&lt;br /&gt;
== Executing queries ==&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/Query_editor_topic_panel</id>
		<title>Query editor topic panel</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/Query_editor_topic_panel"/>
				<updated>2015-04-22T12:01:32Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''This is an upcoming feature and is not included yet in the public release.'''&lt;br /&gt;
&lt;br /&gt;
Query editor topic panel is one of several different [[topic panels]] in Wandora. Its main purpose is to provide a graphical editor for the Wandora [[query language]], and a way to execute the queries in a topic panel. If you have a query ready, you can just open it in the editor and then execute it by double clicking a topic elsewhere in Wandora. This will open the topic in the current topic panel, which in this case means executing the query using the selected topic as the context. This way you can have a topic panel which gathers information about a selected topic through a customisable query.&lt;br /&gt;
&lt;br /&gt;
[[File:Queryeditor.png|center]]&lt;br /&gt;
&lt;br /&gt;
== Opening the topic panel ==&lt;br /&gt;
&lt;br /&gt;
You can open the query editor topic panel by selecting '''New panel &amp;gt; Query editor''' from the '''View''' menu. This will open the panel and its subpanels that you use to open or build a query.&lt;br /&gt;
&lt;br /&gt;
== Building queries ==&lt;br /&gt;
&lt;br /&gt;
== Executing queries ==&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/File:Queryeditor.png</id>
		<title>File:Queryeditor.png</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/File:Queryeditor.png"/>
				<updated>2015-04-22T12:01:11Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: Protected &amp;quot;File:Queryeditor.png&amp;quot; (‎[edit=sysop] (indefinite) ‎[move=sysop] (indefinite) ‎[upload=sysop] (indefinite))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Query editor topic panel]]&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/File:Queryeditor.png</id>
		<title>File:Queryeditor.png</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/File:Queryeditor.png"/>
				<updated>2015-04-22T12:00:59Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: Query editor topic panel&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Query editor topic panel]]&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/Query_editor_topic_panel</id>
		<title>Query editor topic panel</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/Query_editor_topic_panel"/>
				<updated>2015-04-22T11:45:27Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: Protected &amp;quot;Query editor topic panel&amp;quot; (‎[edit=sysop] (indefinite) ‎[move=sysop] (indefinite))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''This is an upcoming feature and is not included yet in the public release.'''&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/Query_editor_topic_panel</id>
		<title>Query editor topic panel</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/Query_editor_topic_panel"/>
				<updated>2015-04-22T11:45:17Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: Created page with &amp;quot;'''This is an upcoming feature and is not included yet in the public release.'''&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''This is an upcoming feature and is not included yet in the public release.'''&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/Topic_panels</id>
		<title>Topic panels</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/Topic_panels"/>
				<updated>2015-04-22T11:44:48Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Topic panel is Wandora's user interface component used to view and edit topics. Wandora supports several different topic panels. These panels are&lt;br /&gt;
&lt;br /&gt;
* [[Traditional topic panel]]&lt;br /&gt;
* [[Tabbed topic panel]]&lt;br /&gt;
* [[Graph topic panel]]&lt;br /&gt;
* [[Custom topic panel]]&lt;br /&gt;
* [[Treemap topic panel]]&lt;br /&gt;
* [[R topic panel]]&lt;br /&gt;
* [[Processing topic panel]]&lt;br /&gt;
* [[Sketch grid]]&lt;br /&gt;
* [[Query editor topic panel]]&lt;br /&gt;
&lt;br /&gt;
Traditional topic panel shows all topic elements in one page using a table elements while tabbed panel shows only one element type at once. Graph topic panel is used for topic map graph visualizations. Custom topic panel lets you customize the view and define more complex relations between topics. Treemap topic panel visualizes associations of a topic to selected depth. Processing topic panel is a programmable panel for advanced topic visualizations. R topic panel can be used to run R language scripts against topic opened into the topic panel. Query editor topic panel can be used build queries in the Wandora [[Query language]] and then run them and examine the query results.&lt;br /&gt;
&lt;br /&gt;
Wandora user controls topic panels with menu options under '''View'''.&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/Concat_(query_directive)</id>
		<title>Concat (query directive)</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/Concat_(query_directive)"/>
				<updated>2014-09-23T08:16:24Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: Protected &amp;quot;Concat (query directive)&amp;quot; (‎[edit=sysop] (indefinite) ‎[move=sysop] (indefinite))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description ==&lt;br /&gt;
&lt;br /&gt;
Executes the wrapped directive and concatenates the String representation of active column values from the results of that query. A delimiter string can be given optionally used between the concatenated values, the default value for this is &amp;quot;; &amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Constructor ==&lt;br /&gt;
&lt;br /&gt;
Concat(Directive directive[,String delimiter])&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
Following example concatenates the base names of all the instances of the active topic.&lt;br /&gt;
&lt;br /&gt;
 importPackage(org.wandora.query2);&lt;br /&gt;
 new Concat(&lt;br /&gt;
   new BaseName().from(new Instances())&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Query directive]]&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/Concat_(query_directive)</id>
		<title>Concat (query directive)</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/Concat_(query_directive)"/>
				<updated>2014-09-23T08:16:16Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: Created page with &amp;quot;== Description ==  Executes the wrapped directive and concatenates the String representation of active column values from the results of that query. A delimiter string can be ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description ==&lt;br /&gt;
&lt;br /&gt;
Executes the wrapped directive and concatenates the String representation of active column values from the results of that query. A delimiter string can be given optionally used between the concatenated values, the default value for this is &amp;quot;; &amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Constructor ==&lt;br /&gt;
&lt;br /&gt;
Concat(Directive directive[,String delimiter])&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
Following example concatenates the base names of all the instances of the active topic.&lt;br /&gt;
&lt;br /&gt;
 importPackage(org.wandora.query2);&lt;br /&gt;
 new Concat(&lt;br /&gt;
   new BaseName().from(new Instances())&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Query directive]]&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/Query_language</id>
		<title>Query language</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/Query_language"/>
				<updated>2014-09-23T08:12:58Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: /* Aggregate */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wandora uses a custom query language to select topics in a topic map. Currently the query language is used in the search tool, in [[Custom topic panel]] and in [[Query topic map]]. Image below illustrates Wandora's query interface in search tool. Search tool is opened with menu option '''Edit &amp;gt; Find...'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Find_query_tab.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Wandora does not use any standard query language. Instead queries are done by invoking a method of a Java class implementing a certain interface. The class may then perform anything whatsoever as long as in the end it returns query results in the format specified by the Java interface. Wandora does however include a number of classes designed in a way that makes it possible to build complex queries by combining these simple predefined query directive classes. This somewhat resembles a traditional query language.&lt;br /&gt;
&lt;br /&gt;
The queries are defined using a generic scripting language. Wandora uses Java scripting API so it should be possible to use a number of different languages. Examples in this article should work with Mozilla Rhino 1.6 scripting engine using ECMAScript. This scripting engine should be present in most installations. ECMAScript syntax is very similar to regular Java syntax. &lt;br /&gt;
&lt;br /&gt;
Following example demonstrates a query that selects the number of instances in a topic.&lt;br /&gt;
&lt;br /&gt;
 1 importPackage(org.wandora.query2);&lt;br /&gt;
 2 new Count(&lt;br /&gt;
 3   new Instances()&lt;br /&gt;
 4 );&lt;br /&gt;
&lt;br /&gt;
First line imports the query package. This is one of few common cases where ECMAScript syntax is different than normal Java syntax. Lines 2 to 4 contain the actual query. The ''Count'' directive counts the number of rows in the result of the directive inside it. The ''Instances'' directive inside ''Count'' on line 3 selects all instances of the input.&lt;br /&gt;
&lt;br /&gt;
All directives may return any number of rows and get as input a single row. Each row may contain any number of values. Values are indexed with column role names which can be any text strings but are generally formed like URIs. Thus each row resembles a topic map association, only without an association type. One of the columns in a row is marked as active. This is usually the column that was last added or modified by a directive and its value is the primary input for other directives. Most directives use the default column name &amp;quot;#DEFAULT&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
It was said above that each directive receives as input only a single row. However in the above example the ''Count'' directive counts the number of rows of the ''Instances'' directive which of course may be any number of rows. The ''Instances'' directive or its result are not actually considered input to ''Count'' directive. ''Count'' is executed first so it must have received input before we even get to ''Instances''. The input to top-most directive is usually the currently open topic in Wandora. To be more specific, it contains a single column with the default name and the value is the currently open topic in Wandora and this single column is the active column of the row.&lt;br /&gt;
&lt;br /&gt;
The ''Count'' directive passes its input to the inner ''Instances'' directive as is. The ''Instances'' directive uses the active column of its input, in this case the currently open topic in Wandora, and gets all instances of that. Generally directives add their results to the input row as new columns with the default name and set the new column as active. In this case the only column in input uses the default name and gets overwritten. Thus the result of the ''Instances'' directive is some number of rows, each containing a single column with the default name and the value is some topic which is an instance of the input.&lt;br /&gt;
&lt;br /&gt;
The result of the ''Instances'' directive goes back to the ''Count'' directive which counts the rows in it. It adds this number in the input row, not the results of ''Instances'' directive. Again the single column gets overwritten because it had the default name. The final result is a single row which contains a single column with the default name and a number indicating the number of instances in the currently open topic.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
 ! #DEFAULT&lt;br /&gt;
 |-&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | 9&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Now lets modify the query slightly.&lt;br /&gt;
&lt;br /&gt;
 1 importPackage(org.wandora.query2);&lt;br /&gt;
 2 new Count(&lt;br /&gt;
 3   new Instances()&lt;br /&gt;
 4 ).from(&lt;br /&gt;
 5   new Instances()&lt;br /&gt;
 6 )&lt;br /&gt;
&lt;br /&gt;
The ''from'' method on line 4 causes the input for the ''Count'' directive to come from some other directive. In this case we use again an ''Instances'' directive. The execution of this query goes as follows. The initial input, the currently open topic, first goes to the directive inside the ''from'' part, that is ''Instances'' directive on line 5. This returns the instances of the currently open topic. Then each of these result rows are fed one at a time to the ''Count'' directive and all the results of ''Count'' are combined. The ''Count'' directive itself works exactly as in previous example, it only gets a different input this time. Now it counts the instances of all instances of the currently open topic. We still only get one column in the final result because at each step the default column gets overwritten. The final result might look something like this.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
 ! #DEFAULT&lt;br /&gt;
 |-&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | 7&lt;br /&gt;
 |-&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | 2&lt;br /&gt;
 |-&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
 |-&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
 |-&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | 4&lt;br /&gt;
 |-&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
 |-&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
 |-&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
 |-&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | 9&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
In the above table each number tells the number of instances of some topic which is an instance of the currently open topic. But this isn't very useful since we can't know which number corresponds to which topic. So let's modify the query a bit again.&lt;br /&gt;
&lt;br /&gt;
 1 importPackage(org.wandora.query2);&lt;br /&gt;
 2 new Count(&lt;br /&gt;
 3   new Instances()&lt;br /&gt;
 4 ).as(&amp;quot;#count&amp;quot;).from(&lt;br /&gt;
 5   new Instances().as(&amp;quot;#instance&amp;quot;)&lt;br /&gt;
 6 )&lt;br /&gt;
&lt;br /&gt;
The ''as'' methods on line 4 and 5 reset the column name to something other than the default. On line 5 we change the column containing the instance topics to &amp;quot;#instance&amp;quot; and on line 4 the column for the count number to &amp;quot;#count&amp;quot;. Now our final result has these two columns and we can actually see which topic each of the instance counts belongs to.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
 ! #instance&lt;br /&gt;
 ! #count&lt;br /&gt;
 |-&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | Role&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | 7&lt;br /&gt;
 |-&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | Wandora variant name version&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | 2&lt;br /&gt;
 |-&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | Association type&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
 |-&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | Wandora class&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
 |-&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | Wandora language&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | 4&lt;br /&gt;
 |-&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | Role class&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
 |-&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | Content type&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
 |-&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | Occurrence type&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
 |-&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | Schema type&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | 9&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
As was mentioned earlier, directives usually use the active column value of the input row. This active column is the last column that was added or modified. In most cases this is the right choice for input but not always. Let's say we want to get the base name of the instance topics too and add a ''BaseName'' directive as is done on line 5 in following example.&lt;br /&gt;
&lt;br /&gt;
 1 importPackage(org.wandora.query2);&lt;br /&gt;
 2 new Count(&lt;br /&gt;
 3   new Instances()&lt;br /&gt;
 4 ).as(&amp;quot;#count&amp;quot;).from(&lt;br /&gt;
 5   new BaseName().as(&amp;quot;#basename&amp;quot;).from(&lt;br /&gt;
 6     new Instances().as(&amp;quot;#instance&amp;quot;)&lt;br /&gt;
 7   )&lt;br /&gt;
 8 )&lt;br /&gt;
&lt;br /&gt;
The base name column is the last column added and thus the active column. The instances directive tries to use this as input. This will fail because the base names aren't actually topics. To fix this we need to manually change the active column.&lt;br /&gt;
&lt;br /&gt;
 1 importPackage(org.wandora.query2);&lt;br /&gt;
 2 new Count(&lt;br /&gt;
 3   new Instances().of(&amp;quot;#instance&amp;quot;)&lt;br /&gt;
 4 ).as(&amp;quot;#count&amp;quot;).from(&lt;br /&gt;
 5   new BaseName().as(&amp;quot;#basename&amp;quot;).from(&lt;br /&gt;
 6     new Instances().as(&amp;quot;#instance&amp;quot;)&lt;br /&gt;
 7   )&lt;br /&gt;
 8 )&lt;br /&gt;
&lt;br /&gt;
The ''of'' method on line 3 changes the active column before the input gets to the ''Instances'' directive and this query works as expected.&lt;br /&gt;
&lt;br /&gt;
Now that we have the base name, we can use it for something. We can for example only include rows where the base name contains the word &amp;quot;type&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 1  importPackage(org.wandora.query2);&lt;br /&gt;
 2  new Count(&lt;br /&gt;
 3    new Instances().of(&amp;quot;#instance&amp;quot;)&lt;br /&gt;
 4  ).as(&amp;quot;#count&amp;quot;).from(&lt;br /&gt;
 5    new BaseName().as(&amp;quot;#basename&amp;quot;).from(&lt;br /&gt;
 6      new Instances().as(&amp;quot;#instance&amp;quot;)&lt;br /&gt;
 7    ).where(&lt;br /&gt;
 8      new Regex(&amp;quot;.*type.*&amp;quot;)&lt;br /&gt;
 9    )&lt;br /&gt;
 10 )&lt;br /&gt;
&lt;br /&gt;
The ''where'' method on line 7 is used to filter rows. It contains a filtering directive, in this case ''Regex'' which filters based on a regular expression. The regular expression &amp;quot;.*type.*&amp;quot; matches everything that contains the word &amp;quot;type&amp;quot; somewhere in the base name. &lt;br /&gt;
&lt;br /&gt;
We could call the ''where'' method after everything else at line 10 and get the same result (we would have to add ''of'' method call too so the comparison is done using the right column). However this would cause the ''Count'' directive to be processed for all rows, even those that are eventually going to be filtered out anyway. In this case it may not have a drastic effect but the directive inside ''Count'' on line 3 could be something much more complex and take significant amount of time to process. Then the place where the filtering is done would have a significant effect on the time it takes to execute the query. In general, you should try to reduce the number of rows processed as early as possible.&lt;br /&gt;
&lt;br /&gt;
The final result of the above query is.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
 ! #instance&lt;br /&gt;
 ! #basename&lt;br /&gt;
 ! #count&lt;br /&gt;
 |-&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | Association type&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | Association type&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
 |-&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | Content type&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | Content type&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
 |-&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | Occurrence type&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | Occurrence type&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
 |-&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | Schema type&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | Schema type&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | 9&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Some directives take ''TopicOperand''s as parameters. These are essentially things that will resolve into a topic in some way. It can be an actual Topic object, a String containing the subject identifier of a topic or a directive which produces the topic as the default value of the first result row. If the directive operand produces more than one row, all the other rows are ignored. The operand gets as input the same input row as the directive using the operand. &lt;br /&gt;
&lt;br /&gt;
The most usual case is to use the subject identifier, you'll pass this to the directive simply as a String. The following example illustrates this. A topic is passed directly to ''IsOfType'' as a subject identifier String. So this gets all instances that are of the specified type.&lt;br /&gt;
&lt;br /&gt;
 1 importPackage(org.wandora.query2);&lt;br /&gt;
 2 new Instances()&lt;br /&gt;
 3 .where(&lt;br /&gt;
 4   new IsOfType(&amp;quot;http://www.wandora.org/core/associationtype&amp;quot;)&lt;br /&gt;
 5 )&lt;br /&gt;
&lt;br /&gt;
Only when the operand somehow depends on the input row, do you need to use a directive as an operand. And in this case you typically just have an ''Of'' directive which picks one column from the input row, but in theory the directive could be as complex as you want. The following example gets instances of the current topic that are instances of themselves. Here the ''IsOfType'' filter depends on the input row being filtered instead of filtering with a static topic like in the previous example. The ''Of'' directive could in this case be replaced with a simple ''Identity'' to do the same thing because the active (and only) column in the input is the topic itself.&lt;br /&gt;
&lt;br /&gt;
 1 importPackage(org.wandora.query2);&lt;br /&gt;
 2 new Instances()&lt;br /&gt;
 3 .where(&lt;br /&gt;
 4   new IsOfType(new Of(&amp;quot;#DEFAULT&amp;quot;))&lt;br /&gt;
 5 )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can find examples of queries on all of the directive pages (see list below). There are also some more [[Complex example queries]] on a separate page.&lt;br /&gt;
&lt;br /&gt;
== Directives ==&lt;br /&gt;
&lt;br /&gt;
=== Query Structure ===&lt;br /&gt;
&lt;br /&gt;
Note that ''As'', ''From'', ''Join'' and ''Of'' directives can be constructed by calling similarly named methods in directives instead of creating them using the constructors of the classes directly. Using the methods to define the query structure usually results in much more readable queries.&lt;br /&gt;
&lt;br /&gt;
* [[As (query directive) |As]]([String original,] String newRole) - Changes the role name of the active column or the specified column.&lt;br /&gt;
&lt;br /&gt;
* [[From (query directive) |From]](Directive to,Directive from) - Takes the results from one directive and feeds them one row at a time to another combining all results.&lt;br /&gt;
&lt;br /&gt;
* [[First (query directive) |First]]([int count,] Directive directive) - Returns the first or the first N rows of specified directive.&lt;br /&gt;
&lt;br /&gt;
* [[If (query directive) |If]](Directive cond,Directive then[,Directive else]) - Returns results of one of two directives depending on the input.&lt;br /&gt;
&lt;br /&gt;
* [[Join (query directive) |Join]](Directive d1,Directive d2,...) - Joins the results of inner directives by performing a cartesian product on the results of them.&lt;br /&gt;
&lt;br /&gt;
* [[Last (query directive) |Last]]([int count,] Directive directive) - Returns the last or last N rows of specified directive.&lt;br /&gt;
&lt;br /&gt;
* [[Of (query directive) |Of]](String role) - Changes the active column of input to the specified column.&lt;br /&gt;
&lt;br /&gt;
* [[Recursive (query directive) |Recursive]](Directive recursion[,int maxDepth[,boolean onlyLeaves]]) - Applies a directive recursively.&lt;br /&gt;
&lt;br /&gt;
* [[Roles (query directive) |Roles]](String s1[,...]) - Returns the input row but with only the specified roles. If a role is not found in input, it is added with null value.&lt;br /&gt;
&lt;br /&gt;
* [[Union (query directive) |Union]](Directive d1,Directive d2[,...]) - Joins the results of inner directives by concatenating them.&lt;br /&gt;
&lt;br /&gt;
* [[Unique (query directive) |Unique]](Directive directive) - Removes duplicate rows.&lt;br /&gt;
&lt;br /&gt;
=== Aggregate ===&lt;br /&gt;
&lt;br /&gt;
* [[Average (query directive) |Average]](Directive directive) - Returns the average of values of active column.&lt;br /&gt;
&lt;br /&gt;
* [[Count (query directive) |Count]](Directive directive) - Counts the number of rows returned by the inner directive using same input the ''Count'' directive got.&lt;br /&gt;
&lt;br /&gt;
* [[Concat (query directive) |Concat]](Directive directive) - Concatenates the String representation of active column values.&lt;br /&gt;
&lt;br /&gt;
* [[Sum (query directive) |Sum]](Directive directive) - Returns the sum of values of active column.&lt;br /&gt;
&lt;br /&gt;
=== Primitive ===&lt;br /&gt;
&lt;br /&gt;
* [[Empty (query directive) |Empty]]() - Returns an empty result.&lt;br /&gt;
&lt;br /&gt;
* [[Identity (query directive) |Identity]]() - Returns the input row as is.&lt;br /&gt;
&lt;br /&gt;
* [[Literals (query directive) |Literals]](String s1,[...]) - Returns the strings provided to constructor.&lt;br /&gt;
&lt;br /&gt;
* [[Null (query directive) |Null]]() - Returns a null value.&lt;br /&gt;
&lt;br /&gt;
* [[Static (query directive) |Static]](ArrayList&amp;lt;Result&amp;gt; rows) - Returns the provided result rows.&lt;br /&gt;
&lt;br /&gt;
=== Filtering ===&lt;br /&gt;
&lt;br /&gt;
Note: All filtering directives can be used with the ''where'' method present in all directives. ''A.where(B)'' resolves to ''new From(B,A)''.&lt;br /&gt;
&lt;br /&gt;
* [[And (query directive) |And]](WhereDirective d1,WhereDirective d2,[...]) - Includes rows which satisfy all inner filtering directives.&lt;br /&gt;
&lt;br /&gt;
* [[Compare (query directive) |Compare]](String operand1,String operator,String operand2[,boolean numeric]) - Compares the values of two roles in the input column. &lt;br /&gt;
&lt;br /&gt;
* [[Exists (query directive) |Exists]](Directive directive) - Includes rows where the inner directive returns a non-empty result using the row itself as input.&lt;br /&gt;
&lt;br /&gt;
* [[IsOfType (query directive) |IsOfType]](TopicOperand op) - Includes rows where the active column value is an instance of the specified type.&lt;br /&gt;
&lt;br /&gt;
* [[Not (query directive) |Not]](WhereDirective directive) - Returns rows which do not satisfy the inner filtering directive.&lt;br /&gt;
&lt;br /&gt;
* [[Or (query directive) |Or]](WhereDirective d1,WhereDirective d2[,...]) - Includes rows which satisfy at least one of inner filtering directive.&lt;br /&gt;
&lt;br /&gt;
* [[Regex (query directive) |Regex]](String regex[,int mode]) - Includes rows where the active column matches the specified regular expression.&lt;br /&gt;
&lt;br /&gt;
=== Topic maps directives ===&lt;br /&gt;
&lt;br /&gt;
Result and input rows may contain values of any type. Most other than topic maps related directives only use string values. Most topic maps related queries assume that input values are either topics or subject identifiers of topics. Thus it is usually not necessary to specifically convert string values to topics first. The most common case where you would want to specifically do that is to ensure that the final result of the query contains topics instead of string. This allows you to use all the Wandora topic related tools on the result table. To convert subject identifier string to topics use the [[Topics (query directive)|Topics]] directive.&lt;br /&gt;
&lt;br /&gt;
* [[AllTopics (query directive) |AllTopics]]() - Returns all topics of the topic map. &lt;br /&gt;
&lt;br /&gt;
* [[BaseName (query directive) |BaseName]]() - Gets the base name of the active column value of input.&lt;br /&gt;
&lt;br /&gt;
* [[Instances (query directive) |Instances]]() - Gets all instances of the active column value of input.&lt;br /&gt;
&lt;br /&gt;
* [[IsOfType (query directive) |IsOfType]](TopicOperand op) - Includes rows where the active column value is an instance of the specified type.&lt;br /&gt;
&lt;br /&gt;
* [[Occurrence (query directive |Occurrence]]([TopicOperand type][,TopicOperand version]) - Gets the occurrence with specified type and version from the active column value of input. You can leave out the version to get all occurrences of a type or both parameters to get all occurrences in the topic.&lt;br /&gt;
&lt;br /&gt;
* [[Players (query directive) |Players]](TopicOperand associationType,TopicOperand r1[,...]) - Gets players of specified roles from associations of specified type.&lt;br /&gt;
&lt;br /&gt;
* [[SubjectIdentifiers (query directive) |SubjectIdentifiers]]() - Gets all subject identifiers of the active column value of input.&lt;br /&gt;
&lt;br /&gt;
* [[Topics (query directive) |Topics]]() - Gets the topic with subject identifier equal to the string value of the active column value of input.&lt;br /&gt;
&lt;br /&gt;
* [[Types (query directive) |Types]]() - Gets all types of the active column value of input.&lt;br /&gt;
&lt;br /&gt;
* [[Variant (query directive) |Variant]]([TopicOperand type][,TopicOperand version]) - Gets the variant name with the specified type and version from the active column value of input. You can leave out the version to get all variants of a type or both parameters to get all variants in the topic.&lt;br /&gt;
&lt;br /&gt;
* [[Variant2 (query directive) |Variant2]](TopicOperand scope, [...]) - Gets the variant name with the specified scope. You can use this to get variants with any kind of scope while the other directive is specifically for variants which have exactly two topics in the scope, a type and a version.&lt;br /&gt;
&lt;br /&gt;
=== Others ===&lt;br /&gt;
&lt;br /&gt;
* [[Eval (query directive) |Eval]](String expression) - Evaluates a script.&lt;br /&gt;
&lt;br /&gt;
* [[Regex (query directive) |Regex]](String regex[,String replace][,int mode]) - Filters and/or performs search and replace operations using regular expressions.&lt;br /&gt;
&lt;br /&gt;
== Notes, known issues, and limitations ==&lt;br /&gt;
&lt;br /&gt;
Most of these things you can work around by using the [[Eval (query directive) |Eval]] directive. It takes a custom script which can then do pretty much anything. See examples in the directive page.&lt;br /&gt;
&lt;br /&gt;
* Explicit '''new''' operator in front of directives can be omitted.&lt;br /&gt;
* You can use the query language with [http://www.jython.org Jython] scripts too. You need version 2.5.1 of Jython or later. Jython scripts don't return the value of the last line, instead you have to assign the query directive in a variable ''query''. The syntax is naturally slightly different, specifically you don't use the ''new'' operator when constructing new classes and there are the usual python restrictions to whitespace use. Also note that the ''Eval'' directive still uses the default scripting engine i.e. ECMAScript, even if invoked through Jython. For example one of the introduction examples in Jython:&lt;br /&gt;
&lt;br /&gt;
 from org.wandora.query2 import *&lt;br /&gt;
 query=Count(&lt;br /&gt;
   Instances()&lt;br /&gt;
 ).as(&amp;quot;#count&amp;quot;).from(&lt;br /&gt;
   Instances().as(&amp;quot;#instance&amp;quot;)&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
Wandora also supports [[TMQL]] queries.&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/Players_(query_directive)</id>
		<title>Players (query directive)</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/Players_(query_directive)"/>
				<updated>2014-09-23T08:02:27Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: /* Notes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description ==&lt;br /&gt;
&lt;br /&gt;
Gets players of specified roles from associations of specified type. Input topic is the active column value of input row. &lt;br /&gt;
&lt;br /&gt;
== Constructor ==&lt;br /&gt;
&lt;br /&gt;
Players(TopicOperand associationType,TopicOperand r1,...) &lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
This directive contains a method ''whereInputIs(String role)''. This method can be used to set an additional requirement for the returned rows. The input topic must play the specified role for a row to be included in the results. For example ''new Players(XTMPSI.SUPERCLASS_SUBCLASS,XTMPSI.SUBCLASS).whereInputIs(XTMPSI.SUPERCLASS)'' will return all subclasses of input. Since the input class itself is likely to be a subclass of some other class, it might be returned as well without the ''whereInputIs'' method call.&lt;br /&gt;
&lt;br /&gt;
The players directive contains another helpful method, ''usingColumns''. This can be used to set the role names of the columns returned by the directive, like using the [[As (query directive) |As]] directive, or the equivalent method present in all directive. However, ''usingColumns'' lets you set all the returned players in one go instead of having to chain multiple [[Of (query directive) |Of]] and [[As (query directive) |As]] directives. ''usingColumns'' takes any number of parameters, first parameter being the role of the first returned player and so on.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
Following example gets the super classes of the input topic. The call to ''whereInputIs'' makes sure that the input topic plays the role sub class in any association whose players might be included. Without it an association where the input topic is a super class of some other topic might be considered and the input topic included in the results. &lt;br /&gt;
&lt;br /&gt;
 importPackage(org.wandora.query2);&lt;br /&gt;
 importPackage(org.wandora.topicmap);&lt;br /&gt;
 new Players(XTMPSI.SUPERCLASS_SUBCLASS,XTMPSI.SUPERCLASS)&lt;br /&gt;
   .whereInputIs(XTMPSI.SUBCLASS),&lt;br /&gt;
&lt;br /&gt;
[[Category:Query directives]]&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/D3_matrix_service_module</id>
		<title>D3 matrix service module</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/D3_matrix_service_module"/>
				<updated>2014-05-16T09:53:09Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;D3 matrix service module provides a two dimensional matrix visualization of the topic map in Wandora. The D3 matrix service module is part of Wandora's embedded HTTP server. It uses the open source Javascript visualization library [http://d3js.org/ D3.js]. The service module's alias is '''d3graph''' and access URL&lt;br /&gt;
&lt;br /&gt;
 http://127.0.0.1:8898/d3/matrix&lt;br /&gt;
&lt;br /&gt;
Graph visualization provided by the D3 graph service module contains only binary associations and the number of viewed topics is limited to 1000 by default. Wandora user can override this limitation with an HTTP parameter '''n'''. For example, accessing URL&lt;br /&gt;
&lt;br /&gt;
 http://127.0.0.1:8898/d3/matrix?n=9999&lt;br /&gt;
&lt;br /&gt;
sets the maximum number of viewed topics to 9999. Note that increasing the amount of nodes increases load on the client browser and the the Wandora host as well as making the matrix hard to read. conisder using the [[D3 graph service module]] or [[D3 word cloud service module]] when visualizing large amount of nodes. The user can zoom in and out the graph visualization using the mouse wheel. Dragging the graph pans it. Mousing over a node shows the players of the association.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
In this example the module is used to visualize Freebase data of Usain Bolt.&lt;br /&gt;
&lt;br /&gt;
First a new layer is created for the extracted data in Wandora in order to adjust the topics shown in the visualization.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3_matrix_01.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Data is then extracted from Freebase using the [Freebase extractor].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3_matrix_02.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The visualization is then opened in the browser and zoomed to show an overview of the whole matrix.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3_matrix_03.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3_matrix_04.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hiding the base layer in Wandora also hides the base layer's topics and associations in the visualization giving a little more focused view of the topics associated with Mr. Bolt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3_matrix_05.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bolt being the target of the extraction it's expected for the topic representing him to have a the most associations of the topics shown in the matrix.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3_matrix_06.png|center]]&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/D3_matrix_service_module</id>
		<title>D3 matrix service module</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/D3_matrix_service_module"/>
				<updated>2014-05-16T09:52:55Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: Protected &amp;quot;D3 matrix service module&amp;quot; (‎[edit=sysop] (indefinite) ‎[move=sysop] (indefinite))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;D3 matrix service module provides a two dimensional matrix visualization of the topic map in Wandora. The D3 matrix service module is part of Wandora's embedded HTTP server. It uses the open source Javascript visualization library [http://d3js.org/ D3.js]. The service module's alias is '''d3graph''' and access URL&lt;br /&gt;
&lt;br /&gt;
 http://127.0.0.1:8898/d3matrix&lt;br /&gt;
&lt;br /&gt;
Graph visualization provided by the D3 graph service module contains only binary associations and the number of viewed topics is limited to 1000 by default. Wandora user can override this limitation with an HTTP parameter '''n'''. For example, accessing URL&lt;br /&gt;
&lt;br /&gt;
 http://127.0.0.1:8898/d3matrix?n=9999&lt;br /&gt;
&lt;br /&gt;
sets the maximum number of viewed topics to 9999. Note that increasing the amount of nodes increases load on the client browser and the the Wandora host as well as making the matrix hard to read. conisder using the [[D3 graph service module]] or [[D3 word cloud service module]] when visualizing large amount of nodes. The user can zoom in and out the graph visualization using the mouse wheel. Dragging the graph pans it. Mousing over a node shows the players of the association.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
In this example the module is used to visualize Freebase data of Usain Bolt.&lt;br /&gt;
&lt;br /&gt;
First a new layer is created for the extracted data in Wandora in order to adjust the topics shown in the visualization.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3_matrix_01.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Data is then extracted from Freebase using the [Freebase extractor].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3_matrix_02.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The visualization is then opened in the browser and zoomed to show an overview of the whole matrix.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3_matrix_03.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3_matrix_04.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hiding the base layer in Wandora also hides the base layer's topics and associations in the visualization giving a little more focused view of the topics associated with Mr. Bolt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3_matrix_05.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bolt being the target of the extraction it's expected for the topic representing him to have a the most associations of the topics shown in the matrix.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3_matrix_06.png|center]]&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/D3_tree_service_module</id>
		<title>D3 tree service module</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/D3_tree_service_module"/>
				<updated>2014-05-16T09:52:39Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The D3 tree module uses the [https://github.com/mbostock/d3/wiki/Tree-Layout D3 partition layout] to visualize hierarchial topic structures in Wandora. It uses the open source JavaScript visualization library [http://d3js.org/ D3.js]. The service module's alias in Wandora is '''d3tree''' and the URL of the visualization is &lt;br /&gt;
&lt;br /&gt;
 http://127.0.0.1:8898/d3/tree&lt;br /&gt;
&lt;br /&gt;
The visualization facilitates different hierarchies with HTTP parameters used to specify the hierarchy's root topic, child-parent-association and respective child and parent roles in the association. By default the depth of recursion through the hierarchy is limited to 5 recursions but may also be overridden with a HTTP parameter.&lt;br /&gt;
&lt;br /&gt;
A complete description of the parameters is provided on the visualization page and an example of their use follows below.&lt;br /&gt;
&lt;br /&gt;
Note that as with D3 the browser support of D3 visualizations in Wandora is limited to IE9+ and up to date versions of Firefox, Chrome (+Chromium), Safari and Opera.&lt;br /&gt;
&lt;br /&gt;
By default the visualization shows a hierarchy where Wandora Class is the root topic, the parent role is superclass and the child role subclass in the superclass-subclass association. No topics need to be added to Wandora to view this hierarchy since the aforementioned topics are added to Wandora on startup.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3_tree_01.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A larger set of topics shown here is achieved by using the [[Tree graph generator]] and specifying the following query string.&lt;br /&gt;
&lt;br /&gt;
 http://127.0.0.1:8898/d3/tree?rootSI=http%3A//www.wandora.org/topic/root&amp;amp;assocTypeSI=http%3A//www.wandora.org/topic/associationType&amp;amp;childRoleSI=http%3A//www.wandora.org/topic/child&amp;amp;parentRoleSI=http%3A//www.wandora.org/topic/parent&lt;br /&gt;
&lt;br /&gt;
where&lt;br /&gt;
&lt;br /&gt;
* The SI pointing to the root topic is http://www.wandora.org/topic/root&lt;br /&gt;
* The SI pointing to the association type topic is http://www.wandora.org/topic/associationType&lt;br /&gt;
* The SI pointing to the child role is http://www.wandora.org/topic/child&lt;br /&gt;
* The SI pointing to the parent role is http://www.wandora.org/topic/parent&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3_tree_02.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In a more complex example a data from the [http://www.wandora.org/download/exampleprojects/royal_query_2.wpr European royal families topicmap] is used. A [[Query topic map]] that creates child-parent associations has been added to the layer structure in the project file in order to visualize hierarchial family relations.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3_tree_03.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following query string is used to visualize four generations of George I's descendants&lt;br /&gt;
&lt;br /&gt;
 http://127.0.0.1:8898/d3/tree/?depth=4&amp;amp;rootSI=http%3A//www.wandora.org/gedcom/I341&amp;amp;assocTypeSI=http%3A//www.wandora.org/gedcom/schema/childparent&amp;amp;childRoleSI=http%3A//www.wandora.org/gedcom/schema/child&amp;amp;parentRoleSI=http%3A//www.wandora.org/gedcom/schema/parent&lt;br /&gt;
&lt;br /&gt;
where &lt;br /&gt;
&lt;br /&gt;
* The SI pointing to the root topic is http://www.wandora.org/gedcom/I341&lt;br /&gt;
* The SI pointing to the association type topic is http://www.wandora.org/gedcom/schema/childparent&lt;br /&gt;
* The SI pointing to the child role is http://www.wandora.org/gedcom/schema/child&lt;br /&gt;
* The SI pointing to the parent role is http://www.wandora.org/gedcom/schema/parent&lt;br /&gt;
* The depth is limited to 4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3_tree_04.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reversing the child and parent roles and icreasing depth we get in turn 7 generations of George I's ancestors&lt;br /&gt;
&lt;br /&gt;
 http://127.0.0.1:8898/d3/tree/?depth=4&amp;amp;rootSI=http%3A//www.wandora.org/gedcom/I341&amp;amp;assocTypeSI=http%3A//www.wandora.org/gedcom/schema/childparent&amp;amp;childRoleSI=http%3A//www.wandora.org/gedcom/schema/parent&amp;amp;parentRoleSI=http%3A//www.wandora.org/gedcom/schema/child&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3_tree_05.png|center]]&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/D3_tree_service_module</id>
		<title>D3 tree service module</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/D3_tree_service_module"/>
				<updated>2014-05-16T09:52:18Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: Protected &amp;quot;D3 tree service module&amp;quot; (‎[edit=sysop] (indefinite) ‎[move=sysop] (indefinite))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The D3 tree module uses the [https://github.com/mbostock/d3/wiki/Tree-Layout D3 partition layout] to visualize hierarchial topic structures in Wandora. It uses the open source JavaScript visualization library [http://d3js.org/ D3.js]. The service module's alias in Wandora is '''d3tree''' and the URL of the visualization is &lt;br /&gt;
&lt;br /&gt;
 http://127.0.0.1:8898/d3tree&lt;br /&gt;
&lt;br /&gt;
The visualization facilitates different hierarchies with HTTP parameters used to specify the hierarchy's root topic, child-parent-association and respective child and parent roles in the association. By default the depth of recursion through the hierarchy is limited to 5 recursions but may also be overridden with a HTTP parameter.&lt;br /&gt;
&lt;br /&gt;
A complete description of the parameters is provided on the visualization page and an example of their use follows below.&lt;br /&gt;
&lt;br /&gt;
Note that as with D3 the browser support of D3 visualizations in Wandora is limited to IE9+ and up to date versions of Firefox, Chrome (+Chromium), Safari and Opera.&lt;br /&gt;
&lt;br /&gt;
By default the visualization shows a hierarchy where Wandora Class is the root topic, the parent role is superclass and the child role subclass in the superclass-subclass association. No topics need to be added to Wandora to view this hierarchy since the aforementioned topics are added to Wandora on startup.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3_tree_01.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A larger set of topics shown here is achieved by using the [[Tree graph generator]] and specifying the following query string.&lt;br /&gt;
&lt;br /&gt;
 http://127.0.0.1:8898/d3tree?rootSI=http%3A//www.wandora.org/topic/root&amp;amp;assocTypeSI=http%3A//www.wandora.org/topic/associationType&amp;amp;childRoleSI=http%3A//www.wandora.org/topic/child&amp;amp;parentRoleSI=http%3A//www.wandora.org/topic/parent&lt;br /&gt;
&lt;br /&gt;
where&lt;br /&gt;
&lt;br /&gt;
* The SI pointing to the root topic is http://www.wandora.org/topic/root&lt;br /&gt;
* The SI pointing to the association type topic is http://www.wandora.org/topic/associationType&lt;br /&gt;
* The SI pointing to the child role is http://www.wandora.org/topic/child&lt;br /&gt;
* The SI pointing to the parent role is http://www.wandora.org/topic/parent&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3_tree_02.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In a more complex example a data from the [http://www.wandora.org/download/exampleprojects/royal_query_2.wpr European royal families topicmap] is used. A [[Query topic map]] that creates child-parent associations has been added to the layer structure in the project file in order to visualize hierarchial family relations.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3_tree_03.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following query string is used to visualize four generations of George I's descendants&lt;br /&gt;
&lt;br /&gt;
 http://127.0.0.1:8898/d3tree/?depth=4&amp;amp;rootSI=http%3A//www.wandora.org/gedcom/I341&amp;amp;assocTypeSI=http%3A//www.wandora.org/gedcom/schema/childparent&amp;amp;childRoleSI=http%3A//www.wandora.org/gedcom/schema/child&amp;amp;parentRoleSI=http%3A//www.wandora.org/gedcom/schema/parent&lt;br /&gt;
&lt;br /&gt;
where &lt;br /&gt;
&lt;br /&gt;
* The SI pointing to the root topic is http://www.wandora.org/gedcom/I341&lt;br /&gt;
* The SI pointing to the association type topic is http://www.wandora.org/gedcom/schema/childparent&lt;br /&gt;
* The SI pointing to the child role is http://www.wandora.org/gedcom/schema/child&lt;br /&gt;
* The SI pointing to the parent role is http://www.wandora.org/gedcom/schema/parent&lt;br /&gt;
* The depth is limited to 4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3_tree_04.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reversing the child and parent roles and icreasing depth we get in turn 7 generations of George I's ancestors&lt;br /&gt;
&lt;br /&gt;
 http://127.0.0.1:8898/d3tree/?depth=4&amp;amp;rootSI=http%3A//www.wandora.org/gedcom/I341&amp;amp;assocTypeSI=http%3A//www.wandora.org/gedcom/schema/childparent&amp;amp;childRoleSI=http%3A//www.wandora.org/gedcom/schema/parent&amp;amp;parentRoleSI=http%3A//www.wandora.org/gedcom/schema/child&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3_tree_05.png|center]]&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/D3_partition_service_module</id>
		<title>D3 partition service module</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/D3_partition_service_module"/>
				<updated>2014-05-16T09:51:58Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The D3 partition module uses the [http://github.com/mbostock/d3/wiki/Partition-Layout D3 partition layout] to visualize hierarchial topic structures in Wandora. It uses the open source JavaScript visualization library [http://d3js.org/ D3.js]. The service module's alias in Wandora is '''d3partition''' and the URL of the visualization is &lt;br /&gt;
&lt;br /&gt;
 http://127.0.0.1:8898/d3/partition&lt;br /&gt;
&lt;br /&gt;
The visualization facilitates different hierarchies with HTTP parameters used to specify the hierarchy's root topic, child-parent-association and respective child and parent roles in the association. By default the depth of recursion through the hierarchy is limited to 5 recursions but may also be overridden with a HTTP parameter. Finally a set of colorSchemes is provided to help visualize the hierarchy's structure.&lt;br /&gt;
&lt;br /&gt;
A complete description of the parameters is provided on the visualization page and an example of their use follows below.&lt;br /&gt;
&lt;br /&gt;
Note that as with D3 the browser support of D3 visualizations in Wandora is limited to IE9+ and up to date versions of Firefox, Chrome (+Chromium), Safari and Opera.&lt;br /&gt;
&lt;br /&gt;
By default the visualization shows a hierarchy where Wandora Class is the root topic, the parent role is superclass and the child role subclass in the superclass-subclass association. No topics need to be added to Wandora to view this hierarchy since the aforementioned topics are added to Wandora on startup.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3partition_01.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A larger set of topics shown here is achieved by using the [[Tree graph generator]] and specifying the following query string.&lt;br /&gt;
&lt;br /&gt;
 http://127.0.0.1:8898/d3/partition?rootSI=http%3A//www.wandora.org/topic/root&amp;amp;assocTypeSI=http%3A//www.wandora.org/topic/associationType&amp;amp;childRoleSI=http%3A//www.wandora.org/topic/child&amp;amp;parentRoleSI=http%3A//www.wandora.org/topic/parent&lt;br /&gt;
&lt;br /&gt;
where&lt;br /&gt;
&lt;br /&gt;
* The SI pointing to the root topic is http://www.wandora.org/topic/root&lt;br /&gt;
* The SI pointing to the association type topic is http://www.wandora.org/topic/associationType&lt;br /&gt;
* The SI pointing to the child role is http://www.wandora.org/topic/child&lt;br /&gt;
* The SI pointing to the parent role is http://www.wandora.org/topic/parent&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3partition_02.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In a more complex example a recursive [[http://www.freebase.com/ Freebase]] query data is used. Extracting data around Claude Monet gives us a hierarchy of influences. The influence node association is not strictly hierarchial since authors and artists may have multiple persons who have influenced them. The navigation aspect of the visualization should nonetheless be meaningful.&lt;br /&gt;
&lt;br /&gt;
We first use the Freebase extractor in '''File &amp;gt; Extract &amp;gt; Topics &amp;gt; Freebase extractor...''' with the following options to extract data from Freebase. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3_partition_freebase_01.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3_partition_freebase_02.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Influence node is a single association extracted from the data and other hierarchial associations may as well be displayed in the visualization.&lt;br /&gt;
&lt;br /&gt;
After the extraction the influence node hierarchy can be viewed using the URL:&lt;br /&gt;
&lt;br /&gt;
 http://127.0.0.1:8898/d3/partition/?rootSI=http://www.freebase.com/en/ovid&amp;amp;assocTypeSI=http://www.freebase.com/influence/influence_node/influenced_by&amp;amp;parentRoleSI=http://www.wandora.org/freebase/target&amp;amp;childRoleSI=http://www.wandora.org/freebase/source&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3partition_03.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The visualization can be navigated by clicking on a topic expanding it and revealing more of it's child topics.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3partition_04.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Appending &amp;amp;colorScheme=n, where n = {1,2,3,4,5,6}, to the query string we can color the topics according to a scheme.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3partition_05.png|center]]&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/D3_partition_service_module</id>
		<title>D3 partition service module</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/D3_partition_service_module"/>
				<updated>2014-05-16T09:51:39Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: Protected &amp;quot;D3 partition service module&amp;quot; (‎[edit=sysop] (indefinite) ‎[move=sysop] (indefinite))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The D3 partition module uses the [http://github.com/mbostock/d3/wiki/Partition-Layout D3 partition layout] to visualize hierarchial topic structures in Wandora. It uses the open source JavaScript visualization library [http://d3js.org/ D3.js]. The service module's alias in Wandora is '''d3partition''' and the URL of the visualization is &lt;br /&gt;
&lt;br /&gt;
 http://127.0.0.1:8898/d3partition&lt;br /&gt;
&lt;br /&gt;
The visualization facilitates different hierarchies with HTTP parameters used to specify the hierarchy's root topic, child-parent-association and respective child and parent roles in the association. By default the depth of recursion through the hierarchy is limited to 5 recursions but may also be overridden with a HTTP parameter. Finally a set of colorSchemes is provided to help visualize the hierarchy's structure.&lt;br /&gt;
&lt;br /&gt;
A complete description of the parameters is provided on the visualization page and an example of their use follows below.&lt;br /&gt;
&lt;br /&gt;
Note that as with D3 the browser support of D3 visualizations in Wandora is limited to IE9+ and up to date versions of Firefox, Chrome (+Chromium), Safari and Opera.&lt;br /&gt;
&lt;br /&gt;
By default the visualization shows a hierarchy where Wandora Class is the root topic, the parent role is superclass and the child role subclass in the superclass-subclass association. No topics need to be added to Wandora to view this hierarchy since the aforementioned topics are added to Wandora on startup.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3partition_01.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A larger set of topics shown here is achieved by using the [[Tree graph generator]] and specifying the following query string.&lt;br /&gt;
&lt;br /&gt;
 http://127.0.0.1:8898/d3partition?rootSI=http%3A//www.wandora.org/topic/root&amp;amp;assocTypeSI=http%3A//www.wandora.org/topic/associationType&amp;amp;childRoleSI=http%3A//www.wandora.org/topic/child&amp;amp;parentRoleSI=http%3A//www.wandora.org/topic/parent&lt;br /&gt;
&lt;br /&gt;
where&lt;br /&gt;
&lt;br /&gt;
* The SI pointing to the root topic is http://www.wandora.org/topic/root&lt;br /&gt;
* The SI pointing to the association type topic is http://www.wandora.org/topic/associationType&lt;br /&gt;
* The SI pointing to the child role is http://www.wandora.org/topic/child&lt;br /&gt;
* The SI pointing to the parent role is http://www.wandora.org/topic/parent&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3partition_02.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In a more complex example a recursive [[http://www.freebase.com/ Freebase]] query data is used. Extracting data around Claude Monet gives us a hierarchy of influences. The influence node association is not strictly hierarchial since authors and artists may have multiple persons who have influenced them. The navigation aspect of the visualization should nonetheless be meaningful.&lt;br /&gt;
&lt;br /&gt;
We first use the Freebase extractor in '''File &amp;gt; Extract &amp;gt; Topics &amp;gt; Freebase extractor...''' with the following options to extract data from Freebase. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3_partition_freebase_01.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3_partition_freebase_02.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Influence node is a single association extracted from the data and other hierarchial associations may as well be displayed in the visualization.&lt;br /&gt;
&lt;br /&gt;
After the extraction the influence node hierarchy can be viewed using the URL:&lt;br /&gt;
&lt;br /&gt;
 http://127.0.0.1:8898/d3partition/?rootSI=http://www.freebase.com/en/ovid&amp;amp;assocTypeSI=http://www.freebase.com/influence/influence_node/influenced_by&amp;amp;parentRoleSI=http://www.wandora.org/freebase/target&amp;amp;childRoleSI=http://www.wandora.org/freebase/source&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3partition_03.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The visualization can be navigated by clicking on a topic expanding it and revealing more of it's child topics.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3partition_04.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Appending &amp;amp;colorScheme=n, where n = {1,2,3,4,5,6}, to the query string we can color the topics according to a scheme.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3partition_05.png|center]]&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/D3_graph_service_module</id>
		<title>D3 graph service module</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/D3_graph_service_module"/>
				<updated>2014-05-16T09:51:27Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: Protected &amp;quot;D3 graph service module&amp;quot; (‎[edit=sysop] (indefinite) ‎[move=sysop] (indefinite))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The D3 graph service module provides a graph visualization of the topic map in Wandora. The module is part of Wandora's embedded HTTP server. It is based on open source Javascript visualization library [http://d3js.org/ D3.js]. The service module's alias is '''d3graph''' and access URL&lt;br /&gt;
&lt;br /&gt;
 http://127.0.0.1:8898/d3/graph&lt;br /&gt;
&lt;br /&gt;
The graph visualization provided by the D3 graph service module contains only binary associations and the number of viewed topics is limited to 1000 by default. This limitation can be overridden with the HTTP parameter '''n'''. For example, accessing URL&lt;br /&gt;
&lt;br /&gt;
 http://127.0.0.1:8898/d3/graph?n=9999&lt;br /&gt;
&lt;br /&gt;
sets the maximum number of viewed topics to 9999. It depends on the client's computing resources whether or not the created visualization is usable with 9999 nodes. It requires a lot of computing power to view graphs with 1000 nodes or more. Screen capture below shows a d3graph visualization generated  from Wandora's default topic map. User can zoom in and out the graph visualization using the mouse wheel. Dragging a node moves it while dragging the background pans the whole graph. Mousing over on a node fades out the other graph nodes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:D3graph example 03.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The next screen capture shows a d3graph visualization of an output of [[Tiling graph generator|hexagonal tiling generator]] with a depth of 5.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:D3graph example 04.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Embedded HTTP server]]&lt;br /&gt;
** [[HTML service module]] &lt;br /&gt;
** [[Mobile HTML service module]]&lt;br /&gt;
** [[RSS feed service module]]&lt;br /&gt;
** [[SOAP web service module]] &lt;br /&gt;
** [[Drupal service module]]&lt;br /&gt;
** [[Firefox and Thunderbird plugin service module]]&lt;br /&gt;
** [[XTM topic map service module]] &lt;br /&gt;
** [[JTM topic map service module]]&lt;br /&gt;
** [[RDF service module]]&lt;br /&gt;
** [[GRAPHML service module]]&lt;br /&gt;
** [[Screencast service module]]&lt;br /&gt;
** [[Timeline service module]]&lt;br /&gt;
** [[Google Maps service module]]&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/D3_word_cloud_service_module</id>
		<title>D3 word cloud service module</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/D3_word_cloud_service_module"/>
				<updated>2014-05-16T09:51:18Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: Protected &amp;quot;D3 word cloud service module&amp;quot; (‎[edit=sysop] (indefinite) ‎[move=sysop] (indefinite))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The D3 word cloud module uses the [http://www.jasondavies.com/wordcloud D3 cloud layout] to visualize topic structures in Wandora. It uses the open source JavaScript visualization library [http://d3js.org/ D3.js]. The service module's alias in Wandora is '''d3cloud''' and the URL of the visualization is &lt;br /&gt;
&lt;br /&gt;
 http://127.0.0.1:8898/d3/cloud&lt;br /&gt;
&lt;br /&gt;
The visualization uses the currently open topic as a starting point and let's the user navigate through the topicmap by clicking on the cloud's words that map to associations of the current topic.&lt;br /&gt;
&lt;br /&gt;
The visualization's layout can be modified with the following URL query string parameters:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;font&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;Specifies the font used to render the words in the cloud&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;spiral&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;Specifies the spiral along witch the words are placed&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;scale&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;Specifies the function according to which the font sizes are calculated from the amount of associations that particular topic has.&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;from, to and or&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;the parameters for random rotation. &amp;quot;from&amp;quot; and &amp;quot;to&amp;quot; specify the range in degrees in relation to the vertical axis and &amp;quot;or&amp;quot; specifies the amount of steps within the range. For example from=-90&amp;amp;to=90&amp;amp;or=5 would result in each text's rotation to be randomly -90, -45, 0, 45 or 90 degrees&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also the parameter n can be used to limit the amount of topics retrieved from Wandora and thus the words rendered at a time.&lt;br /&gt;
&lt;br /&gt;
A complete description of the parameters is provided on the visualization page and an example of their use follows below.&lt;br /&gt;
&lt;br /&gt;
Note that as with D3 the browser support of D3 visualizations in Wandora is limited to IE9+ and up to date versions of Firefox, Chrome (+Chromium), Safari and Opera.&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
&lt;br /&gt;
The [[Topic_map_conversion_of_WordNet|WordNet]] is used to demonstrate the visualization&lt;br /&gt;
&lt;br /&gt;
Selecting a topic in Wandora shows it and it's associatated topics in the browser.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3wordmap_01.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3wordmap_02.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
font=times%20new%20roman is used to change the font of the cloud&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3wordmap_03.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
from=-90&amp;amp;to=90&amp;amp;or=5 is further used to rotate the words randomly either -90, -45, 0 ,45 or 90 degrees&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3wordmap_04.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
the cloud is navigated by clicking on the words as if they were links&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3wordmap_05.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A sense of completely random rotation is achieved by increasing the or-parameter&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3wordmap_06.png|center]]&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/D3_word_cloud_service_module</id>
		<title>D3 word cloud service module</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/D3_word_cloud_service_module"/>
				<updated>2014-05-16T09:51:12Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The D3 word cloud module uses the [http://www.jasondavies.com/wordcloud D3 cloud layout] to visualize topic structures in Wandora. It uses the open source JavaScript visualization library [http://d3js.org/ D3.js]. The service module's alias in Wandora is '''d3cloud''' and the URL of the visualization is &lt;br /&gt;
&lt;br /&gt;
 http://127.0.0.1:8898/d3/cloud&lt;br /&gt;
&lt;br /&gt;
The visualization uses the currently open topic as a starting point and let's the user navigate through the topicmap by clicking on the cloud's words that map to associations of the current topic.&lt;br /&gt;
&lt;br /&gt;
The visualization's layout can be modified with the following URL query string parameters:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;font&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;Specifies the font used to render the words in the cloud&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;spiral&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;Specifies the spiral along witch the words are placed&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;scale&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;Specifies the function according to which the font sizes are calculated from the amount of associations that particular topic has.&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;from, to and or&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;the parameters for random rotation. &amp;quot;from&amp;quot; and &amp;quot;to&amp;quot; specify the range in degrees in relation to the vertical axis and &amp;quot;or&amp;quot; specifies the amount of steps within the range. For example from=-90&amp;amp;to=90&amp;amp;or=5 would result in each text's rotation to be randomly -90, -45, 0, 45 or 90 degrees&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also the parameter n can be used to limit the amount of topics retrieved from Wandora and thus the words rendered at a time.&lt;br /&gt;
&lt;br /&gt;
A complete description of the parameters is provided on the visualization page and an example of their use follows below.&lt;br /&gt;
&lt;br /&gt;
Note that as with D3 the browser support of D3 visualizations in Wandora is limited to IE9+ and up to date versions of Firefox, Chrome (+Chromium), Safari and Opera.&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
&lt;br /&gt;
The [[Topic_map_conversion_of_WordNet|WordNet]] is used to demonstrate the visualization&lt;br /&gt;
&lt;br /&gt;
Selecting a topic in Wandora shows it and it's associatated topics in the browser.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3wordmap_01.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3wordmap_02.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
font=times%20new%20roman is used to change the font of the cloud&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3wordmap_03.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
from=-90&amp;amp;to=90&amp;amp;or=5 is further used to rotate the words randomly either -90, -45, 0 ,45 or 90 degrees&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3wordmap_04.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
the cloud is navigated by clicking on the words as if they were links&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3wordmap_05.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A sense of completely random rotation is achieved by increasing the or-parameter&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:d3wordmap_06.png|center]]&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/D3_graph_service_module</id>
		<title>D3 graph service module</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/D3_graph_service_module"/>
				<updated>2014-05-16T09:50:49Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The D3 graph service module provides a graph visualization of the topic map in Wandora. The module is part of Wandora's embedded HTTP server. It is based on open source Javascript visualization library [http://d3js.org/ D3.js]. The service module's alias is '''d3graph''' and access URL&lt;br /&gt;
&lt;br /&gt;
 http://127.0.0.1:8898/d3/graph&lt;br /&gt;
&lt;br /&gt;
The graph visualization provided by the D3 graph service module contains only binary associations and the number of viewed topics is limited to 1000 by default. This limitation can be overridden with the HTTP parameter '''n'''. For example, accessing URL&lt;br /&gt;
&lt;br /&gt;
 http://127.0.0.1:8898/d3/graph?n=9999&lt;br /&gt;
&lt;br /&gt;
sets the maximum number of viewed topics to 9999. It depends on the client's computing resources whether or not the created visualization is usable with 9999 nodes. It requires a lot of computing power to view graphs with 1000 nodes or more. Screen capture below shows a d3graph visualization generated  from Wandora's default topic map. User can zoom in and out the graph visualization using the mouse wheel. Dragging a node moves it while dragging the background pans the whole graph. Mousing over on a node fades out the other graph nodes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:D3graph example 03.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The next screen capture shows a d3graph visualization of an output of [[Tiling graph generator|hexagonal tiling generator]] with a depth of 5.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:D3graph example 04.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Embedded HTTP server]]&lt;br /&gt;
** [[HTML service module]] &lt;br /&gt;
** [[Mobile HTML service module]]&lt;br /&gt;
** [[RSS feed service module]]&lt;br /&gt;
** [[SOAP web service module]] &lt;br /&gt;
** [[Drupal service module]]&lt;br /&gt;
** [[Firefox and Thunderbird plugin service module]]&lt;br /&gt;
** [[XTM topic map service module]] &lt;br /&gt;
** [[JTM topic map service module]]&lt;br /&gt;
** [[RDF service module]]&lt;br /&gt;
** [[GRAPHML service module]]&lt;br /&gt;
** [[Screencast service module]]&lt;br /&gt;
** [[Timeline service module]]&lt;br /&gt;
** [[Google Maps service module]]&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	<entry>
		<id>http://wandora.org/wiki/Wandora_modules_framework</id>
		<title>Wandora modules framework</title>
		<link rel="alternate" type="text/html" href="http://wandora.org/wiki/Wandora_modules_framework"/>
				<updated>2014-05-16T09:49:41Z</updated>
		
		<summary type="html">&lt;p&gt;Olli: /* Embedded server */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wandora contains a modular framework for setting up server applications. This can be used as part of a standard web app, or as a basis for a custom server application. It can also be used in the [[Embedded HTTP server]]. It could be used for other purposes than just server applications too but that is its primary purpose.&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The idea behind the framework is that the server application consists of several individual modules, each of which does one specific thing. The modules often have dependencies between them, but some may also perform a completely isolated task. &lt;br /&gt;
&lt;br /&gt;
As an example, a typical application might consist of the following modules:&lt;br /&gt;
&lt;br /&gt;
* A topic map manager that provides a topic map for other modules and handles things related to the topic map.&lt;br /&gt;
* An Apache Velocity engine module which handles interfacing with Velocity.&lt;br /&gt;
* A template manager module which handles common tasks related to page templates.&lt;br /&gt;
* Several template modules, each representing one page template. These will register themselves to the template manager so other modules can find them, and use the Velocity Engine module to render the page. The templates could also be other than Velocity templates, but currently Velocity is the only supported template engine.&lt;br /&gt;
* A server module that receives HTTP requests and forwards them to other modules. Currently there are two options for this. One which interfaces a standard servlet container, such as Apache Tomcat, and one which interfaces with the [[Embedded HTTP server]].&lt;br /&gt;
* Several action modules, these are the logical entry points for outside users. They receive the requests from the server module and then process them. The action possibly does something on the server side and then gives back a result, typically by utilising one of the templates. Some of the action modules may utilise the topic map manager module to do something with the topic map it provides.&lt;br /&gt;
&lt;br /&gt;
There are several other modules that an application could also utilise. Some examples are a database module which connects to a relational database, a module that sends email, modules that restrict access based on user authentication, and others.&lt;br /&gt;
&lt;br /&gt;
Many of the modules work behind abstract interfaces with the idea that the implementation of a required module can easily be changed. The above list of modules already mentioned one such example: the two different options for the server module. Some others have been defined with an interface but currently there is only one implementation, like the templates. They could use any templating engine but currently Apache Velocity is the only supported one.&lt;br /&gt;
&lt;br /&gt;
== Example web app ==&lt;br /&gt;
&lt;br /&gt;
The ''samples/ModulesWebAppSample'' folder contains an example web app that can easily be deployed in Apache Tomcat or some other servlet container.&lt;br /&gt;
&lt;br /&gt;
To use the sample web app, copy the entire folder into your ''webapps'' folder of the servlet container. Refer to the documentation of your servlet container on how to install web apps. Apache Tomcat at least has a folder called ''webapps'' directly under its installation folder where you just copy the entire ''ModulesWebAppSample'' folder. Then copy the compiled classes into the ''WEB-INF/classes'' folder inside the sample web app folder. To do this, just copy everything under Wandora's ''build/classes'' folder in there. The ''WEB-INF/lib'' folder should already contain the libraries needed by the sample web app, but if you add more functionality, you may need to copy more libraries here.&lt;br /&gt;
&lt;br /&gt;
Next you may have to modify some configuration files. The ''WEB-INF/web.xml'' is the servlet configuration file, which is used by your servlet container to initialise the servlet. There's a section there that tells the servlet what modulesconfig.xml file to use to initialise the modules framework. &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;init-param&amp;gt;&lt;br /&gt;
   &amp;lt;param-name&amp;gt;modulesconfig&amp;lt;/param-name&amp;gt;&lt;br /&gt;
   &amp;lt;param-value&amp;gt;${catalina.base}/webapps/ModulesWebAppSample/WEB-INF/modulesconfig.xml&amp;lt;/param-value&amp;gt;&lt;br /&gt;
 &amp;lt;/init-param&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the param-value if needed. If you copied the ''ModulesWebAppSample'' folder directly under your ''webapps'' folder, and you're using Apache Tomcat with more or less standard settings, you shouldn't need to change anything. Otherwise, set the absolute path to the modulesconfig.xml here. For more information about the ''web.xml'' file, refer to the servlet container documentation.&lt;br /&gt;
&lt;br /&gt;
The ''WEB-INF/modulesconfig.xml'' file is the configuration file for the modules framework. This too should not require any editing if you have a basic Apache Tomcat setup. Otherwise, you may need to change some settings at the start of the file. The configuration file sets some variables, which may be referred to later using the syntax ''${variableName}''. The ''servletHome'' variable is preset by the servlet that loads this file. The configuration file section contains more information about the ''modulesconfig.xml'' file as a whole.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;variable key=&amp;quot;home&amp;quot;&amp;gt;${servletHome}&amp;lt;/variable&amp;gt;&lt;br /&gt;
: This line sets the webapp home directory. It should point to the ''WEB-INF'' folder, with no slash or backslash at the end. The ''servletHome'' variable is preset by the servlet that loads this file and should work in most cases.&lt;br /&gt;
 &amp;lt;variable key=&amp;quot;port&amp;quot;&amp;gt;8080&amp;lt;/variable&amp;gt;&lt;br /&gt;
: This is the port number for the server.&lt;br /&gt;
 &amp;lt;variable key=&amp;quot;urlbase&amp;quot;&amp;gt;http://localhost:${port}/ModulesWebAppSample/wandora&amp;lt;/variable&amp;gt;&lt;br /&gt;
: This is the URL for the servlet.&lt;br /&gt;
 &amp;lt;variable key=&amp;quot;staticbase&amp;quot;&amp;gt;http://localhost:${port}/ModulesWebAppSample/&amp;lt;/variable&amp;gt;&lt;br /&gt;
: This is the base of the URL for the static content used by the webapp, such as the CSS file.&lt;br /&gt;
 &amp;lt;variable key=&amp;quot;topicMapFile&amp;quot;&amp;gt;${home}/ArtofNoise.wpr&amp;lt;/variable&amp;gt;&lt;br /&gt;
: This is the Wandora topic map project file to load. By default, it uses the Art of Noise sample topic map.&lt;br /&gt;
 &amp;lt;variable key=&amp;quot;defaultSI&amp;quot;&amp;gt;http://www.wandora.org/mp3/mp3&amp;lt;/variable&amp;gt;&lt;br /&gt;
: This is the subject identifier of the default topic, if nothing else is specified in the http request.&lt;br /&gt;
&lt;br /&gt;
The rest of the ''modulesconfig.xml'' file should use the initial variables to set everything else and you shouldn't need to change anything for the basic sample web app. Naturally, if you wish to customise the sample, you may have to modify all the other modules as well.&lt;br /&gt;
&lt;br /&gt;
You may have to restart your servlet container too. After that, you should be able to browse the topic map by going to [http://localhost:8080/ModulesWebAppSample/wandora http://localhost:8080/ModulesWebAppSample/wandora] or whatever you set as the ''urlbase'' of your web app.&lt;br /&gt;
&lt;br /&gt;
== Example embedded server app ==&lt;br /&gt;
&lt;br /&gt;
'''The embedded server is about to be changed. The entire old framework is being changed to the modules framework. The adapter module described here will become unnecessary in the next release. See the next section for information on how the server will work.'''&lt;br /&gt;
&lt;br /&gt;
The [[Embedded HTTP server]] also contains a sample that uses the modules framework in the ''resources/server/modules'' folder. The ''modulesconfig.xml'' is almost identical to the web app sample, with the exception of some of the variables at start which are automatically set by Wandora. Also the topic map manager is Wandora itself instead of a manager that loads the topic map from a file.&lt;br /&gt;
&lt;br /&gt;
To use this, you only need to start the embedded server in the ''Server'' menu inside Wandora, or click the little icon at the bottom right corner of the window. After that, go to [http://localhost:8898/modules/ http://localhost:8898/modules/] with your browser.&lt;br /&gt;
&lt;br /&gt;
Note that the sample modules application looks and behaves exactly like the basic topic application, which as a whole is much simpler, consisting only of a single velocity template and not much else. As such, the sample modules application isn't terribly useful, but it could be extended into a much more complicated application.&lt;br /&gt;
&lt;br /&gt;
A nice use case for using the modules framework in the embedded server would be real time topic map editing for a web app that is normally ran on a proper servlet container. With minimal changes to the ''modulesconfig.xml'' file, you can run the same system inside Wandora and immediately see all the changes you make into the topic map. Thus you can make changes to the topic map and immediately see what they would look like in the final website.&lt;br /&gt;
&lt;br /&gt;
== Embedded server ==&lt;br /&gt;
&lt;br /&gt;
'''The embedded server is about to be changed. The entire old framework is being changed to the modules framework. The adapter described in the previous section will become unnecessary, instead the entire server is based on the modules framework. However, these changed are not yet in the currently released version.'''&lt;br /&gt;
&lt;br /&gt;
The [[Embedded HTTP server]] is based on the modules framework. The framework consists of a root module manager which loads module bundles from subdirectories. The root manager has its own xml configuration file at ''resources/server/baseconfig.xml'' which sets up the basic environment for the module bundles. Each module bundle is in its own subdirectory with its own ''config.xml'' configuration file and any other files it needs, such as templates, data files, and images and style sheets. The module bundles may import modules from the root manager so that they don't need to recreate all the commonly needed modules. The root manager also sets some variables relating to the child module bundle paths. But for the most part, each module bundle operates as a separate module collection, and most everything described on this page about modules and their configuration applies to module bundles too.&lt;br /&gt;
&lt;br /&gt;
Importing modules is done using the ''&amp;lt;import&amp;gt;'' element. For example, using the following in the ''config.xml'' of a module bundle imports a ''VelocityEngineModule'' from the ''baseconfig.xml'' of the parent manager into the manager of the child bundle. After this, modules in the child bundle can use ''VelocityEngineModule'' in other modules. This should be placed on the same level as all the module definitions, not inside a module definition.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;import class=&amp;quot;org.wandora.modules.servlet.VelocityEngineModule&amp;quot;&amp;gt;&amp;lt;/import&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the class specified here must be the class used when looking for the module. This is usually an interface, rather than the implementation. The actual module imported will then be some module that implements the specified class. If you try to import using the actual implementing class, the module will not be found. Although, some modules may require other modules based on a specific implementation too, this depends on the module that is dependant on the other module.&lt;br /&gt;
&lt;br /&gt;
== Configuration file ==&lt;br /&gt;
&lt;br /&gt;
=== Basic structure ===&lt;br /&gt;
&lt;br /&gt;
All the modules are defined in a configuration file, typically called ''modulesconfig.xml''. This is an XML file with a fairly simple structure. The root element is ''&amp;lt;options&amp;gt;'' and under it each module is listed in ''&amp;lt;module&amp;gt;'' elements. The ''&amp;lt;module&amp;gt;'' element contains the Java class name of the module, which must implement the ''Module'' interface. Parameters for the module can be provided as child elements of the ''&amp;lt;module&amp;gt;'' element in ''&amp;lt;param&amp;gt;'' elements. For example, the following includes two modules, with the latter one containing some initialisation parameters for the module.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;options&amp;gt;&lt;br /&gt;
   &amp;lt;module class=&amp;quot;org.wandora.modules.LoggingModule&amp;quot;&amp;gt;&amp;lt;/module&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;module class=&amp;quot;org.wandora.modules.topicmap.SimpleTopicMapManager&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;param key=&amp;quot;topicMap&amp;quot;&amp;gt;topicmap.wpr&amp;lt;/param&amp;gt;&lt;br /&gt;
     &amp;lt;param key=&amp;quot;autoSave&amp;quot;&amp;gt;true&amp;lt;/param&amp;gt;&lt;br /&gt;
   &amp;lt;/module&amp;gt;    &lt;br /&gt;
 &amp;lt;/options&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Module dependency solving ===&lt;br /&gt;
&lt;br /&gt;
Some module may require other modules to be present. All the required modules must be included in the config file. Their order does not matter, the modules are automatically loaded in such an order that modules that require others are loaded after the modules they need. This also means that there cannot be cyclic dependencies between the modules, although there are ways to work around this.&lt;br /&gt;
&lt;br /&gt;
Dependencies are solved automatically based on the required module class or interface. The config file just needs to contain a module of that class or one implementing, or extending, it. But in some cases there may be more than one valid option for the dependency and you need to specify which to use. There are two ways to solve this. &lt;br /&gt;
&lt;br /&gt;
First, you may name modules and then explicitly specify which module to use. Specify the name of the module in a name attribute in the ''&amp;lt;module&amp;gt;'' element. Then in the module that needs to use the other module, add a child element ''&amp;lt;useService&amp;gt;'' which specifies the service. Like this: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;module class=&amp;quot;org.wandora.modules.topicmap.SimpleTopicMapManager&amp;quot; '''name=&amp;quot;tmmanager&amp;quot;'''&amp;gt;&lt;br /&gt;
   &amp;lt;param key=&amp;quot;topicMap&amp;quot;&amp;gt;topicmap.wpr&amp;lt;/param&amp;gt;&lt;br /&gt;
   &amp;lt;param key=&amp;quot;autoSave&amp;quot;&amp;gt;true&amp;lt;/param&amp;gt;&lt;br /&gt;
 &amp;lt;/module&amp;gt;    &lt;br /&gt;
 &amp;lt;module class=&amp;quot;org.wandora.modules.topicmap.ViewTopicAction&amp;quot;&amp;gt;&lt;br /&gt;
   '''&amp;lt;useService service=&amp;quot;org.wandora.modules.topicmap.TopicMapManager&amp;quot; value=&amp;quot;tmmanager&amp;quot;&amp;gt;&amp;lt;/useService&amp;gt;'''&lt;br /&gt;
   &amp;lt;param key=&amp;quot;action&amp;quot;&amp;gt;topic&amp;lt;/param&amp;gt;&lt;br /&gt;
   &amp;lt;param key=&amp;quot;templateKey&amp;quot;&amp;gt;viewtopic&amp;lt;/param&amp;gt;&lt;br /&gt;
 &amp;lt;/module&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the service attribute you must specify which service this relates to and then in the value attribute you specify the name of the module to use.&lt;br /&gt;
&lt;br /&gt;
The second option to resolve the conflict is to specify a priority for the modules. You do this with a priority attribute in the ''&amp;lt;module&amp;gt;'' element. Each module by default has priority 0. A module with a higher priority will be chosen over a module with a lower priority in the automatic dependency solving. A module with a negative priority will never be automatically used, it can only be used by explicitly specifying so with the ''&amp;lt;useService&amp;gt;'' element as shown above. The ''&amp;lt;useService&amp;gt;'' will always override any priorities.&lt;br /&gt;
&lt;br /&gt;
In the following example, the second topic map manager would not automatically be chosen for other modules. If any module wishes to use that, it must be explicitly specified with the ''&amp;lt;useService&amp;gt;'' element as shown above.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;module class=&amp;quot;org.wandora.modules.topicmap.SimpleTopicMapManager&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;param key=&amp;quot;topicMap&amp;quot;&amp;gt;topicmap1.wpr&amp;lt;/param&amp;gt;&lt;br /&gt;
   &amp;lt;param key=&amp;quot;autoSave&amp;quot;&amp;gt;true&amp;lt;/param&amp;gt;&lt;br /&gt;
 &amp;lt;/module&amp;gt;    &lt;br /&gt;
 &amp;lt;module class=&amp;quot;org.wandora.modules.topicmap.SimpleTopicMapManager&amp;quot; '''priority=&amp;quot;-1&amp;quot;'''&amp;gt;&lt;br /&gt;
   &amp;lt;param key=&amp;quot;topicMap&amp;quot;&amp;gt;topicmap2.wpr&amp;lt;/param&amp;gt;&lt;br /&gt;
 &amp;lt;/module&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also, the modules themselves may employ other means to specify what to use. As an example, all ''Template'' modules register themselves to a ''TemplateManager''. Modules which need templates then don't depend directly on the ''Template'' module but instead on the ''TemplateManager'' which has its own mechanisms for getting the correct ''Template'' module.&lt;br /&gt;
&lt;br /&gt;
=== Variables ===&lt;br /&gt;
&lt;br /&gt;
You can specify variables directly under the root ''&amp;lt;options&amp;gt;'' element using a ''&amp;lt;variable&amp;gt;'' element.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;variable key=&amp;quot;home&amp;quot;&amp;gt;/webapp/webapphome&amp;lt;/variable&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The variable needs a key, which is how it is referred to elsewhere, and a value. The key is specified in the key attribute and the value is the contents of the whole element. This variable can then be used elsewhere in the config file when you give parameters to modules or specify other variables. This is done using a dollar sign and curly brackets and writing the key of the variable in the curly brackets. You could specify another variable using the previous one like this.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;variable key=&amp;quot;images&amp;quot;&amp;gt;${home}/images&amp;lt;/variable&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly you can use the dollar and curly brackets inside ''&amp;lt;param&amp;gt;'' elements when specifying module parameters.&lt;br /&gt;
&lt;br /&gt;
== List of high level modules ==&lt;br /&gt;
&lt;br /&gt;
Below is a list of high level modules that are ready to use as is with short descriptions of what they do. The lower level abstract modules are described in the module development section and the user control modules in the user control section.&lt;br /&gt;
&lt;br /&gt;
=== org.wandora.modules package ===&lt;br /&gt;
&lt;br /&gt;
* DefaultReplacementsModule&lt;br /&gt;
: The replacements system is a much lighter option to a full template engine. It's a simple search and replace based system that can be used by other modules to make any of their string values dynamic. The ''AbstractAction'' automatically uses any replacement module it can find, with the ''DefaultReplacementsModule'' being the only current implementation.&lt;br /&gt;
* EmailModule&lt;br /&gt;
: This module provides email services for others. You the SMTP server and any relevant details in the parameters.&lt;br /&gt;
* GenericDatabaseInterface&lt;br /&gt;
: This module provides relational database services. It uses JDBC and as such supports a wide range of different database servers. The server details are specified in the parameters.&lt;br /&gt;
* LoggingModule&lt;br /&gt;
: This module provides logging services for other modules. You should always have a logging module included. Depending on how you use the modules framework, one might be automatically included outside the config file.&lt;br /&gt;
* NetAuthenticatorModule&lt;br /&gt;
: If your server tries to request a resource through http, and the request must be authenticated with a user and a password, you can use this to add an authenticator for it. Note that this is not user authentication for incoming requests, this is for providing login details for requests the server initiates to other servers.&lt;br /&gt;
* ScopedModuleManager&lt;br /&gt;
: This is a child module manager that is also a module and can thus be placed inside another module manager. This way you can load another collection of modules inside the parent module manager. The child module manager may import modules from the parent for use inside the child configuration.&lt;br /&gt;
&lt;br /&gt;
=== org.wandora.modules.cache package ===&lt;br /&gt;
&lt;br /&gt;
* DiskCacheModule&lt;br /&gt;
: This module provides caching services for other modules that may need them. The results of other modules may be cached on the disk to speed up identical requests in the future. Obviously this is not suitable for all kinds of modules but may be very beneficial in some cases.&lt;br /&gt;
&lt;br /&gt;
=== org.wandora.modules.servlet package ===&lt;br /&gt;
&lt;br /&gt;
This package modules related to responding to HTTP requests. These types of modules are called actions, each of them perform some kind of action and then returns the result.&lt;br /&gt;
&lt;br /&gt;
* ChainedAction&lt;br /&gt;
: This module can be used to chain two or more other actions together so that they are executed in sequence in response to a single http request. Typically only one of the actions returns anything and the others cause side effects on the server side.&lt;br /&gt;
* GenericTemplateAction&lt;br /&gt;
: This is one of the most useful modules. It runs a template, at the time a Velocity template but in future it could be some other kind of template too, through a template engine and then returns the result of that. The template context is initialised with values specified in the config file, with optionally passing on values from the HTTP request as well. As such, in many cases you can use this action directly without any making your own version of it. Custom application logic can instead be performed using the objects passed to the template in the template context.&lt;br /&gt;
* ImageResizeAction&lt;br /&gt;
: This module can be used to resize images server side to fit specified dimensions. This way you can have a repository of original images which are then resized to smaller dimensions before sent to the client web browser. Several image profiles can be specified in the module parameters, each with different image dimensions. The images can optionally be also cropped to fit the dimensions and a watermark can be stamped on the image. A cache should be used with this module so that the resizing process is done only once per each image and image profile combination.&lt;br /&gt;
* RedirectAction&lt;br /&gt;
: This module can return an HTTP redirect code so as to redirect the browser to a different address.&lt;br /&gt;
* RequestForwarder&lt;br /&gt;
: This module forwards the HTTP requests to another address server side and then returns the result of this. This can be used if you have a service in the server internal network that is inaccessible from outside and you wish to expose it. You may want to place some usage restrictions as well in such a case.&lt;br /&gt;
* SendEmailAction&lt;br /&gt;
: This module can send email, using an ''EmailModule'', in response to an HTTP request. This module extends ''GenericTemplateAction'', the sent email is the result of the processed template. This action doesn't respond to the HTTP request in any way so you should chain this action with some other that does using the ''ChainedAction'' module.&lt;br /&gt;
* TemplateManager&lt;br /&gt;
: This module keeps track of all templates and gives them to other modules that need them.&lt;br /&gt;
* VelocityEngineModule&lt;br /&gt;
: This module provides the Apache Velocity engine used to process Velocity templates.&lt;br /&gt;
* VelocityTemplate&lt;br /&gt;
: This module specifies a single Velocity template. It automatically registers itself to the ''TemplateManager''. Other modules can request this template using the template key specified in parameters.&lt;br /&gt;
&lt;br /&gt;
=== org.wandora.modules.topicmap package ===&lt;br /&gt;
&lt;br /&gt;
* SimpleTopicMapManager&lt;br /&gt;
: This module provides a topic map for other modules to use. The topic map is loaded from a Wandora project file or an XTM file. The module can also automatically save the topic map, if it's being modified by other modules.&lt;br /&gt;
* ViewTopicAction&lt;br /&gt;
: This is a ''GenericTemplateAction'' which tailored for serving pages about topics. Among other things, it finds the needed topic based on the HTTP request parameters and adds it to the template context.&lt;br /&gt;
* WandoraTopicMapManager&lt;br /&gt;
: This is the other topic map manager. It connects to a running Wandora application and takes the topic map from there. Typically only used with the [[Embedded HTTP server]] which itself is running inside Wandora. This way, any modifications to the topic map in the Wandora application are immediately reflected in the server.&lt;br /&gt;
&lt;br /&gt;
== Access control ==&lt;br /&gt;
&lt;br /&gt;
Access control is implemented using action contexts, not to be confused with template contexts used with Velocity templates. Each action binds to a specific context and then falls under whatever access restrictions are specified for that context. Different type of restrictions are placed by different context implementations.&lt;br /&gt;
&lt;br /&gt;
Each context actually implements the ''ServletModule'' interface and looks to other actions as if it's the module receiving the HTTP requests. And, in a way, it is, it's just receiving them from another similar module and doing something with the request in between. As such, you will need to make sure that each context module and each action module use the right ''ServletModule''. You do this by using priorities and/or explicitly specifying the module to use as described module dependency solving section. Typically you will want to give a high priority to the final context so that your actions automatically use that. Then use the explicit naming of modules for the contexts themselves. If different actions are to bind to different contexts, you will have to explicitly specify that in each action.&lt;br /&gt;
&lt;br /&gt;
Many of the access control modules require a ''UserStore'' where details about access privileges are stored for all users. Currently there are three options for this.&lt;br /&gt;
&lt;br /&gt;
* StaticUserStore&lt;br /&gt;
: This user store reads all user details from the config file itself and does not permit changing them. This is mostly meant for development as it's quick to setup and can then later be replaced with a more suitable solution.&lt;br /&gt;
* FileUserStore&lt;br /&gt;
: This module stores user details in a file in json format. The module permits changing users details and overwriting the existing file. This module should only really be used when the users are fairly static and there is a small number of them.&lt;br /&gt;
* DatabaseUserStore&lt;br /&gt;
: This module stores user details in a relational database and requires a database module to provide the database services. &lt;br /&gt;
&lt;br /&gt;
Below is a list of other modules relating to access control. These modules are all in the package org.wandora.modules.usercontrol.&lt;br /&gt;
&lt;br /&gt;
* GenericContext&lt;br /&gt;
: This is the base class for most other context modules, but you can also use it on its own. In particular, using the urlPrefix parameter, you can control which http requests are directed into this context based on the path of the request. You may also use the contextPath parameter to change the default path on the server the actions use. It defaults to the directory containing the server ''modulesconfig.xml'' but can be changed to, for example, a subdirectory of that using a GenericContext. Because GenericContext is the base class of most other contexts, you can use these features with other contexts as well.&lt;br /&gt;
* BasicUserAuthenticator&lt;br /&gt;
: This module is basic in the sense that it performs the authentication using the BASIC www authentication scheme and it is also basic in functionality. It stores the passwords of users in plain text so it should never be used in production environment, at least not when user details are collected from a large unspecified group of users. It may be suitable for situations where you have only one or a few users, as in a small group of administrators, that need to be authenticated, and the risks of storing passwords on the server in plain text is of no concern. Even then, you should encrypt the connection using https, otherwise your password will also be transmitted in plain text.&lt;br /&gt;
* FrequencyRestrictedContext&lt;br /&gt;
: This module places frequency restrictions on the context. A specific user can use the service only a certain number of times in a specific time span. As in, only 10 requests per minute, 1000 requests per month or something similar.&lt;br /&gt;
* RoleRestrictedContext&lt;br /&gt;
: This module only allows users with a specific role defined in their user details. Note that ''BasicUserAuthenticator'' can do a similar thing in the more common simple cases and you don't need a separate ''RoleRestrictedContext'' at all.&lt;br /&gt;
* SourceRestrictedContext&lt;br /&gt;
: This module only allows access from certain IP addresses.&lt;br /&gt;
&lt;br /&gt;
In addition to the modules mentioned above, there is also a ''ChangeUserAction'' which can be used to change the properties or roles of a user.&lt;br /&gt;
&lt;br /&gt;
== Module development ==&lt;br /&gt;
&lt;br /&gt;
=== Module hierarchy ===&lt;br /&gt;
&lt;br /&gt;
You can make your own modules by implementing the ''Module'' interface or extending one of the abstract classes partially implementing it. Obviously you will need extend a higher level class or implement a certain interface if you wish to make your class do a specific task in the framework. All actions need to derive from ''AbstractAction'' but there are also higher level options like ''GenericTemplateAction''. In fact ''GenericTemplateAction'' can even work without any extension if you place the application specific code in the template itself. Below is a list of the most common extension points. More details of specific methods can be found in the javadoc.&lt;br /&gt;
&lt;br /&gt;
* Module&lt;br /&gt;
: The root interface of the module class hierarchy. This is the most generic option available. But in most cases you should instead extend the AbstractAction instead which has basic implementations of all the methods.&lt;br /&gt;
* AbstractModule&lt;br /&gt;
: This is the most generic of the abstract classes implementing Module. All methods of the Module interface are implemented, but they don't really do anything useful without overriding some methods or adding functionality in other ways.&lt;br /&gt;
* ScriptModule&lt;br /&gt;
: This is a direct extension of AbstractModule which provides some scripting features in the modulesconfig.xml file for the module. Modules deriving from this can have scripts specified in the config which are ran when the module is initialised, stopped or started. You may want derive your class from this instead of AbstractModule to get these features, even if you don't immediately plan to use them. They can later be used to add triggers when a module is started or stopped.&lt;br /&gt;
* ServletModule.RequestListener&lt;br /&gt;
: This is the interface for action classes that respond to http requests. &lt;br /&gt;
* AbstractAction&lt;br /&gt;
: This is an abstract class that implements the ServletModule.RequestListener interface and can thus respond to http requests. It also extends ScriptModule, and thus AbstractModule, so it has basic module implementation as well. This is basically the most generic abstract class to extend for action type modules.&lt;br /&gt;
* CachedAction&lt;br /&gt;
: This is a direct extension of AbstractAction and provides caching options for the action. If your action can benefit from having action results cached, you should consider extending this action. Caching can always be also turned off in the config even if you do extend from this class.&lt;br /&gt;
* GenericTemplateAction&lt;br /&gt;
: This is a direct extension of CachedAction and adds template handling. This class doesn't have any abstract methods and is useful on its own without any extensions. It will take an http request, use the template specified in the config with the context also specified in the config and then return the result of running the template through the template engine. If you only require minimal application logic which can be placed in the template, then you can just use this class directly instead of extending it. Otherwise extend the class and add some application logic and then add more things in the context if needed.&lt;br /&gt;
&lt;br /&gt;
=== Module life-cycle ===&lt;br /&gt;
&lt;br /&gt;
The instantiation, initialisation, starting, stopping and dependency resolution is all handled by the ''ModuleManager''. The first thing in the life-cycle of a module is it being instantiated with the parameterless constructor, which modules should have. It is possible to not have this constructor in a module, but then it cannot be instantiated by the module manager automatically, meaning that you cannot use it in the config file at all. You can still add it in the module manager in your own custom code.&lt;br /&gt;
&lt;br /&gt;
The constructor should not perform any big operations. It is assumed that instantiating the module is a fast operation and practically cannot fail, i.e. it should not throw any exceptions. There are other points in the life-cycle of the module where more complicated initialisation should be done.&lt;br /&gt;
&lt;br /&gt;
Next the ''init'' method of the module will be called. The init method is given the parameters specified in the config file. What should happen in the init method is to process the parameters, store them in internal fields if needed, and validate that their values are sensible. Nothing time consuming should be done here, or anything with permanent side effects. The ''init'' method of every module will be called, even if the module is never going to be started, so at this point you do not know if the module will ever actually be expected to do anything. However, you may throw a ''ModuleException'' to indicate that the initialisation failed. For example, if some required parameters were not provided or the values of the parameters aren't sensible.&lt;br /&gt;
&lt;br /&gt;
Next method in the life-cycle is ''getDependencies''. In here you can specify what modules your module depends on. You do this by calling the ''requireModule'' method of the manager, which will immediately throw an exception if no suitable module is found. You can also use the ''optionalModule'' method to specify an optional dependency. This will not throw an exception if the needed module is missing, but if it exists, it makes sure that the needed module is started before your module. Note that the module dependencies may depend on initialisation parameters.&lt;br /&gt;
&lt;br /&gt;
After the dependencies have been solved, modules can be started. The module manager will call the ''start'' method. This is the place where you can start executing the actual job of the module. The start method itself should not block for too long, so you should do any potentially time consuming tasks asynchronously.&lt;br /&gt;
&lt;br /&gt;
Finally modules are stopped by calling the ''stop'' method. You should stop all threads spawned by your module, perform any cleaning up duties, dereference large data structures so that they may be garbage collected and return your module in a state where it can be started again with the ''start'' method, which may or may not happen.&lt;br /&gt;
&lt;br /&gt;
Refer to the javadoc for more details on all the specific methods and their parameters.&lt;/div&gt;</summary>
		<author><name>Olli</name></author>	</entry>

	</feed>