元素或属性不符合QName规范

4
我有一个使用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>

这是一张截图,可能更好地说明了我的错误:在此输入图片描述 编辑:

不知道怎样去掉冒号。"flattening" 到底是什么意思?

将 xsd 平铺的过程是将一个包含许多引用的 xsd 文件转换为一个文件(不包含任何引用)。

不知道怎么去掉冒号。这个“压平”到底是做什么的? - biziclop
去掉冒号对我没有起作用,但请看我的编辑关于平铺的部分。 - capdragon
2个回答

14

xmlns:= 是无效的语法。冒号是多余的或者冒号后面缺少命名空间前缀。正确的语法应该是 xmlns="http://some.uri" 或者 xmlns:something="http://some.uri"

请注意,你有2个不必要的冒号:第一个在第1002行(红色箭头所指),第二个在第1003行。这提示可能还有更多的不必要冒号。

"QName" 指的是 "qualified name",而 "NCName" 指的是 "non-colonized name"。非冒号化名称是一个不包含冒号字符(:)的 XML 名称。限定名称是一个非冒号化名称或两个非冒号化名称以冒号分隔的组合。例如"abc:defgh"。冒号前面的部分称为命名空间前缀,后面的部分称为本地名称。如果限定名称有一个命名空间前缀,则该前缀必须通过带有前缀的命名空间声明绑定到命名空间 URI,例如xmlns:abc="http://some.uri"


我猜架构的平铺会把一切都搞砸,因为如果我验证所有包含的文件,它就可以正常验证,但在平铺后,它就会出现这些错误。我尝试删除第1002行上的冒号,然后它就在第1003行给了我错误。当我删除1003上的冒号时,它会给我更多的错误(就像你说的那样)。在删除最后一个冒号后,会出现许多验证错误。 - capdragon

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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接