2009-08-28 10 views
2

XMLデータ(この例ではTwitter APIコール経由)を受け取ったとき、私はそれを使用する前に何らかの形でそれを検証するのがベストプラクティスだと思いますか?私のアプリは最近、非常に困難な問題が多く、悪いXMLデータを除外したい。TwitterからXMLを検証する

XMLはどうにか「悪い」になりますか? Twitterのようなオーバーロードされたサーバーは、私のやり方になるはずの半分を吐き出すだろうか?

実際の質問は2つあります:XMLデータを検証する必要がありますか?その前にXMLデータを検証する必要がありますか? (私は既にXMLデータの構造を知っています)

ありがとう!

静的長さのXMLファイルから予測可能なフィールドが5つだけ必要な場合は、XSDを作成することで迷惑をかけないようにすることができますか?

if(!isset($xml->id, $xml->text, $xml->created_at, $xml->sender, $xml->recipient)) throw... 
+0

アレックス自分のスキーマのロールアップに関する私の答えを更新しました。 – Kev

答えて

2

あなたのXMLを検証する最も明白な方法は、次のようになります。お気に入りの DOMコンテナにXMLをロードするか、他のいくつかのメカニズムを使用して、それを解析する

  1. 試み(私はXML処理と完全にfamilairありませんよPHPで)。これにより、XMLが「整形式」であるかどうかを確認することができます。 XMLがうまく構成されていない場合は、 応答の半分しか返ってこない場合は という問題をこの時点で受け取り、 と処理します。

  2. あなたが成功し 次の事 は、XMLスキーマ に対してそれを検証することであるXMLを解析された/ロードしたら。残念なことにTwitterは XMLのXMLスキーマを公開しないので、 自分でロールする必要があります。

手動で独自のXMLスキーマを作成できます。ここではあなたが始めるのに役立つリンクです:

XML Schema Tutorial (W3 Schools)

あなたはまた、あなたのXMLからスキーマを「推測」することができ、このようなAltova XMLSpyなどのツールを得ることができます。つまり、スキーマの定義方法を推測するには、生成後にスキーマを調整する必要があります。そこには他にも無料のツールがありますが、私はこれまでXMLSpyしか使用していません。 Alanによると、TwitterでXMLのフォーマットを変更した場合、これらの変更を考慮してスキーマを更新する必要があります。

XMLスキーマの作成は、最初は気にせずに済みますが、いったんハングしたら、簡単に見つけることができます。私が最初に始めたとき、私はこの本が優れていることが判明:

XML Schema - The W3C's Object-Oriented Descriptions for XML (O'Reilly Press)

+0

独自のスキーマのロールアップについて詳しく説明できますか?私はこのようなことをどうやって始めるのか分かりません... –

0

あなたの質問に答えるために:

入力検証は、エラー処理の主要部分の1つです。あなたはいつもあなたが悪いデータを得ることができると仮定し、できるだけ早くそれを守るべきです。

XMLを検証するには、スキーマ(通常はXSDファイルに保存されている)に対して検証します。

XMLファイルからスキーマを推論することができます。 MSFTには、これを行うための無料のツール、XSD.exe(Visual Studioに付属)、または他のサードパーティのツールがあります。ただし、Twitterのフォーマットを更新する場合は、スキーマを更新する必要があります。スキーマがなければ、XMLが適切に整形されていることを確認し(通常は解析することによって)、期待されるデータが見つからず、防御的にコード化されていると仮定します。

+0

Twitter XMLデータに使用されるXSDが見つかる可能性はありますか? –

+0

ここには例があります:http://apiwiki.twitter.com/Return-どのように見えるかを示す値。何とかXSDファイルを生成できますか? –

0

TwitterがXML APIを公開しますが、スキーマを公開されていないことを残念です。

独自のスキーマを作成する利点は、スキーマに従って有効なメッセージを処理するようにプログラムをコーディングできることです。 TwitterがAPIを変更した場合、またはあなたが期待していないメッセージフォーマットを発行する文書化されていない機能がある場合、あるいはドキュメントの誤解を犯した場合は、すぐに検証エラーが発生します。メッセージがあなたが期待していない形になっている理由を必ずしも知る必要はありませんが、少なくともそれが問題であることは分かります。