2017-08-25 6 views
0

DTDでは、子要素の名前は同じですが、親とは異なる属性の型を持たせる方法はありますか?たとえば

<row> 
    <row _id="1">......</row> 
    <row _id="2">......</row> 
</row> 

どのようにそのようにいろいろ書いを検証するためにDTDを使用するには? xmlの構造は変更できません。

+1

まあ、_id属性を暗黙にしておけば、外側の行には行きません。コンテンツを定義するのはもっと難しく、とにかく内側の行の内容を書き留めていません。これまでのところ、 'div'要素のXHTML DTDを見たいと思うかもしれませんが、' row'要素を入れたいと思っているようにネストすることができます。 –

答えて

2

あなたは、XMLの

構造が変更できないと言います。

実際にはほとんどそうではないことに気付く価値があります。データソース(または言語仕様技術で学問的パズルを設定した人物)を別の(おそらくより合理的な、または少なくともより扱いやすい)デザインに切り替えることはできないかもしれませんが、つまり、XMLの構造を変更することはできません。 XML処理で最も有用な手法の1つは、入力が希望する形式でない場合は、処理前に必要な形式に変換します。

あなたの質問に対する答えは、あなたが意味するものによって異なります。

文字通り、同じ名前の子と親が異なる属性を持つようにDTDで可能かどうかを質問します。 Martin Honnenは既にコメントで指摘しているように、「はい、ただ一つであるが、両方の要素ではないすべての属性をオプションにして、適切な場合にのみ使用する」という答えです。

ただし、指定したフォームのインスタンス文書を有効にするだけでなく、一部の 'row'要素(親要素)には属性はありませんが、他の 'row'要素(子要素)おそらく必要なID属性を持っていれば、答えはいいえです。あなたはDTDでそれを行うことはできません。 DTDには、1つの要素タイプと名前ごとに1つの要素宣言しかありません。つまり、DTDでは、親のrowとchildのrowインスタンスは、宣言された可能な属性のセットを持つ同じ要素タイプのインスタンスです。 (あなたが親と子に異なる属性を持たせたいという事実は、あなた自身の設計では、それらが異なる要素型であることを証明する良い証拠であり、同じ名前で2つの異なる要素型を呼び出すことをなぜ主張するのでしょうか?アプリケーションは複雑ではないので、あなたのマークアップに無意味な部分を導入することによって、より難しいものにする必要があります)。

XSDやRelaxNGのような他のスキーマ言語はどちらもローカル宣言を持っています。同じ名前。

+1

DTDを持つXMLまたはSGMLアプリケーションでは、そのDTDで記述できる規則を超えた規則を持つことはあまり知られていません。 DTDが ''の中に ''を許すという点で、HTMLは古典的な例です。 –

関連する問題