|
|
Bu makalenin farkl� dillerde bulundu�u adresler: English Castellano Deutsch Francais Italiano Nederlands Portugues Russian Turkce |
Egon Willighagen <egonw/at/linuxfocus.org> Yazar hakk�nda: Y�ksek lisans diplomas�n� bu sene alacak ve kemometrikler �zerine Phd 'ye ba�layacak.
Basketboldan �ok ho�lan�r t�pk� Linuxfocus ve genel olarak Linux'dan ho�land��� gibi.
|
LinuxFocus.org'yi olu�turmak i�in XML ve XSLT kullanmak (/Hollanda)�zet:
Bu yaz� Temmuz'da Bordo'da yap�lan Libre Software Meeting'de verilen bir sunumu i�eriyor.
Linuxfocus.org'un (/Hollanda) XML veritaban� ile otomatik olarak olu�turulmas�n� a��kl�yor.
|
Sistemde LinuxFocus projesinde olduk�a y�kl� kaynak dosyalar� ve �eviri �al��malar�ndan olu�an, aras�nda resdb.txt, issuedb.txt and maindb.txt dosyalar�n�n da oldu�u pek �ok ASCII dosyas� bulunuyor. Dosyan�n bi�imi sabit ve bu genel olarak sanaldoku y�relerinde kullan�lan t�rden. Bununla birlikte, do�al olarak yaz�lar�n �zerindeki t�m bilgilerin izlenmesi, farkl� verilerin ay�r�m� epeyce zordur.
Yeni veritaban�na ba�lad���mda sanaldoku y�resinin otomatik de�i�imi LinuxFocus projesinde �ok kullan�lmad�. Hollanda tak�m�n�n bir edit�r� olarak , sanaldoku y�resinde i�eriklerin otomatik olarak yap�lmas� konusunda �ok hevesliydim. �e�itli HTML dosyalar�n� d�zenlemek her yeni yaz�da �ok fazla zaman al�yordu ve pek �ok k�r�k ba�lant� bulunuyordu. Bu nedenle bilgilerin kolayl�kla eklenebilece�i ve sanaldoku y�resi i�in i�erik sayfalar�n� otomatik olarak olu�turabilece�im yeni bir sistem istedim. Bu konuda �al��maya 2000 yaz�nda ba�lad�m.
XML se�imi biraz keyfi oldu.�nerilen ger�ek bir veritaban� olu�turmakt�, ancak benim XML konusunda deneyimim vard� ve metin tabanl� bir sistem tercih ediliyordu. Bu daha sonra kullan��l� yeni proje say�lar�na d�necekti, ��nk� veritaban� bir �e�it ID kullanabiliyordu. T�m yeniden say�land�rma i�lemini Guido Socher �ok b�y�k bir emek harcayarak tamamlad� (te�ekk�rlerimle).
Document Type Definition (DTD) zaten geli�tiriliyordu ve epeyce i�erik veritaban�nda test a�amas�ndayd�. Yeni d�zenli numaralama ard�ndan veri taban� i�erikleri dolduruldu. 20 yaz� eklendikten sonra, bu tekrar b�y�yen proje d�zg�n oldu. Eski dosyalar i�in betik yaz�lmas� olanakl�yd� ancak t�m bilgiler i�in de�il, yeni veritaban� buna uygun olabilmeliydi ce a��kland��� gibi bilgiler eski dosyalar�n �zerine da��t�lmaya uygundu. Neyse ki, Floris Lambrechts ��z�m� buldu ve i�eri�in �o�unu veritaban�na ekledi�i i�in ona ne kadar te�ekk�r etsem azd�. Bu yard�m olmaks�z�n bu sistem bu g�n olmazd�.
Yeni bi�imle ilerlemek yeni bilgiler i�in de bir tak�m olanaklar getirdi. Ve ge�mi� bir ka� y�l�n �zerine yeni tipte veriler veritaban�na eklenmi� oldu. Yazarlar�n, �evirmenlerin, edit�rlerin ve LF ile ilgili di�er insanlar�n �al��t��� �nceki veriler ve dosya konumlar�. Sonraki d�zenlemeler nedeniyle LF'nin ba�lang�c�ndan bu yana �e�itli dosya isimleri tasarland�. Yeniden numaraland�rma an�nda bu iki tasar�ma indi. Baz� dosyalar sunucu �zerindeydi ve .shtml uzant�s�na sahipti , eski dosyalar .html uzant�s� kullan�yordu. <file> tag� baz� gbvenimsenmi� de�erler �zerine kullan�labildi. (Varolan benimsenmi� kullan�m bi�imi : "makale" + makale numaras� " + ".shtml". Se�imlik olarak bu dosya henuz sonu� dosyas�na d�n��memi� makaleler i�in ".meta" sozc���n� de i�eriyordu.).
Art�k veritaban� en alt d�zeydeki karma��kl��a eri�ti.Son olarak s�ray� yazd���m ba�ar�m �l��m yaz�l�m�na getirmi�tim. . XSLT bi�imtabakalar� (stylesheets) zaten kullan�lan ilk olmayan uyarlamayd�. currently used were not the first implementation. Perl tabanl� koddan �nce geliyordu, ancak veritaban�n�n b�y�mesiyle , ba�ar�m �nem kazand� ve ilk prototip basitti ve yeterli de�ildi. Fakat ara�lar� a��klamaya ge�meden �nce, ilk olarak veritaban� bi�imini a��klayaca��m.
XML,ilk olarak markup dilleri i�in �zel bir s�zdizim bi�imidir. XML markup'�n nas�l g�r�nmesi gerekti�ini tan�mlar. Ard���k karakter dizgilerinin s�zdizim a��klamalar� XML dok�man�nda "iyi bi�im" sa�lar. Bu dok�man�n bir k�k eleman� oldu�unu ve ba�lang�� tag�n� i�erdi�ini,i�erik (metin,toy elementleri,ya da her ikisini ) ve tag�n sonunu bildirir. Bu taglar bir "<" karakter i�erir, bir isim ve ismin sonunda bir ">" karakter takip eder. Son tag yaln�zca ismin �n�nde bir "/" i�ermek zorundad�r. Bo� taglar, HTML'nin <br>, isimden sonra bir "/" al�r. Ba�lang�� tag� nitelikler i�erebilir, ve �stelik �zel s�zdizimi i�erebilir. XML taglar� bunlar gibi g�r�n�r:
<greeting>Hello, world!</greeting>ya da bo� tag i�in
<br/>
S�sdiziminin yan�nda, anlambilimler de i�erir. Bu belirli elementlerin herbiriyle nas�l ili�ki kurdu�unu a��klar. HTML'in anlambilimleri <body> tag�n�n <html> elementinde i�erilmesi gerekti�ini ve ba�ka bir yol olmad���n� a��klar. Anlambilimler ayn� zamanda <img> elementinin bo�, bir <br> elementi gibi oldu�unu a��klar. E�er bu anlambilimler bi�imsel bir notasyon veriyorsa programla yerle�imlenebilir ve bunlar� kullanan dok�man onaylard�. Bu bi�imsel notasyonlardan biri Dok�man Tipi Tan�mlamas� (Document type Definition) olarak adland�r�l�r ya da k�saca DTT (DTD)olarak. E�er dok�man i�lem onay�n� ge�erse bu ge�erli (valid) dok�man olarak adlan�r. XML ile dikkatli olmal�s�n�z ��nk� onaylama �ok kat�d�r.
�imdi DTD'nin ne oldu�unu biliyoruz, haydi LinuxFocus XML Veritaban� DTD'ye bakal�m. �zelliklerin �o�u i�in �rnek verece�iz. Bu �rneklere bakarken LF'nin XML veritaban�n�n bilgiyi nas�l i�erdi�ini g�receksiniz.
LF XML veritaban�nda k�k element ya da bu tan�mlamalar�n ya da yerle�imlerin birisi <veritaban�> elementidir.
<!ELEMENT database (themes?, persons?, issues?, articles?)>
�lk olarak, "?" elementinin toy element oldu�una dikkat edin , bu bo� a da bir kez olu�abilir. B�ylece, veritaban� LF'nin temalar�na, ki�ilere, say� ve yaz�lar�na ili�kin bilgileri i�erebilir. Bu �ok daha a��k duruma geldikten sonra beri �ok daha ilgin� �rneklere ilerleyece�im.
Temalar <themes> elementi olarak yer alan, <veritaban�n> toy elementidir. Her tema bir tek ID'ye, �nvana, ve se�imsel olarak �zete ve resime sahiptir.
<!ELEMENT themes (theme+)> <!ELEMENT theme (title*, desc?, img?)> <!ELEMENT title (#PCDATA)> <!ELEMENT desc (#PCDATA)> <!ELEMENT img (EMPTY)>
Bu elementlerin baz�lar� nitelik i�ermelidir. Bunlar DTD i�inde de verilir. Herhangi bir metin i�erik xml:lang niteli�iyle bulunur. Bu niteli�in de�eri �lke kodlar�na g�re uyumlu bir ISO 3166 standard al�r. �rne�in "en", "fr" ve "nl". Her iki id ve xml:lang niteli�i do�al XML i�inde �zelle�tirilmi�tir ve XML s�zdiziminin bir par�as�d�r.
<!ATTLIST theme id ID #REQUIRED> <!ATTLIST title xml:lang NMTOKEN #REQUIRED> <!ATTLIST desc xml:lang NMTOKEN #REQUIRED> <!ATTLIST img src CDATA #REQUIRED>
�rnek bir veritaban� bunun gibi g�r�n�r:
<database> <themes> <theme id="hw"> <title xml:lang="en">Hardware</title> <img src="Hardware.jpg"/> <theme> <themes> </database>
Say�lar <issues> elementindedir. Her say� temas� gibi belirli bir ID'ye sahiptir.
<!ELEMENT issues (issue+)> <!ELEMENT issue (title+, published?, file*)> <!ELEMENT title (#PCDATA)> <!ELEMENT published (EMPTY)> <!ELEMENT file (#PCDATA)>
<published> elemnti yay�nlanm�� say�lar� g�sterir. Sonraki say� ve SomeLanguage2Eng say�lar� bu elemente sahip de�ildir. <title> elementi yine @xml:lang niteli�ine sahiptir. <file> elementi say�n�n yer ald��� dizini belitir. Bu index.html'ye i�aret etmemelidir, ��nk� belirli dosya konumlar� g�sterir.
�rne�in (@code niteli�inin s�ralama i�in kullan�ld���na dikkat edin):
<issue id="ToBeWritten" code="999996"> <title xml:lang="en">Not yet written articles</title> </issue> <issue id="September2001" code="200109"> <title xml:lang="en">September2001</title> </issue>
Yazar ve �evirmenler hakk�ndaki bilgiler <person> elementinde yer al�r. Her ki�i belirli bir ID'ye sahip olmak zorundad�r.
<!ELEMENT persons (person+)> <!ELEMENT person ((name|email)*,(homepage|nickname|desc|team)*)> <!ELEMENT email (#PCDATA)> <!ELEMENT name (#PCDATA)> <!ELEMENT homepage (#PCDATA)> <!ELEMENT nickname (#PCDATA)> <!ELEMENT desc (#PCDATA|%html-els;)*> <!ELEMENT team EMPTY>
Her ki�i a�a��daki bilgilere sahip olabilir : adres (ya da daha fazlas�), evsayfas� ya da sayfalar� ve takma adlar�. E�er ki�i ayn� zamanda LF �eviri tak�m�n�n bir par�as� ise If the person is also <team> elementi eklenir. �rnek olarak, Floris Hollanda tak�m�n�n bir �yesi, takip eden sat�r <person> elementine eklenir: <team xml:lang="nl"/>. Sonu� olarak her ki�i bir tan�mlamaya sahiptir ve baz� fazladan sanaldoku y�resi ba�lant�lar� i�erebilir.
�rne�in:
<person id="nl-ew"> <name>Egon Willighagen</name> <email>egonw@linuxfocus.org</email> <team xml:lang="nl"/> </person>
Makaleler elbette veritaban�n�n en ilgin� par�as�d�r.
<!ELEMENT articles (article+)> <!ELEMENT article (title+, (file|personref|abstract|issueref|themeref| nometa|nohtml|translation|proofread)*)> <!ELEMENT abstract (#PCDATA)> <!ELEMENT nohtml EMPTY> <!ELEMENT nometa EMPTY> <!ELEMENT translation (personref*, (reserved|finished|proofread)*)> <!ELEMENT reserved (#PCDATA)> <!ELEMENT finished (#PCDATA)> <!ELEMENT proofread (personref*, (reserved|finished)*)> <!ATTLIST article id ID #REQUIRED xml:lang NMTOKEN #IMPLIED type (article|coverpage) "article" next IDREF #IMPLIED prev IDREF #IMPLIED> <!ATTLIST file xml:lang NMTOKEN #REQUIRED type (target|meta) "target"> <!ATTLIST translation from NMTOKEN #REQUIRED to NMTOKEN #REQUIRED>
Her makale her dil i�in en az bir ba�l��a sahip olmal�d�r. <file> elementi makalenin dosya konumunu kullanabilir, META ve HTML bi�iminin her ikisi i�in (a�a��daki �rne�e bak�n) META ya da HTML s�r�m�n�n sa�lanmad��� durumda, se�imli <nohtml/> ve <nometa/> elementi kullan�labilir. Her makale bir �zete sahiptir.�zet, veritaban�nda i�erik sanaldoku y�relerinde kullan�l�r.
The <article> elementi be� niteli�e sahiptir:@ID gereklidir, se�imlik nitelik xml:lang dili ve asl�n�n kimin taraf�ndan yaz�ld���n� g�sterir, @type niteli�i kapak sayfalar� i�in kullan�l�r. Sonu� olarak di�er 2 se�imlik nitelik, @next ve @prev, birbirine ba�l� seri makalelerde kullan�rlar.
Makale say�ya ve temaya <issueref> ve <themeref> elementleriyle eklenir, her ikisi de @href niteli�ine sahiptir.Bu nitelik i�in de�er belirli bir ID olmal�d�r. Bu ID ba�l� olunan say�n�n ya da teman�nd�r.
�rnek olarak:
<article id="article206" xml:lang="en"> <title xml:lang="en">Using XML and XSLT to build LinuxFocus.org(/Nederlands)</title> <personref href="nl-ew"/> <issueref href="ToBeWritten"/> <themeref href="appl"/> <abstract xml:lang="en"> This article shows you how parts of the Dutch web site of LinuxFocus is generated with XSLT tools from the XML database. It compares this with the (very) much slower DOM tools in Perl. </abstract> </article>
Yerelle�tirilmi� <article> elementi a�a��daki gibi g�r�n�r:
<article id="52"> <title xml:lang="nl">Enlightenment</title> <file xml:lang="nl">Nederlands/July1998/article52.html</file> <translation from="en" to="nl"> <personref href="nl-tu"/> <reserved>2000-09-06</reserved> <finished>2000-10-04</finished> <proofread> <personref href="nl-fl"/> <reserved>2000-10-04</reserved> <finished>2000-10-04</finished> </proofread> </translation> <abstract xml:lang="nl"> Enlightenment is een Linux window-manager met uitgebreide mogelijkheden. Dit artikel bespreekt ze, samen met de installatie en de instelling van E. Dit alles is niet voor beginners daar E op het moment nog in beta-stadium verkeert. </abstract> </article>
Bu �evirinin mutlak verilerde �eviri i�in ayr�ld���na dikkat edin, yap�lm�� ancak inceleniyor. T�m k�s�mlarda kimin �al��t���n� <personref> ba�lant� elementi belirler.
T�m elementler i�in en iyi �rnek veritaban�n�n kendisidir:
Bu yeni bi�ime ba�lamam�z�n nedenlerinden birisi de sanaldoku sayfalar�n� otomatik olarak olu�turmakt�.�imdi (?) veritaban� bi�imini anlad�k ve haydi sanaldoku sayfalar� nas�l olu�turuluyor ona bakal�m.
�lk olarak biraz hikaye.�lk uyarlamada veritaban� aray�z� i�in Perl mod�lleri kullan�ld�. Aray�z �ok a��k olsa bile uyarlama �ok yava�d�.Bilgi XML i�inde Document Object Model (DOM) denilen bir depoda tutuluyordu. Uyarlamalar�n �o�u DOM i�indi ancak olduk�a yava�d� hatta bir ba�ka yol olan XML'in Simple Application aray�z� (SAX)'dan bile daha yava�d�.
Ancak e�er i�lem sanaldoku sayfas� olu�turmaksa bunu i�in �� iyi yol g�r�n�yordu: XSLT.Bu XML tabanl� bir ge�i� dilidir. Pek �ok XSLT i�lemcesi zaten var ve programlama dillerinin �o�unu destekliyor. Bir s�re �nce bir LF yaz�s� XML::XSLT, bir Perl XSLT uyarlamas� anlat�l�yordu. Bu yaz�n�n yay�nlanmas�ndan sonra uyralamalr�n �o�u ortaya ��kt�, ve burada bir ka� �nerim bulunuyor :
�rnek olarak Sablotron'nun kullan�laca�� yaz�da hat�rlat�l�yor.XSLT i�lemcisi giri� i�in 2 dosya al�r. Birisi d�n��ecek olan XML kayna��. Di�eri d�n���mde tan�mlanan XSLT bi�imtabakalar�. LF'nin sanaldoku sayfalar�n� olu�turan XSLT bi�imtabakalar� a�a��daki gibidir :
mainindex.html'yi olu�turmak i�in , �rne�in Hollanda tak�m� �unu ko�turur:
sabcmd stylesheets/mainindex.xslt db/lfdb.nl.xml > ../mainindex.html
Bi�imtabakalar� �imdi �ngilizce k�k veritaban� ve yaln�zca yerel veritaban� XML giri�lerine gereksnimi duyuyor.
sabcmd stylesheets/theme.xslt db/lfdb.nl.xml '$theme=appl' > ../Themes/appl.html
Hollanda index.html sayfas� zaten veritaban� taraf�ndan olu�turuldu, ,ancak kullan�m biraz daha kar���k.index.html Guido Socher'in lfpagecomposer'� ve baz� giri� dosyalar�ndan olu�ur. Ve bu dosyalar *.pre dosyalar� ile olu�turulur. Bu dosyalara �rnek olarak :
<H2>Vorige nummers</H2> <p>Dit zijn de uitgaven van LinuxFocus in het Nederlands: <ul> <!-- macro xslt previssues --> </ul>
apply_stylesheets.pl program�n�n �a�r�lmas�yla i�lem tamamlan�yor . <!-- macro xslt [stylesheet] --> komut ve yerle�imler bu komutla yap�l�yor. .xslt uzant�s�n�n atland���na dikkat edin. Makefile '�m�z�n i�eri�i:
%.shtml: %.pre @echo "Making $*..." @../../xml/bin/apply_stylesheets.pl $*.pre
Sonu� olarak *.shtml dosyalar� lfpagecomposer beti�i taraf�ndan kullan�l�r. Bi�imtablolar� index.html'yi olu�turmak i�in issuetoc.xslt, previssues.xslt ve recently_translated.xslt dosyalar�n� kullan�r.
Bu sistemi di�er dillerde kullanmak i�in a�a��dakilere gereksinim duyulur:
�kinci basamak biraz yersizdir. Teoride yerelle�tirme i�in yaln�z metin i�erik gereklidir ancak bi�imtablolar� yerel �zelliklere hen�z sahip de�il.Bu m�mk�n ancak sizi uyarlama i�lemlerinde g�rmek iserim.
Size DTD bilen XML edit�r� �neririm. Emacs 'de yapabilirsiniz, �rne�in psgml major mod kullan�n. Bu size dok�ma�n�n ge�erlili�i i�in foksiyonlar vercektir. (nsgmls ile). Bu sizin �ok fazla hata yapmaman�za yard�m eder. Emacs'de �stelik fareyi sa� klikleyerek XML'de odaklanmak istedi�iniz element ve nitelikleri yerle�tirebilirsiniz.
Holanda yerelinde bir di�er b�y�k yard�m, zorland���n�zda dosyaya dan��abilmenizdir. E�er bu size yard�m etmezse herzaman bana e-ileti g�nderebilirsiniz.
Bi�imtablolar�n� yerelle�tirmenin bir ka� p�f noktas� vard�r. Dokunmay�n (ne yapt���n�z� bilmedik�e). �lerde yerelle�tirme i�in XSLT komutlar�yla u�ra�madan yaln�zca �eviri k�s�mlar�n� d�zenleyebilece�iniz bir yap� planl�yorum fakat hen�z tamamlanmad�.
Tamam , bu sizin ba�laman�za yard�mc� olmal�.Baz� �eylerin �o�unu Hollanda dosyalar�nda kopyala/yap��t�r yapabilirsiniz. T�m sistem dosyalar� FDL ve GPL'dir. Sonraki y�l bu sistemle ilgili planlar�m:
|
G�rsely�re sayfalar�n�n bak�m�, LinuxFocus Edit�rleri taraf�ndan yap�lmaktad�r
© Egon Willighagen, FDL LinuxFocus.org |
�eviri bilgisi:
|
2004-07-14, generated by lfparser version 2.43