Tabulator To-Do

There are plenty of things to improve or fix about the tabulator!  Patches gratefully received. This project is open source.

Note that the Tabulator Issues List is a more up-to-date and rather more short term live list. It may be added to by users who register.

To Do

  1. User Interface generic
    1. Select a set of objects.  This defines a new ad-hoc class.  For example, in map or valendar view, just use multiple select (mouse and control keys, select extend, toggle, etc)  or lassoo paradigm. Also in column of table view could do mutiple selects.  What could we do with such sets?  Restrict a view to only things in that set. Start a new outline view with that set.
    2. Bookmarking. Can use same bookmark system as the main browser?  Bookmark items.  Bookmark views?   URI for a view of data (sounds very long). 
    3. How to make the tabulator run whenever user encounters RDF data in the course of browsing. (Firefox extension? Like piggybank)
    4. Fix "clear log" so it doesn't take forever -- sheets
    5. Take care of handling collections in views
  2. Outline view
    1. Document content view for N3 documents.  Not actually not simple: It requires basically the cwm pretty-printing algorithm to mimimize the number of top level noes and bndoes which show up with names.
    2. Large numbers of items: deal with it as a scrollable space, and/or fold the property up by default.  May be similar to user interface for lists.
    3. Suppress back-pointers to the subject within which the property list is nested, as they are obvious.
    4. Class-specific or property-specific views. Or views which apply to any thing iff a given function is true. Extensible software architecture for this, to allow view contributions.
    5. Ouline mode: should sort predicate/inverse by predicate first so forward and backward links appear together.
    6. Fresnel view language for ordering, selecting and styling the property-list view.
    7. Nested-Tabbed format? Variation of outliner operation in which one property/object statement is selected and on the right the whole vertical extent of the property list is used for the expansion of the object.  Right-click on property cell with multiple objects.-> tabs? Actually, a property cell with multiple objects has lots of space.. room for more icons.
  3. Table view -- all the normal things one expects of a table browser:
    1. Selecting a value field (or property table head field for the expanded node) constrains values to that selected
    2. Drag and drop or other to rearrange columns
    3. Rename columns, delete.
    4. Add new columns from browser rule
    5. Rename columns when corresponding ouline view is re-rooted.
    6. Statistical: totals, means, correlate, chart in many ways.
    7. Saving table view as CSV file, etc.
    8. Data manipulation
      1. Add numerically derived extra columns.  This actually creates a rule. Example: distance is ((x1-x2)^2+(y1-y2)^2)^0.5
      2. Add graph-derived properties. Example:  assistant  phone  ->  assistantPhone. (UI?) Given that outlinew view can display a graph, maybe do it by example - like a query. Indeed, rule antecedent is just like a query.    Do it by renaming a column: this actually creates a new bit of ontology and a bit of rule (or owl?) to define it.
      3. Aggregation:  Sum, Mean, Standard deviation.  Union and intersection and intersection of calendar events?
  4. Value summary browser (mSpace, iTunes like)
    1. Click on eye icon in table colum header (or outline view) to add a column value to the value browser
    2. Each value column shows the set of values that field can take, with no duplicates, in itrs own order.
    3. Clicking on one value in the value browser constrains main matrix to lines with that value.
    4. Can have columns in value browser and not in matrix, and vice-versa.  Keep synch with outline mode.
  5. Map view
    1. Add "Map" button next to "Tabulate" enabled iff the query has some form of location.
    2. Display points, and information boxes with a compact version of the data from the rest of the variables.
  6. Business card (name, phone  number,...)
    1. May be able to do this with Fresnel.
  7. Calendar (date)
    1. Normal calendar views (day, month, year) and also timeline. (log scale timeline for historical events?)
    2. Handle point events (datetimes), dates, and periods (start & end datetimes)
    3. Represent events using small views and medium views generally shared with map. 
  8. Map (location, lat, long)
    1. Small views of things shared with calendar
  9. Pluggable view systems. 
    1. Metadata in or linked from the ontology defines view by class, property, subgraph match, etc.
    2. View languages:
      1. Fresenel, the RDF view langauge
      2. Views implemented by javascript loaded in real time: define API. 
      3. A view requires a routine to return the representation of an object in a DOM tree; an icon with which to represent the option of view to be clicked on to get the view, and a filter for what things (by class? properties?) can be so displayed. 
      4. Views metadat gives have icons for the buttons to bring view.
  10. Organizational chart (low priority)
    1. This is a form of tree view which is possible when you know that a given property is acyclic (gving a Directed Acyclig Graph "DAG", like "parent" giving a genealogical misnamed 'family tree' graph), or perhaps acyclic and functional (giving a tree, like "boss" giving an organizational tree).
  11. Photo album  (anything whose range is Image).
    1. Two-dimensional array of objects.
    2. Thumbnail view is one of the set of small views.
    3. View suggested when the
  12. Slide show
    1. One element takes up all the available space in the view
    2. Not just of pictures but of any set of objects or list, or multi-valued property.
    3. Little controls allow one to step backward, forward, jump to ends.
  13. Editing. The web should be a two-way thing between person and the community spaces
    • Allow new data to be added, sending the result as some kind of form I guess - posting RDF.. Needs RDF or N3 serializer. NTriples serialiser exists.
    • Allow existing data to be changed, sending diffs [qv] to a server.
    • Storage: HTML form like server POST, or annotation server protocol maybe.
    • Add a new statement with same s and p or same s. Or make new one. Select p from list. Include "new..." in the list which in fact then goes to a form for a new property in a new or existing ontology.
    • Make links betwen S and O by: Select S; "Mark"; select O; "Link to marked"; select P from popup. (like enquire)
    • Make sure you get from the user the access policy which the new information will be subject to.
    • Protocol for posting new data: Just post new data? Post N3 diff? Post SPARQL expanded to have DELETe ...INSERT ...  WHERE ....  
  14. Web access
    1. Get over the problem that the script is only allowed to access content on the same server. One or more techniques
      • Have the user set the Firefox browser to do codebase principals.   This works.  It is not ideal. [done, See Help file.]
      • Hack around the problem using alternative HTTP access code. This would normally rely on some less secure Firefox extension.
      • Establish a local gateway on the user's machine. This would not be easy to do portably, but an Apache config file would be a start
      • Establish a general gateway for all users, at This would make sense only if it could be used for other purposes, such as caching, (Ontaria connecetion? Swoogle service)
    2. Better HTTP error handing: make all information including 403 and 404 messages available from "sources" list. Handle 301, 302 (not handled by Safari automatically, but done by Firefox) and 303 handling as per TAG finding HTTPRange-14
    3. Local cache of remote files.
    4. Using query servers. Use SPARQL. Pick up metadata about what servers can answer what questions. Eg: Request for file returns HTTP code 303 redirecting to RDF information about the documents saying that it is big and where the SPAQL interface is. The RDF mapping of WSDL might be handy if a SOAP interface is exported.
    5. Add N3 parser. (Eulermoz? Generate a parser from the N3 gammar work? Sean Palmer's n3p?)
    6. Parser: Track the provenence [done] or inference which led to a statment, to allow 'of yeah' button, and retraction. 
    7. GRDDL. This is a technique for extracting the RDF data from XML pages which have not been marked up as RDF. Needs access to the host browsers's XSLT system, which I understand exists in Firefox.   Partly done:  works using web service to do eth transform. Convert to using internal browser XSLT engine where available. Cache XSLT transform file DOMs in memory, as we expect them to be used by many pages.
  15. The Query engine and Store
    1. Lists as lists. RDF Collections (N3 lists) handled as internal datatype, maybe subclass of javascript array, or just javascript array? Compare cwm.
      1. List object in terms
      2. RDF parser creates lists
      3. Property list view displays lists  much as it does sets of many values of same property.
  16. Parser
    1. Change all array-iterating constructs to just for
    2. Finish compliance work for official positive rdf parser test-cases
    3. Bring parser into compliance for negative rdf parser test-cases
    4. Test parser on a moderately large corpus of real-world test-cases
    5. Benchmark parser
    6. Comment parser to correspond to spec


  1. Saving the HTML view as HTML. Can one ever save the DOM state as an HTML file? If so, it would be useful to be able to save the state in such a way that it could be emailed as a report, for example, which would be live for the person reading it.
  2. Alternative UI architecture for buttons: Unicode symbols with style sheet swicthing to change color of symbols for each different source?
  3. Visit web pages - option to open a new web page in another or the same window?
  4. Mouseover help. Toolbar tips. 
  5. "Printable version" or "Link to this page" which generates a URI which will deref to the whole view. Especially (only?) for table view.  URI could be encoded SPARQL or N3QL of the view.
  6. When a cell is single-clicked, highlight source view for the revant source file. 
  7. Automatically find ontological closure of data added (look up all predicates and types)
  8. Smush together nodes using [inverse] functional properties, and owl:sameAs
  9. List classes mentioned in a document: currently one gets document metadata but not contents.
  10. Document content view: distinguish between loading a document and looking at its contents, and just looking.
  11. Add why parameter to parser, put into each statement,currently the RDFSymbol for the source document.
  12. Query generation by example: Select cells in the table, select property cell meaning "for all of these", generat e a query for a table, for a rectangular tabe view.
  13. URI of the object in question - click on a cell and it is put in the URI bar.
  14. In sources list, allow retract. Can still look at content of document, but it is not considered part of the kb.
  15. In sources list, allow retry for failed fetches, and maybe even refresh for successful ones.
  16. Parser: clean up URIs
  17. Table view: Ordering by clicking on column titles. Up or down, use arrows like mac mail etc etc.  (done)
  18. Visit web pages - option to open a  web page in the same window in an iframe.