namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0"
namespace rng = "http://relaxng.org/ns/structure/1.0"

# Schema generated 2008-11-01T14:14:38Z
# Edition: 1.2.0. Last updated on October 31st 2008.
# Copyright 2008 TEI Consortium.
# This is free software; you can redistribute it and/or
#	    modify it under the terms of the GNU General Public
#	    License as published by the Free Software Foundation;
#	    either version 2 of the License, or (at your option) any
#	    later version.
# This material is distributed in the hope that it will be
#	    useful, but without any warranty; without even the implied
#	    warranty of merchantability or 
#	    fitness for a particular
#	    purpose. See the GNU General Public License for more
#	    details.
# A copy of the GNU General Public
#	    License is stored on the TEI web site
#	    along with this file; you can also contact the Free
#	    Software Foundation, Inc., 59 Temple Place, Suite 330,
#	    Boston, MA 02111-1307, USA, for a copy.
# For information about the TEI, including contact
#		details, consult the TEI web
#	      site at http://www.tei-c.org/. 
#		Printed dictionaries

# Definitions from module dictionaries

# Set global predeclared macros

# Set predeclared macros

# 0. predeclared macros

# 1. classes
model.entryLike = superEntry | entry | entryFree
model.entryLike_sequence = superEntry, entry, entryFree
model.entryLike_sequenceOptional = superEntry?, entry?, entryFree?
model.entryLike_sequenceOptionalRepeatable =
  superEntry*, entry*, entryFree*
model.entryLike_sequenceRepeatable = superEntry+, entry+, entryFree+
att.entryLike.attributes =
  att.entryLike.attribute.type, att.entryLike.attribute.sortKey, empty
att.entryLike.attribute.type =
  ## indicates type of entry, in dictionaries with multiple types.
  ## Suggested values include: 1] main; 2] hom (homograph); 3] xref (cross reference); 4] affix; 5] abbr (abbreviation); 6] supplemental; 7] foreign
  [ a:defaultValue = "main" ]
  attribute type {
    ## a main entry (default).
    "main" | ## (homograph) groups information relating to one homograph within an entry.
      "hom" | ## (cross reference) a reduced entry whose only function is to
      ## point to another main entry (e.g. for forms of an irregular verb or
      ## for variant spellings: was pointing to
      ## be, or esthete to
      ## aesthete).
      "xref" | ## an entry for a prefix, infix, or suffix.
      "affix" | ## (abbreviation) an entry for an abbreviation.
      "abbr" | ## a supplemental entry (for use in dictionaries which
      ##           issue supplements to their main work in which they include
      ##           updated information about entries).
      "supplemental" | ## an entry for a foreign word in a monolingual dictionary.
      "foreign"
    | xsd:Name
  }?
att.entryLike.attribute.sortKey =
  ## contains a (sortable) character sequence reflecting the
  ##       entry's alphabetical position in the printed dictionary.
  attribute sortKey { data.word }?
att.lexicographic.attributes =
  att.lexicographic.attribute.expand,
  att.lexicographic.attribute.norm,
  att.lexicographic.attribute.split,
  att.lexicographic.attribute.value,
  att.lexicographic.attribute.orig,
  att.lexicographic.attribute.location,
  att.lexicographic.attribute.mergedIn,
  att.lexicographic.attribute.opt,
  empty
att.lexicographic.attribute.expand =
  ## gives an expanded form of information presented more concisely in the dictionary
  attribute expand { text }?
att.lexicographic.attribute.norm =
  ## (normalized) gives a normalized form of information given by the source text in a
  ##                 non-normalized form
  attribute norm { text }?
att.lexicographic.attribute.split =
  ## gives the list of split values for a merged form
  attribute split { text }?
att.lexicographic.attribute.value =
  ## gives a value which lacks any realization in the printed source text.
  attribute value { text }?
att.lexicographic.attribute.orig =
  ## (original) gives the original string or is the empty string when the element does not appear
  ##                 in the source text.
  attribute orig { text }?
att.lexicographic.attribute.location =
  ## provides a reference to an anchor element elsewhere in the document
  ##                 indicating the original location of this component.
  attribute location { data.pointer }?
