kml 默认命名空间与数据集默认命名空间冲突
kml default namespace conflict with data set default namespace
我有一个澳大利亚厕所列表,我想使用 xQuery 将其映射到 GE 以转换为 KML 文档。我使用的数据集有一个默认名称space xmlns="http://toiletmap.gov.au/".
当我执行 xQuery 传输时,我能够根据需要提取 coordinates/name/description。但是该文档不是有效的 KML 文档,因为我没有使用 xmlns="http://earth.google.com/kml/2.1".
的 kml 默认名称space
我该如何合并这两个名字space?如果我省略名称 space,则 xQuery 转换为空白,无法提取所需数据。
我考虑过添加前缀,例如 xmlns:au="http://toiletmap.gov.au/"。但这并没有帮助,即使我这样命名 {data($x/Name)} 元素。
请告诉我我做错了什么,我觉得我还没有完全理解 namespace 的工作原理。
这是 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>
您还没有真正显示输入示例,但是在使用 XPath 和 XQuery 时,命名空间中 select 节点的任何路径表达式不必使用相同的前缀或默认命名空间(即没有前缀) 到来自某个命名空间的 select 个节点,重要的是为正确的命名空间声明一个特定的前缀,例如declare namespace toi = "http://toiletmap.gov.au/";
然后将该前缀与例如$doc/au:ToiletMapExport/au:ToiletDetails
在您要从该名称空间 select 输入的所有路径表达式中。对于输出,您可以设置 KML 命名空间。
我有一个澳大利亚厕所列表,我想使用 xQuery 将其映射到 GE 以转换为 KML 文档。我使用的数据集有一个默认名称space xmlns="http://toiletmap.gov.au/".
当我执行 xQuery 传输时,我能够根据需要提取 coordinates/name/description。但是该文档不是有效的 KML 文档,因为我没有使用 xmlns="http://earth.google.com/kml/2.1".
的 kml 默认名称space我该如何合并这两个名字space?如果我省略名称 space,则 xQuery 转换为空白,无法提取所需数据。
我考虑过添加前缀,例如 xmlns:au="http://toiletmap.gov.au/"。但这并没有帮助,即使我这样命名 {data($x/Name)} 元素。
请告诉我我做错了什么,我觉得我还没有完全理解 namespace 的工作原理。
这是 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>
您还没有真正显示输入示例,但是在使用 XPath 和 XQuery 时,命名空间中 select 节点的任何路径表达式不必使用相同的前缀或默认命名空间(即没有前缀) 到来自某个命名空间的 select 个节点,重要的是为正确的命名空间声明一个特定的前缀,例如declare namespace toi = "http://toiletmap.gov.au/";
然后将该前缀与例如$doc/au:ToiletMapExport/au:ToiletDetails
在您要从该名称空间 select 输入的所有路径表达式中。对于输出,您可以设置 KML 命名空间。