xmlhack.ru XML-форумы
Обсуждение XML и связанных с ним технологий

Стоит ли отменять пространства имен XML? (Январь 07, 2006)


Автор Сообщение
Sergiy
Аспирант

Зарегистрирован: 19.02.2005
Сообщения: 225
Откуда: Киев
Посетить сайт автора
[8714] Вт Янв 10, 2006 16:59
Стоит ли отменять пространства имен XML? (Январь 07, 2006)
Просмотрел статью и решил прокомментировать

http://www.iso.ru/journal/articles/422.html
http://www-128.ibm.com/developerworks/xml/library/x-abolns.html

Рекомендации по поводу использования пространств имён в общем то дельные. Для большенства моих задач использование пространств имён не уместно. К тому же есть некоторые неудобства и сложности в реализации их обработки некоторыми привычными мне средствами.
Хочу только привести пример уместности использования пространств имён. Это документы, подобные документам OpenOffice.org и XHTML. Пространства имён дают возможность расщирять возможности документа, за счёт включения других форматов. Можно так же расширять формат просто вводя новые структуры как другое пространство имён, при этом старый версии программ эти нововведения могут игнорировать. Очень даже удобный алгоритм для обеспечения совместимости.
Тут, как мне кажется, по существуюющим стандартам можно обойтись глобальным пространством имён, и тольео в нужных местах прописывать атрибут xmlns, но это огранчило бы возможности по смешиванию форматов. Например в MathML элементы можно добавиьть атрибуты, описывающие визуальные эффектиы, взятые, например, с SVG или FO(красочная формула). Такое можно применять, например в текстовых процессорах, способных конвертировать MathML в SVG(другие текстовые процессоры могут на этом месте показать просто формулу)
Я так и не понял какие изменения в стандарт предлагает внести автор статьи. Или это статья чисто рекомендательного характера для разработчиков?
_________________
развлекайся и ни в чём себе не отказывай...
olpa
Любитель

Зарегистрирован: 23.04.2002
Сообщения: 981
Откуда: Санкт-Петербург
Посетить сайт автора
[8738] Чт Янв 12, 2006 08:17

Мне кажется, что статья -- рекомендательная. Автор -- реалист, и понимает, что никто не решится менять стандарт (ну, разве что только в сторону усложнения).

За примеры спасибо. Про ОО и XHTML я как-то забыл. В качестве разумного использования ПИ (пространств имён) мне в голову пришёл только XSLT. И вообще, есть такое подозрение, что ПИ -- это побочный результат разработки XSLT.

Вообще-то, ПИ -- вещь нужная, без них часто никак. Проблема, как всегда, в реализации. ПИ в нынешнем виде приносят много неожиданных проблем, как программистам, которые используют XML-библиотеки, так и разработчикам XML-библиотек.

Недавно я писал низкоуровневую утилиту для работы в XML. Среди результатов:
* на код, связанный с ПИ, ушло 90% времени разработки,
* понял, что современные DOM'ы с ПИ тормознее старых DOM'ов,
* заодно отправил авторам libxml и libxslt пакет баг-репортов.

Цитата:

Например, в MathML-элементы можно добавить атрибуты, описывающие визуальные эффекты, взятые, например, из SVG или FO (красочная формула). Такое можно применять, например, в текстовых процессорах, способных конвертировать MathML в SVG (другие текстовые процессоры могут на этом месте показать просто формулу).


Призовая игра для авторов таких утилит. Рассмотрим четыре примера кода.

Код:


1. <x xmlns:mathml="m:m:m" xmlns:fo="fo:fo:fo">
     <mathml:formula fo:render="krasochno"/></x>
2. <x xmlns:mathml="m:m:m" xmlns="fo:fo:fo">
     <mathml:formula render="krasochno"/></x>
3. <x xmlns:fo="fo:fo:fo">
     <fo:block render="krasochno"/></x>
4. <x xmlns="fo:fo:fo">
     <block render="krasochno"/></x>


Внимание, опрос: какое ПИ у атрибута "render" в каждом из случаев?
Sergiy
Аспирант

Зарегистрирован: 19.02.2005
Сообщения: 225
Откуда: Киев
Посетить сайт автора
[8757] Пт Янв 13, 2006 09:06

olpa писал(а):

Рассмотрим четыре примера кода.

Код:


1. <x xmlns:mathml="m:m:m" xmlns:fo="fo:fo:fo">
     <mathml:formula fo:render="krasochno"/></x>
2. <x xmlns:mathml="m:m:m" xmlns="fo:fo:fo">
     <mathml:formula render="krasochno"/></x>
3. <x xmlns:fo="fo:fo:fo">
     <fo:block render="krasochno"/></x>
4. <x xmlns="fo:fo:fo">
     <block render="krasochno"/></x>


Внимание, опрос: какое ПИ у атрибута "render" в каждом из случаев?


1. "fo:fo:fo"
2. "fo:fo:fo"
3. ?
4. "fo:fo:fo"

