我正在使用php中的schemavalidate()来验证我的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的有效值。组织/模式/站点地图/ 0.9} tLastmod'
请告诉我,如果我遗漏了验证内容,或者我必须解决此错误。
注意:当我在线验证xml文件时,我发现没有错误。
我有PHP版本5.3.5。 问候。
答案 0 :(得分:0)
根据我的理解,xmlsitemap模块创建站点地图xml文件的方式有所不同。基本上,xml文件中的“日期”字段与我使用的“http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd”的.xsd文件的引用不兼容。
当我修改.xsd文件时,验证会通过。看着这个,我将把这个问题作为一个已知问题,并让我的网站用户知道这一点。
答案 1 :(得分:0)
当我使用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的date和dateTime联合可能是问题的关键。
我找到了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验证。
所以,我想知道xmlsitemap输出中dateTime的缺失秒是否会导致验证模式的问题?
我认为能够获取站点的sitemap.xml并确保在尝试解析之前验证(在我的情况下以PHP编程)。
我猜可能会有更强大的REST服务,可以传递站点地图URL或表示相同的字符串,并返回结果是否验证,允许数据时格格式等模糊,但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”,但可能没有足够的兴趣来验证该工作......