3

私は、現在のユース ケースの XML ドキュメントの設計に取り組んでいます。私のユースケースは-

ID を指定すると、チェック スコアとタレント スコア、およびカテゴリ数を取得できます。各カテゴリには、カテゴリ ID、チェック スコア、タレント スコアがあります。

したがって、2 つの ID がある場合、上記のデータは 2 つの ID に存在するとします。

たとえば、以下は、単一の ID に基づいて作成した XML です。

<?xml version="1.0" encoding="UTF-8" ?>
    <id>0</site-id>
    <check-score>0.5</check-score>
    <talent-score>0.2</talent-score>
    <categories>
        <category-id>123</category-id>
        <check-score>0.5</check-score>
        <talent-score>0.2</talent-score>
    </categories>
    <categories>
        <category-id>321</category-id>
        <check-score>0.2</check-score>
        <talent-score>0.4</talent-score>
    </categories>

idとしての値を持つ別のものが1あり、それに関連するものがあるとどうなりますかid。つまり、上記の例で2番目のIDとそれに関連するその他のコンポーネントをどのように表すのですか? IDが2つある場合、このようなことをする必要がありますか?

<?xml version="1.0" encoding="UTF-8" ?>
    <id>0</site-id>
    <check-score>0.5</check-score>
    <talent-score>0.2</talent-score>
    <categories>
        <category-id>123</category-id>
        <check-score>0.5</check-score>
        <talent-score>0.2</talent-score>
    </categories>
    <categories>
        <category-id>321</category-id>
        <check-score>0.2</check-score>
        <talent-score>0.4</talent-score>
    </categories>

    <id>1</site-id>
    <check-score>0.2</check-score>
    <talent-score>0.3</talent-score>
    <categories>
        <category-id>289</category-id>
        <check-score>0.3</check-score>
        <talent-score>0.7</talent-score>
    </categories>
    <categories>
        <category-id>987</category-id>
        <check-score>0.1</check-score>
        <talent-score>0.5</talent-score>
    </categories>

複数のIDを持つことができるので、上記のユースケースでXMLを記述する正しい方法がわかりません。

誰でもこれについて私を助けることができますか?

4

1 に答える 1

1

私は、XML の「バインドされていない多重度にはコンテナーを使用する」という規則に従います。

これは一般に、利用しやすく、スキーマで表現するのが簡単で、全体的に一貫性があり、処理と拡張が簡単です。さらに、このようなアプローチの使用は、自動シリアル化/型マッパーを使用して十分にサポートされています。上記の 2 番目の例で示したように、このような構造化データの混合モード マークアップを作成すると混乱が生じ、特別な処理が必要になります。

たとえば、多重度のためにコンテナーを使用するには、次のようにします。

<someRelevantRootElement>
  <sites>
    <site site-id="0">
      <!-- not sure what scores are doing there -->
      <categories>
        <category category-id="123">
          <scores check="0.5" talent="0.2" />
        </category>
        <category category-id="..">
          <!-- .. -->
        </category>
        <!-- more categories? -->
      </categories>
    </site>
    <site side-id="..">
      <!-- .. -->
    </site>
    <!-- more sites? -->
  </sites>
</someRelevantRootElement>

また、いくつかの要素を属性に変換したことにも注意してください。「id」に要素を使用することは、ほとんどの場合間違っています。これは、idが何らかの情報の側面を記述しているためです(read: element)。

もちろん、スコアがコンテナーであり、カテゴリ (id) は、そのようなスコア情報 (要素)の側面(の属性) にすぎない場合もあります。

いずれにせよ、unbound-multiplicity 用のコンテナーの使用をお勧めします。それは生活を楽にします。

于 2013-09-14T18:51:46.883 に答える