Проверка XML из Twitter - PullRequest
       18

Проверка XML из Twitter

2 голосов
/ 28 августа 2009

Когда я получаю данные XML (в данном случае через вызов API Twitter), я полагаю, что лучше всего как-то проверить их, прежде чем я начну работать с ними? В последнее время у моего приложения было много неразрешимых проблем, и я хочу исключить неверные данные XML.

Является ли XML когда-нибудь плохим? Будет ли перегруженный сервер, такой как Твиттер, когда-либо выплевывать только половину того, что должно быть у меня на пути?

Мой реальный вопрос двоякий: должен ли я проверять данные XML перед тем, как работать с ними, и как мне это сделать? (Я уже знаю предполагаемую структуру данных XML)

Спасибо!

Последнее уточнение перед тем, как я выберу ответ (и спасибо за ваши усилия): Если мне нужно только 5 предсказуемых полей из XML-файла статической длины, оставляет ли что-то подобное лазейки, которые преодолевает создание XSD?

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

Ответы [ 3 ]

2 голосов
/ 28 августа 2009

Самый очевидный способ проверки вашего XML будет:

  1. Попытка загрузить XML в ваш любимый Контейнер DOM или анализ его с помощью какого-либо другого механизма (я не совсем знаком с обработкой XML в PHP). Это позволит вам проверить, правильно ли сформирован XML. Если XML не правильно сформирован (т.е. вы получили только половину XML ответ обратно) тогда поймаешь проблема в этой точке и иметь дело с это.

  2. Как только вы успешно загрузил / проанализировал XML следующую вещь это проверить его по XML схемы. К сожалению, Twitter не публиковать схемы XML для их XML так вам нужно будет свернуть их самостоятельно.

Вы можете создавать свои собственные XML-схемы вручную. Вот ссылка, которая поможет вам начать:

Учебник по схеме XML (школы W3)

Вы также можете получить такие инструменты, как Altova XMLSpy , которые могут «вывести» схему из вашего XML. то есть он делает лучшее предположение о том, как определить схему, возможно, вам придется настроить ее после генерации. Существуют и другие бесплатные инструменты, но я когда-либо использовал только XMLSpy. Как говорит Алан , если Twitter когда-либо изменит формат своего XML, вам нужно будет обновить свои схемы, чтобы учесть эти изменения.

Поначалу создание XML-схем может показаться сложным, но как только вы освоите его, вы обнаружите, что это довольно просто. Я обнаружил, что эта книга превосходна, когда я только начинал:

Схема XML - Объектно-ориентированные описания W3C для XML (O'Reilly Press)

0 голосов
/ 30 августа 2009

К сожалению, Twitter публикует XML API, но не публикует схемы.

Преимущество написания собственной схемы заключается в том, что вы можете кодировать свою программу для обработки сообщений, которые действительны в соответствии с вашей схемой. Затем, если Twitter меняет свой API, или если есть недокументированная функция, которая генерирует формат сообщения, которого вы не ожидаете, или если вы неправильно поняли их документацию, вместо того, чтобы копаться в своей программе, чтобы выяснить, почему она работает неправильно ' Я сразу же получу ошибку проверки. Вы не обязательно будете знать, почему сообщение находится в форме, которую вы не ожидали, но, по крайней мере, вы будете знать, в чем проблема.

0 голосов
/ 28 августа 2009

Чтобы ответить на ваш вопрос:

Проверка входных данных является одной из основных частей обработки ошибок. Вы всегда должны предполагать, что вы можете получить неверные данные, а затем защититься от них как можно лучше.

Для проверки XML вы проверяете его по схеме (обычно хранящейся в файле XSD).

Вы можете вывести схему из файла XML. MSFT имеет бесплатный инструмент, который может сделать это, XSD.exe (поставляется с Visual Studio), или использовать другой инструмент стороннего производителя. Однако недостатком этого является то, что вам нужно будет обновить схему, если Twitter когда-либо обновит их формат. Без схемы вы гарантируете, что XML правильно сформирован (обычно пытаясь разобрать его), и просто предполагаете, что ожидаемые данные отсутствуют, и защитно кодируете его.

...