У меня есть XML-файл (карта сайта с использованием расширений Google <image:image>
), который мне нужно проверить по двум локальным XSD-файлам, но проверка не удалась, поскольку <url>
не допускает <image:image>
в качестве дочернего элемента.Полное сообщение об ошибке:
org.xml.sax.SAXParseException:
cvc-complex-type.2.4.a: Invalid content was found starting with element 'image:image'.
One of '{"http://www.sitemaps.org/schemas/sitemap/0.9":lastmod,
"http://www.sitemaps.org/schemas/sitemap/0.9":changefreq,
"http://www.sitemaps.org/schemas/sitemap/0.9":priority}'
is expected.
Вот карта XML, которую я пытаюсь проверить:
<?xml version="1.0"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">
<url>
<loc>http://example.com/index.html</loc>
<image:image>
<image:loc>http://example.com/images/mysite.jpg</image:loc>
<image:title>My Site's Logo</image:title>
<image:caption>Logo for My Site by Andy Warhol (not really)</image:caption>
</image:image>
</url>
...
</urlset>
Я использую стандартные XSD для sitemaps и Google Images , но поскольку ни одна из них не ссылается на другую, я не вижу, как сделать <image:image>
действительным потомком <url>
.
Если это поможет, вот код, который выполняетпроверка.
Source document = ...
StreamSource[] source = new StreamSource[] {
new StreamSource(this.getClass().getResourceAsStream("sitemap.xsd"), "http://www.sitemaps.org/schemas/sitemap/0.9"),
new StreamSource(this.getClass().getResourceAsStream("sitemap-image.xsd"), "http://www.google.com/schemas/sitemap-image/1.1")
};
SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI).newSchema(source)
.newValidator().validate(document);
Ближайший вопрос SO, который я смог найти , требует предварительного разбора и разделения файла XML, поскольку применяемая схема варьируется в зависимости от значений данных.Мое требование намного проще, и я надеюсь, что его будет гораздо проще решить.
Обновление: У меня была старая схема, которая не позволяла другим дочерним элементам для элемента.sitemaps.org обновил свой XSD, добавив
<xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="strict"/>