4

大量の URL (約 100,000) を XML ファイルに (他のデータと共に) 保存しています。URL が少なくても問題なく動作しましたが、XML ファイルが非常に大きくなり (タグとインデントのために)、解析が遅くなりました。そこで、すべての URL を 1 つの XML 要素内にグループ化することを考えました。そのためには、区切り記号が必要です。例として、私はこれから行きたいと思います:

<document>
  <bigGroupOfURLs>
    <OneURL>
      <nameOfData1>data1_1</nameOfData1>
      <nameOfData2>data1_2</nameOfData2>
      <URL>www.site1.com</URL>
    </OneURL>
    <OneURL>
      <nameOfData1>data2_1</nameOfData1>
      <nameOfData2>data2_2</nameOfData2>
      <URL>www.site2.com</URL>
    </OneURL>
  </bigGroupOfURLs>
  <someOtherData>...</someOtherData>
</document>

このようなものに (ただし、# は使用しません):

<document>
  <bigGroupOfURLs>
    data1#data2#www.site1.com#data1#data2#www.site2.com
  </bigGroupOfURLs>
  <someOtherData>...</someOtherData>
</document>

これらの URL は HTML ファイル内のタグから取得されるため、あらゆる種類の非標準文字が含まれる可能性があります。たとえば、次のような例が含まれる可能性があります。

<a href="http://ja.wikipedia.org/wiki/メインページ">メインページ</a>
<a href="http://en.wikipedia.org/wiki/Stack Overflow">Stack Overflow</a>

そこに、UTF-8 文字とスペースが表示されます。これらの URL は正しく解釈されているので、そこに表示されるとおりに保存したいと考えています。では、URL に決して表示されないことが保証されている文字は? 印刷可能な文字にしたいです。これは XML ファイル内にあることに注意してください</>

4

2 に答える 2

3

「URL」には複数の定義があります。「URI」または「IRI」の方がより正確な場合に、この用語が使用されることがよくあります。多くのシステムは寛容であり、仕様に従って技術的に合法ではないことを許可しようとします。ポステルの法則がここに適用され、一部のシステムが受け入れるものについてリベラルになり始めると、他のすべてのシステムがそれにならわなければならないという必然的な結果が生じます。

特に URL 内のすべてのスペースが %20 として適切に % エンコードされていることを確認する場合は特に、1 つのスペースを使用するのが非常に安全な区切り文字です。

しかし、このようなマイクロ構文を使用する前に、XML の解析時間が本当にボトルネックになっていることを確信したいと思います。

于 2013-10-08T22:27:41.673 に答える
2

あなたが言及した両方の URL は、実際には無効です。

http://ja.wikipedia.org/wiki/メインページ
http://en.wikipedia.org/wiki/Stack Overflow

ブラウザに入力すると、サーバーに送信される前にパーセントでエンコードされます。RFC 3986によると、スペース文字と次の印刷可能な ASCII 文字は URL では無効です。

" < > \ ^ ` { | }

マルチバイト UTF-8 シーケンスも無効です。とはいえ、一部のサーバーはこれらの文字を引き続き受け入れる可能性があります。

そのため、URL を正規化し、空白で区切ることをお勧めします。

于 2013-10-08T20:08:59.700 に答える