如何解决我有一个 kml xml 实例,它可以在某些引擎上正常验证,但在其他引擎上验证失败哪一个是对的?
我有一个 kml xml 实例,它可以在所有 microsoft xml 引擎上正常验证,但在我尝试过的所有其他引擎上验证失败。 xsd ogckml22.xsd 中的相关元素;
<element name="LinestringSimpleExtensionGroup" type="anySimpleType" abstract="true"/>
和
<complexType name="LinestringType" final="#all">
<complexContent>
<extension base="kml:AbstractGeometryType">
<sequence>
<element ref="kml:extrude" minOccurs="0"/>
<element ref="kml:tessellate" minOccurs="0"/>
<element ref="kml:altitudeModeGroup" minOccurs="0"/>
<element ref="kml:coordinates" minOccurs="0"/>
<element ref="kml:LinestringSimpleExtensionGroup" minOccurs="0" maxOccurs="unbounded"/>
<element ref="kml:LinestringObjectExtensionGroup" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</extension>
</complexContent>
</complexType>
和一个实例(仅相关部分);
<Linestring>
<tessellate>1</tessellate>
<gx:altitudeMode>relativetoSeaFloor</gx:altitudeMode>
<coordinates>3.32001280049665,6.572382963895447</coordinates>
<LinestringSimpleExtensionGroup xsi:type="xsd:int">66</LinestringSimpleExtensionGroup>
</Linestring>
使用 VS2019 我没有得到验证错误。使用 Stylus Studio 和 MSXML4/6 我没有得到验证错误。 我使用 Stylus Studio 和 Java; (错误)cvc-elt.2:'LinestringSimpleExtensionGroup' 的元素声明中 {abstract} 的值必须为 false。
正在运行自定义验证引擎 Saxonica 9.4.0.6 Validator...
XtraElems.kml 第 150 行第 55 列 /kml[1]/Document[1]/Placemark[1]/Linestring[1]/LinestringSimpleExtensionGroup[1] 处的验证错误: 在元素的内容:无效元素: 元素被声明为抽象文件 file:///k:/Samples/XtraElems.kml 验证不成功。
这似乎是正确的,意思是所有的 microsoft 解析器都不正确?肯定不是!
额外的问题 - 如果永远无法使用,那么将所有这些抽象元素放在 kml 中到底有什么意义? (而且有很多!)
解决方法
Microsoft 架构处理器多年未更新。有很多地方他们要么一开始就选择不符合规范(例如,他们实现了自己的正则表达式方言而不是 W3C 方言)、报告了错误但未修复的地方,或者规范已被修复的地方澄清,他们没有更新他们的实施。微软提交给 W3C 的相当多的测试用例——大概是他们自己的处理器通过了——已经被其他供应商质疑并被发现是不正确的。
规范很清楚(一旦你掌握了语言!):
Validation Rule: Element Locally Valid (Element)
For an element information item E to be locally ·valid· with respect to an element declaration D all of the following must be true:
1 D is not ·absent· and E and D have the same expanded name.
2 D.{abstract} = false.
...
基本上,如果声明具有替换组,并且元素名称与替换组的成员匹配,则您只能对抽象元素声明有效。一个经典的例子是 <history>
元素包含一系列抽象的 <event>
元素,其中具体的事件元素可能是 <birth>
、<death>
、<marriage>
等:因为<event>
是抽象的,不能直接使用,只能使用具体的替换。
我不熟悉 KML 架构设计,因此无法为您提供帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。