3

一連の (float) 値を XML ファイルに格納するアプリケーションがあります。100,000 以上の値が存在する可能性があるため、サイズを抑えることに関心がありますが、サード パーティがファイルに簡単にアクセスできるようにしたいと考えています。

XML 内のデータをエンコードする限り、さまざまな方法が開かれているようです。

1.

<data>
  <value>12.34</value>
  <value>56.78</value>
  ...
  <value>90.12</value>
</data>

2.

<data>
  <value v="12.34"/>
  <value v="56.78"/>
  ...
  <value v="90.12"/>
</data> 

3.

<data>12.34
56.78
  ...
90.12
</data> 

4.

<data>12.34, 56.78, ... 90.12</data> 

おそらくもっと多くのバリエーションもあります。

これらの各アプローチの欠点 (もしあれば) を知りたいだけです。たとえば、準拠していないものもあります。

4

4 に答える 4

3

それを行う「より良い」方法はないと思います。代替案については、上記の私のコメントを読んでください。しかし、XMLに夢中になっている場合は、自分に合ったものを選んでください。私は個人的にこのようなものが好きです

<data>
   <item key="somekey1" value="somevalue1" />
   <item key="somekey2" value="somevalue2" />
   <item key="somekey3" value="somevalue3" />
</data>

見やすくて読みやすく、タグを小さく保つことができるからです。

編集:

XMLに含まれる文字が少ないほど、XMLは小さくなります。(繰り返しになりますが、なぜJSONを提案するのですか)。だから、もしあなたがそれを素晴らしくタイトにできるなら、ぜひそれをしてください。

<d>
   <i k="somekey1" v="somevalue1" />
   <i k="somekey2" v="somevalue2" />
   <i k="somekey3" v="somevalue3" />
</d>

編集:

また、あなたが尋ねなかったことは知っていますが、JSONがどのようになるかをお見せしたいと思いました

   [{ "key": "somevalue1", "value": "somevalue1"},
    { "key": "somevalue2", "value": "somevalue2"}]
于 2010-06-05T04:32:55.220 に答える
3

意味的には、1と2の間に「違い」はありません。同様に、3と4の間に違いはありませんが、1つが区切られている点が異なります。また、XMLでは空白は無視できる/無視できることに注意してください。したがって、#3を読むと、改行なしで「1つの長い行」として表示される可能性があります。

どちらが良いかは、アプリケーションと、データの使用をどのように計画するかによって異なります。

シリアル化されたバージョン(各番号が独自の要素に含まれている)により、ユーザーは個々の番号に「直接」アクセスできます。

区切られた「blob」を使用するには、ユーザーが自分で解析する必要があるため、提供するインターフェースの種類によって異なります。

また、「blob」手法では、XMLが「ストリーミング」されるのを防ぐ傾向があります。これは、小さな要素の束ではなく、1つの巨大な要素があるためです。これは、メモリに大きな影響を与える可能性があります。

全体的なファイルサイズについては、実際にこのデータを圧縮する場合、手法に関係なく、最終的な圧縮サイズが互いに非常に近くなる可能性があることを知っておくと役立つ場合があります。そのプロパティが重要かどうかはわかりません。

于 2010-06-05T04:35:09.147 に答える
2

最初の2つの形式は、最後の2つの形式よりも優先され、最初の形式が最適です。後者の2つでは、データを使用する前に、データの内容を読み取って分割する必要があります。ただし、最初の2つでは、データを列挙して、いつでも必要な1つまたは複数のピースのみを使用できます。ただし、2番目の形式は、属性を介してさらに別のレイヤーに値を埋め込むため、最初の形式よりも望ましくありません(特定のデータポイントごとに他の要素/属性がない場合)。

于 2010-06-05T04:33:03.140 に答える
1

ファイルが処理する唯一のデータが常にこれらの float 値のみである場合は、XML を使用しないでください。各行に値があるプレーン テキスト ファイルのみを使用してください。読み書きが何倍も速くなり、あなたが書いた XML サンプルよりも自己記述的であることに変わりはありません。

たとえば、異なるカルチャ (TR、EN、FR) を持つさまざまなアプリケーション/システム/ユーザーからこの XML ファイルを使用する場合、XML が必要になる場合があります。フロートを「.」で書くものもあります。(12.34) ',' で書く人もいます (12,34)。XML パーサーがそのすべてを処理します。したがって、XML が必要条件である場合、あなたが作成した 3 番目と 4 番目のサンプルは、XML の要点を完全に欠いています。実際には、低速の XML パーサーが使用されることを除けば、プレーン テキスト ファイルを使用する場合と同じです。

あなたが書いた1番目と2番目のサンプルは、意味/解釈にわずかな違いしかありません。最初のものは、提示したい実際のデータが 12.34 であり、それが「値」であることを意味します。2 番目は、「値」があり、それに関連付けられている「v」データが 12.34 であることを意味します。

于 2010-06-29T00:44:39.900 に答える