Let's say you want to create a project-specific schema with only those
elements needed for your project and as many validation constraints as
you see fit.
You could create a TEI customization for your needs using the ODD
language. One advantage to using the ODD language is that you apply the
principles of literate programming and can easily create schemas and
documentation in various formats. Another advantage to a TEI
customization is that you could gain from future improvements made to
the TEI Guidelines. If your ODD references the TEI's modules and
classes, any changes made to these by the TEI would be inherited in your
customization if you re-process your ODD using Roma. (Right?)
But here's where I see as a potential disadvantage to using the TEI's
modules and classes. If I want to modify my schema in the future, I
would revise the ODD file and reprocess it using Roma to create a new
schema. But if I process it with Roma, I risk picking up changes to the
TEI Guidelines that I didn't intend to have included. (Right?)
To get around this and still get the advantages of literate programming,
you could use the ODD language to express a tag set for your project
which does not inherit from the TEI's modules and classes. That is,
everything is expressed without reference to the TEI, even if you share
element names and content models for the sake of mutual intelligibility.
While this would inevitably lead to a divergence of content models over
time, it seems like a safer way to create a stable tag set.