The standard for defining ontologies these days is OWL and Protege. Unfortunately, OWL lacks any notion of exceptions in inheritance or any other notion of defeasibility.
So, although you may want to say that birds fly, you’re ontology will be broken (or become much more complicated) when you realize there are birds that can’t fly, such as penguins or ostriches, or even sick or injured birds.
Practically speaking, you need something like courteous logic or the defeasibility in SILK to handle this (or any 1980s expert system shell or even earlier frame system). OWL is very hard on mortal man (e.g., mainstream IT) in this regard.
How can I tell OWL that a pronoun is a noun but that pronouns are a closed class of words, unlike nouns, verbs, adjectives, and adverbs (in general). Well, I’ll have to tell it about open-class nouns versus closed class nouns. What a pain!
This is why we use Protege primarily as a drafting tool and, for example, SILK, to do reasoning. Non-defeasible description logic and first-order reasoners are difficult to get along with, in practice (and make sustainable knowledge repositories too difficult – which inhibits adoption, obviously).