Element or attribute do not match QName production

…衆ロ難τιáo~ 提交于 2019-12-10 20:57:28

问题


I have a schema that i have "flattened" using XML Editor. After i flatten it i get a validation error. What can i do to fix it?

Error Message:

F [Xerces] Element or attribute do not match QName production: QName::=(NCName':')?NCName.

code:

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

Here's a screenshot that might better illustrate my error:

EDIT:

Remove the colon somehow. What exactly does this "flattening" supposed to do?

The flattening of the xsd takes an xsd with a lot of includes and puts it all into one file (without any includes).


回答1:


xmlns:= is invalid syntax. The colon is extra or the namespace prefix after the colon is missing. Correct syntax would be xmlns="http://some.uri" or xmlns:something="http://some.uri"

Note that you have 2 un-needed colons: first one on line 1002 (where the red arrow is pointing) and the second one is on the line 1003. This gives a hint that there might be even more of them.

"QName" refers to "qualified name" and "NCName" refers to "non-colonized name". Non-colonized name is an XML name that doesn't contain a colon character (:). Qualified name is either a non-colonized name or combination of two non-colonized names separated with a colon. For example "abc:defgh". The part before the colon is called the namespace prefix and the part after the colon is called the local name. If a qualified name has a namespace prefix, then that prefix must be bound to a namespace-URI with a prefixed namespace declaration, for example xmlns:abc="http://some.uri".




回答2:


In case it's helpful to anyone else, I got the same error message and realized that what was causing it was the colon in the namespace URI, i.e. "http://whatever". I had been concatenating the namespace URI to the resources and properties directly rather than registering the namespace as a symbol, so a resource or a property might look like "http://hl7.org/fhir/:Observation", which of course has two colons and therefore does not follow the "QName::=(NCName':')?NCName" production format.

I fixed it by first registering the namespace with the model:

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

and then prepending the namespace in my resources and properties:

Resource root = model.getResource("fhir:Patient");
root.addProperty(model.createProperty("fhir:Patient.identifier"), patient.identifier);


来源:https://stackoverflow.com/questions/4852622/element-or-attribute-do-not-match-qname-production

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!