Codebase list freedict-wikdict / HEAD fra-ell / freedict-P5.xml
HEAD

Tree @HEAD (Download .tar.gz)

freedict-P5.xml @HEADraw · history · blame

<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="tei_odds.rng" type="xml"?>
<TEI 
   xmlns="http://www.tei-c.org/ns/1.0" 
   xmlns:sch="http://purl.oclc.org/dsdl/schematron"
   xml:lang="en" n="freedict">
   <teiHeader>
      <fileDesc>
         <titleStmt>
            <title>TEI Customization for the FreeDict project (basic), version 0.10</title>
            <respStmt>
               <resp>maintained by</resp>
               <name xml:id="bansp">Piotr Bański (bansp in the domain of o2.pl)</name>
            </respStmt>
         </titleStmt>
         <publicationStmt>
            <availability status="free">
               <p>This file is released as part of the FreeDict package (http://freedict.org/). It
                  is licensed under the GNU Public License version 2.0 or later.</p>
            </availability>
         </publicationStmt>
         <sourceDesc>
            <p>Initial version created with Roma, the ODD generator, version 3.6.</p>
            <p>This file was initially used for the Swahili-English dictionary. Later on, it got
               generalised as the basic schema for Freedict dictionaries encoded in TEI P5.</p>
         </sourceDesc>
      </fileDesc>
   </teiHeader>
   <text>
      <body>
         <head>ODD for FreeDict dictionaries, basic level of conformance.</head>
         <p>This is the ODD driver for generating schemas and documentation for dictionaries in the
            FreeDict project (see http://freedict.org/). It is meant primarily for dictionaries with
            very basic structure, but until higher-level ODDs are created, it will serve all TEI P5
            dictionaries. For details, see a TEI Conference and Members' Meeting presentation by
            Piotr Bański and Beata Wójtowicz, which should be available from
            http://www.lib.umich.edu/spo/teimeeting09/program.html.</p>
         <list n="changelog" type="glossed">
            <item><label>Version 0.10, <date when="2011-09-09">9 September 2011</date>, by <name>Piotr
            Bański</name></label>: Added the <gi>cell</gi>, <gi>row</gi>, and <gi>table</gi> elements, 
               to handle front matter better.</item>
            <item><label>Version 0.9, <date when="2010-11-08">8 November 2010</date>, by <name>Piotr
               Bański</name></label>:
               <list type="bulleted">
                  <item>Added further Schematron constraints on the contents of <gi>tagUsage</gi>:
                     when the <att>rend</att> on an ancestor is set to <val>anchored</val>, the
                        <att>ana</att> attributes are traced to the FreeDict ontology interface (off
                     by default, because it needs a checkout of the shared/ directory. See kha-deu
                     for an example in action.</item>
                  <item>Commented out the 'figures' module, until it is ever? needed.</item>
                  <item>Removed <gi>tagUsage</gi> from the att.typed class added earlier in v. 0.8,
                     because I decided to forcefully abuse the elements and attributes involved
                     (mostly <gi>namespace</gi>, <att>n</att> and <att>rend</att>).</item>
                  <item>TODO: extend this system for <gi>subcat</gi> elements.</item>
               </list>
            </item>
            <item><label>Version 0.8, <date when="2010-11-06">6 November 2010</date>, by <name>Piotr
            Bański</name></label>:
               <list type="bulleted">
                  <item>Added Schematron constraints on <gi>tagUsage</gi> (so this may be the
                     beginning of the end of DTDs for Freedict, and consequently the xinclude
                     extension will be able to go);</item>
                  <item>added <gi>tagUsage</gi> to the att.typed class (need to distinguish between
                     tags used in the <gi>gramGroup</gi> describing the source language forms from
                     those describing the target language (inside <gi>cit</gi>);</item>
                  <item>added <gi>gramGrp</gi> to the att.typed class (in order to be able to talk
                     about 'discharged' grammatical properties, in elements that trigger agreement
                     on other elements (think noun classes));</item>
                  <item>Took out module "iso-fs" - I think it was here while I still thought of
                     ontology interfaces being plugged more directly into dictionaries, not via
                     tagUsage (or maybe I'm forgetting something now...).</item>
               </list>
            </item>
            <item><label>Version 0.7, <date when="2010-04-25">25 April 2010</date>, by <name>Piotr
                     Bański</name></label>: Added the xinclude extension from the approoriate Roma
               template, changed it to be able to occur as a child of front (I can't validate
               xinclusions with xmllint if a DTD is used, so this is for the sake of DTDs
               only)</item>
            <item><label>Version 0.6, <date when="2010-04-24">24 April 2010</date>, by <name>Piotr Bański</name></label>: Added the "iso-fs" and "analysis" modules, the latter for the sake of @ana only...</item>
            <item><label>Version 0.5, <date when="2010-04-16">16 April 2010</date>, edited by <name>Piotr Bański</name></label>
               <list type="bulleted">
                  <item>Changed the responsibility type from the Roma-generated <gi>author</gi> to <gi>respStmt</gi> and called myself a maintainer.</item>
                  <item>Made the changelog dates machine-readable.</item>
                  <item>Added the linking module (merged changes by <name>Stuart Yeates</name>). This is to enable the <att>corresp</att> attributes.</item>
               </list>
            </item>
            <item><label>Version 0.4, <date when="2009-12-31">31 December 2009</date> by <name>Piotr Bański</name></label>
               <list type="bulleted">
                  <item>Commited to the Freedict CVS (still in version 0.3).</item>
                  <item>Properly re-titled and described.</item>
                  <item>Added the "figures" module, for tables in the front matter.</item>
               </list>
            </item>
            <item><label>Version 0.3, <date when="2008-12-30">30 December 2008</date> by <name>Piotr Bański</name></label>
               <list type="bulleted">
                  <item>Removed <gi>dictScrap</gi> and <gi>entryFree</gi> and the mysterious header
                     elements that cause Sanity Checker warnings.</item>
                  <item>Removed numbered divs (with a view towards tailoring this ODD for all
                     FreeDict dictionaries).</item>
               </list>
            </item>
         </list>
         <schemaSpec ident="freedict-P5" docLang="en" prefix="tei_">
            <moduleRef key="core"/>
            <elementSpec module="core" ident="teiCorpus" mode="delete"/>

            <moduleRef key="tei"/>

            <moduleRef key="header"/>
            <elementSpec module="header" ident="handNote" mode="delete"/>
            <elementSpec module="header" ident="typeNote" mode="delete"/>
            <elementSpec module="header" ident="tagUsage" mode="change">
<!--               <classes mode="replace">
                  <memberOf key="att.typed" mode="add"/>
               </classes>
-->               <constraintSpec ident="tagUsage_stuff" scheme="isoschematron">
                  <desc>Make sure that the content of gramGrp (of various sorts) corresponds to
                     whatever is defined in tagUsage *if* it is defined there.</desc>
                  <constraint>
                     <sch:pattern id="gramGrp-tagUsage_conformance">
                        <sch:rule
                           context="/tei:TEI/tei:text/tei:body//tei:*[local-name() eq 'entry' or local-name() eq 'sense']/tei:gramGrp/tei:*">
                           <sch:let name="loc_name" value="local-name()"/>
                           <sch:assert
                              test="not(/tei:TEI/tei:teiHeader/tei:encodingDesc/tei:tagsDecl/tei:namespace[@name eq 'http://www.tei-c.org/ns/1.0']/tei:tagUsage[@gi eq $loc_name]/tei:list/tei:item) or (. = /tei:TEI/tei:teiHeader/tei:encodingDesc/tei:tagsDecl/tei:namespace[@name eq 'http://www.tei-c.org/ns/1.0']/tei:tagUsage[@gi eq $loc_name]/tei:list/tei:item)"
                              >The values of gramGrp/<sch:name/> must belong to the set identified
                              in tagUsage for this element.</sch:assert>
                        </sch:rule>
                        <sch:rule
                           context="/tei:TEI/tei:text/tei:body//tei:cit[@type eq 'trans']/tei:gramGrp/tei:*">
                           <!-- big question: is the context here stated properly? is it not too narrow now? -->
                           <sch:let name="loc_name" value="local-name()"/>
                           <sch:assert
                              test="not(/tei:TEI/tei:teiHeader/tei:encodingDesc/tei:tagsDecl/tei:namespace[@name eq 'http://www.tei-c.org/ns/1.0'][@n eq 'equiv']/tei:tagUsage[@gi eq $loc_name]/tei:list/tei:item) or (. = /tei:TEI/tei:teiHeader/tei:encodingDesc/tei:tagsDecl/tei:namespace[@name eq 'http://www.tei-c.org/ns/1.0'][@n eq 'equiv']/tei:tagUsage[@gi eq $loc_name]/tei:list/tei:item)"
                              >The values of cit[@type='trans']/gramGrp/<sch:name/> must belong to the set identified in
                              tagUsage for this element, in the 'equiv' section.</sch:assert>
                        </sch:rule>
                        <sch:rule
                           context="/tei:TEI/tei:text/tei:body//tei:*[local-name() eq 'entry' or local-name() eq 'sense']/tei:gramGrp/tei:gramGrp[@type='agr']/tei:*">
                           <sch:let name="loc_name" value="local-name()"/>
                           <sch:assert
                              test="not(/tei:TEI/tei:teiHeader/tei:encodingDesc/tei:tagsDecl/tei:namespace[@name eq 'http://www.tei-c.org/ns/1.0'][@n eq 'agr']/tei:tagUsage[@gi eq $loc_name]/tei:list/tei:item) or (. = /tei:TEI/tei:teiHeader/tei:encodingDesc/tei:tagsDecl/tei:namespace[@name eq 'http://www.tei-c.org/ns/1.0'][@n eq 'agr']/tei:tagUsage[@gi eq $loc_name]/tei:list/tei:item)"
                              >The values of gramGrp[@type='agr']/<sch:name/> must belong to the set identified in
                              tagUsage for this element, in the 'agr' section.</sch:assert>
                        </sch:rule>
                     </sch:pattern>
                  </constraint>
               </constraintSpec>
               <constraintSpec ident="tagUsage-item-external" scheme="isoschematron">
                  <desc>if this is an anchored description, for each item check if it identifies a resource in the FreeDict ontology interface</desc>
                  <constraint>
                     <sch:pattern id="tagUsage_item_check">
                        <sch:rule context="tei:list/tei:item">
                           <sch:let name="targ_res" value="document(@ana)"/>
                           <sch:assert test="if(ancestor::tei:tagsDecl[@rend eq 'anchored'] or ancestor::tei:namespace[@rend eq 'anchored'] or ancestor::tei:tagUsage[@rend eq 'anchored']) then (exists($targ_res) and string-length($targ_res)) else true()">The @ana attributes should identify a resource fragment in the FreeDict ontology interface.</sch:assert>
                        </sch:rule>
                     </sch:pattern>
                  </constraint>
               </constraintSpec>
            </elementSpec>

            <moduleRef key="textstructure"/>
            <elementSpec module="textstructure" ident="div1" mode="delete"/>
            <elementSpec module="textstructure" ident="div2" mode="delete"/>
            <elementSpec module="textstructure" ident="div3" mode="delete"/>
            <elementSpec module="textstructure" ident="div4" mode="delete"/>
            <elementSpec module="textstructure" ident="div5" mode="delete"/>
            <elementSpec module="textstructure" ident="div6" mode="delete"/>
            <elementSpec module="textstructure" ident="div7" mode="delete"/>

            <moduleRef key="dictionaries"/>
            <elementSpec module="dictionaries" ident="dictScrap" mode="delete"/>
            <elementSpec module="dictionaries" ident="entryFree" mode="delete"/>
            <elementSpec ident="gramGrp" module="dictionaries" mode="change">
               <classes mode="replace">
                  <memberOf key="model.entryPart"/>
                  <memberOf key="model.entryPart.top"/>
                  <memberOf key="model.gramPart"/>
                  <memberOf key="att.lexicographic"/>
                  <memberOf key="att.typed" mode="add"/>
               </classes>
            </elementSpec>
            
            <moduleRef key="figures" include="cell row table"/>

            <moduleRef key="analysis"/>
            <elementSpec module="analysis" ident="c" mode="delete"/>
            <elementSpec module="analysis" ident="cl" mode="delete"/>
            <elementSpec module="analysis" ident="interp" mode="delete"/>
            <elementSpec module="analysis" ident="interpGrp" mode="delete"/>
            <elementSpec module="analysis" ident="m" mode="delete"/>
            <elementSpec module="analysis" ident="pc" mode="delete"/>
            <elementSpec module="analysis" ident="phr" mode="delete"/>
            <elementSpec module="analysis" ident="s" mode="delete"/>
            <elementSpec module="analysis" ident="span" mode="delete"/>
            <elementSpec module="analysis" ident="spanGrp" mode="delete"/>
            <elementSpec module="analysis" ident="w" mode="delete"/>

            <moduleRef key="linking"/>
            <elementSpec module="linking" ident="ab" mode="delete"/>
            <elementSpec module="linking" ident="alt" mode="delete"/>
            <elementSpec module="linking" ident="altGrp" mode="delete"/>
            <elementSpec module="linking" ident="anchor" mode="delete"/>
            <elementSpec module="linking" ident="join" mode="delete"/>
            <elementSpec module="linking" ident="joinGrp" mode="delete"/>
            <elementSpec module="linking" ident="link" mode="delete"/>
            <elementSpec module="linking" ident="linkGrp" mode="delete"/>
            <elementSpec module="linking" ident="seg" mode="delete"/>
            <elementSpec module="linking" ident="timeline" mode="delete"/>
            <elementSpec module="linking" ident="when" mode="delete"/>
            <classSpec ident="att.global.linking" mode="change" type="atts" module="linking">
               <attList>
                  <attDef ident="synch" mode="delete"/>
                  <attDef ident="sameAs" mode="delete"/>
                  <attDef ident="copyOf" mode="delete"/>
                  <attDef ident="next" mode="delete"/>
                  <attDef ident="prev" mode="delete"/>
                  <attDef ident="exclude" mode="delete"/>
                  <attDef ident="select" mode="delete"/>
               </attList>
            </classSpec>

            <elementSpec xmlns:rng="http://relaxng.org/ns/structure/1.0" ident="include"
               ns="http://www.w3.org/2001/XInclude" mode="add">
               <desc>The W3C XInclude element</desc>
               <classes>
                  <!--<memberOf key="model.common"/>-->
                  <memberOf key="model.pLike.front"/>
                  <memberOf key="model.headerPart"/>
               </classes>
               <content>
                  <rng:optional>
                     <rng:ref name="fallback"/>
                  </rng:optional>
               </content>
               <attList>
                  <attDef ident="href">
                     <desc>pointer to the resource being included</desc>
                     <datatype>
                        <rng:ref name="data.pointer"/>
                     </datatype>
                  </attDef>
                  <attDef ident="parse" usage="opt">
                     <defaultVal>xml</defaultVal>
                     <valList type="closed">
                        <valItem ident="xml"/>
                        <valItem ident="text"/>
                     </valList>
                  </attDef>
                  <attDef ident="xpointer" usage="opt">
                     <datatype>
                        <rng:text/>
                     </datatype>
                  </attDef>
                  <attDef ident="encoding" usage="opt">
                     <datatype>
                        <rng:text/>
                     </datatype>
                  </attDef>
                  <attDef ident="accept" usage="opt">
                     <datatype>
                        <rng:text/>
                     </datatype>
                  </attDef>
                  <attDef ident="accept-charset" usage="opt">
                     <datatype>
                        <rng:text/>
                     </datatype>
                  </attDef>
                  <attDef ident="accept-language" usage="opt">
                     <datatype>
                        <rng:text/>
                     </datatype>
                  </attDef>
               </attList>
            </elementSpec>
         </schemaSpec>
      </body>
   </text>
</TEI>