How to use the Tabulator

Compatibility | Security | Usage | Tutorials | Limitations

The tabulator is one possible form of a data browser. It is only one way of looking at the Semantic Web, just as a refrigerator is just one way of using electricity.


We make some effort to stick to the ECMAScript and Dom specs where they apply, but we develop and test on Firefox, and some Firefox-specific dependencies may have crept in.

To view sites outside of the local domain in Firefox, you must change your FireFox settings.

Compatibility with other browsers is something we'd like help with. For example, David Håsäther contributed a opera widget. (See also issue 199, Opera compatibility).

Safari: Weird bugs occur all over the place. "Undefined" is littered all over the screen.

Internet Explorer: Not functional in Internet Explorer. We are interested in help on this.

Security and browsing different sites

The Cross-Domain Browsing Problem

Firefox security won't in general let a script from a given DNS domain (like read web data from a different domain. Therefore, if you try to browse an rdf file from a different domain, the tabulator will fail. There are two ways to allow cross-domain requests.

The Simple Solution

  1. Type into the main browser URI bar "about:config" and hit return to get to the config page.
  2. Type codebase into the filter window
  3. Double-click the line
    signed.applets.codebase_principal_support ... user set ... boolean .. false

    to change it to 'true'.
  4. Go back to the tabulator, and try again. When the browser asks you whether to allow the script to access arbitrary web pages, agree. You probably want to check the "remember the answer this question" box.

Note that this is reducing the security of your browser. You end up allowing any web page on the site to read data from the web, which could include data from inside your firewall.

Meanwhile, you might also want to filter for script and set the value of dom.max_script_run_time to more than te default, say 30. This is the time in second it will wait before asking you wheter you want to abort a long-running script.

An Alternative Solution

Quit Firefox and then find your prefs.js file and add to the bottom of it the line

user_pref("signed.applets.codebase_principal_support", true);

On Mac OS-X the file will be in somewhere like /Users/timbl/Library/Application Support/Firefox/Profiles/mxotp788.default, and in Windows in an equivalent place. Then, run Firefox and the tabulator again, and answer the dialog box as above.)

Why this problem?

The tabulator program is acting as your agent as you browse data, but the Firefox program doesn't know that you can trust it. It could be just a script on some webpage you are browsing, and it could be trying to get information which only you have access to and send it to a third party. It turns out that it is really difficult to stop such a script sending messages out in some form, so Firefox security prevents it from accessing anything on the web to which you have access to, unless it on the same DNS domain as the script itself. This is not a very good system, as many web sites which do not trust each other share a domain name. But that is how it is. A better way is for the scripts to be signed, but I haven't got the script signing system working yet.

See also Mozilla/Firefox documentation on See also Customizing and Signed scripts.

"Script is taking a long time" alerts

While you are adjusting the Firefox parameters, you may wish to increase the dom.max_script_run_time value in about:config. The default seems to be 5 (whcih seems to give in practice around 10 secs) of time in between Firefox asking whether it is Ok whether the script is still running. This happens when loading large RDF files. Try 30 or adjust to taste.


Key: expand expand, collapse collapse, fetch Click the dot to fetch data. requestedloading.... failedFailed to fetch data. loaded Data loaded OK.

The outliner window allows you to explore the semantic web in a tree structure. The outliner begins with several initial rdf nodes (the objects with clickable expand symbols), and you can add more by around between different objects by adding their URI at the top of the window and clicking "Add to outliner". To explore an rdf node, simply expand it by clicking the expand icon for that node. You can click it again to collapse it.

The colored dot next to a given node indicates the status of retrieval for that URI. See the key above. Once a data source is retrieved, it will not need to be retrieved again, and the colored dot will not appear in future copies of that node. A list of data sources, accessible and not, is kept at the bottom of the browser.

Tip: Seeing web access details

If you hold the Alt key down when opening up an outline, you will also get some behind-the-scenes info ('Request') about what happened when Tabulator tried to access the thing, and also ('RequestedBy') where it found the URI for that thing in the first place.


