xml - нужно пару разьяснений

Сенсей

Новичок
xml - нужно пару разьяснений

Вобщем начал изучать xml
в голове еще каша от всех этих технологий.. но вроде врубился...

Пришло время к парктике... решил применить xml на сайте...

На сайте 4000 хостов в день, и в среднем 150,000 просмотров страниц

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

На сайте есть вборка 10 фоток по рейтинку... соединение трех таблиц.. вычисление рейтинга и вывод....

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

Чтоб уменьшить нагрузку на серер я сделал так - когда юзер изменяет данные... идет выборка с базы этих фоток по рейтингу... сразу генерирую вывод этих фотографий.. только не вывожу их - а пишу в файл...

А на сайте уже инклудится простой html файл...
Но мне не нравится такой подход ибо я в файл пишу все сразу - html + данные.... то есть в нем находится сразу дизайн... получается пихуаю все в кучу...

Захочется изменить дизайн - надо будет лезть в функцию записи файла и там ковыряться...

Была идея записывать в файл только данные - а потом скриптом парсить файл и уже вставлять в дизайн...

Но это нужно придумывать либо разделители... и потом эхплодом разделять на состовляющие... либо записывать как то массиывами... и потом проходится по массивам.. вставлять переменные в дизайн и потом выводить...

но все это мне кажется некрасивым....

Я решил сделать так.... генерю xml файл.. структура документа такая:

Код:
<?xml version="1.0" encoding="UTF-8"?>
<last_photos>
	<photo>
		<photo_id>1</photo_id>
		<photo_description>Описсание фотографии номер 1</photo_description>
		<photo_file>375_1117031960.jpg</photo_file>
	</photo>
	<photo>
		<photo_id>2</photo_id>
		<photo_description>Описсание фотографии номер 2</photo_description>
		<photo_file>153_1116934986.jpg</photo_file>
	</photo>
</last_photos>
теперь вопросы:

1 - правильное ли в принципе мое хотение использования xml как формат хранения данных в данном случае? Мне нравится что все хранится правильно и красиво...
2 - в элементе <photo_description> можеть НЕ быть данных. Что использовать мне для парсинга такого xml файла? SAX или DOM?
Я сделал щас на SAX, но как я понял.... SAX пропускает тот момент когда он видит что нет данных в каком либо элементе..
поэтому и возникает этот вопрос...

Пока все... звиняйте что много написал.. старался все подробно обьяснить... :(
 

Кром

Новичок
>правильное ли в принципе мое хотение использования xml как формат хранения данных в данном случае? Мне нравится что все хранится правильно и красиво...

Нет, не правильное. Тебя перекосило в другую сторону. Все что тебе нужно, это при выборке 10 файлов сохранить эти файлы и кусок html, который показывает эти файлы, в нужном месте. А потом подключать его у себя на странице.
 

Сенсей

Новичок
Так я и делаю...

:(

Где ж тогда применить xml?
Даже попрактиковаться не начем... везде можно обойтись без него.. а хочется скажем так вкусить прелесть этого языка о которой все так говорят...
 

alexhemp

Новичок
В xml не надо ничего хранить - хранить нужно в базе данных.

XML - это формат в первую очередь для обмена данными.

При использовании в Web-приложениях оправдан в случаях:

1. Обмен данными с Web-сервисами (своими или чужими - смотри SOAP, XMLRPC и т.п.)
2. Использование в качестве исходных данных для XSLT преобразования в HTML (XSLT шаблоны)

Исходя из твоей задачи я бы сказал что ты пытаешься организовать кэширование.
Не надо ничего писать, подумай о том, что у тебя кэшируется
Типичная схема такая

1. Запрос к БД -> массив данных
2. Массив данных -> шаблонизатор -> HTML страница.

Ты хочешь сделать промежуточный вариант

1. Запрос к БД -> массив данных
2. Массив данных -> XML
3. Преобразование XML -> HTML страница

Ничего не замечаешь? По сути ты подменяешь "шаблонизатор" на связку XML + трансформация XML в HTML, а самый лучший способ сделать это - XSLT

Но я бы не торопился его применять, потому что нагрузка на трансформацию окажется не меньше чем "лишний" SQL запрос.

Лучше всего начать постепенно, кэшируя "узкие места".

Например - периодически, по крону вычислять рейтинг и делать другие "сложные" запросы, записывая результат в отдельные таблицы, выводить на сайте простой выборкой.

Каждый медленный запрос нужно рассмотреть внимательно, создать недостающие индексы и т.п.

Если сайт такой большой, а информация на нем меняется медленно, то думать над созданием кэша готовых HTML документов, в этом случае стоит изучить как сделано кэширование в Smarty.

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

-~{}~ 07.03.06 19:40:

Сенсей

Писал ответ развернутый, не видел ответов.

Вкусить можно используя XSLT для преобразования XML->HTML

Только кэшировать надо не исходные данные а результат.
 

Сенсей

Новичок
alexhemp
понял тебя...
меня тоже клонило в сторону xslt, но я пока не врубился... как я понял работать с xslt можно при помощи php, а можно так же посредством самого браузера... то есть использовать файл *.xsl где описаны правила представления xml

Но не уверен что я правильно врубился.. то есть если обработку делает браузер - тогда по идее не все браузеры будут это понимать.. + как я понял это связано с ActiveX

p/s
Про кеширование ты правильно сказал.. я именно так щас и делаю... просто мое хотение такое - хранить в одном файле данные а в другом (как я понимаю для это подходит xslt) хранить правила вывода этих данных... можно даже сказать дизайна....

Не исключаю так же того что несу бред :)
 

alexhemp

Новичок
А зачем браузер должен обрабатывать?

XSLT преобразование делай на сервере. Получатся чистые XSLT шаблоны, XML-я там будет - залейся, все проклянешь ;-)

