Проверка схемы XML (gpx) с помощью SAXParser в автономном режиме

Я использую следующий код для проверки документа XML (.gpx) по указанной схеме XML. Я храню схему локально в виде файла .xsd. Проблема в том, что этот метод использует подключение к Интернету для проверки схемы. Есть ли способ сделать это без подключения к Интернету? (учитывая тот факт, что я храню XML-схему локально).

Код:

    public static boolean validate(String XmlDocumentUrl, String SchemaUrl) {
    SAXParser parser = new SAXParser();
    try {
        parser.setFeature("http://xml.org/sax/features/namespaces", true);

        parser.setFeature("http://xml.org/sax/features/validation", true);
        parser.setFeature(
                "http://apache.org/xml/features/validation/schema", true);
        parser.setFeature(
                "http://apache.org/xml/features/validation/schema-full-checking",
                false);
        parser.setProperty(
                "http://apache.org/xml/properties/schema/external-schemaLocation",
                SchemaUrl);
        Validator handler = new Validator();

        parser.setErrorHandler(handler);
        parser.parse(XmlDocumentUrl);
        if (handler.validationError == true){
            System.out.println("XML Document has Error:"

                    + handler.validationError + ""
                    + handler.saxParseException.getMessage());
        return false;
        }
        else{
            System.out.println("XML Document is valid");
        return true;
        }
    } catch (java.io.IOException ioe) {
        System.out.println("IOException" + ioe.getMessage());
    } catch (SAXException e) {
        System.out.println("SAXException" + e.getMessage());
    }
    return false;
}

Спасибо и привет,

Петар


person Petar    schedule 10.01.2012    source источник


Ответы (3)


Используйте URL-адрес «file://» для ссылки на вашу локальную схему.

person jtahlborn    schedule 10.01.2012

Укажите schemaUrl как "file://path/to/schema.xsd".

person Dave    schedule 10.01.2012
comment
Спасибо за ответ. Однако, когда я использую это: parser.setProperty( apache.org/xml/properties/schema /external-schemaLocation, файл://+SchemaUrl); проблема все еще остается. Он возвращает ошибки, когда я не в сети - person Petar; 11.01.2012
comment
Нет, это просто строка, содержащая имя (и путь) схемы. Таким образом, добавив file:// впереди, он должен стать file://schema.xsd . Что мне здесь не хватает? - person Petar; 11.01.2012

Yoy может передать вам собственную реализацию DefaultHandler:

...SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
saxParser.parse(InputSource, new Defaulthandler() {
@Override
            public InputSource resolveEntity(String publicId, String systemId)
                    throws IOException, SAXException {
                InputStream is = ClassLoader.getSystemResourceAsStream("path_to_you_local_dtd_doc");
                return is != null ? new InputSource(is) :
                    super.resolveEntity(publicId, systemId);
            }
} )
person Alex Gorbunov    schedule 03.03.2014