att.lexicographic.attribute.mergedIn =
  ## gives a reference to another element, where the original appears as a merged form.
  attribute mergedIn { data.pointer }?
att.lexicographic.attribute.opt =
  ## (optional) indicates whether the element is optional or not
  [ a:defaultValue = "false" ] attribute opt { xsd:boolean }?
model.morphLike = gram | gen | number | case | per | tns | mood | iType
model.morphLike_sequence =
  gram, gen, number, case, per, tns, mood, iType
model.morphLike_sequenceOptional =
  gram?, gen?, number?, case?, per?, tns?, mood?, iType?
model.morphLike_sequenceOptionalRepeatable =
  gram*, gen*, number*, case*, per*, tns*, mood*, iType*
model.morphLike_sequenceRepeatable =
  gram+, gen+, number+, case+, per+, tns+, mood+, iType+
model.gramPart =
  model.morphLike | gramGrp | pos | subc | colloc | usg | lbl
model.gramPart_sequence =
  model.morphLike, gramGrp, pos, subc, colloc, usg, lbl
model.gramPart_sequenceOptional =
  model.morphLike?, gramGrp?, pos?, subc?, colloc?, usg?, lbl?
model.gramPart_sequenceOptionalRepeatable =
  model.morphLike*, gramGrp*, pos*, subc*, colloc*, usg*, lbl*
model.gramPart_sequenceRepeatable =
  model.morphLike+, gramGrp+, pos+, subc+, colloc+, usg+, lbl+
model.formPart = form | orth | pron | hyph | syll | model.gramPart
model.formPart_sequence = form, orth, pron, hyph, syll, model.gramPart
model.formPart_sequenceOptional =
  form?, orth?, pron?, hyph?, syll?, model.gramPart?
model.formPart_sequenceOptionalRepeatable =
  form*, orth*, pron*, hyph*, syll*, model.gramPart*
model.formPart_sequenceRepeatable =
  form+, orth+, pron+, hyph+, syll+, model.gramPart+
model.ptrLike.form = oRef | oVar | pRef | pVar
model.ptrLike.form_sequence = oRef, oVar, pRef, pVar
model.ptrLike.form_sequenceOptional = oRef?, oVar?, pRef?, pVar?
model.ptrLike.form_sequenceOptionalRepeatable =
  oRef*, oVar*, pRef*, pVar*
model.ptrLike.form_sequenceRepeatable = oRef+, oVar+, pRef+, pVar+
att.ptrLike.form.attributes = att.ptrLike.form.attribute.target, empty
att.ptrLike.form.attribute.target =
  ## identifies the orthographic form or pronunciation referred to.
  attribute target { data.pointer }?
# 2. elements

case =
  ## contains grammatical case information given by a dictionary for a given form.
  element case { case.content, case.localattributes }
case.content = macro.paraContent
case.localattributes =
  att.global.attributes, att.lexicographic.attributes, empty

colloc =
  ## (collocate) contains a collocate of the headword.
  element colloc { colloc.content, colloc.localattributes }
colloc.content = macro.paraContent
colloc.localattributes =
  att.global.attributes,
  att.lexicographic.attributes,
  att.typed.attributes,
  empty

def =
  ## (definition) contains definition text in a dictionary entry.
  element def { def.content, def.localattributes }
def.content = macro.paraContent
def.localattributes =
  att.global.attributes, att.lexicographic.attributes, empty

dictScrap =
  ## (dictionary scrap) encloses a part of a dictionary entry in which other phrase-level dictionary elements are
  ##         freely combined.
  element dictScrap { dictScrap.content, dictScrap.localattributes }
dictScrap.content =
  (text
   | model.gLike
   | model.entryPart
   | model.phrase
   | model.inter
   | model.global)*
dictScrap.localattributes = att.global.attributes, empty

entry =
  ## contains a reasonably well-structured dictionary entry.
  element entry { entry.content, entry.localattributes }
entry.content = (hom | sense | model.entryPart.top | model.global)+
entry.localattributes =
  att.global.attributes, att.entryLike.attributes, empty

entryFree =
  ## (unstructured entry) contains a dictionary entry which does not necessarily conform to the constraints imposed
  ##         by the entry element.
  element entryFree { entryFree.content, entryFree.localattributes }
