我有一个 kml xml 实例,它在某些引擎上验证良好,但在其他引擎上验证失败。哪一个是对的?

I have a kml xml instance that validates fine with some engines, but fails validation with others. Which one is right?

我有一个 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 的验证不成功。

这似乎是正确的,意味着所有的微软解析器都不正确?当然不是!

奖金问题 - 如果永远无法使用,那么在 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 架构设计,所以无法帮助您。