Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 27.10.2009
Сообщений: 100

Вынос DTD в отдельный файл.

15.09.2011, 20:22. Показов 2265. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть XML:

<?xml version = '1.0' encoding = 'UTF-8'?>

<!DOCTYPE config [
... содержимое DTD ...
]>

<config>
... некий XML ...
</config>

Если DTD из него вынести в отдельный файл, в самом XML прописать так:
<!DOCTYPE config SYSTEM 'beans.dtd'>
то при попытке его разбора пишется:
java.net.MalformedURLException: no protocol: beans.dtd

Файл XML и этот самый beans.dtd оба лежат в одной директории.
Хотелось бы вынести DTD в одтельный файл, ибо XML по такой схеме будет не единственный, — не править же каждый файл по отдельности.
Это возможно? Как тогда правильно указывать в XML, где лежит его DTD? Для случая, если лежат они в одной директории.

P.S.:
Разбор — с валидацией, на всякий случай уточню.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.09.2011, 20:22
Ответы с готовыми решениями:

анализ XML на основе DTD .
Помогите пожалуйста. Имею два файла: произвольный файл file.xml и мой myfile.dtd. В программу можно импортировать только те файлы...

Как перенести класс в отдельный файл (InteliJ IDEA/Android Studio)?
Хочется выбрать класс и дать команду IDE чтобы она создала отдельный файл для класса и перенесла его код туда из текущего местоположения....

Создать файл XML и соответствующее ему DTD-определение. Задать схему XSD
Создать файл XML и соответствующее ему DTD-определение. Задать схему XSD. Определить класс Java, соответствующий данному описанию....

8
1 / 1 / 0
Регистрация: 15.02.2010
Сообщений: 311
16.09.2011, 11:36
Так у Вас все - таки схема (XML Schema) или DTD?...
0
0 / 0 / 0
Регистрация: 27.10.2009
Сообщений: 100
16.09.2011, 15:05  [ТС]
У меня DTD.
0
1 / 1 / 0
Регистрация: 02.08.2011
Сообщений: 64
17.09.2011, 20:41
Нужно реализовать интерфейс org.xml.sax.EntityResolver и зарегистрировать его в javax.xml.parsers.DocumentBuilder.
0
0 / 0 / 0
Регистрация: 27.10.2009
Сообщений: 100
17.09.2011, 20:43  [ТС]
'зарегистрировать его в javax.xml.parsers.DocumentBuilder' -- это как?
0
1 / 1 / 0
Регистрация: 02.08.2011
Сообщений: 64
18.09.2011, 08:19
С помощью метода setEntityResolver()

Примерно так:

Code
1
2
3
4
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder()
builder.setEntityResolver( myEntityResolver );
builder.parse( inputStream );
myEntityResolver это и есть ваша реализация интерфейса EntityResolver
0
0 / 0 / 0
Регистрация: 27.10.2009
Сообщений: 100
18.09.2011, 13:45  [ТС]
Реализовал EntityResolver, использую его, но _ничего_ не изменилось:
java.net.MalformedURLException: no protocol: beans.dtd

А если подробнее:
java.net.MalformedURLException: no protocol: beans.dtd
at java.net.URL.<init>(URL.java:537)
at java.net.URL.<init>(URL.java:434)
at java.net.URL.<init>(URL.java:383)
at oracle.xml.parser.v2.NonValidatingParser .pushExternalDTD(NonValidatingParser.jav a:529)
at oracle.xml.parser.v2.NonValidatingParser .parseDoctypeDecl(NonValidatingParser.ja va:454)
at oracle.xml.parser.v2.NonValidatingParser .parseProlog(NonValidatingParser.java:28 7)
at oracle.xml.parser.v2.NonValidatingParser .parseDocument(NonValidatingParser.java: 266)
at oracle.xml.parser.v2.XMLParser.parse(XML Parser.java:149)
at oracle.xml.jaxp.JXDocumentBuilder.parse( JXDocumentBuilder.java:150)
at oracle.xml.jaxp.JXDocumentBuilder.parse( JXDocumentBuilder.java:106)
... и т.д. внутри уже моего класса

Всё это крутится в Web-приложении под OC4J и поэтому там оракловый парсер стоит. Как его заменить на другой? На тот, что в JDK 1.4 стандартный.
0
0 / 0 / 0
Регистрация: 27.10.2009
Сообщений: 100
18.09.2011, 13:46  [ТС]
То есть, как сделать так, чтобы вместо оораклового парсера использовался парсер из JDK 1.4?
0
1 / 1 / 0
Регистрация: 02.08.2011
Сообщений: 64
20.09.2011, 07:11
Прошу прощения, я забыл сказать, что нужно после создания DocumentBuilderFactory вызвать метод setValidating() с параметром true.

По поводу замены парсера можно почитать в явадоках к методу javax.xml.parsers.DocumentBuilderFactory .newInstance() и, в случае OC4J, приготовиться к проблемам. Правда в такой замене обячно нет смысла, если только не планируется использование нестандартных расширений спецификации JAXP. Валидация по DTD к таким не относится
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.09.2011, 07:11
Помогаю со студенческими работами здесь

Nebeans, как вынести класс в отдельный файл?
Написал я два публичных класса в одном файле, компилятор, естественно, заругался. Можно, конечно, решить проблему созданием нового файла и...

Java и упаковка запроса в отдельный файл
Здравтсвуйте! Использую Spring JDBC и DAO классы выглядят примерно вот так: @Repository @Transactional public class...

Вынос класса в отдельный файл
Использую MS VS 2013 Ultimate Учусь программировать, решил попробовать написать морской бой. Решил создать класс игрока, в котором бы...

Вынос глобальных переменных в отдельный файл
Всем привет! Вопрос такой - сижу разбираюсь с вынесением функций в отдельные файлы. Что удалось выяснить - подключая через #include файл...

Вынос переменных в отдельный модуль
Здравствуйте, у меня появился вопрос... Можно ли технически вынести переменные программы в отдельный модуль и сделать так, чтоб они были...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru