3

我有一个使用 XML 编辑器“扁平化”的模式。在我展平它之后,我得到一个验证错误。我能做些什么来解决它?

错误信息:

F [Xerces] 元素或属性与 QName 产生式不匹配:QName::=(NCName':')?NCName。

代码:

<xs:import namespace="http://www.opengis.net/gml"
    schemaLocation="http://schemas.opengis.net/gml/3.1.1/base/gml.xsd"
    xmlns:="http://www.opengis.net/gml/3.1.1" />
<xs:annotation xmlns:="http://www.opengis.net/sps/1.0">
    <xs:documentation>
        <copyright>                 SPS is an OGC Standard.                 Copyright (c)
            2007,2010 Open Geospatial Consortium, Inc. All Rights Reserved.                 To
            obtain additional rights of use, visit http://www.opengeospatial.org/legal/ .
        </copyright>
    </xs:documentation>
</xs:annotation>

这是一个可能更好地说明我的错误的屏幕截图: 在此处输入图像描述

编辑:

以某种方式删除冒号。这种“扁平化”究竟应该做什么?

xsd 的扁平化需要一个包含很多包含的xsd并将其全部放入一个文件中(没有任何包含)。

4

2 回答 2

14

xmlns:=是无效的语法。冒号是多余的或冒号后的命名空间前缀丢失。正确的语法是xmlns="http://some.uri"xmlns:something="http://some.uri"

请注意,您有两个不需要的冒号:第一个在第 1002 行(红色箭头指向的位置),第二个在第 1003 行。这暗示可能会有更多冒号。

“QName”是指“限定名称”,“NCName”是指“非殖民化名称”。非殖民名称是不包含冒号字符 (:) 的 XML 名称。限定名称是非殖民化名称或两个非殖民化名称以冒号分隔的组合。例如“abc:defgh”。冒号之前的部分称为命名空间前缀,冒号之后的部分称为本地名称。如果限定名称具有命名空间前缀,则该前缀必须绑定到具有前缀命名空间声明的命名空间 URI,例如xmlns:abc="http://some.uri".

于 2011-01-31T20:18:52.313 回答
0

如果它对其他人有帮助,我会收到相同的错误消息,并意识到导致它的原因是名称空间 URI 中的冒号,即“ http://whatever ”。我一直将命名空间 URI 直接连接到资源和属性,而不是将命名空间注册为符号,因此资源或属性可能看起来像“ http://hl7.org/fhir/:Observation ”,当然有两个冒号,因此不遵循“QName::=(NCName':')?NCName”生产格式。

我通过首先使用模型注册命名空间来修复它:

model.setNsPrefix("fhir","http://hl7.org/fhir/");

然后在我的资源和属性中添加命名空间:

Resource root = model.getResource("fhir:Patient");
root.addProperty(model.createProperty("fhir:Patient.identifier"), patient.identifier);
于 2019-05-25T16:25:47.500 回答