Once you begin browsing, the nested tables quickly get quite deep. You can clean it all up, refocussing on one item by shift-clicking on its expand expand or collapse collapse icon. This removes the nested tables, and places your selected node into the tabulator as a starting node.

Alternatively, if you would like to refocus on a node without removing the original tree you were browsing in, you can double-click on a node field (the text next to a expand/ collapse icon).

Seeing the URI

The point a browser is to give you the data without the URIs used as identifiers. They are hidden whenever there is a label, title, or name of some sort which can be used for something on the screen.

To see something's URI, click once on a table cell and (if appropriate) the URI of the thing described in the cell will be put in the URI bar at the top.

Performing Queries on Data

As you explore the outliner, you may want to create a table, map, calendar, or other view containing certain pieces of information about each of several equivalently-related objects. This is how to do it:

  1. First find one instance of the property you are looking for and select it by clicking on the field name (not the field value). To select or deselect multiple field names, hold down the Alt key.
  2. The little checkboxes that appear in the selected fields and their descendants can be checked to make a section of the query optional. If part of a query is optional, then any results that have no value for that field will still be shown as a result, but with a "." in place of its value
  3. Click on the button "View and Save Query"
  4. You should see a table with your data appear. Be patient, this may take up to several minutes. Once the table appears, you can re-focus on any of the blue (non-literal) results in the table by double-clicking on them. You can also save the table as an HTML document with the button "Export as HTML"
  5. If your query can be mapped or calendarized, click on the map or calendar tabs to see the data in that format.
  6. If you want to manually edit your query in the SPARQL query language, click on the SPARQL tab. This tab will also allow you to create a URL that will open the tabulator with this query already saved in it.

For example, to make a table of the names of all the W3C working group chairs and team contacts, expand World Wide Web Consortium -> W3C Groups and Organizational Structure -> working group. Now, you may want to shift-click the "working group" icon to refocus it. We refocus on "working group" so that only matches within "working group" will be tabulated. Open up one of the working groups and click on the "chair" name field. Now alt click on the "team contact" field. Both these fields should now be highlighted in green. Now you can go down to the bottom of the outline and click "Find All" to create the table.

What you will notice in this example is that every combination of working group/chair/team contact has its own entry in the table. You can sort the table by clicking on the column heading of the column to sort by. Then you can export this data as an HTML table by clicking the "Export as HTML" button and saving the page that appears.

Relaoding a changed document: Flushing the cache

Q: In doing development I'm changing my rdf on the server side allot, I find I need to keep restarting Firefox to get tabulator to get the fresh output from the server, is there some caching going on in tabulator that can be turned off?

A: First you have to set Firefox up so you can easily clear the Firefox document cache.

  1. Go to the Preferences
  2. In the Private Data section, click the "Settings" button
  3. In the box which appears, uncheck everything except "Cache" which should be checked
  4. Press OK

Now when you want to reload an RDF file,

  1. In the Tools menu, presss Clear Private Data.
  2. The little gren ballon a loaded URI in tabulator outline view indctes a loaded URI. Clicking on it will cause the tabulator store to reload it, causing the original file to be fetched because you have just cleared the cache.
  3. You will have to close and reopen any views displaying data from the file.

Linking to a tabulator view

If you take the URI of the tabulator page, and then append uri= and the uri-encoded URI of the thing you are viewing, then this is a URI of a tabulator view for that thing. You can get the URI for anything in the tabulator outline view by clicking on it, and then looking in the tabulator's URI form field (not the browser's address bar). Remmeber to encode # as %23.


Bug reports

Please make sure your bug is not already there before you enter it, and make up a title which will identify it well.


This is a very simple unoptimized javascript implementation, so it will tend to be slow with large files. If you get a message that a script is taking a long time, you have a choice of letting it run or aborting it. This is a firefox feature, you can control it using the about:config page. (Type about:config into the firefox URL bar, presss return, type "script" into the filter and then change the value for dom_max_script_run_time to say 30)

This is a proof of concept program, many user interface things are missing, for example from the table view.