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>
</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.</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"
xml:lang="en"
prefix="dtl_"
start="teiCorpus TEI text body div1">
<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=chanage, above, is a "gotcha" that causes -->
<!-- in this <classes> replacing the TEI-defined <classes> (even though you -->
<!-- expect mode= to be inherited from <elementSpec>), and since there is -->
<!-- no <memberOf key=model.divLike>, the resulting schema has 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">
<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>