XML is a markup language like HTML that allows a designer to create special tags that describe the structure of a document. A designer can add his own markup tags to the XML markup format by using something called a DTD (Document Type Definition).
XSL is a style language like Cascading Style Sheets that allows a designer to describe the style of a document.
For more information on XML see http://www.w3.org/xml/ and for more information on XML/XSL see http://www.microsoft.com/xml and http://www.microsoft.com/xml/xsl
A program that generates HTML pages by combining XML and XSL files can be found at http://www.microsoft.com/xml/xsl.
Here are the raw rudiments of a file system based on XML/XSL.
First, there is a DTD file that describes the special markup tags that this XML application will use - http://www.columbia.edu/~bkn3/prototype/xml/Directory.dtd
Next, there is an XML file that describes the structure of an example directory called the Home Directory - http://www.columbia.edu/~bkn3/prototype/xml/home_directory.xml
Next is an XSL style sheet describing how to transform an XML file using Directory tags into an appropriate styled HTML page - http://www.columbia edu/~bkn3/prototype/xml/Directory2.xsl
Finally, there is the HTML file that is produced from the XML and XSL file - http://www.columbia.edu/~bkn3/prototype/xml/view2.html. This file was made using Microsoft's XSL parser.
The nice thing about this setup is that if you wanted to visually represent the file system you would only have to change the XSL file.
Everyone is invited to play with and mutate these files. Some ideas for people to work on:
*It would be nice to have an XSL parser written in Java
*The home_directory.xml file could be loaded into a Java applet which would display the files as icons sitting on a desktop; it would be even nicer if someone were to come up with a nifty way to use an XSL style sheet that did this (and let people move the icons around!). This could be done by putting Javascript/Jscript into the Directory.xsl file, or by putting XML links to Java classes into the XSL file (or maybe some clever person will come up with an even more original way to do it!)
I have put together an prototype XML File Finder. It works as follows (consider the little underscores to be like brackets; I can't seem to figure out how to illustrate XML tags without the tags being mistaken for HTML!) A computer's file system is stored in an XML file called directory.xml. Here is an example piece of directory.xml:
_FILE name="Home Directory"_ _FILE name="Java Applications"_ _/FILE_ _FILE name="Games"_ _/FILE_ _FILE name="Dirty Pictures"_ _/FILE_ _/FILE_An appletcation named XMLFileFinder.java opens a window with a text box where you can type in directory names, like "Home Directory" or "Games"; when you type in a directory, the XML file is queried and the contents of that directory is returned to the appletcation window.
The prototype is in a zip file here. Run it by unzipping the directory where-ever you keep your APIS. Run it by typing:
java XMLFileFinder
Things to be done:
*Iconize directory presentation
*Allow files to be added and deleted
*Tie the files to the real underlying operating system by using eXtended Linking Language
*Abstract the Model from the Presentation
*Come up with a better recursive algorithm for findDirectory()
Feel free to dive into the code if you want to do these things, or if you have a cool idea you want to play around with. Good luck!
Brad, Can you explain how the XML-based file system would fit into any of the proposed OO file systems for JOS? I'm confused as to how the XML represents a file system, since I guess I always considered a file system more "low level" than just a basic description of how to display it.
But it's interesting so far... :) --MasonZhwiti
Yeah. An even more interesting question for me is, which problems are addressed by an XML FileSystem and how XML solves them. Furthermore I'm really really interested how you imagine the way your XML Filesystem interfaces with the hardware and how compatibility with Java standard I/O Classes is preserved...