2


0

これは有効なXMLですか?

私は構文が有効であることを知っていますが、私の質問はそれが論理的に有効かどうかです:

    John
    Mary
    Lucy
    Hannah

またはこれを行う適切な方法は次のとおりです。

    John

        Mary


        Lucy


        Hannah

間違いがあることを明確に述べているオンライン文書はありますか?

10 Answer


15


私は後者の方が好きです。それは、それがメアリーである子の名前ではなく、メアリーである子自身であることを明らかにしているからです。

次のように、属性を使用するとさらに良いと思います。


名前が親/子エンティティの単なる特性であることを明確にするためです。


6


2番目は、拡張性の観点からより理にかなっているようです。 最初の子供に誕生日を追加する必要がある場合はどうなりますか? はい、XML属性を追加できますが、遅かれ早かれ、複雑な型または基本的な列挙型の追加に固執することになります。

また、単一の「children」要素の下に子要素をグループ化することをお勧めします。

    John


        Mary
        1970-01-01


        Lucy
        1971-01-01


        Hannah
        1974-01-01

もう1つ:おそらく、1つの親要素の下で子をグループ化することはないでしょうが、元の要素とはインラインのままにしました。


5


それはあなたがそれをどうしようとしているかに依存します。 将来、各個人に関するデータをさらに保存する必要がある場合は、2番目のバージョンの方が適しています。


2


後者が好ましい。 これにより、「名前」は子のプロパティであり、子自体を識別しないことが明らかになります。

クラスの観点から考えてください:

This

class Parent {
    string Name;
    List Children;
}

class Child {
    string Name;
}

より好ましい

class Parent {
    string Name;
    List Children;
}

2番目のオプションは、将来拡張する柔軟性も提供します(たとえば、誕生日要素を追加します)。

より主観的な議論は、「名前」などのプロパティに要素または属性を使用するかどうかです。

最後に、そこに含まれる「子」要素を持つ「子」要素を追加します。


2


もちろん、この質問に対する正しい答えはありませんが、子供が単一のテキスト文字列よりも複雑である(またはより複雑になる可能性がある)場合は、2番目のオプションが適しています。

あなたが通常見るものに関しては、一般にどちらの場合でも、すべての子要素は子要素の下にグループ化されます。 特定の視覚化環境では、他の要素がフォーカスを保持している間、すべての子を閉じることができます。


2


ShokoとDanDanまたはWim Hollebrandseの間の代替手段を使用します。


私は実際に子供である子供の「セット」が好きだからです。


1


それはXMLであり、善悪はありません。 あなたの答えは両方とも正しいですが、これは等しく有効です:

  John

    Mary
    Lucy
    Hannah

どちらを選ぶべきですか? タスクによって異なります。 提示された方法のどれもが最も柔軟であるとは思いません(子供に子供がいる場合はどうなりますか?)


1


両方とも正しい。 要素の構成方法に関する定義はありません - 完全にあなた次第です!

一部の人々は、ノードの数を最小限にしようとします。 そして、それらの人々は、おそらく次のようなXMLを作成します


しかし、XMLについての手がかりは、人間の営みのために、常にできる限り簡単に読み取り、理解できるようにする必要があるということです。 Comuptersを台無しにすると、彼らは常にXMLを理解するので、人間が読めるようにします!


1


データをXMLスキーマにマップする方法に関する標準はありません。 いくつかの一般的なプラクティスがありますが、その1つはhttp://www.w3.org/2001/10/stripes/[striped XML]を使用することです。そのため、ネストされた要素はtype / relation / type / relationロールを交互に取ります。

    John


            Mary


            Lucy


            Hannah

これは非常に定期的ですが、多少冗長です。

一般に、スペースを節約するために、人間が読めるテキストを属性に入れることは悪い考えです。


そのため、一部の形式の国際化に必要なhttp://www.w3.org/TR/ruby/#what[ruby mark up]の使用が不可能になり、CSSを使用したレンダリングがより複雑になります。 コンパクトな表現とASCIIテキストのみに関心がある場合は、XMLが最適な形式ではない可能性があります。


1


「有効」という用語は、XMLで特定の意味を持っていることに言及する価値があります。

XMLドキュメントは、DTDまたはスキーマに準拠している場合にのみ有効です。 基本的に、テキスト文字列のユニバースは2つのカテゴリに分類されます。整形式のXMLとそうでないXMLです。 整形式のXMLドキュメントの世界は、3つのカテゴリに分類されます:有効なXMLドキュメント(DTD /スキーマに準拠)、無効なXMLドキュメント(準拠していない)、および有効性を判断できないドキュメント(そうでないため) tはDTD /スキーマを持っています)。

実際の質問に関する限り、XML文書の設計は、使用する目的への適合性に基づいてのみ判断できます。 XSLTで変換する予定ですか? XPathで照会しますか? Linq-to-XMLで処理しますか? SAXリーダーで処理しますか? データをオブジェクトにデシリアライズしますか? メモ帳で編集しますか? スキーマに対して検証しますか? 遅いネットワークでそれを転送しますか? これらのすべて(およびそれ以上)がXMLの設計に影響を与えるはずです。 正しい答えはありません。