entryFree.content =
  (text
   | model.gLike
   | model.entryPart
   | model.phrase
   | model.inter
   | model.global)*
entryFree.localattributes =
  att.global.attributes,
  att.entryLike.attributes,
  att.lexicographic.attributes,
  empty

etym =
  ## (etymology) encloses the etymological information in a dictionary entry.
  element etym { etym.content, etym.localattributes }
etym.content =
  (text
   | model.gLike
   | model.phrase
   | model.inter
   | usg
   | lbl
   | def
   | model.morphLike
   | xr
   | model.global)*
etym.localattributes =
  att.global.attributes, att.lexicographic.attributes, empty

form =
  ## (form information group) groups all the information on the written and spoken forms of one headword.
  element form { form.content, form.localattributes }
form.content =
  (text
   | model.gLike
   | model.phrase
   | model.inter
   | model.formPart
   | model.global)*
form.localattributes =
  att.global.attributes,
  att.lexicographic.attributes,
  ## classifies form as simple, compound, etc.
  ## Suggested values include: 1] simple; 2] lemma; 3] variant; 4] compound; 5] derivative; 6] inflected; 7] phrase
  attribute type {
    ## single free lexical item
    "simple" | ## the headword itself
      "lemma" | ## a variant form
      "variant" | ## word formed from simple lexical items
      "compound" | ## word derived from headword
      "derivative" | ## word in other than usual dictionary form
      "inflected" | ## multiple-word lexical item
      "phrase"
    | xsd:Name
  }?,
  empty

gen =
  ## (gender) identifies the morphological gender of a lexical item, as given in the dictionary.
  element gen { gen.content, gen.localattributes }
gen.content = macro.paraContent
gen.localattributes =
  att.global.attributes, att.lexicographic.attributes, empty

gram =
  ## (grammatical information) within an entry in a dictionary or a terminological data file, contains grammatical
  ##         information relating to a term, word, or form.
  element gram { gram.content, gram.localattributes }
gram.content = macro.paraContent
gram.localattributes =
  att.global.attributes,
  att.lexicographic.attributes,
  ## classifies the grammatical information given according to
  ##       some convenient typology   — in the case of terminological information, preferably the dictionary of      data element types specified in ISO WD 12 620.
  ## Sample values include: 1] pos (part of speech); 2] gen (gender); 3] num (number); 4] animate; 5] proper
  attribute type { data.enumerated }?,
  empty

gramGrp =
  ## (grammatical information group) groups morpho-syntactic information about a lexical item, e.g. pos, gen, number, case, or
  ##         iType (inflectional class).
  element gramGrp { gramGrp.content, gramGrp.localattributes }
gramGrp.content =
  (text
   | model.gLike
   | model.phrase
   | model.inter
   | model.gramPart
   | model.global)*
gramGrp.localattributes =
  att.global.attributes, att.lexicographic.attributes, empty

hom =
  ## (homograph) groups information relating to one homograph within an entry.
  element hom { hom.content, hom.localattributes }
hom.content = (sense | model.entryPart.top | model.global)*
hom.localattributes =
  att.global.attributes, att.lexicographic.attributes, empty

hyph =
  ## (hyphenation) contains a hyphenated form of a dictionary headword, or hyphenation information in some
  ##         other form.
  element hyph { hyph.content, hyph.localattributes }
hyph.content = macro.paraContent
hyph.localattributes =
  att.global.attributes, att.lexicographic.attributes, empty

iType =
  ## (inflectional class) indicates the inflectional class associated with a lexical item.
  element iType { iType.content, iType.localattributes }
iType.content = macro.paraContent
iType.localattributes =
  att.global.attributes,
  att.lexicographic.attributes,
  ## indicates the type of indicator used to specify the inflection class, when it is
  ##                 necessary to distinguish between the usual abbreviated indications (e.g.
  ##                     inv) and other kinds of indicators, such as special codes
  ##                 referring to conjugation patterns, etc.
  ## Sample values include: 1] abbrev; 2] verbTable
  attribute type { data.enumerated }?,
  empty

lang =
  ## (language name) name of a language mentioned in etymological or other linguistic discussion.
  element lang { lang.content, lang.localattributes }
