This nicely demonstrates the point that the syntax is only a way to encode a particular model. I'd previously cast the same basic Lepidoptera data into XML (with some additional data, such as images) using XDelta:
http://www.bath.ac.uk/~ccslrd/delta/lep.xml
I'm sure the following is wrong in places and/or overly simplistic, and deliberately so:
A Character has - a Character Type (one of Ordered or Unordered or Real, or ...) - a Character Identifier (a number) - a Short Description (free text) - a Long Description (free text) - an Order Identifier (a number) - a State Descriptor (free text)
A State has - a State Value (free text) - a State Identifier (a number) - an Order Identifier
An Item has - An Item Type (free text) - An Item Identifier (a number) - A Description (free text) - One or more Characteristics (observed values of states for specific characters)
Characters describe a list of properties for some Type of Thing might have. States describe the list of (observed) values of that property for a specific Type of Thing (avoiding the word Class as it's an overloaded term).
An Item is the specific instances of those properties, with some specific Thing.
What did I get wrong?
L.