我有一个使用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包含很多包含,并将其全部放入一个文件中(不包含任何内容)。
答案 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);