我正在构建一个主要使用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文件的。如果你有主意,请把你的答案贴在那里。

最佳答案

模式作者选择使用<xs:sequence>而不是<xs:all>。xsd序列是特定于顺序的。
拼写错误的属性名将是无效的输入。你必须优雅地验证和失败。计算机不能很好地处理含糊不清的问题。
希望能帮上忙…
更新:
对不起,请允许我详细说明。这个问题是由模式作者和gpx输出作者(各种软件包和设备的作者)创建的。
基本上,如果一个人能够看到一段数据并理解它的含义,那么软件实现者就有责任创建灵活的验证,以便程序可用。
例如,假设您有一个输入字段,您应该输入一美元的金额,而用户输入“$.05”,那么软件应该足够聪明,能够将其识别为5美分,并且足够聪明,能够识别前面有一个空间,并且它是无用的。
这同样适用于设备中的文件。是的,问题是他们造成的。是的,当对格式有一个非常好的严格定义时,必须将设备的输出视为用户输入是荒谬的。但这就是你现在面临的问题。最后,没人会在意你要克服什么样的技术挑战才能成功。他们所关心的只是“有用吗”和“这对我有多有用”。
因此,如果您看到字段无序,但其他情况下所有必需的数据都存在,请重新排列字段,使其通过验证。使你的进口灵活。如果缺少间隙,请使用警告消息填充数据中的间隙。但是,让它发挥作用。
除了在对xsd进行验证之前尝试对数据进行按摩之外,如果发现验证错误经常是由字段的顺序(这是xsd中xs:sequence和xs:all之间的常见误解)引起的,则可以做的另一件事是更改xsd。从顺序切换到全部。你可以先试试官方的xsd。如果它通过了,那么就不必验证更宽松的版本。
我希望这有助于…

10-08 15:39