Javascript-форум (https://javascript.ru/forum/)
-   (X)HTML/CSS (https://javascript.ru/forum/xhtml-html-css/)
-   -   Вполнение Javascript в XML (https://javascript.ru/forum/xhtml-html-css/6768-vpolnenie-javascript-v-xml.html)

B~Vladi 21.12.2009 01:42

Вполнение Javascript в XML
 
Как заставить xml-файл понимать javascript-код? DTD не помогают, пространства имён вроде вообще не из этой области... Даже не знаю, в какую сторону копать:(

x-yuri 21.12.2009 15:11

тебе не понравиться мой ответ (;
а что у тебя там такого скриптового передается?

B~Vladi 21.12.2009 18:19

Цитата:

Сообщение от x-yuri
тебе не понравиться мой ответ

Да нет, это я неправильно поставил вопрос забыв, что xml это всего лишь данные.
Цитата:

Сообщение от x-yuri
а что у тебя там такого скриптового передается?

Есть бредовая идея написать сайт на xml. Но туда как-то нужно вставлять картинки, скрипты и т.п.. Повозившись, удалось реализовать это через пространства имён http://www.w3.org/1999/xhtml и dtd. Единственное, что смог сделать без xhtml - это создать ссылку средствами xLink у которой больше возможностей. По-сути это тот же xhtml получается, но есть пару хороших плюсов:
Можно применять xslt для части дерева, например, сортировки (скорость по более будет, нежели только средствами JS) и xPath (хотя я подозреваю, что это можно и в xhtml). Да и вообще намного удобнее с ним работать:)

x-yuri 21.12.2009 18:50

Цитата:

Сообщение от B~Vladi
Есть бредовая идея написать сайт на xml

(шутя) кто-то же должен экспериментировать

B~Vladi 21.12.2009 18:55

Цитата:

Сообщение от x-yuri
кто-то же должен экспериментировать

:)
Лично мне она нравится.

x-yuri 21.12.2009 18:58

ну пусть нравится, но на данный момент сайты не пишуться на xml. Или я не зна? Если не пишутся, значит это пока из области экспериментов

Gvozd 21.12.2009 19:46

а как вы преобразуете XML в читаемый вид?
XSLT же?
разве если задать правило преобразования блоков с кодом в <script type="text/javascript"></script> не сработает?
извиняюсь, если сказал глупость, не сильно владею темой

B~Vladi 21.12.2009 21:31

Цитата:

Сообщение от Gvozd
а как вы преобразуете XML в читаемый вид?

Эм... Это же текст... он и так читаемый... или ты имел ввиду визуальное оформление - так css легко к нему подключается:
<?xml-stylesheet type="text/css" href="" ?>

Цитата:

Сообщение от Gvozd
XSLT же?

XSLT поможет в других вещах, например та же сортировка. Преобразовывать в xhtml совсем не обязательно.
Цитата:

Сообщение от Gvozd
разве если задать правило преобразования блоков с кодом в <script type="text/javascript"></script> не сработает?

Если речь про XSLT и преобразование в xhtml, то конечно сработает, но, опять же, я хочу работать с XML-документом, а не XHTML.

Вот небольшой, но вполне рабочий вариант:
<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet href="style.css" type="text/css"?>
<!DOCTYPE root [
<!ELEMENT root ANY>
<!ELEMENT a (#PCDATA)>
<!ELEMENT script (#PCDATA)>
<!-- создадим пространство имён html, чтобы можно было использовать html элементы в любом месте -->
<!ATTLIST root
    xmlns:html CDATA #FIXED "http://www.w3.org/1999/xhtml"
>
<!-- создадим простую гиперссылку xLink -->
<!ATTLIST a
    xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink"
    xlink:type CDATA #FIXED "simple"
    xlink:href CDATA #REQUIRED
>
<!-- добавим тег script для вставки его в любое место файла -->
<!ATTLIST script
    xmlns CDATA #FIXED "http://www.w3.org/1999/xhtml"
    type CDATA #FIXED "text/javascript"
>
]>
<root>
<a xlink:href="image.jpg">Image</a>
<!-- Выводим html элемент strong -->
<html:strong>test</html:strong>
<!-- Подгрузим скрипт -->
<script src="script.js" />
</root>


Конечно, можно было бы поступить так:
<?xml version="1.0" encoding="utf-8" xmlns="http://www.w3.org/1999/xhtml" ?>

и дальше писать на чистом xhtml, но это уже не то. Уже нельзя будет создавать свои теги и атрибуты, т.к. всё содержимое находится в пространстве xhtml.

Кстати, есть куча DOM-методов и свойств, которые в ишаке работают только для xml файлов.

В спецификации есть инструменты для вставки в xml документ не-xml данных (звук, видео, картинки) , причём двумя способами: через DTD (сущности) и xLink, но ни один способ не работет в мозилле, в других не тестил.

B~Vladi 22.12.2009 01:36

Скоро напишу шаблон xml документа, с помощью которого можно будет легко представлять данные в браузере. Уверен, что этот подход будет намного удобнее xhtml. Если кому интересна эта тема, отпишитесь тут, пожалуйста, чтобы я не засирал базы форума:)

Такой подход к представлению информации подходит и для статичных данных, но мне представляется, что для динамики (активного использования JS) будет намного лучше. Позже хочу сравнить оба варианта - xhtml vs xml.

Gvozd 22.12.2009 02:18

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

IIIEPJIOK 22.12.2009 02:41

*Без всякого подвоха*

А за чем это все? В чем будут преимущества перед XML(XSL)->(x)html?

В любом случае жду результатов и комментарии автора.....

B~Vladi 22.12.2009 10:01

Цитата:

Сообщение от Gvozd
статью написать, и захабрить

Насчёт первого - точно, а вот захабрить незнаю.
Цитата:

Сообщение от IIIEPJIOK
В чем будут преимущества перед XML(XSL)->(x)html?

Вот это я и хочу выяснить.

x-yuri 22.12.2009 11:10

Цитата:

Сообщение от B~Vladi
Если кому интересна эта тема, отпишитесь тут

интересно

B~Vladi 26.12.2009 18:37

Уфф...
Мои эксперементы превратились в войну с Internet Explorer. На данном этапе уже можно праздновать победу (спасибо гуглу):yes:
Вобщем, проблема в том, что реализация в IE сильно отличается от спецификации и других браузеров. Основной вывод такой, что необходим фреймворк а-ля jQuery-2, ибо первый не справится с такой задачей. Выявлены основные различия между реализациями IE и Gecko и найдены некоторые пути решения. Конечно, на этом я не буду останавливаться.
Сейчас могу более подробно рассказать обо всём этом в блоге, если это кому интересно. Далее придётся писать фреймворк.

x-yuri 26.12.2009 19:44

Цитата:

Сообщение от B~Vladi
Сейчас могу более подробно рассказать обо всём этом в блоге, если это кому интересно

в каком блоге?

Цитата:

Сообщение от B~Vladi
Далее придётся писать фреймворк.

звучит страшно :бр-р:

B~Vladi 26.12.2009 20:02

Цитата:

Сообщение от x-yuri
в каком блоге?

В блоге javascript.ru
Цитата:

Сообщение от x-yuri
звучит страшно :бр-р:

Да, действительно, ишак подкидывает всё новые косяки постоянно, начиная с DTD. Я бы сказал - различия реализаций xhtml это ещё цветочки:)
После написания первого прототипа фреймворка (он у меня будет первым:)) всё пойдёт намного ровнее!

x-yuri 26.12.2009 20:37

Цитата:

Сообщение от B~Vladi
В блоге javascript.ru

а ты еще не писал туда? А то не могу тебя там найти. Ну можешь здесь ссылку кинуть, когда что-то напишешь

B~Vladi 26.12.2009 20:50

Цитата:

Сообщение от x-yuri
а ты еще не писал туда? А то не могу тебя там найти. Ну можешь здесь ссылку кинуть, когда что-то напишешь

Нет, "сейчас" не в буквальном смысле было сказано. Дайте мне пару дней и ссылка будет:)
Так же хочу попросить помощи у тех, кто когда-либо сталкивался с этим или кому интересно. Удалось нагуглить кучу интересного, но такой ситуации, видимо, нигде не разбиралось. Так что приходиться самому до всего доходить.

x-yuri 27.12.2009 01:42

Цитата:

Сообщение от B~Vladi
Так же хочу попросить помощи у тех, кто когда-либо сталкивался с этим или кому интересно

ну так расскажи о какой-то проблеме

B~Vladi 27.12.2009 12:01

Вобщем, основная проблема вот в чём:
при загрузке xml файла в IE (не важно локально или с сервера), сначала он парсится как xml-файл, но потом сам превращается в html (бред, да?!).
Вобщем, из такого файла:
<?xml version="1.0" encoding="utf-8" standalone="no" ?>
<?xml-stylesheet href="style.css" type="text/css"?>
<root>123</root>

получается такой:
<HTML XMLNS:XMV>
<HEAD>
  <LINK rel=stylesheet type=text/css href="style.css">
</HEAD>
<BODY>
  <root>123</root>
</BODY>
</HTML>

Файл стилей пустой.
У меня пара вопросов: откуда взялось пространства имен XMV и почему вообще так? При этом неважно, был ли установлен Content-Type или нет. Хотя на сайте microsoft пишут, что нужен тип text/xml, я пробовал и с application/xml.
Это касается и DOM. IE воспринимает все узлы, как узлы html со всеми вытекающими, даже если выбранный узел относится к пространству имен xml (http://www.w3.org/XML/1998/namespace). Самая главная проблема в том, что узлы xml и html "не совместимы" друг с другом. Т.е. я не могу вставить полученный xml непосредственно в DOM. Я нашел способ как это можно сделать, но там свои траблы тоже... Вобщем, если кто знает, как заставить ишака понимать файл как xml - расскажите.

B~Vladi 27.12.2009 18:11

Может кто знает о такой конструкции:
<xml:namespace ns="" prefix=""/>

Что тут к чему?

x-yuri 27.12.2009 18:39

похоже на microsoft-вариант подключения пронстранства имен, причем в вебе он присутствует из-за копипаста из Word... думаю так

B~Vladi 27.12.2009 19:35

Цитата:

Сообщение от x-yuri
причем в вебе он присутствует из-за копипаста из Word... думаю так

Ещё этим способом подключают vml. Я никак не могу найти основные значения аттрибута ns.

Octane 27.12.2009 21:01

Цитата:

Сообщение от B~Vladi
Я никак не могу найти основные значения аттрибута ns.

Ссылки же всякие, типа http://www.w3.org/1999/xhtml, для своих префиксов можно что угодно написать, обычно адрес сайта указывают.

x-yuri 27.12.2009 21:16

Octane, там как-то по-другому, например
<?xml:namespace prefix = "o" ns = "urn:schemas-microsoft-com:office:office" />

вообще какая-то бредовая штука. С одной стороны вроде processing instruction, но заканчивается на />

B~Vladi 27.12.2009 21:31

Цитата:

Сообщение от Octane
Ссылки же всякие, типа http://www.w3.org/1999/xhtml

При указании такой ссылки, ишак падает с ошибкой, что-то вроде "Неверная ссылка".
Цитата:

Сообщение от x-yuri
вообще какая-то бредовая штука

Как и сам ишак. Раз есть urn:schemas-microsoft-com:vml и urn:schemas-microsoft-com:office:office, то должно быть что-то вроде xml или html, но на официальных ресурсах я вообще ничего не смог найти.

Ещё есть такая конструкция:
document.namespaces.add('vml', 'urn:schemas-microsoft-com:vml');

и работает она только в ИЕ. Мне бы найти их идентификаторы пространств имен...

x-yuri, в моих мануалах <?xml:namespace /> указывается без вопросительного знака.

B~Vladi 27.12.2009 21:38

Только что нашел:
urn:schemas-microsoft-com:xml-data

Нужно попробовать с этим.

x-yuri 27.12.2009 22:30

это что-то не то, вот referecnce по этому namespace. Там же другие namespace'ы

B~Vladi 27.12.2009 22:38

Цитата:

Сообщение от x-yuri
вот referecnce по этому namespace

Да, я это видел:
Цитата:

Сообщение от B~Vladi
Только что нашел:
urn:schemas-microsoft-com:xml-data

В любом случае из xml получается html. Может тогда кто-нибудь знает, как динамически создать документ html? document.implementation.createDocument в ишаке нет, ActiveXObject('MSXML.DOMDocument') создаёт xml документ, который "не соответствует типу html". :(

Либо придётся мне остановиться на обходном пути: нода html -> строка -> нода xml.

B~Vladi 27.12.2009 22:53

Ещё есть такой момент:
innerHTML и outerHTML возвращают код ноды, но если есть аттрибут id - кавычки для его значения отсутствуют. С другими атрибутами всё ок. С чем это может быть связано?!

tenshi 28.12.2009 13:44

использовать чистый xml слишком не практично.
самым оптимальным мне видится такой вариант: http://smileg.akmedia.ru/?article:kill.html
либо в сорцах можно глянуть вариант с xslt

B~Vladi 28.12.2009 15:21

Цитата:

Сообщение от tenshi
использовать чистый xml слишком не практично.

Чем же? Кроссбраузерность достигается фреймворком, как и в xhtml... Никаких ненужных аттрибутов добавлять не надо, как в xhtml...

tenshi 28.12.2009 17:50

всем. как ты собираешься делать ссылки, формы ввода, анимацию, вставлять картинки и видео?

B~Vladi 28.12.2009 18:12

Цитата:

Сообщение от tenshi
как ты собираешься делать ссылки, формы ввода, анимацию, вставлять картинки и видео?

HTML:
xmlns:html="http://www.w3.org/1999/xhtml"
SVG:
xmlns:svg="http://www.w3.org/2000/svg"

Я хочу переложить весь геморой на фреймворк. Сказал: "Хочу картинку" - пожалуйста.

tenshi 28.12.2009 18:36

замечательно, только вот ни html, ни svg ничего общего с исходными данными не имеют.

B~Vladi 28.12.2009 18:41

Цитата:

Сообщение от tenshi
замечательно, только вот ни html, ни svg ничего общего с исходными данными не имеют.

И что дальше? Ты аббревиатуру XML переводил? Там ключевое слово - "расширяемый". Вот и расширяю потихоньку, а ты можешь дальше писать на html.

Я ещё не делал никаких выводов, а когда сделаю, там и посмотрим, что окажется практичнее, ок?

tenshi 28.12.2009 18:51

а, ну набивай шишки, я подожду х))

B~Vladi 28.12.2009 20:34

Цитата:

Сообщение от tenshi
использовать чистый xml слишком не практично.

Цитата:

Сообщение от tenshi
а, ну набивай шишки, я подожду х))

Может поделишься знаниями, раз ты такой умный?!

tenshi 29.12.2009 13:40

я же давал ссылку на статью..

B~Vladi 29.12.2009 14:45

Цитата:

Сообщение от tenshi
я же давал ссылку на статью..

Там только то, что касается xhtml и то в ишаке всё равно html получается. Да, это тоже вариант, но для другого...

Кста, в ишаке есть innerHTML/outerHTML для данных xml, а в других браузерах это и не нужно.
Какие-либо комментарии откладываются до первого прототипа фреймворка. Тогда я расскажу более глобально про свою задумку:)


Часовой пояс GMT +3, время: 22:13.