Two possible definitions:
Type 2 databases:
From the http://www.dbxml.org/FAQ.html (This is the wrong URL. It should probably be http://www.dbxml.com/, but there is no FAQ anymore. There are different open source and commercial licenses.)
Can anyone give a summary of the state of the art of databases that look like graphs of semi-structured data? The article in DDJ was interesting, but it looked like this field was very young. Also, the use of an SQL-derived language spoke to me as a failure. I would think that XML could have a much different query semantic, on the order of a ParadigmShift.
Related question: What's a good, free XML database that you can plug in Unix (hopefully with a low footprint)? I'm guessing it's spelt "Roll your own in Perl."
Funny you should say that. Slowly, slowly, I'm rolling my own in Perl. See http://usemod.com/cgi-bin/mb.pl?CrystalPalace to learn more. -- SunirShah
Databases that look like graphs? The field is young? Can anyone say CODASYL? ...or Total, IDS, etc. Thanks for noticing.
Time for another IndustryLearningExperience, perhaps?
Spuriously semi-random challenge: Consider a ReasoningTree. Alistair points out that reasoning is a graph. It isn't. It's really a hypertree in that there are no cycles, but two branches can join. Cycles make for circular arguments, and that would be bad.
An XML form is typically tree-like but sometimes it has links out. A framework based on XML could legitimately be in the shape of a hypertree then. (it could also be graph like, but that's another problem).
How do you serialize a hypertree so it still makes sense to a human reading it?
Why does it matter if a human can read the linear format? I'm not sure, but I suspect it's related to the indexing requirement of any really whizbang XML database/epistemological framework. Also, it would solve the problem of the ReasoningTree which would be helpful for patterns folk.
I did say semi-random.
Hypertrees are usually called DirectedAcyclicGraphs, aka DAGs.
You serialize a DAG by attaching markers to reused nodes and referencing those, of course. (Well, that's one way, anyway.) I don't know whether there's a standard way to do that in XML (Yes: use ID and IDREF type attributes), but Lisp "s-expressions" are really rather like XML, and in Common Lisp you can say
(foo #1=(bar baz) #1# #2=(#2#))to produce a structure that sort of corresponds to this:
[] -+-> foo | +-> [] -+-> bar |^| | ,'+-> baz +-' | +-> [] --. \| `--'("sort of" because there's more than one way to think about the structure of s-expressions). This notation can cope with graphs that have cycles, like the above, as well as acyclic ones.