Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Java XML и XML схема 
:(
    Опции темы
Reptor
Дата 14.4.2008, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: нет
Всего: 0



 Встретился я с проблемой создания XML и XML-схемы в Java.

Я не совсем понимаю как это всё будет взаимодействовать . Вот у меня есть (вернее в будущем будет) в Java функция которая сохраняет XML файл - тоесть тут всё понятно но непонятка у меня возникает там когда я подключю XML схему. 

Если статически сделать XML а к нему XML схему то понятно но как это будет работать динамически? Я генерю XML и задаю ему путь к схеме верно? и после того как я полностью в памяти имею XML мне надо его перенести в файл и как тут будет себя вести Java если XML не валидный или валидный?? Будут ли ккието ероры? 

Какая последовательность действий что б сделать XML у которого есть cхема??
PM MAIL ICQ   Вверх
powerOn
Дата 14.4.2008, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159



Вот тут имеется неплохая статья, которая показывает как сделать валидацию XML документа по XML Schema.

Это сообщение отредактировал(а) powerOn - 14.4.2008, 16:43


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Reptor
Дата 14.4.2008, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: нет
Всего: 0



powerOn, выходит что XML схема используется только для того что б узнать или XML тот что загрузили валидный а не тот что сохраняется?
PM MAIL ICQ   Вверх
powerOn
Дата 14.4.2008, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159



Цитата(Reptor @  14.4.2008,  18:07 Найти цитируемый пост)
powerOn, выходит что XML схема используется только для того что б узнать или XML тот что загрузили валидный а не тот что сохраняется? 


вопрос не очень понял... 

xml схема полностью описывает xml документ. С её помощью можно проверить валидность xml документ-а (имеет ли документ корректную структуру и данные).


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Reptor
Дата 14.4.2008, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: нет
Всего: 0



Цитата

xml схема полностью описывает xml документ. С её помощью можно проверить валидность xml документ-а (имеет ли документ корректную структуру и данные).


да это понятно я просто имел в виду то что это проверка осуществляется при загрузке XML файла или его сохранении?
PM MAIL ICQ   Вверх
LSD
Дата 14.4.2008, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15719
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Reptor @  14.4.2008,  19:16 Найти цитируемый пост)
да это понятно я просто имел в виду то что это проверка осуществляется при загрузке XML файла или его сохранении?

При вызове validator.validate(source).


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Reptor
Дата 23.4.2008, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: нет
Всего: 0



я смотрю ту статейку что дал powerOn,  и там есть вот такой код

Код

import java.io.*;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.*;
import org.xml.sax.SAXException;

public class DocbookRELAXNGCheck {

    public static void main(String[] args) throws SAXException, IOException {

        // 1. Specify you want a factory for RELAX NG
        SchemaFactory factory 
         = SchemaFactory.newInstance("http://relaxng.org/ns/structure/1.0");
        
        // 2. Load the specific schema you want. 
        // Here I load it from a java.io.File, but we could also use a 
        // java.net.URL or a javax.xml.transform.Source
        File schemaLocation = new File("/opt/xml/docbook/rng/docbook.rng");
        
        // 3. Compile the schema.
        Schema schema = factory.newSchema(schemaLocation);
    
        // 4. Get a validator from the schema.
        Validator validator = schema.newValidator();
        
        // 5. Parse the document you want to check.
        String input 
         = "file:///Users/elharo/Projects/workspace/CS905/build/Java_Course_Notes.xml";
        
        // 6. Check the document
        try {
            validator.validate(source);
            System.out.println(input + " is valid.");
        }
        catch (SAXException ex) {
            System.out.println(input + " is not valid because ");
            System.out.println(ex.getMessage());
        }  
        
    }

}


я не могу понять тут validator.validate(source); от куда эта переменная source??

Добавлено через 2 минуты и 9 секунд
ой извеняюсь не то посмотрел только что увидел

