дочерний элемент с префиксом пространства имен был признан недействительным xerces - PullRequest
0 голосов
/ 02 октября 2009

Я использую xerces для проверки экземпляра xml по схеме:

parser.setFeature("http://xml.org/sax/features/namespaces", true);
parser.setFeature("http://xml.org/sax/features/namespace-prefixes", true);
parser.setFeature("http://xml.org/sax/features/validation", true);
parser.setProperty("http://apache.org/xml/properties/schema/external-schemaLocation",
      schemaLocation);
parser.setFeature("http://apache.org/xml/features/validation/schema", true);
parser.parse(new InputSource(xml));

Вот мой экземпляр xml:

<?xml version="1.0"?>
<eml:eml packageId="tao.12926.1" system="knb" xmlns:eml="eml://ecoinformatics.org/eml-2.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="eml://ecoinformatics.org/eml-2.1.0 eml.xsd">
  <dataset>
  .......
  </dataset>
</eml:eml>

Этот xml считается действительным.

Однако, если я добавлю префикс "eml" к элементу "набор данных":

<?xml version="1.0"?>
<eml:eml packageId="tao.12926.1" system="knb" xmlns:eml="eml://ecoinformatics.org/eml-2.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="eml://ecoinformatics.org/eml-2.1.0 eml.xsd">
  <eml:dataset>
  .......
  </eml:dataset>
</eml:eml>

Это дает мне ошибку: cvc-complex-type.2.4.a: недопустимое содержимое, начинающееся с элемента 'eml: dataset'. Содержимое должно соответствовать '((("": access) {0-1}, (((("": набор данных) | ("": citation)) | ("": software)) | ("": protocol ))), ( "":. additionalMetadata) {0}-неограничена)»

Я не мог этого понять. «Набор данных» имеет пространство имен по умолчанию во время определения нашей схемы. "набор данных" просто сокращенная версия "eml: набор данных". Почему ксерсес не любит?

Не могли бы вы дать мне подсказку?

Спасибо!

Ответы [ 2 ]

1 голос
/ 25 мая 2011

Мне удалось решить мою проблему, используя ваше предложение. Я объявил свой элемент следующим образом:

<xs:element name="GradeHigh" type="xs:string" form="qualified" />

Затем я смог добавить префикс пространства имен для этого элемента в документе XML.

                <sch:Grades>
                    <sch:GradeHigh/>

теперь действует. Ранее без «form =» qualised я получил бы ошибку проверки на вышеупомянутом xml

1 голос
/ 02 октября 2009

Я думаю, что любой парсер, не только xerces, сообщит об ошибке относительно eml: dataset .
Причина в том, что в схеме для eml: eml не используется атрибут elementFormDefault , который по умолчанию имеет значение «неквалифицированный», следовательно, требуется, чтобы имена «локально объявленных элементов» (например, набор данных) не получали префикс (или подразумеваемое пространство имен через пространство имен по умолчанию). Только глобальные элементы (например, здесь eml) могут иметь (фактически требуют) явный префикс пространства имен.

Чтобы разрешить (или, возможно, даже потребовать) префикс локально объявленных элементов, необходимо изменить схему, либо добавив пару атрибут-значение elementFormDefault = "qualised" к объявлению базового глобального элемента, либо добавив атрибут form = "qualised" к отдельным локально объявленным элементам схемы (например, к набору данных).

Все это, а затем и некоторые! Объясняется в разделе 3.1, 3.2 документа Учебник схемы W3C .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...