Hi Arnold,
[apologies for the length!]
First of all: thanks for developing GraphPath! I have just begun to play with it, but I can see immediately that it is very well thought out and architected, and appears to benefit from your several years of experience in RDF and related fields (yes, I did some Googling of your work -- amazing how much you can find out! -- as part of my assessment of GraphPath ;).
I'm a Python developer, so most of the RDF/RDFS/OWL "aware" packages I've looked at were Python (e.g.: CWM [works mostly, but arg what ugly code! and not intended for production use anyway], Versa [nice, and I have great respect for the 4Suite group, but something about 4Suite puts me off ... perhaps because I think of XML as a necessary evil!], some others), and GraphPath to me seems the most elegant, most general, and most Pythonic. Kudos!
So I am now planning to use GraphPath in a framework that I am developing for use in implementing applications that need several features: "Intelligent PDM", knowledge-and-model-driven design, analysis, and systems engineering, and collaboration and tool/data integration. Yeah, I know -- quite ambitious! ;) I notice that you were (are?) participating in the OMG and attended some meetings Larry Johnson's MANTIS group, so I'm sure you are familiar with the general domain of such applications (engineering, CAD/CAE/CAM, etc.).
I'm always looking for potential collaborators for my project, which is open-source. I haven't decided whether to open a SourceForge project for it yet; I run my own CVS server and I'm happy to share the code with anyone who's interested. Anonymous checkout/update is available, and I use Twisted's (Kevin Turner's) CVSToys, which runs a "commits" mailing list that notifies subscribers when a commit happens, and I have another Mailman list for developer discussions (although it's just me at the moment because of recent funding cuts ... ;).
So let me know if you might be interested and I'll send you more explanation.
But that wasn't the immediate reason for this message. :) To help me in browsing the GraphPath code, I used epydoc to generate the API docs -- I'll send you a tar file, if you'd like (although it's pretty trivial to run epydoc yourself ;).
One thing I was thinking about that might be beneficial to both of us would be for me to add epydoc-style annotations (e.g., @param, @type, etc.) to the class and function docstrings so that the parameter lists and return values for everything would be documented and epydoc could generate a nicer and more complete API documentation. But you might probably have to answer some questions if I run into some that I can't figure out.
The other thing I'd offer to do (which is a matter of style, so it's your call, of course!! ;) would be to change all the tabs to 4 spaces and/or wrap all the lines to 80 characters. (Hope you're not offended at the boldness of this suggestion ... I'm a bit obsessive-compulsive about that stuff, but it's really just a matter of taste ... ;).
But as to the actual code, it looks beautiful to me.
I'll make one more mention of my app, because I see that you have also been involved in UML/XMI and conversions between that and RDF variants, which is also of great interest to me: a very important feature of the framework I'm developing will be import/export and mapping/conversion of data to/from (1) RDF/RDFS/OWL, (2) XMI (UML/MOF/etc), and (3) STEP (ISO 10303) data in various exchange formats (10303-21, XML, etc.). I know you are very familiar with the first 2 and *probably* somewhat familiar with STEP, or at least know of AP212 (10303-212), which is the most relevant to the electrical power domain.
The combination of GraphPath and rdflib will be great for (1), and probably all I need, I think. For (2), the best Python app I've seen is PEAK, and fortunately, that part of PEAK is usable without the rest of PEAK! ;) It is *very* well done (Phillip Eby is arguably the Python "king of meta" ;), being driven at the meta-level by the XMI model -- it can read in the XMI definition of any version of UML and create an importer based on that!
For (3), I'm currently planning to use "Express Engine", which is actually written in Lisp by a couple friends of mine, but I paid them to give it a minimal command-line interface so I'll call it as a process and tell it to read in a STEP schema and a Part 21 or STEP-XML file and give it to me in a simplified XML format (among other things). Express Engine is a SourceForge project:
http://exp-engine.sourceforge.net/There are a lot of things that I want to do as far as intelligently using/integrating/reasoning with data that comes from all 3 of the types of data sources mentioned above -- which very generally represent (1) enterprise knowledge and business rules, (2) software development and systems engineering, and (3) CAD/CAE/CAM/PDM/etc. I'm very curious to know if this is something you are interested in.
Well, enough for now -- sorry for bending your ear for so long, and I hope at least some of it was of interest!
Cheers,
Steve Waterbury
NASA/GSFC