Ты хочешь отделить данные от представления, это нормально.

И в качестве универсального формата передачи данных между слоями данных и представления XML подходит хорошо. Но в силу универсальности это громоздкое и медленное решение.

Если хочется сделать быстро и хорошо - погляди сперва на Smarty все-же. Там все сделано по уму, и быстро и функционально.
 

moxnatiy

Новичок
alexhemp
спорить не буду, говорю заранее.
но откуда такая привязаность к смарти?
чем не устраивает сам пехепе как шаблонизатор?
 

alekciy

Новичок
alexhemp
Такой вопрос. Если сайт не большой и XML файл связанный с ним тоже не очень большой, то видь можно БД и в XML хранить. Хранят ведь БД форума/фото_галереии в тектовых файлах. А XML тот же текстовик, только работать с ним удобнее и приятнее. Да и XSLT шаблон всегда прикрутить можно, в отличае от текстовика.
 

Spear

почемучка
Люди, а ге можно почитать на доходчивом языке как вообще правильно генерировать XML файлы с данными и как их потом обрабатывать в хтмл?
дело в том что на мне сейчас информционный портал - куча блоков с последними новостями, новыми статьями и так далее. + появилась возможность разрешать юзерам выбирать тему оформления.
А т.к. до этого я кешировал на стороне сервера готовый html код информационных блоков то теперь это не прокатит т.к. для каждого темплейта эти блоки могут выгялдеть по-разному
 

Кром

Новичок
>Где ж тогда применить xml?
Ну уж точно не в кешировании.

Сенсей
Ты на всякий случай определись точно, что тебе надо. Или решить практическую задачу или XML изучать.
 

Сенсей

Новичок
Кром
Я хочу найти практическую задачу... что бы попрактиковаться в XML

Я не хочу сам для себя создавать бессмысленные задачи типа - есть каталог книг в xml, нужно вывести эти книги в таблице html и т.д

Теорию я более менее знаю... как состовлять xml, правила синтаксиса и т.д..

Мне бы очень помог совет где в cms удобно применять xml, xslt

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

Фанат

oncle terrible
Команда форума
Я бы попросил без оскорблений.
про лень и всем дают.

Не нравится - тебя здесь никто не держит, и выслушивать "ленивые" ответы не заставляет.

Либо извинись, либо покинь данное место, к которому ты не проявляешь уважения.
 

Фанат

oncle terrible
Команда форума
Мне надоело хамство на этом форуме.
И я буду его искоренять.
Если человек не может решить пример уровня дважды два, и ты ему об этом сообщишь - хай поднимется на весь лес, "ах, меня окорбили до глубины души!".

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

Не будет такого.
Оффтопик, кстати, разводить тоже не дам.
попрошу впредь помолчать.
если что не нравится - писать приватом.
 

