NoneCvc -complex-type.2.4.c: соответствующий шаблон является строгим, но не найдено никакого объявления для элемента 'oai-identifier'. Как это исправить?

У меня есть статическая схема XSD, которую я хочу использовать для проверки XML-ответа от конечных точек OAI-PMH.

Там сказано, что схема уже подтверждена.
Тем не менее, когда я пытаюсь проверить XML-ответ от случайной конечной точки OAI-PMH, такой как эта:

<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="static/style.xsl"?>
<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd">
    <responseDate>2019-07-29T13:29:04Z</responseDate>
    <request verb="Identify">https://repository.lib.ncsu.edu/oai/driver</request>
    <Identify>
        <repositoryName>NCSU Repository</repositoryName>
        <baseURL>https://repository.lib.ncsu.edu/oai/driver</baseURL>
        <protocolVersion>2.0</protocolVersion>
        <adminEmail>kdbeswic@ncsu.edu</adminEmail>
        <earliestDatestamp>2006-11-10T15:53:37Z</earliestDatestamp>
        <deletedRecord>transient</deletedRecord>
        <granularity>YYYY-MM-DDThh:mm:ssZ</granularity>
        <description>
            <oai-identifier xmlns="http://www.openarchives.org/OAI/2.0/oai-identifier"
                            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                            xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai-identifier http://www.openarchives.org/OAI/2.0/oai-identifier.xsd">
                <scheme>oai</scheme>
                <repositoryIdentifier>repository.lib.ncsu.edu</repositoryIdentifier>
                <delimiter>:</delimiter>
                <sampleIdentifier>oai:repository.lib.ncsu.edu:1840.20/1234</sampleIdentifier>
            </oai-identifier>
        </description>
    </Identify>
</OAI-PMH>

Я получаю это исключение:

org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1055; cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'oai-identifier'.
....

Я понятия не имею, почему это происходит, и соответствующие темы не помогли мне. Пожалуйста, помогите мне.

1 ответ

Решение

Несмотря на то что xsd:any будет в основном разрешать любой элемент XML, есть вариации строгости, заданные его @processContents приписывать. В этом случае, @processContents является strict, что означает, что любой определенный элемент может появиться там. Ваше сообщение об ошибке указывает на то, что он не может найти такое определение XSD для oai-identifier элемент. Вы можете исправить это, выполнив одно из следующих действий:

  1. изменить XML, чтобы представить определенный элемент в этом месте;
  2. изменить XSD xsd:any/@processContents в lax или же skip;
  3. предоставить проверяющему XML-парсеру доступ к определению oai-identifier,

Смотрите также: processContents строгое против слабого против пропуска для xsd: любой

Примечание. Мне удалось успешно проверить опубликованный вами XML без изменений. Я предлагаю вам повторить попытку, убедившись, что валидатор может получить доступ к каждому из требуемых XSD (включая любые ссылочные XSD, транзитивно). Если у вас есть каталог XML или другие механизмы перенаправления для извлечения XSD, обязательно проверьте их.

Другие вопросы по тегам