Я точно не помню как в стандарте, наследует ли аттрибут пространство имён елемента, но я видел некоторые различные реализации. Вообще я бы предполагал, что такого наслежования не происходит и используется, пространство имён, описаное как глобальное.
Что касается разработки реализаций, то с нынешней спецификацией, действительно, процесс разработки замедляется. Сам пытался реализовать учёт прострвнств имён в своих преобразователях, написаных на lex (тогда собирался использовать OpenOffice.org для виузуального представления и редактирования собственного формата). До работающей версии дело тогда так и не дошло.
И вопрос по теме: чем этот подход отличается от использования SAX? Стоит ли мне изучать SAX средства? И есть ли есчё подходящие средства преобразования не XML форматов в XML?
Относительно DOM хотелось бы узнать как устроены современные реализации с точки зрения поддержки пространств имён.
_________________
развлекайся и ни в чём себе не отказывай...
olpa
Любитель

Зарегистрирован: 23.04.2002
Сообщения: 981
Откуда: Санкт-Петербург
Посетить сайт автора
[8760] Сб Янв 14, 2006 09:29

Цитата:

Внимание, опрос: какое ПИ у атрибута "render" в каждом из случаев?


1. fo:fo:fo
2-4. Глобальное ПИ

Цитата:

Я точно не помню как в стандарте, наследует ли аттрибут пространство имён елемента, но я видел некоторые различные реализации. Вообще я бы предполагал, что такого наслежования не происходит и используется, пространство имён, описаное как глобальное.


Сюрприз-сюрприз. Цитата из "Namespaces in XML 1.1":

Цитата:

The namespace name for an unprefixed attribute name always has no value.


То же самое мне когда-то сказали в xml-dev:
http://lists.xml.org/archives/xml-dev/200505/msg00091.html
http://lists.xml.org/archives/xml-dev/200505/msg00092.html

Цитата:

И вопрос по теме: чем этот подход отличается от использования SAX?


Изобретением велосипеда. Лучше взять уже готовое, ибо даже без учёта ПИ

Цитата:

(из одной статьи.ps) I have to dispel a persistent myth that XML is trivial and and XML parsing is trivial.


Цитата:

Стоит ли мне изучать SAX средства?


Это всё равно что "стоит ли изучать ассемблер". Иногда стоит.

Цитата:

И есть ли есчё подходящие средства преобразования не XML форматов в XML?


XSLT обычно самое подходящее средство.

Цитата:

Относительно DOM хотелось бы узнать как устроены современные реализации с точки зрения поддержки пространств имён.


Они их поддерживают, и это приводит к дополнительным расходам. Два XML-дерева:

Код:


1.
<x xmlns:ns="n1:n1:n1">
  <a><b><ns:c/></b></a>
2.
<x xmlns:ns="n2:n2:n2">
  <ns:d><e><f/></e></d>


Если мы хотим скопировать элемент "a" из первого документа во второй документ (например, внутрь "ns:d"), то DOM-реализации требуется потратить некоторое время на то, чтобы убедиться, что ПИ не поломались. Это делается всегда. А в данном примере ещё придётся переименовывать префикс.
Sergiy
Аспирант

Зарегистрирован: 19.02.2005
Сообщения: 225
Откуда: Киев
Посетить сайт автора
[9037] Вс Фев 26, 2006 20:48
Как бы обойти накладные расходы, связаные с ПИ?
Я некоторе время одумывал проблемы использования взаимного вложения XML языков с различными пространствами имён. Пришёл в выводу что их обработку можно реализовать и без использования DOM с поддержкой пространств имён и вообще без их учёта.
В приложениях должно рассматриватся исключительно их собственное пространство имен, следовательно в таких елементах и атрибутах эту информацию можно опустить. Другие узлы документа должны оставатся неизменными, их во внутренем представлении можно приравнять к тексту или CDATA и такм образом вообще не заботится о пространстве имён, хотя при этом необходимо обеспечить корректность расположения закрывающихся скобок и сохранене за каждым узлом его пространства имён.
В общем я считаю возможной работу со смешаным документом без существнного уменьшения скорости обработки и увеличения требований к памяти, тоесть минуя те проблемы, которые несёт добавление пространства имён. Понадобится тольео 2 дополнительных преобразования.
PS
Жду идей относительно возможных алгоритмов реализации, ато у меня вариантов куча, а подобрать хочется чтонибудь гибкое и универсальное(меньше памяти, больше скорость, быстрее реализация).
_________________
развлекайся и ни в чём себе не отказывай...
olpa
Любитель

Зарегистрирован: 23.04.2002
Сообщения: 981
Откуда: Санкт-Петербург
Посетить сайт автора
[9217] Вс Мар 12, 2006 06:34

Цитата:

Другие узлы документа должны оставатся неизменными, их во внутренем представлении можно приравнять к тексту или CDATA и такм образом вообще не заботится о пространстве имён


Тут не всё так просто. Пример. Пусть наша программа обрабатывает xhtml. Внутри xhtml есть svg, а внутри svg -- xhtml. И тогда приравнивать svg к тексту некорректно, ибо внутренний xhtml не будет замечен.

Но вообще, всё логично. То, с чем программа работать не умеет, не должно изменяться.

Цитата:

я считаю возможной работу со смешаным документом без существнного уменьшения скорости обработки и увеличения требований к памяти


На самом деле, пространства имён не добавляют большой нагрузки на DOM-дерево. Многие реализации всё равно "интернируют" имена элементов (по URI и имени выдаётся ID), и полные имена сравниваются не с помощью медленного строкового сравнения, а быстрым сравнением чисел. Кстати, это одна из причин, почему нельзя просто так вставить кусок одного DOM-дерева в другой.