[LinuxFocus-icon]
<--  | Ana Sayfa  | Eri�imd�zeni  | ��indekiler  | Arama

Duyumlar | Belgelikler | Ba�lant�lar | LF Nedir
Bu makalenin farkl� dillerde bulundu�u adresler: English  Castellano  Deutsch  Francais  Italiano  Nederlands  Portugues  Russian  Turkce  

[Photo of the Author]
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.

T�rk�e'ye �eviri:
Ceyhun ELMAS <ceyhun.elmas/at/linuxfocus.org>

��erik:


 

LinuxFocus.org'yi olu�turmak i�in XML ve XSLT kullanmak (/Hollanda)

[Illustration]

�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.

_________________ _________________ _________________

 

Giri�

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.

 

Dok�man Tipi Tan�mlama

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.

 

<veritaban�>

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>

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>

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>
 

<ki�iler>

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>[email protected]</email>
      <team xml:lang="nl"/>
    </person>
 

<makaleler>

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:

 

Otosihir ile sanaldoku sayfalar� olu�turmak

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.  

Yerelle�tirme

Bu sistemi di�er dillerde kullanmak i�in a�a��dakilere gereksinim duyulur:

  1. yerel XML veritaban� (lfdb.nl.xml gibi)
  2. yerel bi�imtablolar�

�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�.  

Gelecek planlar�

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:

 

Bu yaz� i�in g�r�� bildiriminde bulunabilirsiniz

Her yaz� kendi g�r�� bildirim sayfas�na sahiptir. Bu sayfaya yorumlar�n�z� yazabilir ve di�er okuyucular�n yorumlar�na bakabilirsiniz.
 talkback page 

<--, Bu say�n�n ana sayfas�na gider

G�rsely�re sayfalar�n�n bak�m�, LinuxFocus Edit�rleri taraf�ndan yap�lmaktad�r
© Egon Willighagen, FDL
LinuxFocus.org
�eviri bilgisi:
en --> -- : Egon Willighagen <egonw/at/linuxfocus.org>
en --> tr: Ceyhun ELMAS <ceyhun.elmas/at/linuxfocus.org>

2004-07-14, generated by lfparser version 2.43