lang.content = macro.paraContent
lang.localattributes =
  att.global.attributes, att.lexicographic.attributes, empty

lbl =
  ## (label) contains a label for a form, example, translation, or other piece of
  ##         information, e.g. abbreviation for, contraction of, literally, approximately, synonyms:,
  ##         etc.
  element lbl { lbl.content, lbl.localattributes }
lbl.content = macro.paraContent
lbl.localattributes =
  att.global.attributes,
  att.lexicographic.attributes,
  ## classifies the label using any convenient typology.
  attribute type { data.enumerated }?,
  empty

mood =
  ## contains information about the grammatical mood of verbs (e.g. indicative, subjunctive,
  ##     imperative).
  element mood { mood.content, mood.localattributes }
mood.content = macro.paraContent
mood.localattributes =
  att.global.attributes, att.lexicographic.attributes, empty

number =
  ## indicates grammatical number associated with a form, as given in a dictionary.
  element number { number.content, number.localattributes }
number.content = macro.paraContent
number.localattributes =
  att.global.attributes, att.lexicographic.attributes, empty

oRef =
  ## (orthographic-form reference) in a dictionary example, indicates a reference to the orthographic form(s) of the headword.
  element oRef { oRef.content, oRef.localattributes }
oRef.content = empty
oRef.localattributes =
  att.global.attributes,
  att.ptrLike.form.attributes,
  att.lexicographic.attributes,
  ## indicates the kind of typographic modification made to the headword in the reference.
  ## Sample values include: 1] cap (capital); 2] noHyph (no hyphen)
  attribute type { data.enumerated }?,
  empty

oVar =
  ## (orthographic-variant reference) in a dictionary example, indicates a reference to variant orthographic form(s) of the
  ##     headword.
  element oVar { oVar.content, oVar.localattributes }
oVar.content = (text | model.gLike | oRef)*
oVar.localattributes =
  att.global.attributes,
  att.ptrLike.form.attributes,
  att.lexicographic.attributes,
  ## indicates the kind of variant involved.
  ## Sample values include: 1] pt (past tense); 2] pp (past participle); 3] prp (present participle); 4] f (feminine); 5] pl (plural)
  attribute type { data.enumerated }?,
  empty

orth =
  ## (orthographic form) gives the orthographic form of a dictionary headword.
  element orth { orth.content, orth.localattributes }
orth.content = macro.paraContent
orth.localattributes =
  att.global.attributes,
  att.lexicographic.attributes,
  ## gives the type of spelling.
  attribute type { data.enumerated }?,
  ## gives the extent of the orthographic information provided.
  ## Sample values include: 1] full (full form); 2] pref (prefix); 3] suff (suffix); 4] part (partial)
  [ a:defaultValue = "full" ] attribute extent { data.enumerated }?,
  empty

pRef =
  ## (pronunciation reference) in a dictionary example, indicates a reference to the pronunciation(s) of the headword.
  element pRef { pRef.content, pRef.localattributes }
pRef.content = empty
pRef.localattributes =
  att.global.attributes,
  att.ptrLike.form.attributes,
  att.lexicographic.attributes,
  empty

pVar =
  ## (pronunciation-variant reference) in a dictionary example, indicates a reference to variant pronunciation(s) of the headword.
  element pVar { pVar.content, pVar.localattributes }
pVar.content = (text | model.gLike | pRef)*
pVar.localattributes =
  att.global.attributes,
  att.ptrLike.form.attributes,
  att.lexicographic.attributes,
  empty

per =
  ## (person) contains an indication of the grammatical person (1st, 2nd, 3rd, etc.) associated with a
  ##     given inflected form in a dictionary.
  element per { per.content, per.localattributes }
per.content = macro.paraContent
per.localattributes =
  att.global.attributes, att.lexicographic.attributes, empty

pos =
  ## (part of speech) indicates the part of speech assigned to a dictionary 
  ## headword  such as noun, verb, or adjective.
  element pos { pos.content, pos.localattributes }
pos.content = macro.paraContent
pos.localattributes =
  att.global.attributes, att.lexicographic.attributes, empty

