El elemento o el atributo no coinciden con la producción de QName
-
27-10-2019 - |
Pregunta
Tengo un esquema que he "aplastado" usando el editor XML. Después de aplanarlo, recibo un error de validación. ¿Que puedo hacer para arreglarlo?
Mensaje de error:
F [Xerces] Elemento o atributo No coincida con QName Production: Qname :: = (NCName ':')? NCNAME.
código:
<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>
Aquí hay una captura de pantalla que podría ilustrar mejor mi error:
EDITAR:
Retire el colon de alguna manera. ¿Qué se supone que debe hacer este "aplanador" exactamente?
El aplanamiento del XSD toma un XSD con muchas incluyas y lo pone todo en un archivo (sin ningún incluido).
Solución
xmlns:=
es sintaxis no válida. El colon es extra o el prefijo de espacio de nombres después de que falta el colon. La sintaxis correcta sería xmlns="http://some.uri"
o xmlns:something="http://some.uri"
Tenga en cuenta que tiene 2 COLONAS DE NECESITADO: Primero en la línea 1002 (donde apunta la flecha roja) y la segunda está en la línea 1003. Esto da una pista de que puede haber aún más de ellos.
"Qname" se refiere al "nombre calificado" y "ncname" se refiere al "nombre no colonizado". El nombre no colonizado es un nombre XML que no contiene un carácter de colon (:). El nombre calificado es un nombre no colonizado o una combinación de dos nombres no colonizados separados con un colon. Por ejemplo, "ABC: Defgh". La parte anterior al colon se llama prefijo de espacio de nombres y la parte después de que el colon se llama nombre local. Si un nombre calificado tiene un prefijo de espacio de nombres, entonces ese prefijo deber estar vinculado a un espacio de nombres con una declaración de espacio de nombres prefijada, por ejemplo xmlns:abc="http://some.uri"
.
Otros consejos
En caso de que sea útil para cualquier otra persona, recibí el mismo mensaje de error y me di cuenta de que lo que lo estaba causando era el colon en el espacio de nombres Uri, es decir, "http: // lo que sea". Había estado concatenando el URI del espacio de nombres a los recursos y propiedades directamente en lugar de registrar el espacio de nombres como símbolo, por lo que un recurso o una propiedad podría parecerse"http://hl7.org/fhir/:observation", ¿Qué, por supuesto, tiene dos colons y, por lo tanto, no sigue el formato de producción" Qname :: = (NCName ':')? NCName ".
Lo arreglé primero registrando el espacio de nombres con el modelo:
model.setNsPrefix("fhir","http://hl7.org/fhir/");
y luego preparando el espacio de nombres en mis recursos y propiedades:
Resource root = model.getResource("fhir:Patient");
root.addProperty(model.createProperty("fhir:Patient.identifier"), patient.identifier);