Tabela Content, zawierająca pola
id [ int(11) ]
xml [ text ]
Oprócz tego jest kilka dodatkowych pól umożliwiających tworzenie drzewa itp, ale na razie jest to nie ważne.
I teraz przykładowa treść xml dla folderu wygląda tak:
<?xml version="1.0"?> <document type="folder"> <title>Folder główny</title> <description>W tym folderze znajdują się wszystkie podelementy systemu.</description> </document>
Dla artykułu tak:
<?xml version="1.0"?> <document type="article"> <author>Mateusz 'matid' Drożdżyński</author> <timestamp>1113296158</timestamp> <title>Nowy lider projektu Debian</title> <description>Swoją kadencję jako lider projektu kończy właśnie Martin Michlmayr, a jego miejsce 17 kwietnia zajmie Branden Robinson wybrany w zakończonym wczoraj głosowaniu. Słów kilka o głosowaniu oraz nowowybranym liderze...</description> <content>Procedura głosowania w projekcie Debian różni się dość znacznie od tego do czego przyzwyczajeni jesteśmy choćby w wyborach prezydenckich. Głosy można oddawać na każdego kandydata podając dodatkowo wagę głosu. Tym sposobem każdy oprócz faworyzowania swojego kandydata nr 1, ma również wpływ na miejsca zajmowane przez resztę. Nic nie stoi na przeszkodzie by każdemu kandydatowi przyznać głos o największej wadze, ale nie będę się tutaj rozpisywał nad sensownością takiego postępowania ;) Jak już wspomniałem wybory wygrał Branden Robinson, którego sylwetkę chciałbym w skrócie opisać. Branden jest deweloperem Debiana od roku 1998. Dotychczas głównie zajmował się opieką nad pakietami XFree86, a od 2001 roku zasiada w zarządzie Software in the Public Interest, Inc. Od 5 lat pracuje w firmie Progeny. W wyborach na lidera projektu startował nieprzerwanie od 2001 roku, jednak dopiero w tym roku odniósł sukces. O zamiarach Brandena jako lidera projektu można przeczytać w jego programie wyborczym. Dostępne jest również szczegółowe sprawozdanie z wyborów. Pozostaje tylko życzyć nowemu liderowi sukcesów i doczekania się nowego stabilnego wydania za jego kadencji ;)</content> </document>
A teraz pytania.
1. Czy to będzie wydajne? IMO średnio. Każde przeglądanie wymaga parsowania pliku XML, nie mówiąc już o wyświetleniu drzewa z tytułami (potrzeba pobrać wszystkie dzieci, wszystkim przeparsować XML i wyświetlić). Z wyszukiwaniem też będzie problem. Tak samo jak z wyświetlaniem np. wszystkich artykułów z danego folderu.
Dobrym rozwiązaniem wydaje się dopisanie do tego dobrego systemu cache i jakiejś wyszukiwarki z crowlerem zapisującym słowa kluczowe. Jeśli ktoś ma jakiś pomysł na dobre wyszukiwanie i cache to proszę się podzielić

2. Jak rozwiązać wyświatlanie. Na chwilę obecną jest to obsługiwane przez zwykły parser XML, który zamienia mi ten dokument na tablicę, która najstępnie jest przekazywana do renderera (np. Smarty, itp.)
Zastanawiałem się także nad XSLT, ale nie bardzo wiem jak w PHP4 się do tego zabrać.
Teraz jest jeszcze kolejny problem, czyli templaty lokalne. Co jeśli chcę wyświetlać w jednym folderze artykuły w inny sposób niż w drugim? Obecnie rozwiązuje to za pomocą sekcji. Tworzę sobie powiedzmy sekcję na folderze głównym, skrypt przy wyświetlaniu elementu sprawdza najbadziej szczegółową (czyli jak mam Root->News->News_1 to najpierw sprawdza News, potem Root) w poszukiwaniu odpowiedniego szablonu. Wydaje się to dość dobrym rozwiązaniem, co o tym sądzicie?
Z góry dzięki za pomoc.