OSM XML - парсинг

Вопрос следующий: может ли в XML ссылка на объект встретиться ДО того, как сам объект?

К примеру есть отношение rC, состоящие из Way wA и Reletion rB
Всегда ли в XML файле будет
wA
rB
rC
или возможна ситуация
wA
rC
rB

Сам формат XML таких ограничений не накладывает, но может это оговорено в формате OSM?

Возможна

http://wiki.openstreetmap.org/wiki/XML#Assumptions

См. раздел Assumptions

Вариант единственный: из relation может быть ссылка на relation с номером больше (а все элементы в osm-файле располагаются в порядке возрастания номеров).

Поэтому я и привел в примере relation, т.к. с остальными понятно, из-за своего расположения они не могут пересечься.

Не понял этого утверждения. Вот первые 4 узла из свежеэкспортированной области:

 <node id="1138571735" lat="58.4631512" lon="28.5884826" user="Ivan Komarov" uid="69864" visible="true" version="1" changeset="7199893" timestamp="2011-02-06T05:14:08Z"/>
 <node id="1820249289" lat="58.4604854" lon="28.6059857" user="Ivan Komarov" uid="69864" visible="true" version="1" changeset="12173194" timestamp="2012-07-10T12:42:35Z"/>
 <node id="330406086" lat="58.4638914" lon="28.5676057" user="Ivan Komarov" uid="69864" visible="true" version="1" changeset="759841" timestamp="2009-01-09T08:47:41Z"/>
 <node id="1138571834" lat="58.4610411" lon="28.6054127" user="Ivan Komarov" uid="69864" visible="true" version="1" changeset="7199893" timestamp="2011-02-06T05:14:12Z"/>

Или что-то другое имеется в виду?

Мне такие файлы ни разу не попадались.
Вполне допускаю, что программа экспортер может что-то и перемешивать. Но как planet.osm, так и выгрузки по регионам строго следуют этому правилу.
Впрочем, стандартом оно не оговаривается.
Следовательно, общее правило: отношение может ссылаться на другое отношение, которое встречается в тексте после него - тем более остается справедливым.

Отношения вполне законно могут входить друг в друга…

Мне вебсервер osm.org перемешанное выдал, с тем и вожусь… Думаю, что типичная упорядоченность - не более чем побочный эффект использования контейнеров типа std::map.

В общем картина ясна. Всем спасибо за ответы.

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

Надейтесь на лучшее, но предполагайте худшее.
То есть если всё ОК, то должно работать оптимально, если что-то иногда не так, то просто работать.

  1. Не просто может отсутствовать, а непременно так оно и будет.
  2. И не только ссылки из релейшна на несуществующие объекты, но и ссылки из пути на несуществующие узлы.
  3. В локальных выгрузках такое стало наблюдаться после перехода на новый формат данных (хотя на сайте и написано, что, якобы, сохраняется преемственность).