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

# Schema generated 2006-01-30T20:23:54Z
# Copyright 2005 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.
# You should have received a copy of the GNU General Public
#	    License along with this file; if not, write to the Free
#	    Software Foundation, Inc., 59 Temple Place, Suite 330,
#	    Boston, MA 02111-1307, USA.
# To contact the TEI Consortium use the following addresses.
#	    For general (non-technical) enquiries: 
#		  target="mailto:info@tei-c.org"/>info@tei-c.orgFor membership enquiries: membership@tei-c.orgFor technical enquiries, particularly about the
#		Guidelines, DTDs, schemas, or software available from
#		the TEI-C: editors@tei-c.orgFor up to date information, consult the TEI web site at http://www.tei-c.org/P5

# Definitions from module iso-fs

# Set predeclared macros

# 0. predeclared macros

# 1. classes

# 2. elements

binary =
  ## (binary value) represents the value part of a feature-value specification which can contain either
  ##   of exactly two possible values.
  element binary { binary.content, binary.attributes }
binary.content = empty
binary.attributes =
  att.global.attributes,
  ## supplies a binary value.
  attribute value { data.truthValue },
  empty
model.singleVal |= binary

\default =
  ## (Default feature value) represents the value part of a feature-value specification
  ##   which contains a defaulted value.
  element default { default.content, default.attributes }
default.content = empty
default.attributes = att.global.attributes, empty
model.singleVal |= \default

f =
  ## (Feature) represents a feature value specification, that
  ##   is, the association of a name with a value of any of several different types.
  element f { f.content, f.attributes }
f.content = model.featureVal*
f.attributes =
  att.global.attributes,
  ## provides a name for the feature.
  attribute name { data.name },
  ## references any element which can be used to represent the
  ##   value of a feature.
  attribute fVal { data.pointer }?,
  empty

fLib =
  ## (Feature library) assembles a library of feature elements.
  element fLib { fLib.content, fLib.attributes }
fLib.content = f+
fLib.attributes = att.global.attributes, empty
model.global.meta |= fLib

fs =
  ## (Feature structure) represents a feature structure, that is, a
  ##   collection of feature-value pairs organized as a
  ## structural unit.
  element fs { fs.content, fs.attributes }
fs.content = f*
fs.attributes =
  att.global.attributes,
  ## specifies the type of the feature structure.
  attribute type { data.enumerated }?,
  ## references the feature-value specifications making up this feature structure.
  attribute feats { data.pointers }?,
  empty
model.complexVal |= fs
model.global.meta |= fs

fvLib =
  ## (Feature-value library) assembles a library of reusable feature value elements
  ##   (including complete feature structures).
  element fvLib { fvLib.content, fvLib.attributes }
fvLib.content = (model.featureVal)*
fvLib.attributes = att.global.attributes, empty
model.global.meta |= fvLib

numeric =
  ## (Numeric value) represents the value part of a feature-value specification
  ##   which contains a numeric value or range.
  element numeric { numeric.content, numeric.attributes }
numeric.content = empty
numeric.attributes =
  att.global.attributes,
  ## supplies a lower bound for the numeric value represented,
  ##       and also (if max is not supplied) its upper bound.
  attribute value { data.numeric },
  ## supplies an upper bound for the numeric value represented.
  attribute max { data.numeric }?,
  ## specifies whether the value represented should be
  ##	  truncated to give an integer value.
  attribute trunc { data.truthValue }?,
  empty
model.singleVal |= numeric

\string =
  ## (String value) represents the value part of a feature-value specification
  ##   which contains a string.
  element string { string.content, string.attributes }
string.content = macro.xtext
string.attributes = att.global.attributes, empty
model.singleVal |= \string

symbol =
  ## (Symbolic value) represents the value part of a feature-value specification
  ##   which contains one of a finite list of symbols.
  element symbol { symbol.content, symbol.attributes }
symbol.content = empty
symbol.attributes =
  att.global.attributes,
  ## supplies the symbolic value for the feature, one of a finite list that
  ## may be specified in a feature declaration.
  attribute value { data.word },
  empty
model.singleVal |= symbol

vAlt =
  ## (Value alternation) represents the value part of a feature-value specification
  ##   which contains a set of values, only one of which can be valid.
  element vAlt { vAlt.content, vAlt.attributes }
vAlt.content = model.featureVal, model.featureVal+
vAlt.attributes = att.global.attributes, empty
model.singleVal |= vAlt

vColl =
  ## (collection of values) represents the value part of a feature-value specification
  ##   which contains multiple values organized as a set, bag, or list.
  element vColl { vColl.content, vColl.attributes }
vColl.content = (fs | model.singleVal)*
vColl.attributes =
  att.global.attributes,
  ## indicates organization of given value or values as  set, bag or list.
  attribute org {
    ## (indicates that the given values are organized as a set.
    ##    ) 
    "set" | ## (indicates that the given values are organized as a
      ## bag (multiset).
      ##    ) 
      "bag" | ## (indicates that the given values are organized as a
      ## list.) 
      "list"
  }?,
  empty
model.complexVal |= vColl

vLabel =
  ## (value label) represents the value part of a feature-value specification
  ##   which appears at more than one point in a feature structure
  element vLabel { vLabel.content, vLabel.attributes }
vLabel.content = model.featureVal?
vLabel.attributes =
  att.global.attributes,
  ## supplies a name for the sharing point.
  attribute name { data.word },
  empty
model.singleVal |= vLabel

vMerge =
  ## (Merged collection of values) represents a feature value which is the result of merging
  ##   together the feature values contained by its children, using the organization
  ##   specified by the ORG attribute.
  element vMerge { vMerge.content, vMerge.attributes }
vMerge.content = model.featureVal+
vMerge.attributes =
  att.global.attributes,
  ## indicates the organization of the resulting merged values as  set, bag or list.
  attribute org {
    ## (indicates that the resulting values are organized as a set.) 
    "set" | ## (indicates that the resulting values are organized as a bag (multiset).
      ##    ) 
      "bag" | ## (indicates that the resulting values are organized as a list.) 
      "list"
  }?,
  empty
model.complexVal |= vMerge

vNot =
  ## (Value negation) represents a feature value which is the negation of its content.
  element vNot { vNot.content, vNot.attributes }
vNot.content = model.featureVal
vNot.attributes = att.global.attributes, empty
model.complexVal |= vNot
# 3. macros
