Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml GPX模式验证问题_Xml_Parsing_Validation_Xsd_Gpx - Fatal编程技术网

Xml GPX模式验证问题

Xml GPX模式验证问题,xml,parsing,validation,xsd,gpx,Xml,Parsing,Validation,Xsd,Gpx,我正在构建一个主要使用GPX文件作为输入数据的应用程序。考虑到gpx文件应该由gpx模式定义(定义如下:),我教的应用程序的第一件事是根据模式验证输入文件(记住课程的不同版本)。到现在为止,一直都还不错。对于我测试的初始文件,一切都很完美。但是,有时我使用.gpx文件,结果证明它对相关的gpx模式无效。所以,我尝试用其他类似的工具导入它们,奇怪的是,没有返回任何错误,并且文件被完美地解析。因此,最合乎逻辑的结论是我的代码有问题。然而,经过彻底的调查,我的代码是完全好的,目前没有任何问题。这甚至通

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

因此,事实证明有一些GPS设备/GPS记录系统/等,它们生成的.gpx文件不符合官方的gpx模式。这个结论让我提出一个问题:为什么?我真的不明白背后的想法。此外,在我发现的大多数无效文件中,问题并不是可以被看作是一个附加的特征,而是一些不符合正确顺序的问题,有些元素的孩子们认为我是完全愚蠢的。p> 这让我向你们提出两个问题。首先,如果有人能向我解释为什么我在网上找到的很多GPX文件不符合官方的GPX模式,我会很高兴。其次,我想问一下,如果要解析GPX文件,您如何处理这个问题。毕竟,跟踪点无论如何都会在文件中,所以我是否必须忽略XML模式验证并继续直接解析?但是,如果属性名拼写错误,我的系统就会崩溃。非常感谢您提供有关如何解析GPS文件的任何信息

谢谢你的时间和帮助

问候,

佩塔


编辑:我发布了一个新的帖子:我在这里询问人们实际上是如何解析GPX文件的。如果您有什么想法,请在那里发布您的答案。

原因示例:geocaching.com生成带有其定义的特殊模式扩展名的.gpx文件

GSAK还向gpx文件添加“值”。恐怕gpx的世界并不像你想象的那样标准化

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


是他们,不是你。但是你不得不适应“他们”。

模式作者选择使用
而不是
。XSD序列是顺序特定的

拼写错误的属性名称将是无效的输入。你必须优雅地验证和失败。计算机不能很好地处理歧义

希望这有助于

更新:

对不起,请允许我详细说明一下。问题是由模式的作者和GPX输出的作者(各种软件包和设备的作者)造成的

基本上,如果一个人能够查看一段数据并理解它的含义,那么软件实现者就有责任创建灵活的验证,以使程序可用

例如,假设您有一个输入字段,您应该输入一个美元金额,用户输入“$.05”,软件应该足够聪明,可以识别出这是5美分,并且足够聪明,可以识别出前面有一个空格,它是无用的

这同样适用于来自设备的文件。是的,问题是他们造成的。是的,当对格式有一个非常好的严格定义时,将设备的输出视为用户输入是荒谬的。但这就是你目前面临的问题。说到底,没有人关心你必须克服什么样的技术挑战才能让它工作。他们关心的只是“它有用吗”和“这对我有多有用”

因此,如果您看到字段的顺序不正确,但所有必需的数据都存在,请重新排列字段,使其通过验证。使你的进口灵活。如果缺少间隙,则用警告消息填充数据间隙。但是,让它发挥作用

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

我希望这有助于

所以,事实证明有一些GPS设备/GPS记录 生成.gpx文件而不符合 官方GPX模式。这个结论让我提出了一个问题: 为什么?我真的不明白背后的想法。此外,, 对于我发现的大多数无效文件,问题不在这里 可被视为附加特征但被忽略的事物 类似于在某些属性上没有遵循正确的顺序' 我认为是完全愚蠢的。< /P> 我能想到的唯一一件事是在验证之前对GPX输入进行预处理(此时唯一的要求是GPX数据格式良好)

我将使用XSLT,从标识转换开始,以不变的方式传递所有内容。然后,您可以通过剥离具有特定名称空间的所有内容来覆盖标识转换。您还可以强制执行子元素的顺序(属性没有子元素,因此我认为这是一个输入错误)并更正拼写错误的元素/属性名称。

问题