Here is a possible approach to building our system. Could take years but still worthwhile. Here are possible phases:
1 - Build a simple system with a simple text interface to handle modeling nouns and their relationships and attributes to other nouns (things as they are). Each datum or concept is independent of its names and could have many names (or none), but probably has relationships. This phase includes modeling key abstractions for the system that we will build on. Manual input only, single-user at this point?
1.x - Do very simple queries.
2 - Add a way to include or link to pictures or other data types and files/documents? (so you can store family photos in the personal organizer we made in previous step?) At this point, is the system fully capable of storing family history data, to the extent of what is in one's paper filing cabinet or specialized family history software? What portion of the "time" stuff from later phases is needed for genealogy, now?
3 - Make the system multiuser, with considerations for access, performance, storage, and security. (Look into concepts behind Jini, JavaSpaces [Linda], distributed storage systems, etc. to see what helps.)
4 - Look at issues of import/export (including genealogy), branch (for someone who disagrees or wants different security or emphasis) and merge of data sets. Export XML (or later).
5 - Tackle "context"--how to use (or query for, or even guess or deduce based on available data) the names for things used in a given context (time, geography, family, personal, language, subject area)? (Tom: does linguistics go here somehow? How do you see this working?)
6 - Handle verbs, issues of time/chronology (things as they were and as they are to come), possibility of running simulations or what-if scenarios with available data.
7 - Make it support more interesting queries. Come up with faster, more efficient input methods (automated? text processing, even if human-assisted?). Consider these relative to other system requirements, including interface issues.