[Gelistirici] Pisi: DTD -> RelaxNG

Barış Metin baris at pardus.org.tr
30 Oca 2007 Sal 14:45:12 EET


Gürer Özen <gurer at pardus.org.tr>: 
> 29 Oca 2007 Pts 21:31 tarihinde, Barış Metin şunları yazmıştı:
> > pspec.xml dosyalarını doğrulamak için DTD kullanıyoruz ve DTD'nin
> > kısıtlamaları yüzünden (aynı isimli elementlerin farklı bağlamlarda test
> > edilmesi gibi) pek rahat değiliz.
>
> Rahatız aslında. Gerçekten DTD kullanmıyoruz, depoyu ismail.py validate
> ediyor. DTD yi hazırlamış olmamın tek sebebi pspec.xml içinde DOCTYPE ta
> referans verildiği için görünce onu çekmeye çalışan toollar (xmllint
> mesela) rahat etsin diyeydi.
>
> > PSPEC için bir relaxng şeması hazırladım[1]. Fakat bir sorunumuz var. XML
> > tanımında attribute'ların sırlarının önemsiz olduğu söylenirken,
> > elementlerin sıraları konusunda bir şey söylenmiyor. XML-Infoset
> > içerisinde "tanımlanmış sıradan" bahsediliyor, relax ng de elementlerin
> > sırasına dikkat ediyor. Dolayısı ile pek çok pspec.xml validate
> > edilemiyor.
>
> Salla bence, relaxng'nin bize kazandıracağı bir şey yok.

Hmmm. Aslında şu anda kullnandığımız DTD doğru değil. DTD'nin karmaşıklığından 
da dolayı epey bir yerde fazlası ile gevşek kontrol yapmışız. Bu yüzden DTD 
ile kontrol yapan araçlar hataları bulamıyor (neyseki ismail.py bulabiliyor 
fakat bu validation için zaten var olan çözümleri de kullanabilmek lazım :). 
Örneğin Source ve Package altındaki elementler şu anki DTD'ye göre seçimli 
olarak kullanılıyor ve her biri birden fazla olabiliyor. Tabi gerçekte öyle 
değil :).

Standart doğrulama araçlarını kullandırmak bize daha az hata yapmayı 
kazandırıyor. Örneğin emacs ile pspec dosyasını düzenlerken artık "oraya o 
tag'ı koyamazsın" deyip altını kırmızı ile çiziyor :). Diğer XML 
düzenleyicileri de benzer bir şeyi yapıyorlardır eminim.

ismail.py ile data'yı da kontrol ediyoruz, bu iyi bir şey. relaxng ile de bazı 
veriyi şemaya ekleyip kontrol ettireceğim. IsA için bunu denedim ve aşağıdaki 
IsA verilerini kullandığımızı gördüm.

	  <value>app:console</value>
	  <value>app:gui</value>
	  <value>library</value>
	  <value>plugin</value>
	  <value>daemon</value>
	  <value>data</value>
	  <value>doc</value>

	  <value>devel</value>
          <value>font</value>
	  <value>libraries</value>
	  <value>library:devel</value>
	  <value>app:library</value>
	  <value>app:data</value>
	  <value>app:cli</value>
	  <value>app:plugin</value>
	  <value>app:web</value>
	  <value>applications:games</value>
	  <value>category</value>
	  <value>IsA</value>
	  <value>driver</value>

Şimdi bunlardan doğru bir liste çıkartıp kullanılabilir IsA taglarını 
belirlemek gerekiyor. Bir liste çıkartıp buraya yazacağım...

-- 
Barış Metin



Gelistirici mesaj listesiyle ilgili daha fazla bilgi