0

私と同僚は、xml の有効性について口論になりました。私は、xml ノードがテキストまたはその他の xml ノードのいずれかを持つことができると確信していますが、両方を持つことはできません。

つまり、これは有効な xml ですか? (そうじゃないと言っている)

<dt>
    blah blah text   
    <test0>
        some node content
    </test0>
    <test1>
        blah blah some text <some_node>A</some_node>
    </test1>
    <test2>
        noncount
    </test2>
    <test3>
        blah blah some text <some_node>B</some_node>
    </test3>
</dt>

編集: 私の同僚は、.dtd ファイルには #PCDATA が含まれているため、次のように主張しています。

<!ELEMENT dt (#PCDATA | test0 | test1 | test2 | test3)* >

これは、テキストだけでなく、その中に他の xml タグが存在する可能性があることを意味します。

4

3 に答える 3

6

XML では、整形式のものと有効なものの間に区別があります。整形式を意味するときに有効と言う人がいますが、これは混乱を招きます。XML は、語彙を構築するための一連の構文規則です。XML 自体は、どの要素と属性が許可されているか、またはそれらをどこに配置できるかについて何も述べていません。ドキュメントが XML 構文に準拠している場合、そのドキュメントは整形式です。あなたの例は整形式の XML です。

有効性とは、使用される特定の要素と属性がすべて、何らかの DTD またはスキーマに従って使用されることを意味します。次の DTD スニペットの例を示します。

<!ELEMENT dt (#PCDATA | test0 | test1 | test2 | test3)* >

あなたの同僚は、あなたが与えた XML がその DTD に従って有効であるという点で正しいです (もちろん、すべてのテスト要素の内容が有効であると仮定して)。DTD が次のようになっている場合:

<!ELEMENT dt (test0 | test1 | test2 | test3)* >

その場合、あなたの例は有効ではありませんが、それでも整形式です。

実際には、テキストと子要素を混在させることは非常に一般的です。

于 2013-07-10T13:57:00.003 に答える
3

これは整形式の XML です。テキストノードは、 「混合コンテンツ」と呼ばれる他のノードが混在している場合でも、まったく問題ありません。

有効な XML には、スニペットにない XML スキーマまたは DTD を定義する必要があります。混合コンテンツを禁止するものを追加すると、そのスキーマに従っていないだけで、整形式の XML のままになります。

于 2013-07-10T13:33:51.477 に答える
3

あなたは間違っています。

XML コンテンツには、要素とテキスト (文字データ) を混在させることができます。

その例は、どの XHTML ドキュメントにもあります。

于 2013-07-10T13:34:00.247 に答える