Type-list.odd
Jump to navigation
Jump to search
This ODD demonstrates how to replace an attribute that a TEI element inherits from a class with a locally defined one, e.g., to add a controlled vocabulary. In this case, the type= attribute of <div> is modified.
<?xml version="1.0" encoding="UTF-8"?> <TEI xml:lang="en" xmlns:sch="http://purl.oclc.org/dsdl/schematron" xmlns:rng="http://relaxng.org/ns/structure/1.0" xmlns="http://www.tei-c.org/ns/1.0" > <teiHeader> <fileDesc> <titleStmt> <title>Sample ODD for Constraining <att>type</att> of <gi>div</gi></title> <author xml:id="SB"><name type="person">Syd Bauman</name></author> </titleStmt> <publicationStmt> <p>Intended for publication as an example TEI P5 customization on TEI Wiki</p> <p>© 2010 Syd Bauman and Brown University Women Writer's Project. Available under the GFDL.</p> </publicationStmt> <sourceDesc> <p>Born digital, based on the WWP EMPB schema.</p> </sourceDesc> </fileDesc> <revisionDesc> <change when="2011-09-01" who="#SB"> <list> <item>fix typos in comments</item> <item>fix typo in <att>start</att>: div1 -> div</item> <item>improve introductory prose</item> <item>add <gi>desc</gi></item> <item>added <gi>revisionDesc</gi></item> </list> </change> </revisionDesc> </teiHeader> <text> <front> <divGen type="toc"/> <div type="section"> <head>Introduction</head> <p>This TEI ODD file (and thus the derived schema or reference documentation you may be reading) is the technical specification of a toy schema that exists just to demonstrate how one constrains the value of an attribute that is normally inherited from a class. In this case, the <att>type</att> attribute of <gi>div</gi> will be constrained to a semi-controlled vocabulary. <specList> <specDesc key="div" atts="type"/> </specList></p> </div> </front> <body> <p>Modifying the definition of an attribute on a given element when that element normally inherits that attribute from a class is a bit tricky. The main <soCalled>gotcha</soCalled> is that we intuitively expect the <att>mode</att> attribute of <gi>classes</gi> to be inherited from its parent <gi>elementSpec</gi>. But <gi>classes</gi> has its own <att>mode</att> attribute (rather than inheriting it from <name type="class">att.combinable</name>), for which the default value is <val>replace</val>. Thus we need to specify <tag>classes mode="change"</tag>.</p> <schemaSpec ident="div-type-list" prefix="dtl_" start="teiCorpus TEI text body div"> <moduleRef key="tei"/> <moduleRef key="header"/> <moduleRef key="core"/> <moduleRef key="textstructure"/> <elementSpec ident="div" module="core" mode="change"> <!-- First, remove <div> from att.typed. --> <classes mode="change"> <!-- Note that omitting the mode=change, above, is a "gotcha" that causes --> <!-- this <classes> to replace the TEI-defined <classes> (even though you --> <!-- expect mode= to be inherited from <elementSpec>), and since there is --> <!-- no <memberOf key=model.divLike> in this <classes>, the resulting --> <!-- schema would have no where for <div> to go! --> <memberOf key="att.typed" mode="delete"/> <!-- do the deletion --> </classes> <attList> <!-- add our new type= attribute: --> <attDef ident="type" mode="replace" usage="req"> <desc>allows user to choose one of three pre-determined values, or to fill in her own value, which in theory should express what kind of subdivision of the front, body, or back of the text this is, but in fact are just useless demonstrations</desc> <datatype minOccurs="1" maxOccurs="1"> <rng:ref name="data.enumerated"/> </datatype> <valList type="semi"> <valItem ident="tst1"> <gloss>test one</gloss> <desc>a boring test string</desc> </valItem> <valItem ident="tst2"> <gloss>test two</gloss> <desc>another boring test string</desc> </valItem> <valItem ident="tst3"> <gloss>test three</gloss> <desc>yet another boring test string</desc> </valItem> </valList> </attDef> </attList> </elementSpec> </schemaSpec> </body> </text> </TEI>