Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Как правильно написать uri в xml / 16 сообщений из 16, страница 1 из 1
16.07.2014, 09:55
    #38697507
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать uri в xml
Привет!

Подскажите, пожалуйста, как правильно написать uri для схемы в xml документе:

Папка со схемой находится в папке проекта:

\xmlfiles\schema.xsd


XML с данными (uri указал как полный путь):

Код: xml
1.
2.
3.
<?xml version="1.0"?>
<catalog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		 xsi:noNamespaceSchemaLocation="D:/Temp/Java/XML/xmlfiles/schema.xsd">



Появляется ошибка:

Код: java
1.
2.
Error: URI=null Line=2: Document is invalid: no grammar found.
Error: URI=null Line=2: Document root element "catalog", must match DOCTYPE root "null".



Спасибо.
...
Рейтинг: 0 / 0
16.07.2014, 10:01
    #38697516
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать uri в xml
mr_virtusXML с данными (uri указал как полный путь)URI <> полный путь, т.к. "полный путь", как минимум, не содержит имя схемы (file:// - в вашем случае).
...
Рейтинг: 0 / 0
16.07.2014, 10:05
    #38697518
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать uri в xml
Basil A. Sidorov,
спасибо.

А как тогда правильно писать uri?

file:// - Это вместо чего?
...
Рейтинг: 0 / 0
16.07.2014, 10:10
    #38697526
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать uri в xml
Basil A. Sidorov,

Стал экранировать слеши, та же ошибка.

D://Temp//Java//XML//xmlfiles//schema.xsd
...
Рейтинг: 0 / 0
16.07.2014, 10:12
    #38697530
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать uri в xml
mr_virtus,

Ненадо ничего экранировать:
file://D:/Temp/Java/XML/xmlfiles/schema.xsd
Если вайлы лежат рядом, то просто
schema.xsd или xmlfiles/schema.xsd, в зависимости от расположения файлов.
...
Рейтинг: 0 / 0
16.07.2014, 10:19
    #38697539
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать uri в xml
file:///C:/путь/файл
Как пример, аналог которого приведён в доке соответствующего класса.

P.S. Чтение документации делается как в старом анекдоте:
старый анекдотИз-за высокого гладкого забора свешивается ветка с бананом.
Идёт обезьяна, видит банан, пытается влезь на забор - не получается, начинает прыгать - высоковато.
Внутренний голос говорит:
- Думай, обезьяна, думай
Обезьяна задумалась, отыскала палку и сшибла банан.
Из-за высокого гладкого забора свешивается ветка с бананом.
Идёт человек, видит банан, пытается влезть на забор - не получается, начинает прыгать - высоковато.
Внутренний голос говорит:
- Думай человек, думай
Человек задумался и плюнул в сердцах:
- Да что тут думать?! Прыгать надо!
?
...
Рейтинг: 0 / 0
16.07.2014, 10:20
    #38697541
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать uri в xml
Blazkowicz,

попробывал все три варианта, одна и та же ошибка:

Код: java
1.
2.
3.
Warning: validation was turned on but an org.xml.sax.ErrorHandler was not set, which is probably not what is desired.  Parser will use a default ErrorHandler to print the first 0  errors.  Please call the setErrorHandler method to fix this.
Error: URI=null Line=2: Document is invalid: no grammar found.
Error: URI=null Line=2: Document root element "catalog", must match DOCTYPE root "null".



На счет Warning я не установил ErrorHandler

А с ошибкой как бороться?
...
Рейтинг: 0 / 0
16.07.2014, 10:22
    #38697544
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать uri в xml
Basil A. Sidorov,
анектод смешной, но я так писал - та же ошибка
...
Рейтинг: 0 / 0
16.07.2014, 10:23
    #38697546
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать uri в xml
mr_virtusСтал экранировать слеши, та же ошибка.
D://Temp//Java//XML//xmlfiles//schema.xsdЭкранируют back slash.
А вы просто удвоили допустимые разделители элементов пути.
...
Рейтинг: 0 / 0
16.07.2014, 10:23
    #38697547
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать uri в xml
Blazkowicz, при этом через браузер файл открывается.
...
Рейтинг: 0 / 0
16.07.2014, 10:38
    #38697574
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать uri в xml
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = null;
        Document document = null;
        builderFactory.setValidating(true);
        builderFactory.setNamespaceAware(true);
        try {
            builder = builderFactory.newDocumentBuilder();
        }
        catch (ParserConfigurationException e){
            e.printStackTrace();
        }

        try {
            fileName = "./xmlfiles/" + fileName;
            document = builder.parse(new FileInputStream(fileName));
            Validator validator = schema.newValidator();
            validator.validate(new DOMSource(document));
        }
        catch (org.xml.sax.SAXException e){
            e.printStackTrace();
        }
        catch (IOException e){
            e.printStackTrace();
        }



Ошибка происходит в строке:
Код: java
1.
document = builder.parse(new FileInputStream(fileName));



filename - имя файла с данными xml
...
Рейтинг: 0 / 0
16.07.2014, 10:52
    #38697598
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать uri в xml
mr_virtus
Код: sql
1.
2.
fileName = "./xmlfiles/" + fileName;
document = builder.parse(new FileInputStream(fileName));

А теперь сравниваем это с javadoc-ом:
Код: sql
1.
2.
3.
4.
5.
6.
7.
public Document parse(File f)
               throws SAXException,
                      IOException
...
public abstract Document parse(InputSource is)
                        throws SAXException,
                               IOException

Меня, например, опять терзают смутные сомнения, что получив java.io.File (который имя), парсер самостоятельно создаст все необходимые ему потоки ввода-вывода, а получив FileInputStream - ничего не сделает.
...
Рейтинг: 0 / 0
16.07.2014, 11:03
    #38697618
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать uri в xml
mr_virtus,

Попробуйте добавить namespace в XML и XSD. По-моему xsd он таки находит.
...
Рейтинг: 0 / 0
16.07.2014, 11:08
    #38697626
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать uri в xml
Добавьте ещё вот это
Код: java
1.
2.
        builderFactory.setFeature("http://apache.org/xml/features/validation/schema", true);
        builderFactory.setFeature("http://apache.org/xml/features/validation/schema-full-checking", true);




Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
import org.w3c.dom.Document;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.FileInputStream;

/**
 * This class represents ...
 */
public class SchemeValidation {
    public static void main(String[] args) throws Exception {
        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
        builderFactory.setValidating(true);
        builderFactory.setNamespaceAware(true);
        builderFactory.setFeature("http://apache.org/xml/features/validation/schema", true);
        builderFactory.setFeature("http://apache.org/xml/features/validation/schema-full-checking", true);
        DocumentBuilder builder = builderFactory.newDocumentBuilder();
        Document document = builder.parse(new FileInputStream(args[0]));
        System.out.println(document);
    }
}



Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
<?xml version="1.0" encoding="UTF-8"?>
<shiporder orderid="889923"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="shiporder.xsd">
  <orderperson>John Smith</orderperson>
  <shipto>
    <name>Ola Nordmann</name>
    <address>Langgt 23</address>
    <city>4000 Stavanger</city>
    <country>Norway</country>
  </shipto>
  <item>
    <title>Empire Burlesque</title>
    <note>Special Edition</note>
    <quantity>1</quantity>
    <price>10.90</price>
  </item>
  <item>
    <title>Hide your heart</title>
    <quantity>1</quantity>
    <price>9.90</price>
  </item>
</shiporder> 



Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="shiporder">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="orderperson" type="xs:string"/>
      <xs:element name="shipto">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="name" type="xs:string"/>
            <xs:element name="address" type="xs:string"/>
            <xs:element name="city" type="xs:string"/>
            <xs:element name="country" type="xs:string"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="item" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="title" type="xs:string"/>
            <xs:element name="note" type="xs:string" minOccurs="0"/>
            <xs:element name="quantity" type="xs:positiveInteger"/>
            <xs:element name="price" type="xs:decimal"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="orderid" type="xs:string" use="required"/>
  </xs:complexType>
</xs:element>

</xs:schema> 
...
Рейтинг: 0 / 0
16.07.2014, 11:14
    #38697639
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать uri в xml
Blazkowicz, спасибо большое!

Ошибка пропала, помогло вот это:

авторДобавьте ещё вот это
builderFactory.setFeature(" http://apache.org/xml/features/validation/schema", true);
builderFactory.setFeature(" http://apache.org/xml/features/validation/schema-full-checking", true);
...
Рейтинг: 0 / 0
16.07.2014, 11:23
    #38697659
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать uri в xml
Basil A. SidorovА теперь сравниваем это с javadoc-омЧто-то я совсем невнимательный стал ...
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Как правильно написать uri в xml / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]