Конфликт пространства имен по умолчанию в kml с пространством имен по умолчанию для набора данных - PullRequest
0 голосов
/ 04 ноября 2018

У меня есть список австралийских туалетов, которые я хочу отобразить на GE, используя xQuery для преобразования в документ KML. Используемый им набор данных имеет пространство имен по умолчанию xmlns = "http://toiletmap.gov.au/".

Когда я выполняю передачу xQuery, я могу извлечь координаты / имя / описание по мере необходимости. Но этот документ не является допустимым документом KML, потому что я не использовал пространство имен по умолчанию kml xmlns = "http://earth.google.com/kml/2.1".

Как я должен объединить оба пространства имен? Если я опущу пространство имен, преобразование xQuery будет пустым и не сможет извлечь необходимые данные.

Я думал о добавлении префикса вроде xmlns: au = "http://toiletmap.gov.au/". Но это не помогло, даже когда я назвал элемент {data ($ x / Name)} как таковой.

Пожалуйста, дайте мне знать, что я делаю неправильно, я чувствую, что полностью не понял идею о том, как работают пространства имен.

Это xQuery:

<kml xmlns="http://toiletmap.gov.au/">
 <Document>
    <Folder>
        {
          let $doc := doc("ToiletmapExport_180801_090000.xml")
          for $x in $doc/ToiletMapExport/ToiletDetails
           where $x/@Latitude <= (-34.74526121+0.25) 
                     and $x/@Latitude >= (-34.74526121-0.25)
                     and $x/@Longitude >= (146.5505775-0.25)
                     and $x/@Longitude <= (146.5505775+0.25)
                     return if (($x/AccessibilityDetails/AccessibleMale='true'
                     and $x/AccessibilityDetails/AccessibleFemale='true')
                     or $x/AccessibilityDetails/AccessibleUnisex='true') 
                     then
                <Placemark>
                    <name >{data($x/Name)}</name>
                    <description>FacilityType: {data($x/GeneralDetails/FacilityType)}<br></br>
                    Town: {data($x/Town)}<br></br>
                    Male: {data($x/AccessibilityDetails/AccessibleMale)} Female: {data($x/AccessibilityDetails/AccessibleFemale)}<br></br>
                    Unisex: {data($x/AccessibilityDetails/AccessibleUnisex)}
                    </description>
                    <Point>
                        <coordinates>{data($x/@Longitude)},{data($x/@Latitude)}</coordinates>
                    </Point>
                </Placemark>
                else ()
        }
    </Folder>
 </Document>

1 Ответ

0 голосов
/ 04 ноября 2018

Вы действительно не показали пример ввода, но при работе с XPath и XQuery любые выражения пути для выбора узлов в пространствах имен не должны использовать тот же префикс или пространство имен по умолчанию (то есть без префикса), чтобы выбрать узлы из определенное пространство имен, важно объявить определенный префикс для правильного пространства имен, например declare namespace toi = "http://toiletmap.gov.au/"; и затем использовать этот префикс, например, с $doc/au:ToiletMapExport/au:ToiletDetails во всех ваших выражениях пути, где вы хотите выбрать вход из этого пространства имен. Для вывода вы можете установить пространство имен KML.

...