Semantic Web Folders (aka "Genius Folders")
Apple has popularized the GUI device of displaying the results of a query as a folder ("Smart Folders"). But as a GUI device "Smart Folders" have a glaring defect, you can't put things into them."Genius Folders" remedy that defect by interpreting the action of putting an item (or items) into such a folder (one defined by a query that is) as the user asserting that they want to modify the item (or, more probably, it's metadata) so that it satisifies the query.
An Implementation
Google has recently (June 2009) implemented a simple version of this idea (at least the UI aspect) in Gmail.http://lifehacker.com/5305514/gmail-gives-labels-the-folder-treatment
Prototype Resources
The prototype will use a WebDAV server that Windows Explorer and Mac OS X Finder clients can connect to and display the "Genius Folders" as folders. An GWT AJAX web page in the root folder provides the interface for creating and deleting queries [1].The current plan for the prototype is to make an entry in the Google Desktop Widget Contest. That means we need three things in addition to the bare proof-of-concept:
- Query interface to Google Desktop Search
- Indexer plug-in for GDS (to apply our metadata changes)
- Widget UI (somewhat optional)
GDS as it stands is not a perfect fit for Genius Folders. It's normal query style is free form text rather than "and/or" queries. Worse is that GDS has a fixed schema, whereas Genius Folder users will want to be able to define whatever metadata tags they like. Also the granularity is strictly files and the full Semantic Web Folder implementation will work with any sort of item on the web (especially if it's OOHTML!). The plus side is that a lot of people may get to see the prototype and it will demonstrate the idea effectively.
Mac OS X Spotlight supports arbitrary schemas, although they don't link the file types to MIME type alas.
And both indexing APIs have the problem that they are one way (that is they can't be used to set the attributes they return). But as I mention above, that kind of bidirectional connection will require data structures with some structure.
[#1] Other UI possibilities include using the name of folders as the query (which enables "New Folder" to do something useful). But that isn't satisfying (the name should be mnemonic). The query form could be inside the folder, which might be preferable to the root form.
WebDAV
The best Java WebDAV server seems to be Apache Slide: http://jakarta.apache.org/slide/W3C has the Jigsaw server: http://www.w3.org/Jigsaw/
GDS API
Smallish Java driver with built-in Windows registry support: http://gdapi.sourceforge.net/It's XML Schema is only GDS V2, but that's not too big a deal to fix.
Lookout is an Eclipse plug-in that interfaces to both Google Web Search and Google Desktop Search.
Other
This Lucene powered thing might be worth looking at for parts: Red PiranhaHackdiary is a Java RDF crawler based on Jena.
The Ontobroker folks released a RDF crawler in Java a while ago.
GDS Proxies
http://www.projectcomputing.com/resources/desktopProxy/Related
LFS (Logic File System)
The Logic File System (part of LIS @ IRISA/INRIA) uses logic programming (in OCaml) to implement a file system based on queries. This is just the direction that I plan to take for Genius Folders as the most general approach is to have the queries as logic functions which can then be inverted for assertions.A FUSE adapter for LFS is available.
FUSE is also available for Mac OS X thanks to Google 20% time.
That leads us to the other system which illustrates the power of invertible functions:
Harmony
Harmony is an impressive project led by Benjamin C. Pierce that uses functional parsers and their inverses for grammar-based merges. The most significant aspect of that approach is that it shows how to overcome the development and double-maintenance dragon problem for lenses. A huge bonus is that they've developed impressive demos of the technology using HTML-based schemas aimed at desktop/PIM synchronization tasks and are clearly aiming at practical applications. Harmony is also implemented in OCaml.