3

次のような柔軟な属性名を可能にするXML構造のDTDを作成しています。

<root_element>
    <child_element>
        <element_with_attrib iCouldbeAnything="value" defined="true" />
    </child_element>
</root_element>

したがって、これに対する単純なDTDは次のとおりです。

<!ELEMENT root_element (child_element)*>
<!ELEMENT child_element (element_with_attrib)+>
<!ELEMENT element_with_attrib EMPTY>
<!ATTLIST element_with_attrib
    defined CDATA #IMPLIED
    iCouldbeAnything CDATA #IMPLIED
  >

問題は、XMLの要件は、「iCouldBeAnything」が何でもなければならないということです。 DTDを使用してこれを説明することは可能ですか、それとも他の種類のXML検証に依存する必要がありますか?

4

1 に答える 1

2

AFAIKこれはDTDでは実行できません。他のスキーマ言語を使用する必要があります。たとえば、W3C XMLスキーマでは、を使用するときに柔軟な属性名を<xs:anyAttribute>使用できます。

より正確に言うと、DTD属性リスト宣言には属性の名前が必要であり、一般名のワイルドカードはありません。不思議なことに、属性宣言リストの属性定義はオプションであるため、理論的には、匿名で型指定されていない属性リスト宣言を使用できます。

AttlistDecl  ::=  '<!ATTLIST' S Name AttDef* S? '>'
AttDef       ::=  S Name S AttType S DefaultDecl

したがって、仕様では次のような属性宣言が許可さ<!ATTLIST element-name >れていますが、仕様ではそのような宣言の解釈方法が指定されていないか、まったく効果がないか、または任意のタイプの任意の属性名が許可される可能性があります。いずれにせよ、その機能の希少性と偏心のために、そのような構造が十分にサポートされているとは思いません。

于 2011-11-26T14:44:23.490 に答える