Элемент или атрибут не соответствуют продукции QName
У меня есть схема, которую я "сплющил" с помощью редактора 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 с большим количеством включений и помещает все это в один файл (без каких-либо включений).
1 ответ
xmlns:=
неверный синтаксис Двоеточие лишнее или префикс пространства имен после пропущенного двоеточия. Правильный синтаксис будет xmlns="http://some.uri"
или же xmlns:something="http://some.uri"
Обратите внимание, что у вас есть 2 ненужных двоеточия: первый в строке 1002 (где указывает красная стрелка), а второй в строке 1003. Это дает подсказку о том, что их может быть даже больше.
"QName" относится к "квалифицированному имени", а "NCName" относится к "неколонизированному имени". Неколонизированное имя - это имя XML, которое не содержит двоеточия (:). Полное имя - это неколонизированное имя или комбинация двух неколонизированных имен, разделенных двоеточием. Например, "abc: defgh". Часть перед двоеточием называется префиксом пространства имен, а часть после двоеточия называется локальным именем. Если квалифицированное имя имеет префикс пространства имен, то этот префикс должен быть связан с URI пространства имен с префиксным объявлением пространства имен, например xmlns:abc="http://some.uri"
,
Если это было полезно для кого-то еще, я получил то же сообщение об ошибке и понял, что причиной этого было двоеточие в URI пространства имен, то есть " http: // любой". Я объединял 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);