pron =
  ## (pronunciation) contains the pronunciation(s) of the word.
  element pron { pron.content, pron.localattributes }
pron.content = macro.paraContent
pron.localattributes =
  att.global.attributes,
  att.lexicographic.attributes,
  ## indicates whether the pronunciation is for whole word or part. 
  ## Sample values include: 1] full (full form); 2] pref (prefix); 3] suff (suffix); 4] part (partial)
  [ a:defaultValue = "full" ] attribute extent { data.enumerated }?,
  ## indicates what notation is used for the pronunciation, if more than one occurs in
  ##                 the machine-readable dictionary. 
  attribute notation { data.enumerated }?,
  empty

re =
  ## (related entry) contains a dictionary entry for a lexical item related to the headword, such as a compound
  ##         phrase or derived form, embedded inside a larger entry.
  element re { re.content, re.localattributes }
re.content =
  (text
   | model.gLike
   | sense
   | model.entryPart.top
   | model.phrase
   | model.global)*
re.localattributes =
  att.global.attributes,
  att.lexicographic.attributes,
  att.typed.attributes,
  empty

sense =
  ## groups together all information relating to one word sense in
  ##   a dictionary entry, for example 
  ##     definitions, examples, and translation equivalents.
  element sense { sense.content, sense.localattributes }
sense.content =
  (text
   | model.gLike
   | sense
   | model.entryPart.top
   | model.phrase
   | model.global)*
sense.localattributes =
  att.global.attributes,
  att.lexicographic.attributes,
  ## gives the nesting depth of this sense.
  attribute level { data.numeric }?,
  empty

stress =
  ## contains the stress pattern for a dictionary headword, if given separately.
  element stress { stress.content, stress.localattributes }
stress.content = macro.paraContent
stress.localattributes = att.global.attributes, empty

subc =
  ## (subcategorization) contains subcategorization information (transitive/intransitive, countable/non-countable,
  ##         etc.)
  element subc { subc.content, subc.localattributes }
subc.content = macro.paraContent
subc.localattributes =
  att.global.attributes, att.lexicographic.attributes, empty

superEntry =
  ## groups successive entries for a set of homographs.
  element superEntry { superEntry.content, superEntry.localattributes }
superEntry.content = (form?, entry+) | dictScrap
superEntry.localattributes =
  att.global.attributes, att.entryLike.attributes, empty

syll =
  ## (syllabification) contains the syllabification of the headword.
  element syll { syll.content, syll.localattributes }
syll.content = macro.paraContent
syll.localattributes =
  att.global.attributes, att.lexicographic.attributes, empty

tns =
  ## (tense) indicates the grammatical tense associated with a given inflected form in a dictionary.
  element tns { tns.content, tns.localattributes }
tns.content = macro.paraContent
tns.localattributes =
  att.global.attributes, att.lexicographic.attributes, empty

usg =
  ## (usage) contains usage information in a dictionary entry.
  element usg { usg.content, usg.localattributes }
usg.content = macro.paraContent
usg.localattributes =
  att.global.attributes,
  att.lexicographic.attributes,
  ## classifies the usage information using any convenient typology.
  ## Sample values include: 1] geo (geographic); 2] time; 3] dom (domain); 4] reg (register); 5] style; 6] plev (preference level); 7] lang (language); 8] gram (grammatical); 9] syn (synonym); 10] hyper (hypernym); 11] colloc (collocation); 12] comp (complement); 13] obj (object); 14] subj (subject); 15] verb; 16] hint
  attribute type { data.enumerated }?,
  empty

xr =
  ## (cross-reference phrase) contains a phrase, sentence, or icon referring the reader to
  ## some other location in this or another text.
  element xr { xr.content, xr.localattributes }
xr.content =
  (text
   | model.gLike
   | model.phrase
   | model.inter
   | usg
   | lbl
   | model.global)*
xr.localattributes =
  att.global.attributes,
  att.lexicographic.attributes,
  ## indicates the type of cross reference, using any convenient
  ## typology.
  ## Sample values include: 1] syn (synonym); 2] etym (etymological); 3] cf (compare or consult); 4] illus (illustration)
  attribute type { data.enumerated }?,
  empty
# 3. macros
