Yet another way to do it is to use cardinality restrictions, as in
OWL. OBO also allows this, but the plumbing hasn't been added yet to
store the cardinality in OBD. Also you can't use cardinality in the
convenient obo ID class expression syntax.
The schemes below differ in that they put the quantification into the
domain of discourse, using a count quality. This allows you to do
things such as make relative statements such as fooA has more bones
than fooB.
Note you should use has_number_of
http://www.bioontology.org/wiki/index.php/PATO:Revised_2008#Absence_and_counting
The best course of action depends on what kind of statements you want
to make and what kinds of questions you want to ask. Some considerations
- direct cardinality restrictions can sometimes cause reasoners to
flounder if the numbers are high
- it's harder to make statements about numbers using direct
cardinality restrictions; e.g. geneX affects the number of vertebrae
- there are of course many kinds of reasoning you can do with direct
cardinality restrictions; e.g automatically classify humans under
"animals with 10-50 vertebrae"
- * for this kind of reasoning you may want an open world reasoner,
rather than the OBD one
- using a quality allows you to treat the cardinality like any other
quality, and uniformity often makes things easier
This isn't directly answering your question. I have to think a bit
about the second scheme you propose. The first scheme has the
advantage of being the simplest to implement, because as you say you
just treat the numbers as nodes. It's slightly awkward. There is
always a syntactic translation to either (a) direct cardinality
restrictions or (b) a more efficient DBMS representation, in which
integer datatypes are used at the relational level. I would make some
recommendations such as using rdf datatype syntax for the number. But
I need to think a bit more and hear more of other requirements before
I give a specific recommendation.