GPX架构验证问题

时间:2011-11-29 15:11:05

标签: xml parsing validation xsd gpx

我正在构建一个主要使用GPX文件作为输入数据的应用程序。鉴于gpx文件应该由gpx模式定义(如此处定义的那样:http://www.topografix.com/gpx.asp),我教给我的第一件事就是合理地根据模式验证输入文件(牢记不同版本的课程)。到现在为止还挺好。对于我正在测试的初始文件,一切都很完美。但是,有时我会使用.gpx文件,这些文件对相关的gpx架构无效。所以,我试图用其他类似的工具导入它们,奇怪的是,没有返回错误,文件被完美地解析。因此,最合乎逻辑的结论是我的代码存在问题。然而,经过彻底的调查,我的代码完全没问题,目前没有任何问题。这甚至通过来自topografix.com(http://www.topografix.com/gpx_validation.asp)的建议验证技术进行了验证,并且它再次得出结论该文件无效。

因此,事实证明,有一些GPS设备/ GPS记录系统/等。生成.gpx文件而不符合官方GPX架构。这个结论让我提出这样一个问题:为什么?我真的不明白它背后的想法。此外,对于我发现的大多数无效文件,问题不是可以被视为附加功能的东西,而是一些不遵循正确的顺序与一些元素的孩子,我认为这是完全愚蠢的。

这让我向你提出两个问题。首先,如果有人能向我解释为什么我在网上找到的很多GPX文件都不符合官方GPX架构,我会很高兴。其次,如果你要解析GPX文件,我想问你如何处理这个问题。毕竟,跟踪点无论如何都将在文件中,所以我只需要忽略XML模式验证并继续直接解析吗?但话说回来,如果有一个拼写错误的属性名称,我的系统会崩溃。任何有关如何处理解析GPS文件的信息都将非常受欢迎。

感谢您的时间和帮助。

此致

斯托

编辑:我发布了一个新主题:GPX parsing patterns and "standards"我在问我们人们实际上是如何解析GPX文件的。如果您有任何想法,请在那里发布您的答案。

5 个答案:

答案 0 :(得分:1)

架构作者选择使用<xs:sequence>而不是<xs:all>。 XSD序列是特定于订单的。

拼写错误的属性名称将是无效输入。您必须优雅地验证和失败。计算机在模糊性方面表现不佳。

希望有帮助...

更新:

抱歉,请允许我详细说明。该问题是由架构的作者和GPX输出作者(各种软件包和设备)创建的。

基本上,如果一个人可以查看数据并了解其含义,那么软件实施者就有责任创建灵活的验证,以便程序可用。

例如,假设您有一个输入字段,您应该输入一个美元金额,并且用户输入“$ .05”,该软件应该足够聪明,可以识别为5美分并且足够智能识别前面有一个空间,没用。

这同样适用于设备中的文件。是的,问题是由他们创造的。是的,当对格式有一个非常好的严格定义时,必须将设备的输出视为用户输入是荒谬的。但这就是你目前面临的问题。在一天结束时,没有人关心你必须克服哪些技术挑战才能使其发挥作用。他们所关心的只是“它是否有效”和“这对我来说有多大用处”。

因此,如果您看到字段乱序,但是否则存在所有必需的数据,请重新排列字段以便它们通过验证。使您的导入灵活。如果缺少缺口,请在警告消息中填写数据缺口。但是,让它发挥作用。

除了在对XSD进行验证之前尝试按下数据之外,如果你发现验证错误总是由字段的排序引起(这是xs中XSD中常见的误解),你可以做的另一件事:sequence和xs:all),是改变你的XSD。将它从序列切换到全部。您可以先试用官方XSD。如果它通过了,那么你就不必验证更宽松的版本。

我希望有帮助...

答案 1 :(得分:0)

为什么?:geocaching.com生成带有已定义的特殊架构扩展名的.gpx文件。

GSAK还为gpx文件添加了“值”。 gpx世界并没有像你想象的那样标准化,我担心。

这些内容都不是您正在使用的架构的一部分。换句话说,您对严格模式检查的想法存在问题。

是他们,不是你。但你被迫容纳“他们”。

答案 2 :(得分:0)

  

因此,事实证明,有一些GPS设备/ GPS录音   系统的/ etc。它产生的.gpx文件不符合   官方GPX架构。这个结论让我提出这样一个问题:   为什么?我真的不明白它背后的想法。此外,   对于我发现的大多数无效文件,问题不是   可能被视为附加功能的东西,但是   像某些属性没有遵循正确的顺序的事情'   孩子,我认为这是完全愚蠢的。

我唯一能想到的是你在验证之前预先处理GPX输入(此时唯一的要求是GPX数据格式正确)。

我会使用XSLT从身份转换开始,将所有内容都保持不变。然后,您可以通过删除具有特定命名空间的所有内容来覆盖标识转换。您还可以强制执行子元素的顺序(属性没有子元素,所以我认为这是一个错字)并纠正拼写错误的元素/属性名称。

答案 3 :(得分:0)

正如您已经指出的那样,模式的问题在于,并非所有实现都是标准化的,而且有些是完全专有的。在这些情况下,最好的方法是将文件导入程序并将其保存为GPX(即使原始文件是GPX)。

我使用一个名为GPS TRACKMAKER的免费程序,它可以打开并保存到各种格式,包括GPX。它还直接从各种手持GPS设备(garmin,magellan等)下载数据。下载GPSTM http://www.gpstm.com/dwlpage.php

在链接文章中,我上传了从GPX解析的准系统php dom,运行得相当好(与GPSTM生成的GPX 100%兼容)GPX parsing patterns and "standards"

感谢Odilon Ferreira Junior(GPSTM作者)提供如此优秀的免费工具。

答案 4 :(得分:0)

正如Homer6已经指出的那样,一个问题是XML文件中的标签序列。

在继续之前,请注意GPX 1.0和GPX 1.1非常不同。大多数应用程序生产/使用GPX 1.0。例如,在1.0中,电子邮件有一个正则表达式:

[\p{L}_]+(\.[\p{L}_]+)*@[\p{L}_]+(\.[\p{L}_]+)

如果任何应用程序有一个文本字段要求用户输入他的电子邮件(稍后将存储在GPX文件中),那么它应该非常严格。如果用户输入“name AT gmail.com”,则生成的GPX文件无效。

XML文件的架构非常严格。当用户输入将存储在GPX文件中的数据时,大多数应用程序开发人员不希望进行相同的严格验证。而且,这就是为什么大多数文件都不是正确的GPX文件。此外,这就是大多数解析应用程序忽略这些严格规则的原因。