xml-проверка в php не удалась для файла карты сайта, сгенерированного модулем xmlsitemap drupal - PullRequest
0 голосов
/ 17 марта 2011

Я использую schemavalidate () из php для проверки моего файла sitemap.xml. Этот файл sitemap.xml создается модулем drupal (xmlsitemap). Когда я запускаю schemavalidate, я получаю ошибки. Вот код,

libxml_use_internal_errors(false);

$xmlDom = new DomDocument('1.0', 'utf-8');
$xmlDom->validateOnParse = true;

if(!$xmlDom->load(xml file location - url))
{
    $errors = libxml_get_errors();
    libxml_clear_errors();
    $is_file_valid = FALSE;
}
else
{
    if (!$xmlDom->schemaValidate('http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd'))
    {
        $Errors = libxml_get_errors();
        $is_file_valid = FALSE;
        libxml_clear_errors();
    }
    else
    {
       $is_file_valid = TRUE;
    }
}

Я вижу следующую ошибку, Элемент '{http://www.sitemaps.org/schemas/sitemap/0.9}lastmod':' 2011-03-07T01: 53Z 'не является допустимым значением типа объединения' {http://www.sitemaps.org/schemas/sitemap/0.9}tLastmod'

Дайте мне знать, если я что-то упустил с проверкой или мне нужно обойти эту ошибку.

Примечание. Когда я проверяю xml-файл онлайн, я не вижу ошибок.

У меня PHP версии 5.3.5. Привет.

Ответы [ 2 ]

0 голосов
/ 11 июня 2013

Когда я использую xmlsitemap для создания карты сайта, я вижу такие записи:

<url><loc>{ok URL snipped}</loc><lastmod>2013-05-16T21:49Z</lastmod><changefreq>monthly</changefreq></url>
<url><loc>{different ok URL snipped}</loc><lastmod>2013-05-16T21:49Z</lastmod><changefreq>monthly</changefreq></url>

Когда я использую schemaValidate в моем примере, я получаю те же ошибки, что и вы.Это заставило меня задуматься, как эта схема определяет приемлемый lastmod.Отсюда: http://www.sitemaps.org/schemas/sitemap/0.9/ похоже, что объединение даты и даты и времени для tLastmod может стать ключом к проблеме.

Я нашел: http://www.w3.org/TR/xmlschema-2/ и пролистал, глядя, какэти встроенные типы данных были определены там.Я заметил, что примеры показывали секунды во времени.

Я вручную изменил значение sitemap.xml на:

<url><loc>{ok URL snipped}</loc><lastmod>2013-05-16T21:49:00Z</lastmod><changefreq>monthly</changefreq></url>
<url><loc>{different ok URL snipped}</loc><lastmod>2013-05-16T21:49:00Z</lastmod><changefreq>monthly</changefreq></url>

, и XML подтвердил.

Итак, мне интересно, пропущены ли секунды из dateTime в выводе изxmlsitemap вызывает проблемы при проверке по схеме?

Я вижу ценность в том, чтобы иметь возможность взять sitemap.xml сайта и убедиться, что он проверяется (программно на PHP в моем случае), прежде чем пытаться его проанализировать.

Я полагаю, что, возможно, существует более надежный REST-подобный сервис, которому можно было бы передать URL-адрес карты сайта или строку, представляющую его, и вернуть результат в отношении того, был ли он проверен, учитывая некоторую нечеткость в формате dataTime и т. Д., НоschemaValidate выглядело как многообещающий первый удар.

Редактировать:

Обсуждение вопросов проверки модуля можно получить по адресу:

https://drupal.org/project/issues/xmlsitemap?text=validation&status=All

С тех пор, как я опубликовал этот ответ, я обнаружил, что по крайней мере в версии модуля 7.x-2.0-rc2 + 0-dev, которую я использую (и, возможно, в более ранних версиях -Я просто не проверял) Я могу настроить Settings -> Advanced Settings -> Last modification date format -> Long для изменения формата, в котором написаны даты модификации.

В результате получается карта сайта, которая проверяет небольшой набор примеров, которые я использовал.Я не уверен, что не бывает случаев, когда полученная карта сайта все еще может не проверяться.Например, см. Комментарий по адресу:

https://drupal.org/node/1096282

, который подсказывает мне, что могут быть и другие неподтверждающие ситуации.

Если проверка XML выполняется по схемедостаточно важен, возможно, он достоин "xmlsitemap_validate.test", но может не быть достаточного интереса к этой проверке, чтобы оправдать эту работу ...

0 голосов
/ 25 марта 2011

Насколько я понимаю, как-то модуль xmlsitemap создает XML-файл sitemap. По сути, поле 'date' в файле xml несовместимо со ссылкой на файл .xsd, который я использую 'http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd'.

Когда я изменяю файл .xsd, проверка проходит. Глядя на это, я расскажу об этой известной проблеме и сообщу пользователям моего сайта об этом.

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