Feature declarations are part of the corpus definition (cf. section 11). A feature declaration states the following information:
It declares the symbol under consideration as a feature name.
It restricts the domain of the feature, i.e. it states for which type the feature may be used.
It restricts the feature values (i.e. the range).
In the current implementation, features can only be declared for the built-in types NT and T. Furthermore, one cannot use a type to restrict the range of a feature, but the possible values for a feature have to be enumerated. One reason is that we want to keep the number of dependencies between corpus definition and type definitions as small as possible. The other reason is that such simple feature declarations can be also be constructed automatically - for those corpora which do not come with feature declarations.
If the value enumeration is omitted from a feature declaration, the default range of that feature is String.
For example, for the type T of feature constraints for terminal nodes, the features word, lemma, and pos may be defined as follows.
<feature name="word" domain="T"/> <feature name="lemma" domain="T"/> <feature name="pos" domain="T"> ... <value name="VAFIN">...comment...</value> <value name="VAIMP"/> <value name="VAINF"/> <value name="VAPP"/> <value name="VMFIN"/> <value name="VMINF"/> ... </feature>
Please note: Each feature must be declared exactly once. The exclusion of multiple declarations for the same feature means that polymorphic overloading of a feature symbol is not permitted.
Please note: In the TIGER description language being a typed language, the following two queries are not equivalent!
[word="das" & !(pos="ART")]
[word="das" & pos != "ART"]
The reason is that !(pos="ART") equals !(T & pos="ART") due to the corresponding feature declaration. The latter formula again is equivalent to !(T) | (pos != "ART"), i.e. either the feature pos is not defined on a type or it is defined and its value is not equal to "ART".