元素或属性与QName生成不匹配

时间:2011-01-31 15:28:34

标签: xml soap xsd xml-validation ogc

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

这是一个截图,可能更好地说明我的错误: enter image description here

编辑:

  

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

xsd的展平需要xsd包含很多包含,并将其全部放入一个文件中(不包含任何内容)。

2 个答案:

答案 0 :(得分:12)

xmlns:=语法无效。冒号缺少后冒号是额外的或命名空间前缀。正确的语法是xmlns="http://some.uri"xmlns:something="http://some.uri"

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

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

答案 1 :(得分: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);