Winkio, I want to thank you. You've been quite adept at asking exactly the right questions to get me thinking on the specifics of how the intricacies of this could work.
I though about your question on database construction for a fair bit but I only really came up with one solution.
my current plan for the game is for the vast majority of it's logic and game play to be handled by the server. the client for the game would be a thin client with only enough logic to render the data sent by the server. The server would take care of processing all user input for effect.
The database used for content would indeed be a massive undertaking if one were to enter all meta data by hand. While my examples so far have used english words as properties I'm not sure if this is the route I will go. If it IS is would be entirely unreasonable to expect every object added to the database to list the complete set of all properties it may have.
I believe the solution to my problem is a sort of tooled generation of the database. The database initially would consist of a structured set of files in a directory tree that described the bare minimum amount of information to describe them along with two to five words to describe the item. A tool would then collect and compile the items into a database. Use inference rules (would could also be defined as database items) to fill in additional properties of each item. For example an item might have a "Holly" property, the item could also be said to be "cleansing", "good", "pure", "sacred" etc. and the opposite of "evil", "corrupt" etc. if such rules were added to the database that described one property using sets of other properties then set theory could be applied to expand the three or so properties entered by hand into a complete set. care would need to be taken to avoid referential loop recursion and the properties would need to be defined in such a way that base cases could be found to etc. not a simple task to be sure. Additionally properties might be defined on an object with a level of separation from the original. eg the hand entered properties would have 0 levels of separation and properties found by expanding the originals would have 1 level of separation, properties found by expanding again would have 2 etc. Searches could be conducted limiting items returned by separation level. perhaps the engine would search for options using 1 level of separation first then expanding to 2, 3 etc to find the most relevant.
One all potential items have had their full set of properties indexes would need to be constructed to aid search speed, another task for the database generation tool. as the database does not need to be modified after the game has been distributed this would be a build time task.
Please continue to ask question and perhaps challenge me on my implementation ideas, just the task of thinking about this project is fun atm.