Как проверить XML на схему XSD, содержащую импорт без расположения схемы?Проверка XML с XSD, содержащего xsd: импорт без местоположения
Фрагмент XSD:
<xs:schema xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types
xmlns:tns="http://schemas.microsoft.com/exchange/services/2006/types"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://schemas.microsoft.com/exchange/services/2006/types"
elementFormDefault="qualified" version="Exchange2010_SP2" id="types">
<xs:import namespace="http://www.w3.org/XML/1998/namespace"/>
...
Уже читал и пробовал:
This one и this too ... Неудачно.
Невозможно удалить этот импорт из схемы, поскольку он содержит ссылку на атрибут xml: lang.
В вариант 1 метод ResourceResolver resolveResource уволен с SYSTEMID = нуль
public class ResourceResolver implements LSResourceResolver {
public LSInput resolveResource(String type, String namespaceURI,
String publicId, String systemId, String baseURI) {
//Some implementation
return new Input(publicId, systemId, resourceAsStream);
В варианте 2 пытался так:
SchemaFactory sFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
//sFactory.setResourceResolver(new ResourceResolver());
Schema schema = sFactory.newSchema(new Source[] {
new StreamSource("http://www.w3.org/XML/1998/namespace"),
new StreamSource(MailGateMQBinding.class.getResourceAsStream("/types.xsd")),
});
validator = messageSchema.newValidator();
source = new DOMSource(inDocBody);
validator.validate(source);
Но есть исключение: без new StreamSource("http://www.w3.org/XML/1998/namespace")
org.xml.sax.SAXParseException: src -resolve: Не удается разрешить имя «xml: lang» в объявлении атрибута (n) ».
и с этим new StreamSource("http://www.w3.org/XML/1998/namespace")
org.xml.sax.SAXParseException: S4S-ELT символов: Non-пробельные символы не допускаются в отличных схем элементов 'хз: AppInfo' и 'хз: документация' .. Saw «The xml:« Пространство имен ».
Любая помощь была бы принята с благодарностью.
С процессором Saxon XSD знание этого пространства имен встроено, поэтому вам не нужно указывать местоположение. Думаю, вы используете процессор Apache Xerces? –
@MichaelKay: Да, мой контейнер EE IBM WebSphere Application Server использует процессор Apache Xerces (возможно, измененный IBM). – CadaverousX