我正在构建一个主要使用 GPX 文件作为输入数据的应用程序。鉴于 gpx 文件应该由 gpx 模式定义(如此处定义:http://www.topografix.com/gpx.asp http://www.topografix.com/gpx.asp),我教给我的应用程序的第一件事是根据模式验证输入文件(当然要记住不同的版本)。到目前为止,一切都很好。对于我测试的初始文件,一切都很完美。但是,有时我使用 .gpx 文件,这些文件对于相关的 gpx 架构来说是无效的。因此,我尝试使用其他类似的工具导入它们,奇怪的是,没有返回错误并且文件被完美解析。所以,最合乎逻辑的结论是我的代码有问题。然而,经过彻底的调查,我的代码完全没问题,目前没有任何问题。这甚至通过 topografix.com 建议的验证技术得到了验证(http://www.topografix.com/gpx_validation.asp http://www.topografix.com/gpx_validation.asp) ,并再次得出文件无效的结论。
所以,事实证明有一些 GPS 设备/GPS 记录系统/等等。它生成不符合官方 GPX 架构的 .gpx 文件。这个结论让我提出一个问题:为什么?我真的不明白它背后的想法。此外,对于我发现的大多数无效文件,问题不在于可能被视为附加功能,而在于某些元素的子元素不遵循正确的顺序,我认为这是完全愚蠢的。
这让我想问你两个问题。首先,如果有人能向我解释为什么我在网上找到的很多 GPX 文件不符合官方 GPX 架构,我会很高兴。其次,我想问一下,如果你要解析GPX文件,你如何处理这个问题。毕竟,跟踪点无论如何都会在文件中,所以我是否只需忽略 XML 模式验证并继续直接解析?但话又说回来,如果属性名称拼写错误,我的系统就会崩溃。任何有关如何处理解析 GPS 文件的信息将不胜感激。
感谢您的时间和帮助。
Regards,
Petar
编辑:我发布了一个新线程:GPX 解析模式和“标准” https://stackoverflow.com/questions/8319556/gpx-parsing-patterns-and-standards我问的是人们在实践中如何实际解析 GPX 文件。如果您有想法,请在那里发布您的答案。
架构作者选择使用<xs:sequence>
代替<xs:all>
。 XSD 序列是特定于订单的。
拼写错误的属性名称将是无效输入。你必须优雅地验证和失败。计算机不能很好地处理歧义。
希望有帮助...
UPDATE:
抱歉,请允许我详细说明一下。该问题是由模式作者和 GPX 输出作者(各种软件包和设备)创建的。
基本上,如果一个人可以查看一段数据并理解其含义,那么软件实现者就有责任创建灵活的验证以使程序可用。
例如,假设您有一个输入字段,您应该输入美元金额,并且用户输入“$.05”,则软件应该足够智能,能够将其识别为 5 美分,并且足够智能,能够识别有一个前面有空格,没用。
这同样适用于来自设备的文件。是的,问题是他们造成的。是的,当格式有一个非常好的严格定义时,必须将设备的输出视为用户输入是荒谬的。但这就是您当前面临的问题。最终,没有人关心您必须克服哪些技术挑战才能使其发挥作用。他们关心的只是“它有用吗”和“这对我来说有多大用处”。
因此,如果您发现字段顺序混乱,但所有必需的数据都存在,请重新排列字段,以便它们通过验证。让您的导入更加灵活。如果缺少间隙,请使用警告消息填充数据间隙。但是,让它发挥作用。
除了在根据 XSD 验证数据之前尝试修改数据之外,如果您发现验证错误不断地由字段的顺序引起(这是 XSD 中 xs:sequence 和 xs:sequence 之间的常见误解),您还可以做另一件事xs:all),就是改变你的XSD。将其从顺序切换为全部。你可以先尝试一下官方的XSD。如果通过了,那么您就不必验证较宽松的版本。
我希望这有帮助...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)