Ok, I think I've refined the 'tags for structured-metadata' idea to the point that I'm ready to start a prototype web-based store. Heres the basic gist:

The syntax

Basic syntax is s,p,o triples of tags:

PhilDawes a person
PhilDawes age 23
PhilDawes worksFor drkw

To elaborate on the meaning of a term, you can add stuff in brackets after the term.

b2421 a DellLaptop (laptop computer)
b2421 price 1500.24 (ukpounds)

If a term needs to contain spaces (e.g. its some text or something), you cat put it in quotes.

PhilDawes fullname "Philip Leslie Arthur Dawes"

The model

Same as above, but stuff in brackets is shortcut for more triples.

b2421 a DellLaptop
DellLaptop _tag laptop
DellLaptop _tag computer
b2421 price 1500.24 
1500.24 _tag ukpounds

Triples are scoped in named graphs. Named graphs are super-important in this model because of the requirement to be able to disambiguate through use of tags.

Notes

  • I'm not currently distinguishing between literals and resources. Will think about this more when I hit problems.
  • I haven't decided whether to include blank-node functionality
  • Tagging numbers could be problematic - it is common to want to use the same number in different contexts within a graph. If this pattern is unique to numbers then the store could just store each number seperately (different internal id).
  • Am toying with the idea of making order implicit (like it is in xml). This would remove the need for cumbersome ordered-collection constructs that plague rdf, but at the expense of implementation complexity.