<fsDecl>

<fsDecl> ひとつの素性構造を宣言する. [18.11 Feature System Declaration]
モジュールiso-fs — 18 Feature Structures
属性att.global (@xml:id, @n, @xml:lang, @rend, @rendition, @xml:base, @xml:space) (att.global.linking (@corresp, @synch, @sameAs, @copyOf, @next, @prev, @exclude, @select)) (att.global.analytic (@ana)) (att.global.facs (@facs)) (att.global.change (@change))
type 宣言された素性構造の名前を示す.
状態 必須
データ型

<rng:ref name="data.enumerated"/>
data.enumerated
any convenient string of characters.
baseTypes ひとつ以上の素性構造を示す.ここから,属性typeは素性定義・制約を 継承する.属性typeが当該属性で示されたものと同名の素性定義を含む 場合,またはひとつ以上の同名素性定義を継承する場合,それらの値は 統合される.同様に,当該属性baseTypesにある値と,当該 要素が持つ内容を統合して制約となる.属性baseTypeが付 与されていない場合,継承される素性定義や素性制約はない.
状態 任意
データ型 1–∞ occurrences of 

<rng:ref name="data.name"/>
data.name
空白文字で区切られる
one or more names as defined by the W3C XML Specification
解説
ここでの継承は,単調な関係である.
複数の制約を統合することで,矛盾が起きるかもしれない.例え ば,同じ素性に2つの定義が重なりのない素性値域を指定し,少なくと もそのうちの1つが必須である場合である.このような時は,属性type にとって妥当な値がなくなる.
当該モジュールを使用するもの
上位
iso-fs: fsdDecl
下位
宣言

<rng:element name="fsDecl">
 <rng:ref name="att.global.attributes"/>
 <rng:ref name="att.global.linking.attributes"/>
 <rng:ref name="att.global.analytic.attributes"/>
 <rng:ref name="att.global.facs.attributes"/>
 <rng:ref name="att.global.change.attributes"/>
 <rng:attribute name="type">
  <rng:ref name="data.enumerated"/>
 </rng:attribute>
 <rng:optional>
  <rng:attribute name="baseTypes">
   <rng:list>
    <rng:ref name="data.name"/>
    <rng:zeroOrMore>
     <rng:ref name="data.name"/>
    </rng:zeroOrMore>
   </rng:list>
  </rng:attribute>
 </rng:optional>
 <rng:group>
  <rng:optional>
   <rng:ref name="fsDescr"/>
  </rng:optional>
  <rng:oneOrMore>
   <rng:ref name="fDecl"/>
  </rng:oneOrMore>
  <rng:optional>
   <rng:ref name="fsConstraints"/>
  </rng:optional>
 </rng:group>
</rng:element>
element fsDecl
{
   att.global.attributes,
   att.global.linking.attributes,
   att.global.analytic.attributes,
   att.global.facs.attributes,
   att.global.change.attributes,
   attribute type { data.enumerated },
   attribute baseTypes { list { data.name, data.name* } }?,
   ( fsDescr?, fDecl+, fsConstraints? )
}
<fsDecl type="SomeName">
 <fsDescr>Describes what this type of fs represents</fsDescr>
 <fDecl name="featureOne">
<!-- The declaration for featureOne -->
  <vRange>
<!-- the range of possible values for this feature -->
  </vRange>
 </fDecl>
 <fDecl name="featureTwo">
<!-- The declaration for featureTwo -->
  <vRange>
<!-- the range of possible values for this feature -->
  </vRange>
 </fDecl>
 <fsConstraints>
<!-- Any additional constraints for the feature structure -->
 </fsConstraints>
</fsDecl>