Mich

Продвинутый новичёк
Фанат, вот только фиглярничать не надо. Если ты будешь так поступать, то никого выгонять и никому затыкать рот не надо будет, все произойдет само собой.

То, что сказал Сенсей даже на предупреждение не тянет.
 

Фанат

oncle terrible
Команда форума
Будешь здесь модератором - будешь решать, что на что тянет.
А сейчас будь добр помолчать.
 

alexhemp

Новичок
Сенсей

Ты не понимаешь смысла, зачем нужен XML. Он нужен для УНИФИКАЦИИ формата ОБМЕНА данными с РАЗНОРОДНЫМИ источниками-адресатами.

А если у тебя нет обмена - то он тебе не нужен.

Например XSLT конечно интересная технология по трансформации произвольного XML но простой и быстрой ее точно не назвать.

Изучать XML можно к примеру написав Web-сервис.

-~{}~ 08.03.06 15:54:

moxnatiy

Давайте споры о шаблонизаторах вынесем в отдельный топик.

Smarty в моем понимании никакой не шаблонизатор, шаблоны - только одна, пусть и базовая возможность.

Мне удобнее писать логику на C-подобном PHP а шаблоны на SMARTY.

А сенсея я призывал посмотреть как делается КЭШИРОВАНИЯ результата с использованием смарти, если использовать XSLT трансформации разницы в КЭШИРОВАНИИ не будет никакой.

И вместо изобретения велосипеда - проще посмотреть как делают грамотно.
 

chameleon

Новичок
2Сенсей
Чтоб уменьшить нагрузку на серер я сделал так - когда юзер изменяет данные... идет выборка с базы этих фоток по рейтингу... сразу генерирую вывод этих фотографий.. только не вывожу их - а пишу в файл...
если уж очень хочешь использовать xml, то кэшировать нужно все равно конечный результат (HTML).
т.е. когда юзер изменяет данные... идет выборка с базы этих фоток по рейтингу... в памяти составляется XML-документ (тот который ты придумал: понятный и красивый, только вот кто на него будет любоваться и понимать в кэше - непонятно) и тут же делаешь XSL-трансформацию из указанного шаблона и вывод пишешь в файл. Нужно поправить внешний вид - правишь XSLT, сам модуль не трогаешь.
И еще по формату файла, чем обусловлена такая структура?
PHP:
<photo>
		<photo_id>1</photo_id>
		<photo_description>Описание фотографии номер 1</photo_description>
		<photo_file>375_1117031960.jpg</photo_file>
	</photo>
а не:
PHP:
<img id="1" src="375_1117031960.jpg" alt="Описание фотографии номер 1"/>
первое в твоем понимании наверное больше похоже на настоящий махровый XML? ;)..
P.S. мне кажется тебе нужно попробовать сделать задуманное, любой результат окажется полезным :)..
2alexhemp
Изучать XML можно к примеру написав Web-сервис.
Имхо не очень удачный вариант, т.к. написать веб-сервис в php это создать класс, сгенерировать в ZSС5 WSDL и copy/paste пример привязки из мурзилки. И где тут изучение XML?
 

Сенсей

Новичок
chameleon
[q]<photo>
<photo_id>1</photo_id>
<photo_description>Описание фотографии номер 1</photo_description>
<photo_file>375_1117031960.jpg</photo_file>
</photo>

а не:

<img id="1" src="375_1117031960.jpg" alt="Описание фотографии номер 1"/>[/q]


Потому что кроме img тега там еще теги дизайна вывода этих фотографий... получается что в файле лежит готовый html - что мы и называем кешированием

Идея моя вобще то проста.... когда мы работает с мускулом - мы четко знаем где данные - мы их достаем... обрабатываем и выводим...

Теперь я хочу скажем сделать небольшую базу на файлах...
Вот здесь то мне и не нравится что моя база на файлах - это файлы в которых хранится готовый результат обработки и вывода данных...

Хочется такое же разделение как и при работе с мускулом - то есть чтоб в файле были исключительно данные....

просто xml мне понравился как сам формат хранения данных...

там то и база будет аксимум 2kb (это даже базой назвать не льзя =))

Поэтому то и полез на форум за советом...

Но как я понял из ответов - xml придумали не для этого...

Всем спасибо за обьяснения :)
 

Spear

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