Добавлено через 8 минут и 23 секунды
я ещё хотел спросить - вот этот способ это единственный или есть ещё какието?

Добавлено через 10 минут и 3 секунды
вечер что то не могу всё в кучу собрать. Под словом  "вот этот способ" я имел в виду такой:

Код

import java.io.*;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.*;
import org.xml.sax.SAXException;

public class DocbookXSDCheck {

    public static void main(String[] args) throws SAXException, IOException {

        // 1. Lookup a factory for the W3C XML Schema language
        SchemaFactory factory = 
            SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
        
        // 2. Compile the schema. 
        // Here the schema is loaded from a java.io.File, but you could use 
        // a java.net.URL or a javax.xml.transform.Source instead.
        File schemaLocation = new File("po.xsd");
        Schema schema = factory.newSchema(schemaLocation);
    
        // 3. Get a validator from the schema.
        Validator validator = schema.newValidator();
        
        // 4. Parse the document you want to check.
        Source source = new StreamSource("po.xml");
        
        // 5. Check the document
        try {
            validator.validate(source);
            System.out.println("po.xml is valid.");
        }
        catch (SAXException ex) {
            System.out.println("po.xml is not valid because ");
            System.out.println(ex.getMessage());
        }  
        
    }

}

PM MAIL ICQ   Вверх
LSD
Дата 24.4.2008, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15719
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



И в чем проблема? Все работает как и должно.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Reptor
Дата 24.4.2008, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: нет
Всего: 0



LSD, да верно всё работает просто интересно есть ли ещё какие способы проверки? или в ручную сложно написать что то типа validate?
PM MAIL ICQ   Вверх
LSD
Дата 24.4.2008, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15719
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Можно сразу парсить и проверять.
Для DOM:
Код

    SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
    File schemaLocation = new File("po.xsd");
    Schema schema = factory.newSchema(schemaLocation);
    
    DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
    documentBuilderFactory.setValidating(false);
    documentBuilderFactory.setSchema(schema);
    DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
    documentBuilder.setErrorHandler(new ErrorHandler()
    {
      public void error(SAXParseException exception) throws SAXException
      {
        System.err.println(exception);
      }
      public void fatalError(SAXParseException exception) throws SAXException
      {
        System.err.println(exception);
      }
      public void warning(SAXParseException exception) throws SAXException
      {
        System.err.println(exception);
      }
    });
    Document document = documentBuilder.parse(new File("po.xml"));

Для SAX:
Код

    SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
    File schemaLocation = new File("po.xsd");
    Schema schema = factory.newSchema(schemaLocation);

    SAXParserFactory parserFactory = SAXParserFactory.newInstance();
    parserFactory.setValidating(false);
    parserFactory.setSchema(schema);
    SAXParser parser = parserFactory.newSAXParser();
    parser.parse(new File("po.xml"), new DefaultHandler()
    {
      ....
    });



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Entry_N3
  Дата 1.12.2009, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 446
Регистрация: 8.2.2007

Репутация: нет
Всего: нет



В 1.4 нет SchemaFactory. Как вопрос валидации решается в 1.4 Java?
PM MAIL   Вверх
Entry_N3
  Дата 2.12.2009, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 446
Регистрация: 8.2.2007

Репутация: нет
Всего: нет



Есть идеи, как проверять соответствие схеме в Java 1.4?
PM MAIL   Вверх
LSD
Дата 2.12.2009, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15719
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538





--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Entry_N3
  Дата 3.12.2009, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 446
Регистрация: 8.2.2007

Репутация: нет
Всего: нет



Вот пример JavaRanch
PM MAIL   Вверх
Entry_N3
  Дата 3.12.2009, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 446
Регистрация: 8.2.2007

Репутация: нет
Всего: нет



При включении DocumentBuilderFactory#setValidating(true) в папке со схемой появляется файл <название_схемы>.xsx . Кто знает, как отключить его появление?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1255 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.