Definitely the task of a schema:
25 « ^ »
  1. vocabulary
    <list>, <item>, <label>
  2. usage rules
    element list { item+ } 
  3. datatype constraints
    figure.attributes.url.content = xsd:anyURI
  4. dependency rules
    <if test="self::list[@type='gloss'] and not(child::label)">
             <message>gloss lists must have <label> children</message>
    </if>
Annotation of Written Cultural Heritage logo