Xml Word

  • November 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Xml Word as PDF for free.

More details

  • Words: 10,599
  • Pages: 44
XML Temel özellikleri , İşlenmesi ve İlgili Teknolojiler

Hazırlayanlar:

Levent Tanın Mehmet Gürsul Tolga Ovatman

İçindekiler 1. Giriş ve Özet 2. XML Tarihi 3. XML’in Genel Özellikleri ve Kullanımı 3.1. XML Nedir? 3.2. XML Nasıl Kullanılabilir? 3.3. Neden XML? 3.4. Örneklerle XML Sözdizimi , Özellik ve Eleman Kullanımı 4. XML İşleme (XML Processing) 4.1. DTD’ler 4.2. Bir DTD Yaratmak 4.3. Özellikler(Attributes) İle Çalışmak 4.4. XML Ayrıştırma (XML Parsing) 4.4.1. SAX (Simple API for XML) 4.4.2. DOM (Document Object Model) 4.4.3. XPath 4.4.4. XPointer 4.4.5. Xlink 4.4.6. “XML Parser” ları (XML Ayrıştırıcıları) 4.5. XML Şema (XML Schema) 4.5.1. XML Şema’nın içyapısı 4.6. Well-Formed ve Validated XML Belgeleri 4.6.1. “Well-Formed” Belge 4.6.2. Geçerli Belge(VALID) 5. İlgili Teknolojiler 5.1. XSL (eXtensible Stylesheet Language) 5.1.1. XML'in Sunulması (CSS-XSLT) 5.1.2. XQuery 5.2. XHTML (eXtensible HyperText Mark-up Language) 5.2.1. XHTMLin Getirdiği Yenilikler: 5.2.2. Neden XHMTL? 5.2.3.XHTML Çeşitleri 5.2.4. XHTML Belgelerinin Özellikleri 6.Teşekkür Kaynakça

1. Giriş ve Özet XML tam anlamıyla bir standart haline gelmemiş olmasına rağmen geleceğin web tabanlı uygulamalarında alt yapıyı oluşturacak en büyük aday olarak görünüyor. Bu açıdan bakıldığında, XML’in günümüzdeki popülaritesi ve XML ile ilgili teknolojilerin her geçen gün daha hızlı bir şekilde artması daha rahat anlaşılıyor. XML, ortaya çıkış düşüncesiyle insanlar için HTML’den çok daha rahat ve kullanımı kolay bir dil olmayı amaçlıyor. Bununla beraber uygulamada HTML’in yetersiz kaldığı konulara da eğilerek aynı zamanda da teknik açıdan günümüzde HTML’in açıklarını yamamaya çalışan birçok programı ortadan kaldıracak gibi gözüküyor. İçerisinde barındırdığı kolay kullanım ve teknik genişlik konularıyla sıradan kullanıcılar için kullanım kolaylığı sağlamakla birlikte teknik geliştiriciler açısından çok geniş bir XML teknolojileri dağarcığına sahip olmayı gerektiriyor. Bu belge, XML temelinden başlayarak sıradan kullanıcılara dilin sözdizimi ve genel özellikleri hakkında bilgi verirken , konuyla ileri düzeyde ilgilenmek isteyenlerde de XML ile ilgili teknolojiler hakkında başlangıç için yeterli düzeyde açıklamalar sunuyor. Belge içerisinde öncelikle XML fikrinin ortaya atılışını ve tarihi incelenecektir , bunun ardından XML sözdizimi ve genel özelliklerine değinilecektir. XML genel özelliklerinden sonra XML’in işlenmesi konusunda XML DTD’leri ve şemalar incelenecek bir XML belgesinin hazırlanmasından sunumuna kadar üzerinde yapılan işlemler açıklanacaktır. Son bölümde de ilgili XML teknolojileri ile ilgili olarak XSL ve XSLT ile XML belgelerinin sunuma hazır hale getirilmesi ve son olarak da XQuery ve XHTML konuları ile XML’den tüeryen teknolojiler incelenecek.

2. XML Tarihi 1960’larda IBM mühendisleri belgeleri ve belge biçimlerini tanımlamak için bir GML(genelleştirilmiş işaretleme dili) üzerinde çalışıyorlardı. 1986’da ISO SGML(Standartlaştırılmış GML) adında bir standardı kabul etti. SGML belge görünümlerini özel uygulama yazılımlarından bağımsız kılmak için belgeleri işaretlemeyi öngören çok gelişmiş bir dizgeydi. Belge standartlarını kesinleştirmeye ihtiyaç duyan büyük organizasyonlar için SGML çok uygundu ve güçlü seçenekleri vardı. SGML platformbağımsız ve uygulama-bağımsız belgeler yaratmak için oluşturulmuştur ve özel tanımlanmış etiketler (tag) kullanarak belgelerin yapısını tanımlamamızı sağlar. Daha sonraları görüldü ki SGML’in gelişmişliği, hızlı ve kolay web yayınları için uygun değildi. Bu nedenle herkesin kolayca öğrenip uygulayabileceği pratiklikte basit bir işaretleme diline ihtiyaç duyuldu. Böylece SGML’in özel bir belge tipi (ya da DTD) ‘nden biraz daha fazla kapsamlı olan HTML geliştirildi. Öğrenilmesi ve uygulanması kolay olduğu ve öncü web tarayıcıları tarafından desteklendiği için HTML yeni gelişmekte olan web’in süratle temelini oluşturmaya başladı. Gerçekten de eğer SGML web’in geçerli işaretleme dili olarak kullanılsaydı web şu andaki popülaritesine kavuşamazdı. Fakat HTML’in sorununun çok yalın olmasından kaynaklandığı hemen görüldü. Başlıkları, listeleri, diğer belgelere bağları(link) içeren, metin tabanlı belgeleri kullanan web’in ilk günlerinde HTML çok uygun bir işaretleme diliydi. Kısa zamanda web uygulaması

geliştiren insanlar çoklu ortam ve sayfa tasarım olanaklarının arttırılmasını istemeye başladılar. Bu da HTML’in şiddetli büyüme sorunları yaşamasına neden oldu. Yalın bir şekilde metin içine resim yerleştirmek iyiydi fakat yerleştirmenin her zaman tam olarak istenilen yere yapılamaması tasarımda sıkıntı yaratıyordu. Görüntü haritaları oluşturmak ve bunlara bağ atamak yeni problemler yaratıyordu ve yeni çözümler gerektiriyordu. Sonrasında yanıp sönen metinler, çizelgeler, çerçeveler ve devingen HTML ortaya çıktı. Her zaman HTML’e yeni bir şeyler ekleme ihtiyacı hissediliyordu fakat bu ekleme çabaları her defasında uyumsuzluk yaratıyor ve yeni standart ihtiyaçları ile sona eriyordu. Bu sorunların nedeni çok açıktı, HTML genişleyebilir değildi. Yıllar geçtikçe Microsoft sadece Internet Explorer’da , Netscape ise sadece Navigator’da çalışacak yeni etiketler çıkardı. Ne yazık ki web uygulaması yazanlar böyle bir şansa sahip değillerdi. Karmaşık siteler tasarlanabilmesi için daha çoğuna ihtiyaç duyuluyordu. Java ve JavaScript, ASP, CGI, PERL, PHP ve diğer bütün gelişmeler HTML’i kuvvetlendiriyordu. CSS (Cascading Style Sheet) ve devingen HTML(DHTML) gibi gelişmeler web tasarımını istenilen hale getirmek için gerekli olan gücün bir kısmını öneriyordu. Bununla beraber bu eklemeler büyümekte olan sorunu daha da göz önüne çıkarıyordu. Birçok Web uygulaması geliştiricileri , HTML genişleyebilir değilken onun ana dili olan SGML’in tam genişleyebilir olduğunu biliyorlardı. SGML’de tamamen özelleştirilebilir belge kümesi oluşturmak amacıyla, uygulama geliştiriciler tüm bu belge kümesini denetleyecek bir DTD geliştirdiler. Bu zaman alıcı ve karmaşık bir işti ama işe yaradı. Asıl sorun SGML’in genişleyebilir olan özelliğini karmaşıklığından arındırabilmekti. Diğer bir deyişle amaç SGML ve HTML arasında bir köprü kurabilmekti. Sonuçta XML(eXtensible Markup Language) geliştirildi. 1996 sonlarında World Wide Web Consortium (W3C) XML’i geliştirdi. XML’in amacı SGML’in gücünü dilin karmaşıklığından arındırıp web uygulaması geliştirenlere tam anlamıyla özelleştirilebilen belgeler hazırlama olanağı sunmaktı. HTML, SGML’in bir belge tipiyken XML onun basitleştirilmiş bir biçimi gibiydi bu yüzden de yukarıda bahsedilen özellikleri taşıyordu.

3. XML’in Genel Özellikleri ve Kullanımı 3.1. XML Nedir? XML, HTML ile pek çok açıdan benzerlik gösteren bir işaretleme(markup) dilidir. Verinin tanımlanması ve tarif edilmesi için kulanılır. HTML’deki yapının aksine XML’de kullanılacak olan etiketler önceden tanımlı değildir.Yani bir XML belgesinin yapısı tamamıyle kullanıcı tarafından oluşturulur.Verinin tarif edilmesi için DTD(Document Type Definition (XML belgesinde kullanılacak etiketleri ve yapıları önceden tarif ettiğimiz kütükler)) adı verilen yapılar kullanılmaktadır. XML ve DTD’nin birlikte kullanılması ile belgeler kendini tarif eden bir yapı halini alırlar. XML, SGML’den türetülmiş bir dildir. SGML bir meta-dildir. Meta-dil demek dil yaratmaya yarayan dil demektir. İlginç olan XML'in SGML gibi bir meta-dilden türemesine rağmen kendisinin de bir meta-dil olmasıdır. Yani XML'den de yeni diller türetilebilir. Örneğin Wireless Markup Language(WML) mobil cihazları için kullanılan WAP ortamlarının

dilidir ve XML’in türevidir. HTML de SGML’den türetilmiş bir dil olmasına rağmen bu özelliği taşımaz. XML ve HTML arasındaki en belirgin fark XML’in verinin kendisiyle ilgilenmesi, HTML’in ise verinin sunumuyla ilgilenmesidir. Buna bağlı olarak HTML belgeleri veriye ilişkin şekillendirme bilgilerini içerirken, XML dökümanları ise verinin tanım bilgilerini içermektedir. XML’in tasarım amaçlarından biri de verinin taşınmasıdır.

Şimdi çok basit bir XML belgesini birlikte inceleyelim: <not> Mehmet Levent Kutlama Doğum Günün Kutlu Olsun!!

HTML belgelerine çok benzeyen bu yapıda ilk etapta göze çarpan nokta etiket yapılarının bizim tarafımızdan tasarlanmış oluşudur. XML kütükleri her zaman belgelerin mantıksal bölümlerinin(element) başlangıç ve bitişlerini işaret eder. HTML’de kullanılan

ve

gibi standart etiket yapıları yukarıdaki XML belgesinde kullanılmamıştır. Bahsedilen bu özelliği nedeniyle XML belgeleri genişleyebilir(extensible) bir yapıya sahiptir.Belgelerin bu hali gerçek anlamda herhangi bir şey ifade etmez. Belgenin iletimi(gönderim veya alım) ya da sunumu için başka şeylerin de yapılması gerekmektedir. Buradaki önemli nokta şudur: XML, HTML’in yerine geçecek bir dil değil HTML’in tamamlayıcısı olabilecek bir dildir. Günümüz bilişim dünyasına bakarsak XML’in her alanda karşımıza çıktığını görmekteyiz. Bu nedenle XML’i bir anlamda geleceğin web dili olarak tanımlamak mümkündür. XML kullanıcıya şunları sunar: • Çoklu kütükleri birleştirerek, bileşik belgeler yaratmak • Metin kütüklerinde, istenilen yere ve istenilen formatta resim eklemek • Belge geçerleyiciler ve tarayıcılar gibi programlara bilgi denetim işlemini sağlamak • Kütüğe, açıklama satırları eklemek Fakat unutmamak lazımdır ki, XML’de şunlar bulunmaz: • •

HTML’deki gibi, belgeleri işaretlemek için, daha önceden tanımlanmış etiketler. Belirli tiplerdeki belgeler üretmek için standart bir şablon.

XML tasarlanırken ortada birçok düşünce vardı. Sonuçta, W3C XML’in tasarım amaçlarını açıkladı: 1- XML internet üzerinde çalışabilmelidir.

2- XML tüm uygulamalar tarafından desteklenmelidir. 3- XML, SGML ile uyumlu olmalıdır. 4- XML üreten programlar oldukça kolay olmalıdır. 5- XML’de seçmeli özellikler minumum olmalı veya hiç olmamalıdır. 6- XML belgeleri okunabilir ve açık olmalıdır. 7- XML tasarımı tek bir firma bu işi ele almadan acilen hazırlanmalıdır. 8- XML tasarımı biçimlendirilmiş ve kısa olmalıdır. 9- XML belgelerinin yaratılması çok kolay olmalıdır. 10- XML belgelerinde anlam belirsizlikleri olmamalıdır

3.2. XML Nasıl Kullanılabilir? XML hakkında bilinmesi gereken en önemli nokta, bu dilin veriyi taşımak amacıyla tasarlanmış oluşudur. XML ile veriler yapı bakımından modülerlik kazanmaktadır. XML belgeleri verinin içeriğiyle ilgilenmektedirler.Bu sayede verilerin içerik,yapı ve sunum kısımları ayrı modüller halinde farklı XML belgelerinde tutulmaktadır. XML belgeleri Veri Adaları(Data Islands) adı verilen teknik sayesinde HTML sayfaları içerisinde de depolanabilmektedir.Bu teknik sayesinde verinizin sadece sunumuyla ilgilenilmektedir Veri Adaları(Data Islands) bir HTML sayfasında XML komutlarının gömülü olması ve onların işlenebilmesi demektir. Böylece HTML sayfasının içine artık sadece HTML etiketleri değil, aynı zamanda XML komutları da yazılabilir Data Island iki şekilde HTML sayfalarına gömülür: - Direk XML datasını HTML'in içine gömerek <XML ID="XMLID"> 06 <İlad>ANKARA

- HTML sayfasından XML'i referans göstererek. <XML ID="XMLID" SRC="iller.xml">

XML ile verinin alışveriş işlemi gerçekleştirilir. XML, yapısının esnekliği sayesinde birbirine uyumlu olmayan sistemler arasında veri alış verişi rahatlıkla gerçekleştirilmektedir. Günümüz bilişim dünyasında bilgisayar sistemleri ve veri tabanlarının genellikle birbirine uyumsuz sistemler içerebildiklerini görmekteyiz. Bundan dolayı uygulama geliştiriciler Internet üzerinden bu tip uyumsuz verilerin alış veriş işlemini gerçekleştirmek zorundadırlar. Verinin XML formatına çevrilmesi ile, farklı sistemler ve uygulamalardaki verilerin karmaşıklık derecesi indirgenerek, alış veriş işleminin kolaylaştırılması sağlanır.

XML ile finansal bilgilerin Internet üzerinden alış verişi sağlanmaktadır. Günümüzde artık sıklıkla duyulan elektronik iş kavramı açısından incelenecek olduğunda XML’in önemli işlevleri yerine getirdiği görülmektedir. Bahsedilen bu işevleri ile XML geleceğin elektronik iş dili olarak da yeni bir görevi üstlenmektedir. XML ile verinin paylaşımı kolaylaştırılır. XML, veriyi düz metin (plain text) formatında saklamasından dolayı veriyi paylaştırma konusunda da hem yazılım hem de donanımdan bağımsız hareket edebilme imkanını sunmuştur. Bu sayede farklı uygulamalarda hareket eden farklı veri tipleriyle çalışmak daha kolaylaşır. Ayrıca işletim sistemlerinin yükseltgenmesi, sunucu, uygulama vb. dışsal faktörlerin yenilenmesi gibi etkenlerden de en az düzeyde etkilenilmiş olunur. XML ile verinin depolanması sağlanır. XML, verinin dosyalarda veya veritabanlarında saklanması için de kullanılabilir. XML, yazılım, donanım ve uygulamalardan bağımsız olduğu için verinin daha elverişli olarak kullanımını sağlamaktadır. Yani başka istemci(client) veya uygulamalar tıpkı veri kaynaklarına erişiyormuş gibi XML kütüklerine rahatlıkla erişebilirler.

3.3. Neden XML? Bu sorunun cevabını iyi verebilmek için, şöyle bir örnek yararlı olacaktır: Diyelim ki evde otururken canımız kola istedi. Markete gidip kola almak çok zor bir iş değil. Markete yürüyüp hızlı ve ucuz bir şekilde ihtiyacımızı giderebiliriz. Üstelik fazla yüksek bir teknolojiye ihtiyacımız yok. HTML ile web sayfası hazırlamak da birçok yönden buna benziyor. Eğer düz bir metin düzenleyiciye ve küçük bir HTML bilgisine sahipsek, hızlı ve ucuzca sayfamızı hazırlayabiliriz. Hatta FrontPage,DreamWeaver gibi programlarla HTML bilgisine de ihtiyac minimum düzeye indi. Şimdi ihtiyacımızın daha büyük olduğunu düşünelim. Bir hatta birkaç süpermarkete uğrayıp, evin haftalık alışverişini yapalım. Bu durumda yürümek pek de akıl karı bir iş değil. Ayrıca taşıyacağımız yükü de göz önüne alırsak, bir araç vazgeçilmez hale geliyor. Daha büyük işler için bir araç kullanmanın daha kolay ve daha hızlı olduğu çok açık. Ama arabanız varsa ona benzin doldurmayı, tekerleklerine doğru hava basıncını yüklemeyi ve bunun gibi birçok işi bilmemiz gerekir. XML ailesiyle HTML’de yapamadığımız birçok şeyi yapabiliriz. Fakat tam anlamıyla bunu başarabilmemiz için beraber çalışan birçok teknolojinin kullanımını bilmemiz gerekir. Sonuçta bir öğrenme engeliyle karşı karşıyayız. Bu noktada endişeye kapılmak doğal. Fakat unutmamak gerekir ki arabayı kullanmak için yürüyen aksamın direksiyona nasıl bağlandığı, hareketin tekerleklere nasıl iletildiği, karbüratörün ne işe yaradığı gibi konularda uzman olmaya gerek yok. Kolayca görülüyor ki eğer webdeki işimiz küçük ve dar kapsamlıysa, HTML kullanmak daha kolay ve daha ucuzdur. Fazla ayrıntı bilmeye ve kafamızı karmaşık

teknolojilere yormaya gerek yok. Fakat eğer biraz deneyimli bir kullanıcıysak ve yapacağımız işte HTML yetersiz kalıyorsa, XML kullanmak kaçınılmaz hale geliyor. Üstelik örnekte de görüldüğü gibi, bunun için küçük bir miktar daha bilgi bilmek gerekliyken işin fazla ayrıntısına girmek gerekmiyor. Şimdi işin teknik ayrıntılarına girebiliriz. “Neden XML?” sorusuna akla gelen ilk cevap “insanlar arasındaki iletişimi kolaylaştırmak” olabilir. Fakat dikkatlice düşündüğümüzde insanlar telefon, yazışma gibi iletişim araçları varken neden köşeli parantezler arasındaki etiketleri kullanmak istesin ki? Bu noktada cevabımız son halini alıyor: “Asıl amaç bilgisayarlar arasındaki iletişimin iyileştirilmesini sağlanmak.” Biraz daha açacak olursak XML’in asıl kolaylığı insanların, iki bilgisayarın arasındaki iletişimi daha kolay anlayabilmesini sağlamaktır. XML bilgisayarların daha iyi haberleşmesine iki yoldan katkıda bulunur: • •

İçeriği gösterimden ayırır. (HTML – XHTML) Uygulamalar arasında bilginin doğrudan geçişini sağlar.

Şimdi de XML’in diğer yararlarını madde madde inceleyelim. Yalınlık: XML’de kodlanan bilgilerin okunması ve anlaşılması kolaydır çünkü doğal dile yakın anlamlı etiketler insanlar tarafından daha kolay anlaşılır. Ayrıca bu etiketler bilgisayarlar tarafından da kolayca işlenebilirler. Açıklık: XML W3C standartıdır ve yazılım liderleri tarafından da onaylanmıştır. Genişleyebilirlik: Sabit bir etiketler kümesi bulunmaz. Yeni etiketler istenildiğinde yaratılabilir. Kendi kendini tanımlama: Alışılagelmiş veri tabanlarında ; veri kayıtları , veri tabanı sorumlusu tarafından kurulan şemalara ihtiyaç duyar. XML belgeleri bu tür tanımlamalara ihtiyaç duymadan saklanabilir çünkü XML etiket ve özelliklerden oluşan meta veriler içerir. Makine tarafından anlaşılabilen bağlam bilgisi içerir: Etiketler, özellikler (attributes) ve eleman(element) yapıları; içerik anlamını yorumlamada, etkin arama motorlarında yeni olasılıklar oluşturmada, akıllı veri işlemede (data mining) vb. bağlam bilgisi sağlar. Bağlam bilgisinin değerlendirilmesinin neredeyse imkansız olduğu HTML veya düz metine göre bu büyük bir avantajdır. Örneğin, Chip isimli isimli birini aramak için ‘chip’ kelimesiyle arama yaptığınızda karşınıza chocolate chips, computer chips, ya da Chip gelebilir. Eğer isim ve adres kayıtları için tanımlanmış DTD’ler olsaydı, ‘chip’ kelimesiyle yapılan aramalar çok daha kesin ve doğru sonuşlar verebilirdi. İçeriği gösterimden ayırır: XML etiketleri, gösterimi değil anlamı tanımlar. HTML’in parolası :”Nasıl göründüğünü biliyorum!” iken XML’inki : “Ne anlama geldiğini biliyorum, öyleyse bana nasıl görünmesi gerektiğini söyleyin!”. Bir XML belgesinin görünüşü ve anlattıkları XSL “style sheet”leri tarafından oluşturulur. Bu, bir belgenin görünüşünün,

belgenin bağlamına dokunmadan değiştirilebilmesini sağlar. Aynı içerikten ortaya çıkan birçok görünüm veya sunum kolayca oluşturulabilir. Farklı XSL dönüştürücüler ile aynı XML belgesinden farklı görünüşte sunumlar elde edilmesi bunun en büyük örneğidir. Çokdilli belgeleri ve “Unicode”u destekler: Uygulamaların uluslararası hale getirilmesinde çok önemli bir özellik. Verilerin kümelenmesi ve karşılaştırılmasını kolaylaştırır: XML belgelerindeki ağaç yapısı, belgelerin eleman eleman etkin bir biçimde kümelenmesine ve karşılaştırılmasına izin verir. Çoklu veri türleriyle kullanılabilir: XML belgeleri, çoklu ortam verilerinden (resim, ses, video) aktif bileşenlere (Java Appletleri, ActiveX) kadar birçok olası veri türünü içerebilir. Varolan veri türleriyle kullanılabilir: Varolan kütük dizgeleri veya ilişkisel veri tabanlarının XML’le ilişkilendirilmesi çok kolaydır. Dağıtılmış veriler için tek bir sunucudan görünüş sağlar: XML’in erişim sağladığı birçok verinin öğeleri değişik veri tabanları içerisinde bulunabilir -örneğin Internet gibi-. XML ile bu verilere tek bir sunucu üzerinden bakılıyormuş gibi erişilebilir. Sanayi tarafından hızlıca benimsenmiştir: IBM, Sun, Microsoft, Netscape, SAP gibi birçok kurum XML’i destekliyor. Microsoft ve SAP şimdiden ileride çıkaracakları programların sürümlerine XML desteği koyuyorlar. Microsoft ve Netscape’in web tarayıcıları XML’i destekliyor.

3.4. Örneklerle XML Sözdizimi , Özellik ve Eleman Kullanımı XML sözdizimi , basit birkaç kuraldan oluşmuştur bu yüzden de kullanılması ve öğrenilmesi kolaydır. Önceden de incelediğimiz basit XML belgesine tekrar göz atalım: <not> Mehmet Levent Kutlama Doğum Günün Kutlu Olsun!!

Dökümanın ilk satırında XML bildirimine yer verilir ve hangi XML sürümünü kullandığımız belirlenir. Bu satırdan sonra XML belgesinde DTD bildirimi de yer alabilir. Bir sonraki satırda ise belgenin kök(root) elemanı açıklanıyor. Bu belgenin kök elemanı <not>. XML belgelerinde ilk sırada açıklanan eleman kök eleman olarak adlandırılır ve ondan sonra gelen elemanlar XML sıradüzenine uyacak şekilde kök elemana bağlı olmak durumundadırlar. XML belgelerinin yapısı “kök” sözcüğünden de anlaşılabileceği gibi ağaç yapısına benzer. Bundan sonraki 4 satırda ise 4 çocuk(child) eleman açıklanmıştır. Bu çocuk elemanlar

birbirleriyle kardeştir(sibling). Bunun yanında kök eleman da çocuk elemanlarının atası (parent) durumundadır. Dikkat edilecek olursa kök,çocuk ve kardeş elemanlar son derece sıradüzensel , içiçe geçmemiş bir yapı sergiliyor. Bu sıradüzene göre örneğimizde <not> kök eleman. ,, ve ise <not> un çocuğudur ve dolayısıyla <not> bu dört elemanın atası durumundadır. Bu dört eleman aynı zamanda birbirleriyle kardeştir de. , vs. Elemanlarının da kendi çocuklarına sahip olabileceklerini unutmamak gerekir. Diğer bir özellik ise XML’in başlangıç ve bitiş etiketi kurallarına sıkı sıkıya bağlı olmasıdır. HTML’de örneğin

ile başlamamız gereken bir paragrafı

etiketiyle kapatmasak bile tarayıcı çoğu zaman bu hatayı gözardı ederek HTML belgesini görüntüler. XML bunu kesinlikle kabul etmez. Örnekte de görüldüğü gibi açılan bütün etiketler kapatılmıştır. Bu XML’in kendisinden türetilecek dillere(ör. XHTML) de geçireceği bir özelliğidir. XML’in bu nitelikte bir başka özelliği de büyük/küçük harf duyarlı (case-sensitive) olmasıdır. Bu bağlamda bir elemanın başlangıç etiketinin bitiş etiketiyle tamamen aynı yazılışta olması gerekir. Bu doğrultuda bir örnek vermek gerekirse: Andrew S. Tanenbaum

Hatalı bir sözdizimdir. Doğrusu ise: Andrew S. Tanenbaum

veya

Andrew S. Tanenbaum

şeklinde olmalıdır. XML sıradüzensel bir sözdizime sahiptir ve bunu bozacak sözdizimleri hatalı olarak niteler. Örnek olarak aşağıdaki HTML koduna bakalım: Kalın ve eğik metin

Görüldüğü üzere önce başlatılan kalınlık niteliği sonra başlatılan eğiklik niteliğinden önce kapatılmış. Bu şekilde sıradüzenselliği bozan sözdizimler XML’de bulunmaz. Bu kodu XML sözdizimiyle denetlediğimizi varsayalım: Kalın ve eğik metin

Bu haliyle kod, XML sözdizimine uygundur. Daha önceden değinilen kök-çocuk ilişkisine sadık kalınmış ve XML sözdizimi açısından geçerli bir kod elde edilmiştir. XML sözdiziminin temel taşı olan elemanların(element) isimlendirilmesinde uyulması gereken kurallar şunlardır: • İsimler harf,sayı ya da diğer karakterleri içerebilir. • İsimler bir sayı veya _ (alt çizgi) karakteri ile başlamamalıdır. • İsimler “xml“(ya da XML veya Xml) şeklinde başlamamalıdır • İsimler boşluk içermemelidir.

Şimdi de özellik(attribute) değerlerinin XML sözdizimi içerisinde uyması gereken kuralları inceleyelim. Baştaki örneğimize geri döndüğümüzde: <not tarih=”20/02/2002”> Levent Tolga İlginç Bugün çok simetrik bir gün!!

XML elemanları özelliklere sahip olabiliriler. Bu özelliklerin bir ismi ve ona atadığımız bir değeri vardır. Tabii bazı zamanlar özelliklere değer atayamayabiliriz. Örnekte de görüldüğü üzere <not> elemanı “tarih” özelliğine sahip. Dikkat edilecek olursa “=” ile “tarih”e atanan değer çif tırnak içine alınmış. Bu XML sözdiziminin bir özelliğidir. Özelliklere değerleri , eleman etiketinin içerisinde “=” kullanılarak çift tırnak içerisinde atılmalıdır. Örnekte de “tarih” özelliğine 20/02/2002 değeri atanmıştır. Gördüğümüz gibi özellikler elemanlar için ek bilgilerin tanımlanmasına olanak veren yapı birimleridir. Özellik değerini de ekleyerek ilk baştaki belgemizi biraz daha fazla bilgi tutabilecek hale getirdik. Şimdi bunu başka yollardan yapmaya çalışalım: <not> 20/02/2002 Levent Tolga İlginç Bugün çok simetrik bir gün!!

Görüldüğü gibi az önce <not> elemanının bir özelliği olan tarih bilgisi bu örnek bu elemanın bir çocuğu halinde karşımıza çıkıyor. Bu şekilde tutulan verinin niteliği değişmiyor ama tutulma şekli değişiyor. Ayrıca bu örneği en baştaki örnekle karşılaştırdığımızda yeni bir nitlik olan in belgenin yapısına hiçbir zarar vermeden belgeye eklenebildiğini görüyoruz. Şimdi belgeyi biraz daha dğiştirelim: <not> 20 02 2002 Levent Tolga İlginç Bugün çok simetrik bir gün!!

Elimizdeki elemanını , alt elemanlara ayırarak parçaladık. Bu şekilde elimizdeki veriyi daha etkili bir yöntemle saklamış oluyoruz. Üstelik bu çeş,it bir kullanım ile hata kontrolü ve modülerlik gibi konularda da avantajlar elde etmiş oluyoruz.

Görüldüğü gibi XML sözdizimi açısından pek esnek olmamakla birlikte verinin saklanması ve temsili açısından son derece esnek bir yapıya sahip. Bu da ona HTML’in aksine daha teknik ve kapsamlı konularda daha etkili bir biçimde kullanılma olanağı sunuyor.

4. XML İşleme (XML Processing) XML sadece xml belgesine yazılanlarla kalmıyor. XML belgesinin içerisinde kullanılan eleman ve özellik yapılarının mutlaka tanımlanmış olması gerekli. Tabii bu kadarı de yeterli değil. Bu tanımların doğruluğunun denetlenmiş olması ve XML belgesinin bunlara uygunluğunun da sınanmış olması gerekiyor. Aynı zamanda XML’in görüntülenmesi ve sunuma hazır hale getirilmesi sırasında geçtiği aşamalarda da kullanılan birçok araç var. XML işleme konusu XML’in kodlanmasından sunulmasına kadar geçen sürede geçirildiği işlemlerde (resimde de görülüyor) kullanılan teknolojileri kapsıyor. XML işleme bölümünde bu teknolojilerden teker teker bahsedilecek ve bunların kullanım yöntemleri ile kısa örnekler verilerek genel kullanıma bir altyapı oluşturulması sağlanacaktır.

4.1. DTD’ler a) Document Type Declaration (DTD) XML belgelerinde kullanılan etiketlerin tanımının önceden yapılmış olması gereklidir. Etiketler kişiden kişiye farklı olabilir. Bu yüzden bir etiketin, XML kütüğü içerisindeki işlevini açıklayan tanımların bulunduğu bir DTD (Document Type Definition)’nin varlığına ihtiyaç duyulur. Bu DTD, XML kütüğünün içinde (içsel altküme), dışında (dışsal altküme (genellikle .dtd uzantılı) ), ya da bir kısmı içinde bir kısmı dışında olabilir. İşte bu DTD’lerin gerek içsel ya da dışsal olmasını, gerekse dışsal olması durumunda DTD’nin adresini XML belgesine sunmak gerekir. Bu amaçla, DTD(Document Type Declaration) adı verilen bildirim sözcükleri XML belgesine eklenir. Bu yapıyı bir yönüyle, programlarımıza kitaplık kütüklerinin dahil edilmesine benzetebiliriz. DTD’ler bir XML belgesinin girişinde yer alır.

Definition ile declaration arasındaki ayrımı tam olarak belirtmek için şunu söyleyebiliriz: Bir XML belgesinde yeralan declaration, o XML belgesiyle ilişikli olan Definiton’ı XML belgesine tanıtmakta kullanılır. Örnek vermek gerekirse: Mehmet Doğum Günün Kutlu Olsun

Burada 2. satırın(declaration) eklenmesi ile, “kutlama” adındaki yapımızın kökünün “kutlama.dtd” isimli dosya içerisinde bulunduğunu XML Parser’a anlatıyoruz. Eğer , , elemanlarının hepsi gerekli elemanlarsa ve “Definition”da yer alıyorsa “kutlama.dtd” şöyle görünecekti :

Eğer “Declaration” kullanmasaydık ve “Definition”larımızı XML belgesinin içine gömmeye kalksaydık , bunu belgeye şu satırları ekleyerek sağlamak zorundaydık.

kutlama[ kutlama(kime,ileti)> kime (#PCDATA)> ileti (#PCDATA)>

b) Document Type Definition XML gerçekten de çok esnek bir dildir. Bir XML belgesinde istediğimiz özelliklere sahip herhangi bir elementi dilediğimiz şekilde kullanabiliyoruz. Bu, çok büyük bir güç getirmekle birlikte büyük bir düzensizlik ve dağınıklık potansiyeline de sahiptir. Hatırlayacağımız gibi XML teknolojisinin öncelikli amacı iki bilgisayar arasındaki bilgi alışverişini uygun biçimde sağlamaktı. Anlaşılacağı üzere bu bilgi iletişimindeki ufak bir dağınıklık kilitlenmelere ve verilerin güvensiz bir biçimde değişimine sebep olabilir. Çok sayıda eleman içeren bir XML uygulamasının kilitlenmesini kontrol altına alabilmek için, XML belgelerinde yer alabilecek bazı mantıksal ve pratik kısıtlar koyarak, bu esnekliği dizginlemek akıllıca olacaktır. Bir DTD, XML 1.0 ‘da tanımlanmış XML’i kısıtlama mekanizmasıdır. Bir DTD, kendisini kullanan XML belgesinin örneklerinin yapısını kısıtlar veya tanımlar. İyi yazılmış bir DTD, kullanılan yapıdan türemiş bir XML belgesinden, XML işleyicisinin çıkaracağı aykırı durumların tanımlanmasını sağlar. Eğer belge içerisinde birkaç kez geçen bir eleman, DTD içinde yoksa, uygun bir düzeltme işleminin gerçekleşmesi için uyarı oluşturulur. Bir başka hata olasılığı ise DTD’de bulunan bir verinin XML belgesinde hiç geçmemesidir.

Örneğin DTD’miz bu şekilde olsun.
kutlama(kime,ileti,kimden)> kime (#PCDATA)> ileti (#PCDATA)> kimden (#PCDATA)>

Bu DTD’yi kullanan XML belgesi de şöyle olsun : Mehmet Doğum Günün Kutlu Olsun

Bu örnekte, elemanı, XML belgesinde bulunmasına rağmen, DTD içinde tanımlı değil. Bu bize XML işleyicisinden hata gelmesine yol açar. Diğer hata ise, DTD içinde tanımanmış elemanı, XML belgesinde kullanılmamış. Bu da bir başka hatadır. DTD’ler, XML belgelerine modülerlik katar. Örneğin elimizde çok büyük bir XML kütüğü olduğunu farzedelim. Eğer DTD olmazsa bu belgeye göz atmak çok zor ve sıkıcı olabilir. Bu şekilde, belgenin anlamıyla ilgisiz, uzun metinler içerisinde belgenin genel yapısı hakkında fikir edinmekle uğraşılır. Bunun yerine iyi hazırlanmış bir DTD’yi kısa bir süre inceleyerek çok daha etkin bir görüşe sahip olabiliriz. Sonuç olarak bir DTD, ele alınan XML belgesi hakkında bize açık ve hızlı bir resim çizer. Ayrıca, hazırlanan XML belgelerinin amacı hakkında da kesin bir fikir sahibi olabilmek için DTD’ler yararlı olacaktır. XML’in yazılış amacını öğrenmek ve içeriğini anlamak önemlidir. Bunun için, XML belgesiyle DTD’sinin uyumlu olması gerekir. İşte bu uyumu denetlenmek amacıyla “parser” adı verilen araçlar kullanılır.

4.2. Bir DTD Yaratmak Bir DTD oluşturmak için öncelikle XML’in temel özelliklerini bilmeliyiz. Bir DOCTYPE bildirimi, DTD ile XML belgesini birbirine bağlar. DOCTYPE bildirisi XML belgesinin girişine yazılır ve herhangi bir elemandan önce gelir. Bu bildiriden önce XML bildirisi yer alır. Bundan başka işleyici komutları, yorum satırları da olabilir. . Diyelim ki genel bir kutlama mesajını, XML kullanarak geliştirmek istiyoruz. Hangi yapıları tanımlamaya ihtiyacımız var? İçinde ve elemanlarını bulunduran elemanına ihtiyacımız var. Tanımladığımız elemanı ilk çocuk olmalıdır ve elementi onu izlemelidir. Bu iki elementin babası olmalıdır. ve , başka elementler barındırmamalı ve sadece metin (karakter) bilgisi içerebilir. Karakter bilgisi, XML işlemcisi tarafından parse edileceği için, Parsed Character DATA anlamına gelen PCDATA sözcüğüyle ifade edilir.

DTD’demizi iç DTD olarak tanımlarsak şu kodu yazmalıyız:

kutlama[ kutlama(kime,ileti)> kime (#PCDATA)> ileti (#PCDATA)>

Şimdi bu DTD’yi satır satır inceleyelim.
Bu satırda adında bir kök elementi bulunan DOCTYPE bildirisi yapılıyor. Köşeli sol parantez ([) , bir iç DTD alt kümesinin başladığını gösterir. Eğer bir dış DTD de bulunsaydı, bu paramtezden önce dış DTD referansı yer alacaktı.

Bu satır ise elementinin, bir elementi ve bir de elementi içerdiğini, bunlardan sadece birer tane olabilceğini ve elementinin elementinde önce gelmesi gerektiğini anlatıyor. Şimdi sözdizime biraz daha yakından bakalım : Parantezler elementinin izin verilen içeriğini tutar. Element isimleri arasındaki “virgül” ‘nin ‘den önce gelmesi gerektiğini anlatır.

Bu satırlar bize ve elementlerinin her birinin “parsed character” verisi tuttuğunu fakat herhangi bir çocuk element içermediğini belirtir. “]>” satırı, DOCTYPE bildirisinin iç alt kümesinin tamamlandığını belirtir. Uygulamada iç DTD’ler pek kullanılmaz. XML belgesine eklenen her DTD saklama ihtiyaçları doğurur. Çok sayıdaki XML belgelerinin temel aldığı bir dış DTD’nin bakımı bütün XML belgelerindeki iç DTD’lerin bakımından daha kolaydır. Dikkat edilecek olursa, iç DTD’deki Malatya ve Bursa Yöresi Yemek Tarifleri Tolga Ovatman Mehmet Gürsul Levent Tanın

9 Malatya Etli Yemekleri Malatya İçli Köftesi <ekler> <ek> Lavaş yapımı


elementinin , element bildirimi şu şekildedir : isim yerine geçebilecek herhangi bir sembol ne eksik ne fazla sadece bir kez görünmeli , elementinin bildirimi şu şekildedir : <!ELEMENT title (#PCDATA)><br /> <br /> Şimdi bir bolum’ü nasıl tanımladığımıza bakalım: Her bölüm’ün sadece bir numarası ve bir başlığı olması gerekir. Bunula beraber konu’ların sayısı birden fazla olabilir. Böylece konu elementinin şöyle tanımlayabiliriz: <!ELEMENT bolum (bno,badi,konu+)><br /> <br /> Bu tanımla, bno ve badi elemanı yalnızca bir kez geçmesi gerekirken , konu elemanı birden çok kez görünebilir.<br /> <br /> Sırada <yazarlar> elemanı var. Her kitabın bir yazarı vardır. Fakat bazı kitapların birden çok yazarı da olabilir. Birden çok yazar olması ihtimalini ve hiç yazar olmaması ihtimalini göz önünde bulundurmak için aşağıdaki tanım yapılır: <!ELEMENT yazarlar(yazar*)><br /> <br /> Anlaşıldığı üzere, bildiri <yazarlar> elemanını tanımlıyor ve bu elemanın <yazar> adlı hiç veya pekçok özelliğe sahip olabilecek bir çocuk elemanına sahip olduğunu * kullanarak tanımlıyor. Sıradaki eleman <onsoz>, dikkat edecek olursak bu elemanın sonunda bir “?” olduğunu görürüz. Nesnenin gerçekteki özelliklerine bakılırsa, bir kitabın bir önsöz bölümü olur ya da olmaz. Veya biz bunu veri tabanımıza katmak isteriz ya da istemeyiz. Bu durumda elemanın belge içinde bulunma sayısı 0 veya 1 olabilir. İşte başta söz ettiğimiz “?” nesnenin bu özelliğini belirlemeye yarar. Yaptığımız açıklamalar sonucunda verdiğimiz XML belgesinin “kitapyapisi.dtd” isimli dış DTD’si şu şekilde görülecektir : <!ELEMENT kitap (isim,yazarlar*,onsoz?,yayınevi,isbn?, bolumler+,ekler*,dizin?)> <!ELEMENT isim (#PCDATA)> <!ELEMENT yazarlar (yazar*)> <!ELEMENT yazar (#PCDATA)> <!ELEMENT onsoz (#PCDATA)> <!ELEMENT yayınevi (#PCDATA)> <!ELEMENT isbn (#PCDATA)> <!ELEMENT bolumler (bolum+)> <!ELEMENT bolum (bno,badi,konu+)> <!ELEMENT bno (#PCDATA)> <!ELEMENT badi (#PCDATA)> <!ELEMENT konu (#PCDATA)> <!ELEMENT ekler (ek*)> <!ELEMENT ek (#PCDATA)> <!ELEMENT dizin (#PCDATA)><br /> <br /> Bu örneklerde gördüğümüz PCDATA, XML işleyicisi tarafından “parse” edilen karakter verilerdir. “XML parser”ı tarafından hiç bir “parse” işleminin yapılmadığı CDATA gibi bölümlerde (section) bulunur. PCDATA verisinin yetersiz kaldığı yön ise, hiç bir zaman tür kontrolünün yapılamamasıdır. Bu belge tabanlı XML ile ilgilendiğimizde büyük bir eksikliktir. Şimdiye kadar DTD’lerin eleman tanımladığı örneklere baktık. Bunun dışında DTD’de bir eleman için atanabilir özellikleri de tanımlayabiliriz. Şu XML örneğinin ele alalım: <?xml version=’1.0’?> <belgeciktisi> <kagitrengi renk=”beyaz”> Yükses kalite harika kuşe kağıt </kagitrengi> <murkrengi renk=”siyah”> Süper kalite şahane mürekkep </murkrengi><br /> <br /> </belgeciktisi><br /> <br /> Burada , <kagitrengi> ve <murkrengi> elemanları mevcuttur ve her birinin renk özelliği vardır. Eğer sadece siyah-beyaz kağıt ve siyah-beyaz mürekkep kullancağımız gözönüne alınırsa özellik bildirimimiz şu şekilde olacaktır : <!ELEMENT <!ELEMENT <!ATTLIST <!ELEMENT <!ATTLIST<br /> <br /> belgeciktisi (kagitrengi,murkrengi)> kagitrengi (#PCDATA)> kagitrengi renk (siyah|beyaz) #REQUIRED> murkrengi (#PCDATA)> murkrengi renk (siyah|beyaz) #REQUIRED><br /> <br /> Söz dizimden de görüldüğü gibi, renk özelliği siyah-beyaz değerlerinden birini almak zorundadır(#REQUIRED). DTD Yapıları : Şimdiye kadar sadece ELEMENT ve ATTLIST bildirirmlerine göz attık. Bu bölümde de mümkün olan bütün geçerli bildirimleri kısaca tanımlayacağız : DTD Yapısı ELEMENT ATTLIST ENTITY NOTATION<br /> <br /> İşlevi XML eleman tipi bildirimi. Belirli bir ELEMENT tipine bağlanabilecek özelliklerin ve bu özelliklerin alabileceği değerlerin bildirimi. Yeniden kullanılabilir içerik bildirimi “Parse” edilmeyecek dış içeriğin (örneğin ikil ya da resim kütükleri) biçiminin bildirimi.<br /> <br /> 4.3. Özellikler(Attributes) İle Çalışmak Şimdi bir DTD içinde özellik tanımlarken kullanabileceğimiz yapıları da gözden geçirelim. Özellikler, özellik bildirim listesi(attribute declaration list) denilen bir liste içinde aşağıda belirtilen şekilde tanımlanır: <!ATTLIST ElementName AttrName AttrType Default><br /> <br /> Görüleceği gibi bir özellik; isim(AttrName), tip(AttrType) ve öndeğer(default) olmak üzere üç bileşenden oluşmaktadır.Bir özellik bildirimi sırasında kullanılabilecek olan dört öndeğeri vardır: • • • •<br /> <br /> #REQUIRED #IMPLIED #FIXED default<br /> <br /> #REQUIRED değeri özelliğin eleman için mutlaka gerekli olduğunu belirtir. #IMPLIED değeri özelliğin seçimsel olduğunu ve eleman için kullanımının zorunlu olmadığını belirtir. #FIXED değeri özelliğe atanacak değerin sabit olacağını ve bunun da özelliği, bir bilginin sabit bir parçası durumuna getireceğini belirtir.<br /> <br /> XML 10 tane farklı özellik tipini desteklemektedir: • • • • • • • • • •<br /> <br /> CDATA :Parse edilmemiş karakter verisi Enumerated :Bir dizi değer NOTATION :DTD içinde herhangi bir yerde tanımlanmış olan notasyon ENTITY: Dışsal bir binary entity ENTITIES Birden fazla dışsal binary entity ler ID : Biricik bir tanımlayıcı IDREF: DTD içinde tanımlanmış olan bir ID ye referans edilen değer IDREFS: DTD içinde birden fazla ID lere refere edilen değerler NMTOKEN: XML token değerlerini içeren isim NMTOKENS:XML tone karakterlerini içeren isim boşlukları<br /> <br /> “String Attribute”ları “String attribute”lar CDATA tarafından gösterilen ve en çok kullanılan özellik tipidir. CDATA tipi özelliklerin bir metin “string”ini içereceğini belirtir.Aşağıdaki örnekte CDATA tipi ile beraber oyuncu elementinin kullanılışı gösterilmiştir: <!ATTLIST oyuncu takim CDATA #REQUIRED><br /> <br /> Bu örnekte oyuncu‘nun ait olduğu takim, oyuncu elemanının bir özelliğidir.Bu özellik, oyuncu elemanı için gerekli olan bir karakter verisi tipinde olmalıdır. Bu takim özelliğini seçimsel hale getirmek isteseydik: <!ATTLIST oyuncu takim CDATA #IMPLIED> şeklinde kullanmamız gerekirdi.<br /> <br /> “Enumerated Attribute”lar Bu tür özellikler daha önceden tanımlanmış bir metin dizisinin listesini içerirler. “Enumerated” tipi CDATA tipine benzemektedir ancak bu veri tipinde kabul edilebilir özellik değerleri, özellik listesi bildirimi içinde sağlanmaktadır.Şimdi, oyuncu elemanına “enumerated” bir özellik değeri olan pozisyon bilgisini de ekleyelim: <!ATLIST oyuncu pozisyon (ortasaha | forvet | savunma | kaleci) "ortasaha"><br /> <br /> Bu örnekte pozisyon değerinden birini seçebilmekteyiz. Eğer hiçbir şey seçmezsek “default” değer olan “ortasaha” devreye girer.<br /> <br /> 4.4. XML Ayrıştırma (XML Parsing) Bir XML belgesi bir bakımdan da yalın bir metin belgesi olarak görülebilir. Tam olarak bir XML kütüğü arka arkaya sıralanmış gerçek bir anlamı olmayan karakterler dizisidir (tabii bir bilgisayar onları yorumlamadığı sürece!). Bir metin düzenleyici, XML kütüğü yaratabilir ama onu bir dizi karakter olarak görür. Sıradan bir metin düzenleyici, XML belgesi içindeki sıralı karakterlerin içinde barındırdığı mantıksal yapı hakkında hiçbir şey bilmez.<br /> <br /> XML iki bilgisayar arasındaki iletişimde kullanıldığı için, XML belgesinin mantıksal içeriğine ya da “anlamına” erişmek önemlidir. Bu nedenle XML belgesi, bir dizi karakterden mantıksal bir yapıya çevrilmelidir. Bir XML parser’ı ya da işleyicisi, mantıksal yapıya dönüştürme işlemini gerçekleştirebilir. XML’in amacı bilgisayardan bilgisayara iletişime yardım etmek olduğu için, bir XML parser’ı diğer bir yazılımın ya da bilgisayarın daha sonra işleyebileceği bir çıktı üretir. Biraz daha değişik bir açıdan bu düşünce şu şekilde ele alınabilir. Bir XML belgesini parse etmenin amacı diğer uygulamaların, XML belgesinin mantıksal yapısının içeriğine erişip inceleme yapabilecekleri arayüzler üretmektir. Bu üretim sırasında uyulacak bazı kurallar vardır. Örneğin bir “validating parser” bir XML belgesinin hem valid hem de well-formed olduğunu sınamalıdır. Fakat bir “nonvalidating parser” sadece belgenin well-formed olup olmadığını sınar. Şimdi de bir uygulamanın XML işleyicisinden elde ettiği çıktıyı nasıl ele alabileceğine bakalım. Bir programdan, XML belgesi okumanın dört yolu vardır. Bunlardan birincisi bir bilgisayar yazılımı üretmemiz ve kendi arayüzümüzü yaratmamız. Fakat genelde, daha çok kabul gören SAX(the Simple API for XML) ve DOM(the Document Object Model) isimli test edilmiş arayüzler kullanılır. 4. yol ise bir API’ye sahip XML Parser’ını kullanmak. Temelde iki çeşit XML API’si (Application Programming Interface) bulunur: ağaçtabanlı ve olay-güdümlü (tree-based/event-driven). Ağaç tabanlı API’ler XML belgesini bir ağaç yapısına dönüştürür ve bir uygulamanın bu ağacı dolaşmasını sağlar. DOM isimli API bu tür API’lere bir örnektir. API kullanan uygulama, veri-merkezli değil de belge-merkezli çalışacaksa yani uygulama belge içindeki veriler yerine belgenin kendisiyle olan işlemlere daha çok ağırlık veriyorsa ağaç-tabanlı API’ler çok daha kullanışlıdır. Bununla beraber ağaç kullanmak sistem kaynaklarınızda ağır bir yük yaratabilir. Eğer belgenin tamamı yerine bir kısmı ile ilgileniyorsak bu kötü bir özellik olacaktır. Bir başka olasılık ise ağaç tabanlı temsilin sorunumuza tam uymamasıdır. Küçük bir işlem için API’nin oluşturduğu ağaç yapısına uyumlu uygulamalar geliştirmek zaman ve uğraş ister. Diğer taraftan “Event-driven” API’ler parse edilme esnasındaki olayları (eleman başlangıç ve bitişi gibi) doğrudan uygulama programına aktarır. Böylece ağaç yapısına gerek kalmaz. Uygulama programı, değişik olaylarlı(event) ele alabilmek için “handler” lar geliştirir. SAX bu tür API’ler arasında en çok bilinenidir. 4.4.1. SAX (Simple API for XML) SAX, W3C tabanlı olmayan pek az XML tabanlı standartlardan biridir. XML-DEV mailing List’deki tartışmalarda ortaya çıkmıştır. SAX , DOM gibi ağaç tabanlı API’lere göre , XML belgesine daha basit ve daha alt düzeyli bir erişim sağlar. Hafızaya sığmayan çok büyük belgeleri parse etmek SAX ile mümkündür. SAX şu şekilde çalışır:<br /> <br /> Bir “XML Parser”ı XML belgesini taradığında SAX, herbir etiket ile bir olay ilişkilendirir. Bu olay’ın farkedilmesi uygulamya bırakılır. Sonra da uygulamamız amacına göre her bir olay’ı ele alır. Kullanıcılar, SAX’ın ürettiği olaylar için “event handler”lar yazabilir. Gerekli işlemleri yapmak ve olayların , XML belgesi ile tutarlı olduğunu sınamak, olayı ele alan uygulamaya bırakılmıştır. Bu işlem için bütün belgeyi hafızada tutmaya gerek yoktur.<br /> <br /> SAX’ın nasıl çalıştığını daha iyi anlamak için şu küçük XML belgesini inceleyelim: <?xml version="1.0"?> <belge> <para>Basit bir örnek</para> </belge><br /> <br /> SAX kullanan bir “parser” belgeyi şu şekilde bir dizi olay haline getirir: startDocument startElement: belge startElement: para characters: Basit bir örnek endElement: para endElement: belge endDocument<br /> <br /> SAX’a istemci konumunda olan bir uygulama bu olayları ele alır ve istenilen faaliyetleri yerine getirir. Bütün belgenin hafızaya alınmasına böylece gerek kalmaz ve belgenin içinde ilgilenmediğimiz herhangi bir bölümü yazacağımız uygulama ile ele almak zorunda kalmayız. 4.4.2. DOM (Document Object Model) DOM, W3C tabanlı bir modeldir. Bu model ile XML belgesi düğümlerden oluşan bir ağaca dönüştürülür ve bu ağaç bilgisayar hafızasına alır. Bütün belge, hafızada bir kerede tutulmak zorundadır. Bu nedenle, çok büyük XML belgelerini DOM tabanlı yaklaşımla ele almak, hafıza yetersizlikleri nedeniyle kısıtlamalar getirebilir. Ayrıca DOM’u çok büyük belgelerde kullanmak, yavaş bir işlemdir. DOM, XML ağaç yapısına ulaşımı kolaylaştırmak için bir dizi arayüzler (inerface) içerir. Bu arayüzler de düğüm tipine göre değişen metod ve özellikler içerir. DOM'un temel arayüzü düğümdür. Herhangi bir düğüm ise eleman, özellik veya metin olabilir. Düğüm arayüzü bütün düğüm tipleri için ortak olan metod ve özellikler içerir. Diğer DOM arayüzleri ise düğümden türetilmişlerdir. Şimdi, örnek bir xml belgesi üzerinde istenen bir düğüme a nasıl ulaşıldığına bakalım. Burada ulaşılmak istenen bilgi, pembe renkle gösterilen "Prescod" değeri.<br /> <br /> Bu yapının, XML belgesi aşağıdaki gibidir: <?xml version="1.0"?> <kitaplar> <kitap> <baslik>The XML Handbook</baslik> <yazar>Goldfarb</yazar> <yazar>Prescod</yazar> <kitabevi>Prentice Hall</kitabevi> <sayfa>688</sayfa> <isbn>1-3081-1521-0</isbn> <fiyat currency="DM">44.95</fiyat> </kitap> <kitap> <baslik>XML Design</baslik> <yazar>Spencer</yazar> <kitabevi>Wrox Press</kitabevi> <sayfa>426</sayfa> <isbn>1-861002-28-9</isbn> <fiyat currency="USD">39.99</fiyat> </kitap> </kitaplar><br /> <br /> Aşağıdaki HTML sayfası ise bu veriyi işleyen Java Script kodu içeriyor ve MS Internet Explorer 5.x tarayıcı ile çalıştırılabilir. Yani XML işlenmesi (parsing) istemci (client) tarafında gerçekleşiyor. Bu kod parçası XML işleyicisi olarak "Microsoft.XMLDOM" kullanıyor. <HTML> <HEAD><TITLE>DOM Örneği

DOM Example

<SCRIPT LANGUAGE="JavaScript"> var doc, kok, kitap1, yazarlar, yazar2; doc = new ActiveXObject("Microsoft.XMLDOM"); doc.async = false; doc.load("kitaplar.xml"); if (doc.parseError != 0) alert(doc.parseError.reason); else { kok = doc.documentElement; document.write("Kok node un adı: " + kok.nodeName + "
"); document.write("Kok node un tipi: " + kok.nodeType + "
"); kitap1 = kok.childNodes.item(0); yazarlar = kitap1.getElementsByTagName("yazar"); document.write("Yazarların adedi: " + yazarlar.length + "
"); yazar2 = yazarlar.item(1); document.write("İkinci yazarın adı : " + yazar2.childNodes.item(0).data); }

4.4.3. XPath W3C tanımına göre XPath: XML belgesinin ağaç yapısı içerisindeki elemanların adreslenmesi için geliştirilmiş bir dildir. XSLT ve XPointer tarafından da kullanılır. XPath, XML belgelerindeki elemanlar, özellikler ve diğer XML düğümlerinin adreslenmesi için basit ve standart bir yapı sağlar. XPath standardı, üç diğer W3C standardının içinde yeralmaktadır: Bunlardan birincisi XSLT, ikincisi XLink ve bunun içinde yer alan XPointer, ve üçüncüsü ilk XML sorgulama dillerinden biri olan XQL'dir. XPath’in, bir belge içindeki elemanlarının dizilişini gösteren şablonları sağlamak amacıyla da bir sözdizimi bulunur. Önemli noktalardan biri de şudur ki XPath XML sözdizimini kullanmaz. XPath’in tanımında XML sözdiziminin kullanılmamasının getirdiği yararlardan biri de XPath’in URI’ler ve XML özellik değerleri içinde kullanılabilmesidir. XPath XML’deki “namespaces” leri destekler. Çünkü XPath, XML belgesini düğümlerden oluşan bir ağaç olarak görür. Bir düğümün adı yerel bölüm ve “namespace” den oluşur. İkisi birlikte geniş ismi (“expanded name”) oluşturur.

XPath sözdizimini oluşturan temel yapı, deyimleridir. XPath deyimleri, nesneleri işler ve sonuçta; “node-set” (birkaç düğümün birleşimi) , “boolean” (mantıksal) , “number” (sayı) veya “string” (dizi) türlerinden biri şeklinde sonuç üretir. XPath’e göre, XML belgesinin ağacının düğümleri 7 türde olabilir. Bunlar : • • • • • • •

Kök düğümler (root nodes) : Ağacın kök düğümü. Eleman düğümleri (element nodes) : Belgedeki her eleman için oluşturulan düğümler. Metin düğümleri (text nodes) : Karakter bilgileri metin düğümleri içerisine gruplandırılmışlardır. Özellik düğümleri (attribute nodes): Her eleman düğümünün sahip olduğu özelliklerin her biri için bir çocuk bulunur. Namespace nodes: Her eleman, bir küme namespace düğümü ile ilişkilendirilir. İşlem komutları düğümleri (processing instruction nodes) : DTD (decleration) içinde yer alanlar hariç her işlem komutu bir düğümde bulunur. Yorum düğümleri (comment nodes): DTD (decleration) haricinden her yorum satırı bir düğümde yer alır.

XPath'deki adresleme mekanizmasının kalbi, "location path" dir. "Location path"ler ulaşılmak istenen yerin bulunulan noktaya (context node) göre yerini belirler. XPath'in tanımında da görülebileceği gibi XPath'de 13 adet axis (eksen) bulunur: child axis: Bulunulan düğümün çocuk düğümü. Bir düğüm için varsayılan (default) axis budur. descendant axis: Bulunulan düğümün çocuğu veya çocuğunun çocuğu veya bu şekilde herhangi bir seviye altındaki alt düğüm. parent axis: Bulunulan düğümün bir seviye üstteki düğümü. ".." ile ifade edilir. ancestor axis: Bulunulan düğümün atası veya herhangibir seviye üstündeki düğümü following-sibling axis: Bulunulan düğümün devamındaki kardeş (aynı seviyede) düğümler preceding-sibling axis: Bulunulan düğümden önce gelen kardeş düğümler following axis: Belgedeki sıraya göre bulunulan düğümden sonra yer alan, alt düğümleri hariç bütün düğümler preceding axis: Belgedeki sıraya göre bulunulan düğümden sonra yeralan, ataları hariç bütün düğümler attribute axis: Bulunulan düğümün özellikleri. "@" öneki ile tarif edilir. namespace axis:bulunulan düğümün namespace düğümleri self axis: bulunulan düğümün kendisi. "." ile ifade edilir. descendant-or-self axis: bulunulan düğümün kendisi ve ata (descendant) düğümleri. "//" ile ifade edilir. ancestor-or-self axis: bulunulan düğümün kendisi ve alt (ancestor) düğümleri XPath sözdizimine birkaç örnek verelim. Burada para ifadesiyle parametre elemandan söz ediyoruz. • • • •

child::para : Bulunulan elemanın para çocuğunu seçer. child::* : Bulunulan düğümün bütün çocuklarını seçer. child::text() : Bulunulan düğümün çocukları arasından metin düğümlerini seçer. child::node() : Bulunulan düğümün hangi türde olursa olsun bütün çocuklarını seçer.

• • • • • • • • • •

child::bolum/descendant::para : Bulunulan düğümün bolum elemanı çocuğunun soyundaki bütün para elemanlarını seçer. child::*/child::para : Bulunulan düğümün bütün torunları arasından para düğümünü seçer. attribute::name : Bulunulan düğümün name özelliğini seçer. Attribute::* : Bulunulan düğümün bütün özelliklerini seçer. / : Belge kökünü seçer. (Bu bütün elemanların atasıdır) /descendant::para : Bulunulan düğümle aynı belgede yer alan bütün para düğümlerini seçer. child::para[position()=1] : Bulunulan düğümün ilk para çocuğunu seçer. child::para[position()=last()] : Bulunulan düğümün son para çocuğunu seçer. child::para[position()=last()-1] : Bulunulan düğümün sondan bir önceki para çocuğunu seçer. child::para[position()>1] : Bulunulan düğümün ilk para çocuğunun haricindeki para çocuklarını seçer.

4.4.4. XPointer XPointer’ın amacı, herhangi bir URI(Uniform Resource Identifier) referansı için, XML belgesinin içinde kesimler yaratmaktır. Başka bir deyişle, XPointer, XML belgesinin iç yapısını ve bu belgelerin içindeki XML kesimlerinin yerlerini adreslemeyi destekler. Diğer bir deyişle, XPointer sıradüzensel bir belgenin yapısının sınanmasına izin verir. XPointer, XPath üzerine kurulmuştur ve XPath’ın ifadelerini kullanır, ayrıca XPath’ın içindeki bazı ifadelerin genişlemesini sağlar. Bu genişlemeler XPath’in şunları yapmasına yardımcı olur: • Düğümlerin yanında XML belgesi içinde herhangi bir noktanın ya da herhangi iki nokta arasının da adreslenmesini sağlar • Dizi eşlemesi yaparın bilgilerin yerini belirler. • URI referanslarındaki adresleme deyimlerini kullanmaya olanak sağlar. XPointer kullanarak bir nesnenin yerini belirlediğimzde bunu bağlama (link) için bir taban olarak kullanabiliriz. Birkaç küçük örnek ile XPointer’ın nasıl çalıştığına bir göz atalım. İlk olarak şu XML belgesini ele alalım: ]> Tolga pencereden dışarı Acele et , ders başlıyor Levent’e Mehmet birazdan sınıfta olur

Bazı XPointer deyimleriyle bu belgeden kaynaklar seçelim: id(a27).child(2,yon)

İkinci “yon” elemanını seçer (içeriği “Levent’e” olanı). id(a27).child(2,#element)

İkinci çocuk elemanı seçer (bu ilk “yon” , içeriği “pencereden dışarı” olan). id(a27).child(2,#text)

İkinci metin bölümünü seçer , "Mehmet birazdan sınıfta olur" (“Acele et ders başlıyor” ilk bölgeydi) Gördüğümüz üzere #element ve #text yardımıyla içeriğini tam olarak bilmediğimiz bölümleri de seçtik. Bu değerler sırasıyla şunlardır ve şu anlama gelirler: #element

XML elemanlarını seçmekte kullanılır.

#pi

XML işleyici komutlarını seçmekte kullanılır. #comment

XML açıklama satırlarını seçmekte kullanılır.

#text

elemanlar arasındaki ve CDATA bölümlerindeki metin alanlarını seçmekte kullanılır. #cdata #all

CDATA bölümleri içerisinde bulunan metin alanlarını seçmekte kullanılır. Yukarıdaki düğüm türlerinden hepsi için kullanılır. XPointer kullanarak, düğümler özelliklerine göre de seçilebilir. Örneğin alttaki terim

kaynağın , HEDEF özelliğine sahip ilk çocuğunu seçer. child(1,#element,TARGET,*)

Bu örnekte is bir çocuk elemanı N özelliği kullanılarak seçiliyor: child(1,#element,N,2).(1,#element,N,1)

Kaynağın başından başlayarak eleman tipi ne olursa olsun N isimli özelliği “2” değerine sahip ilk çocuk seçiliyor. Daha sonra bu elemanın N isimli özellik değeri “1” olan ilk çocuğu seçiliyor. Örneklerden de gördüğümüz gibi XPointer XPath’e çok benziyor fakat çok daha gelişmiş seçme özelliklerine sahip. 4.4.5. Xlink XPath ve XPointer’dan farklı olarak, Xlink’in sözdizimi XML’e bağımlıdır.

Xlink, hem temel bağlar; hem de daha karmaşık bağ yapıları için temel bir yapı oluşturur. Daha karışık bağ işlevlerinden hareketle, Xlink, internet bağları(hyperlink) de sağlar. W3C’ye göre, XLink, XPointer ile koşut kullanılmalıdır. XLink , XML belgelerine , kaynaklar arası bağları tanımlayan ve yaratan elementler yerleştirmeye izin verir. HTML’deki etiketi gibi bağlar yanında XLink daha karmaşık bağlama işlevlerini de gerçekleştirir. XLink, kaynaklar arasındaki net ilişkidir. Bir kaynak (resimler, kütükler, programlar, belgeler ve sorgu sonuçları) ise bir bilginin ya da servisin herhangi bir adreslenebilir bileşenidir. Özetle XLink , XML dökümanlarına şunları yapmamızı sağlar: • • •

İkiden fazla kaynak arasında bağ kurmamızı, Meta-veriyi bağlarla birleştirmemizi, Bağlanmış kaynaklardan farklı yerlerdeki bağları ifade etmemizi sağlar.

4.4.6. “XML Parser” ları (XML Ayrıştırıcıları) Bir XML Parser’ı (XML işleyicisi olarak da bilinir), XML belgesinin söz dizimini ve mantıksal içeriğini denetler. Bütün ayrıştırıcı XML belgesinin iyi-oluşturulmuş (well-formed) olup olmadığını kontrol eder Ek olarak, geçerleyici ayrıştırıcılar belgenin uygun DTD ile eşleşip eşleşmediğini doğrular. Teknik açıdan bakıldığında XML Parser’ı yazmak göreli olarak daha kolaydır. Bu yüzden de artan sayıda parser’lar piyasada mevcuttur. Büyük ihtimalle kullanıcılar doğrudan bir XML Parser’ını kullanmaya ihtiyaç duymayacaklardır. Bunun nedeni genellikle XML Parser’lara erişim sağlayan bileşik bir aracın kullanılmasıdır. Örneğin XML Writer programı arka planda Microsoft MSXML Parser’ını kullanır. Öyleyse bir Parser ne yapar? Bir takım karakterden nasıl mantıksal sonuçlar çıkarır. Aslında bir XML Parser’ı XML metin kütüğünü sıradüzensel bir şekilde tarar. XML belgesinin elementleri gibi bölümleri belirler. Eğer Parser geçerleyici ise, XML belgesinde kullanılabilecek yapıyı belirlemek için, DTD üzerinde basit bir işlem yürütür. Daha sonra Parser, XML belgesinin yapısı ile DTD’ye uygunluk sağlayan yapıyı karşılaştırır. Bu işlem sonucunda da geçerlilik kontrol edilmiş olur. Çok sayıda XML ayrıştırıcısı ücretsiz olarak kullanılabilir. Bunların çoğu hem DOM hem SAX modelini destekler. Bazıları şunlardır: • • • • • • •

Project X (Sun Microsystems) Ælfred (Microstar Software) XML4J (IBM) Project X Lark (Tim Bray) MSXML (Microsoft) XJ (Data Channel) Xerces (Apache)

4.5. XML Şema (XML Schema) XML schema tıpkı DTD lerde olduğu gibi belge içindeki elementlerin ve içerik modellerinin tanımlanması işlemini ve dolayısıyla belgenin geçerlenmesini sağlar. Ancak XML schemalar elemanların bu tanım işleminde zengin bir veri tipi çeşitliliği ve özellik desteği sağlamaktadır. DTD içerisinde, eleman içeriği string ve diğer birkaç veri tipi ile sınırlıdır. XML schema çok geniş bir veri tipi desteği sağlamaktadır (integer,floating point sayılar,date,time, gibi). XML schema ayrıca açık içerik modeli(open content model) ve isim uzayı(namespace integration) gibi ek özellikler de sunmaktadır. XML schema belgeleri oluşturulması sırasında XML sözdizimi kullanılmaktadır. Bu DTD lere göre çok belirgin bir üstünlüktür çünkü yeni bir sözdizim öğrenmemiz yerine XML’in XML schemaya özel komutlarını öğrenmek yeterli olur. Aşağıda XML schemanın DTD ye göre olan yararları liste halinde verilmiştir: • • • • • •

XML schemalar XML sözdizimini temel olarak alır.Özel bir sözdizimi gerektirmez Diğer XML belgeleri gibi parse edilip üzerinde işlem yapılabilir Çok geniş bir veri tipi desteği sağlar Open-ended bir veri modeli sunar.Bu model sayesinde elemanlar arasındaki ilişkilerin kurulması ve vocabulary haznesinin genişletilmesi sağlanır Namespace desteği sağlar.Bu özellik schema içerisindeki bildirimler için ayrı node’ları birleştirmeye yarar. Özellik gruplarını destekler. Böylece özellikler mantıksal olarak gruplanabilir.

4.5.1. XML Şema’nın içyapısı XML schema’nın kendisi de bir XML uygulamasıdır, yani kendisi de bir XML “vocabulary” olarak değerlendirilebilir. XML schema kullanarak schemaların oluşturulması tıpkı diğer XML belgelerinin oluşturulmasına benzer. Bu sınırlamalara rağmen XML schema vocabulary yapısının anlaşılabilmesi XML schema DTD yi incelemekte yarar vardır. Bunun için Schema Element ve Elementtype Element kavramları örneklerle anlatılacaktır. Schema Element Schema elementi XML Schema belgeleri için kök eleman olarak hizmet verir ve diğer schema içeriğine taşıyıcılık yapar. Schema elementi iki tane özelliğe sahiptir: • •

name xmlns

name özelliği schema için bir isim belirtilmesine yarar.xmlns özelliğinin ise son derece önemli bir görevi vardır. Schema için bir namespace oluşturulmasına yarar. Bu özellik

örneğin Microsoft’un schema belirtimlerini kullanabilmesi için “urn:schemas-microsoftcom:xml-data” değerine set edilmesi gerekir .Aşağıdaki örnekte XML schema belgesi için name ve xmlns attribute’larının nasıl kullanılacağı basitçe gösterilmiştir. <Schema name="MySchema" xmlns= urn:schemas-microsoft-com:xml-data"> “namespace”ler XML belgesinde görev alan eleman ve özelliklerin biricik isimlere sahip olmasını sağlar.Bir belge veya eleman için namespace olanağı sağlayan xmlns özelliği bir işlem bilgisi olarak(processing instruction) düşünülebilir. xmlns özelliğine ek olarak namespace’in veri tipinin de belirtilmesi gerekir ve bunun için xmlns:dt değeri urn:schemas-microsoft-com:datatypes olarak set edilir.Örneği inceleyelim: <Schema name="MySchema" xmlns= urn:schemas-microsoft-com:xml-data"> xmlns:dt= xmlns= urn:schemas-microsoft-com:xml-datatypes"> Schema elementi, AttributeType,ElementType ve description elementlerini child element olarak içerebilir. ElementType Element Schema elementlerinin tip belirtimleri için ElementType elementi kullanılır. Bu element ise yapısında datatype,element,group,AttributeType,attribute ve description child elementlerini bulundurabilir. ElementType elementi eleman tipinin belirtilebilesi için bazı özellikler içerir. Bunlar: • • • • •

name:Elementin ismini belirtir model:içerik modelin açık yada kapalı oluşunu belirtir content:Element içerisindeki içeriğin tipi order:Element içerisinde bulunan child element ve group’ların sırasını belirtir dt:type :Elementin tipini belirtir.

Şimdi bunları bir örnek üzerinde görelim: <Element name="duration" content="textOnly" dt:type="time"/> <ElementType name="distance" content="textOnly" dt:type="float"/> <ElementType name="session" model="closed" content="eltOnly" order="seq"> <element type="duration"/> <element type="distance"/>
Dikkat edilecek olursa duration ve distance elementleri önce ElementType elemanının kullanılmasıyla bildirilmiş ve daha sonra session elemanının içerik modeli içerisinde element elemanı kullanılarak tanımlanmıştır.

4.6. Well-Formed ve Validated XML Belgeleri XML dökümanları verilen etiket isimleri ile kendini tanımlayabilir olmalıdır. Örneğin: HACETTEPE

Burada açık olarak anlaşılıyor ki HACETTEPE bir okulun adıdır. Aslında işin temeline inmemizde ben yine yarar görüyorum. En başta dedim ya temel sağlam olmalı. XML dökümanları 2 kritere uymalıdır; iyi-oluşturulmuş(well-formed) ve geçerli(valid). 4.6.1. “Well-Formed” Belge Bir XML dökümanının “well-formed” olması için aşağıdaki temel kurallara uyması gereklidir: 1- HTML ve SGML gibi XML de büyüktür (>) ve küçüktür (<) karakterlerini ayıraçlar olarak kullanır. 2- Bu karakterlerle etiket dediğimiz yapılar oluşturulur ve bunlar açıldığı zaman kapatılmalıdır. Tek istisna boş elemandır(değeri olmayan eleman). Bu durumlarda açma ve kapama etiketi aynı olabilir. Örneğin: dediğimizde okuladi diye bir etiketi açmış oluruz ama içinde herhangi bir değer bulunmaz. 3- Etiketlerin eklentileri çift-tırnak içine alınmalıdır. HTML bu açıdan esnektir fakat XML bunu yapmanıza izin vermez. Örneğin HTML’de diye bilirsiniz ama XML’de 3 kesinlikle çift-tırnaklar içine alınmalıdır. 4- Elemanlar aynı HTML’de olduğu gibi iç-içe düzgün bir şekilde tanımlanmalıdır. Her XML dökümanı bir kök elemanına sahiptir ve diğer tüm elemanlar onun çocukları olarak anılırlar. Hemen bir örnek verelim: HACETTEPE Ankara

5- XML’deki elemanlar büyük-küçük harf ayırt eder. Yani ile iki ayri elemandır. Bu yönüyle de HTML’den farklıdır. Bu yüzden XML kodları yazarken ençok karşılaşılacak sorun bu olabilir. 4.6.2. Geçerli Belge(VALID) Geçerli bir belge kendi DTD’si veya şemasında(schema) tanımlanmış kurallara uyan belgedir. DTDler ve şemalar o XML belgesinin her elemanının, neler kapsayabileceğini ve o belgenin organizasyonel yapısını belirler. Örneğin DTD’miz bu şekilde olsun.


kutlama(kime,ileti,kimden)> kime (#PCDATA)> ileti (#PCDATA)> kimden (#PCDATA)>

Bu DTD’yi kullanan XML belgesi de şöyle olsun : Mehmet Doğum Günün Kutlu Olsun

Örnekteki XML belgesi, XML kurallarına göre oluşturulmuş olduğundan, well-formed bir belgedir. Oysa ki, XML belgesinin bildiriminde tanımlanan DTD’yi incelediğimizde, DTD’de tanımlanmış bazı elemanların XML belgesinde bulunmadığı görülür. Ayrıca XML belgesinde yer alan bazı elemanların tanımları DTD’de bulunmamaktadır. Bu nedenlerden dolayı da XML belgesi well-formed olmasına rağmen geçerli değildir.

5. İlgili Teknolojiler 5.1. XSL (eXtensible Stylesheet Language) XML önceden tanımlanmış etiketleri kullanmadığı için (kendi etiketlerimizi tanımlayabildiğimiz için) , bu etiketlerin anlamı anlaşılmaz. , bir HTML çizelgesi anlamına gelebildiği gibi başka birçok anlama da gelebilir. XML’in doğal yapısından dolayı tarayıcı XML belgesini nasıl görüntüleyeceğini bilemez. Bu XML belgelerini göstermek için, belgelerin nasıl gösterilmesi gerektiğini tanımlayan bir mekanizmaya ihtiyaç vardır. Bunlardan biri CSS (Cascading Style Sheets)’dir. CSS, HTML ile kullanılmak üzere tasarlanmıştır. XML ile kullanılacak potansiyeli olmasına rağmen, CSS'in temel işlevi sadece web görsel ortamıdır. Yani web üzerinden sunum yapmaktır. CSS ile bir elemanın renk, büyüklük ve pozisyonu gibi özellikleri rahatlıkla ayarlanabilmektedir. Ancak, sadece web üzerinden sunuma hitap etmesi ve verimize belli kriterlere göre sorgulama yapamaması, CSS’yi çok fazla yaygınlaştıramamıştır. XSL (eXtensible Stylesheet Language) , XML’in tercih edilen “style sheet” dilidir ve XSL, HTML tarafından kullanılan CSS’den daha beceriklidir. XSL de , XML'in yapısını kullanarak sunumlar hazırlamak için kullanılır. Fakat sunum, yalnız web üzerinden değil, aynı zamanda işitsel ya da yazılı da olabilir. Diyelim ki, BAŞLIK diye bir kitap başlığı etiketimiz var. XSL'e, “BAŞLIKı gördüğün zaman, içeriğini bold ve rengini kırmızı yap” kuralını tanımlıyoruz. (verimizi webde

yayınlamak istediğimizi düşünelim). XSL işlemcisi (mesela IE 5 içerisinde bulunan, ya da bir XSL viewer), bunu HTML'e çeviriyor. Yani XSL, XML kodlarını değişik biçimlere çevirmek için kurallar tanımlayan bir stil uygulaması olarak da düşünülebilir. Mesela, görme engelliler için bir web sayfasından verilerin sese çevrilmesi gibi amaçlar için kullanmak hayal değildir XSL 3 kısımdan oluşur: • • •

XML belgelerini çevirmeye yarayan yöntem. XML’in bölümlerini ve şablonlarını tanımlamaya yarayan yöntem XML belgelerini biçimlendiren yöntem.

Daha basitçe XSL, XML’i HTML’e ya da başka yapıdaki XML belgelerine çevirmeye yarayan , XML verisini süzen ve sıralayan , XML belgesinin bölümlerini adresleyen , XML verilerini veri değerine göre biçimlendiren (örneğin negatif değerleri kırmızı renkle gösteren), XML verilerinin çıktısını değişik aygıtlara veren (ekran, kağıt vb.) bir dildir. Eğer belli yapıda bazı verilerimiz var ve aynı amaç içinde kullanmamız gereken başka yapılarda verilerimiz de varsa, ikisinin ortak bir yapıya dönüştürülmesi için, belgemizi başka bir XML belgesine çevirmek gereğini duyabiliriz. Üstteki üç madde aslında XSL’i oluşturan üç ayrı dile denk düşer: • • •

XSLT : XML’i çevirir. XPath : XML’in bölüm ve şablonlarını tanımlar. XSL-FO(Formatting Objects) : XML görüntülenmesini tanımlar.

XSLT, XML belgelerini diğer türden belgelere veya diğer XML belgelerine çevirmeye yarar. XPath, XML belgelerinin kısımlarını adreslemekte kullanılır. XPath, XSLT tarafından kullanılır. Biçimlendirme işlemi, XSL çevirisinin sonuçlarının, kullanıcı (okuyucu yada dinleyici) tarafından anlaşılabilen uygun bir biçime dönüştürülmesidir. XSL dili halen W3C tarafından geliştirilme aşamasında olduğu için burada söylediklerimiz sadece ana içeriği belirtmekle yetiniyor. Daha ayrıntılı konular XSL tamamlandığında görülecek. Şimdi XML ile ilgili çok basit bir örneği inceleyerek daha iyi anlayalım : <xsl:template match="kitapçı">

<xsl:process-children/> 'ya hoş geldin



Bu örnekte, belirtildiği gibi kitapçı etiketi bulunduğu zaman, kitapçı etiketine belirttiğimiz bu kural uygulanacaktır. Mesela PANDORA

şeklinde bir kaydımız varsa, bunun HTML çıktısı şöyle olacaktır :



PANDORA'ya hoş geldin



Bir XSL belgesinin genel biçimi aşağıdaki biçimdedir. Bir XSL belgesi aşağıdakine benzer bir şekilde başlar. XSL de “Namespace”ler çok önemlidir. <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl" xmlns:fo="http://www.w3.org/TR/WD-xsl/FO" result-ns="fo">

Aşağıdaki şekilde bir kural belirlenir... <xsl:template match="başlık"> <xsl:apply-templates/>

Burada başlık etiketi görülen her yerin, ortalanarak yazılması için kural tanımlanmıştır. Ayrıca XSL'de bir programlama diline benzer olarak bazı kalıplar mümkündür. Mesela, for-each döngüleri, if benzeri mantıksal işlemler, belli kriterlere göre sıralama ve bunun gibi işlemler için aşağıdaki yapılar mevcuttur: • • • • • • •

<xsl:for-each select="xml/album"> <xsl:value-of select="artist"/> <xsl:if match=“artist[0]”> <xsl:choose><xsl:when test=“artist”> <xsl:apply-templates select="xml"> <xsl:template match="artist"> <xsl:for-each select="xml/album" order-by="+category;+title">

5.1.1. XML'in Sunulması (CSS-XSLT) Web'de yaygın olarak kullanılan markup dili HTML, sunuşa yönelik markup içerir. HTML dokumanlarının sunumunu etkilemek için CSS stylesheet leri kullanılabilir. XML ise anlamsal markup kullanır. Dolayısı ile XML verisinin herhangibir media tipinde sunulması bir stylesheet gerektirir. XML verisinin görünümünü değiştirmek için CSS2 kullanılabilir. XSLT(XSL Transformations) ise XML'i herhangibir biçimdeki başka bir XML dokumanına veya HTML'e dönüştürmek için kullanılabilir. XSLT de bir W3C standardıdır. XSLT'nin çalışma prensibini anlamak için CSS2 ile karşılaştıralım.

CSS, bir Web dokumanının sunuşunu (fontlar, renkler, kenar boşlukları,...) , onun yapısına dokunmadan kontrol etmeye, değiştirmeye imkan sağlar. İşlem sırasında baz olarak dokuman alınır. XSLT'de ise sunuşun nasıl olacağını tamamen stylesheet içindeki komutlar berlirler. Stylesheet, XML dokumanı içeriğini seçer ve sunum için biçimlendirmeyi belirler, hatta XML dokumanında hiç olmayan bilgiler de ekleyebilir. Yani işlem sırasında baz olarak stylesheet alınır. XSLT içinde, bir XML dokumanının bölümlerini tarif etmek için yine bir W3C strandardı olan XPATH dili kullanılır. Ek olarak XSLT ile bir XML dokumanının belli bölümleri filtrelenebilir, bölümler sıralanabilir (sort), dokuman tamamen dönüştürülebilir.

Şimdi basit örnek üzerinde XSLT'nin nasıl çalıştığına bakalım. Kullanacağımız XML belgesi aşagıdaki gibi: <musteriler> <musteri> Customer1 <siparis>siparis1 <siparis>siparis2 <musteri> Customer2 <siparis>siparis3 <siparis>siparis4 <musteri> Customer3 <siparis>siparis5



Bu XML dokumanını işleyeceğimiz XSL belgesi de aşağıdaki gibi: <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/TR/REC-html40"> <xsl:template match="/"> <TITLE>Musteriler

Musteriler

<xsl:apply-templates/> <xsl:template match="*"> <xsl:apply-templates/> <xsl:template match="musteriler">
<xsl:apply-templates select="musteri"/>
<xsl:template match="musteri"> <xsl:apply-templates select="isim"/> <xsl:for-each select="siparis"> <xsl:apply-templates/>

Buradaki mavi boyalı kısımlar XPATH “formatında” "pattern-matching" deyimleri, yeşil boyalı kısımlar, XSLT komutları, pembe boyalı kısımlar ise çıktının HTML biçiminde çıkmasını sağlayan HTML tagleridir. Bu işlemin sonucunda oluşacak çıktı ise

<TITLE>Musteriler

Musteriler

Musteri1 Siparis1 Siparis2
Musteri2 Siparis3 Siparis4
Musteri3 Siparis5


şeklinde olacak ve tarayıcıda şu şekilde gözükecektir: Musteriler Musteri1 Siparis1 Siparis2 Musteri2 Siparis3 Siparis4 Musteri3 Siparis5 Bu kaynak ile aynı çıktıyı, sadeleştirilmiş bir XSL belgesi ile de elde edebiliriz. Bu XSL'de <xsl:for-each> kullanılarak <xsl:template> elamanlarının adedi bir taneye indirgenmiş. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/TR/REC-html40"> <xsl:template match="/"> <TITLE>Musteriler

Musteriler

<xsl:for-each select="musteriler/musteri"> <xsl:for-each select="siparis">
<xsl:apply-templates select="isim"/> <xsl:apply-templates/>



XSLT de bunlara ek olarak şu işlemler de gerçekleştirilebilir: xsl:sort ile çıktıdaki XML elemanları farklı bir sıraya göre sıralanabilir <xsl:sort> ‘un sıralama şeklini belirlemek için özellikleri vardır: –order – "ascending" / "descending" ya da –data-type – "text" / "number" , gibi Örnek: – elemanlarının azalan <maas> elemanına göre sıralanması <xsl:apply-templates select="calisan"> <xsl:sort select="maas" order="descending" data-type="number"/>

Birden çok <xsl:sort> ile çoklu sıralama yapılabilir <xsl:apply-templates select="calisan"> <xsl:sort select="region"/> <xsl:sort select="name"/>

xsl:variable ile değişkenler tanımlanabilir <xsl:variable name="sehir" select="'Ankara'"/>

xsl:if ve xsl:when-xsl:choose komutları ile XML dokumanının içeriğine göre şartlı işlem yapılabilir. Burada örneğin xsl:if proglamlamada bildiğimiz if deyimine karşılık gelirken xsl:choose switch-case deyimine karşılık gelir. <xsl:template match="calisan"> <xsl:if test="maas>50000"> Yuksek Maas - <xsl:value-of select="isim"/>


xsl:import ile birden fazla XSL dokumanı birleştirilebilir

<xsl:stylesheet xmlns:xsl="http://www.w3.org/XSL/Transform/1.0"> <xsl:import href="article.xsl"/> <xsl:import href="bigfont.xsl"/> <xsl:attribute-set name="note-style"> <xsl:attribute name="font-style">italic

veya kaynak XML belgesinde hiç olmayan veriler eklenebilir, olan veriler tamamen değiştirilebilir. 5.1.2. XQuery XML Query SQL’in ilişkisel veri tabanlarının bağlamında kullanıldığı gibi kendi deyimleriyle XML belgelerine veya veri kaynaklarına erişim , sorgulama , kullanımı sağlar. XML Query’nin şekillenmesi halen devam etmektedir. Şu ana kadar üç düşünce şekil almıştır: veri modellemesi , sorgu cebiri ve sözdizim. Buradaki asıl amaç XML Query’nin bildirilebilir ve sözdiziminin XML uyumlu olmasıdır. Ayrıca sıradüzenselliğe ve dizilere erişime , birleşikliğe izin verir. Gittikçe daha çok bilgi XML kullanılarak saklanıp , transfer edildikçe XML veri kaynaklarını akıllıca sorgulamak da o denli önem kazanıyor. XML’in en büyük güçlerinden biri de çeşitli kaynaklardan elde edilen değişik bilgilerin sunumundaki esnekliğidir. Bu esnekliği iyi bir şekilde kullanabilmek için , XML sorgu dili , bu bilgileri almak ve yorumlamak için çeşitli özellikler sağlamalıdır. XQuery aşağıdaki özelliklerle yakından ilgilidir : • • •

XQuery veri modeli , bir XML belgesi tarafından XQuery işleyicisine sunulmuş bilginin nasıl olması gerektiğini tanımlar. XQuery’nin tür dizgesi XML Schema’yı taban alır. XQuery oluşturumundaki diğer bir gerekli özellik , oluşturulan XML sorgu dilinin hem okunabilir bir sözdizime sahip olması hem de XML tabanlı bir sözdizime sahip olmasıdır.

XQuery güçlü bir dildir. Sorgu , bir şemadan tür tanımları alabilir. Bir sorguyu işletmek, durağan yazım aşaması ve dinamik hesaplama aşaması içerir. XQuery çoklu uyumluluk düzeyine sahiptir. Örneğin durağan yazım denetimini içermeyen bir uyumluluk düzeyi olabilir. Ya da şemadan tür tanımları alımını desteklemeyen bir uyumluluk düzeyi de olabilir. Xquery; • İşlevsel dildir. • Deyimler başka deyimlerle birleştirilebilir. Xquery deki deyimler şunlardır: • Sabitler ve değişkenler $x, 47.2, “Merhaba” • İşleçler ve işlev çağırmaları(function calls)



hesapla($a+1, $b-2), $kediler UNION $köpekler Yol deyimleri ( XPath notasyonunu kullanılır /bolum[2]//sekil[baslik=“Kayısı”]

Xquery ile ilgili birkaç örnek; “ ‘meyve.xml’ adlı belgenin, ikinci bölümünde ‘Kayısı’ başlıklı bütün şekilleri bul ” document(“meyve.xml”)/bolum[2]//sekil[baslik=“Kayısı”]

“Hacettepe yayınevi tarafından 1999'da basılan bütün kitapları bul” FOR $b IN document(“bib.xml”)//kitap WHERE $b/year = “1999” AND $b/yayinevi = “Hacettepe” RETURN $b SORTBY (yazar, baslik)

“ ‘meyve.xml’ adlı belgede 2. Bölümden 5. Bölüme kadar olan bütün şekilleri bul. document(“meyve.xml”)/bolum[RANGE 2 TO 5]//sekil

“ ‘bibly.xml’ belgesi içindeki bütün kitapları bul” document("bibly.xml")//kitap

Bu sorgu sonucunda şöyle bir sonuc dönecektir. İşletim Dizgeleri <soyisim>SaatçiAli ... Veri Tabanı <soyisim>YarımağanÜnal...

5.2. XHTML (eXtensible HyperText Mark-up Language) XML ilk piyasaya çıktığında, onun HTML’in yerini alacağını hepimiz duymuşuzdur. Bu kesinlikle mümkün değil, çünkü XML diğer işaretleme dillerini yaratmada kullanılacak bir meta dildir. Gerçek amaç her zaman için HTML’i XML kurallarına göre yeniden düzenlemekti. W3C bunu gerçekleştirdi ve sonuçta XHMTL oluştu. XHTML Ocak 2000’de bir W3C standartı haline geldi ve şimdide web’de giderek yaygınlaşmaya başladı. Tarayıcı şirketleri için bu , tarayıcılarını XHTML kodu ile çalıştırılabilir hale getirmelerini gerektiriyordu. Uygulama geliştiricileri için ise dilin inceliklerinin öğrenmek lazımdı. XHTML gerçekte HTML’e çok benziyordu. Böylece çok fazla yeni özellik ve element öğrenmeye gerek yoktu. Uygulama geliştiriciler için en önemli değişim, XHTML’in sözdizim kurallarına sıkı sıkıya bağlı olma zorunluğudur. Bu tarayıcıların o anki çalışma şekillerinden oldukça değişikti. Eğer söz dizim hatalı bir HTML belgesi üretirsek çoğu tarayıcı bunu görmemezlikten gelerek belgeyi yorumlayacaktır. Bu çeşit “görmezden gelme” özellikleri XHMTL’de yok.

XHMTL ayrıca bir HTML uygulamasıdır. HTML standartının aslı, SGML kullanılarak yazılmıştır. Fakat XML ile birlikte HTML’i XML uygulaması şeklinde yeniden düzenlemek mantıklı hale gelmiştir. İşte bu çabanın sonucu XHTML 1.0 Standart’ıdır. 5.2.1. XHTMLin Getirdiği Yenilikler: XHTML, HTML’in içerdiği birkaç sorunu ortadan kaldırır. Birincisi ve en önemlisi , bir XHTML belgesi sözdisimsel hatalı ise kullanılamaz. Bu XML sayesinde kazanılmış bir özelliktir. XML’in en önemli özelliklerinden biri de , bir belgenin sözdizimsel olarak doğru (”well-formed”) veya DTD’sine uygun (geçerli “valid”) olmadan uygulanamamasıdır. Bundan yola çıkarak eğer herhangi XHTML belgesi sadece bir sözdizimsel hataya bile sahipse reddedilir. İkinci olarak, Web programcılarının CCS kullanarak, içeriğin web’de nasıl temsil edileceğine etki etmelerini sağlar. En kesin haliyle XHMTL, herhangi bir elementinin, belgenin içeriğinin nasıl temsil edileceğine etki etmesine izin vermez. 5.2.2. Neden XHMTL? Şimdiden XHTML’in iki yararını öğrendik. Tabii bundan başka yararları da var. Şimdi onlara göz atalım: •







Standartlaştırma: HTML her zaman standartlaştırılmış bir dil olmuştur. Fakat bu standart, çoğu kez tarayıcılar ve yazılım araçları üreten yazılım şirketleri ve programlamacılar tarafından görmezden gelinmiştir. Hakikaten Netscape ve Microsoft’un hazırladığı patentli etiketler, diğer tarayıcılar için sorunlar çıkardı ve W3C’yi HTML dünyasına bir düzen getirmeye mecbur etti. XHTML ile herkes sözdizimsel kurallara uymak zorunda. Böylece koddan doğan sorunlar kalkmış olacak. Genişleyebilirlik: XHTML bir XML uygulaması olduğundan dolayı, kalıtımsal olarak genişleyebilirdir. Bunun anlamı diğer elementlerin sözdiziminde en küçük etkiyi yaratarak yeni elementlerin ve özelliklerin dile eklenebilmesidir. Bu XHTML’in sabit hızla değişen web yayını ihtiyaçlarına cevap verebilmesinin sağlayacaktır. Dağınık kodlamayı engeller: Kodu kodlama alışkanlığı, geçmişteki sitelerin kabusu haline gelmişti. Ayrıca arama motoru dizinleme programları, sitemizi dizinine dahil ederken mümkün olan en iyi işi yapabilmesi için, iyi kodlanmış sitelere ihtiyaç duyar. XHMTL bizi iyi kod yazmaya zorlarken, işlerin kodla uğraşacak insan ve programlar için daha kolaylaşmasını sağlamış olur. Güçlendirilmiş bağlar: XML standartları, HTML standart internet bağlarından (hyperlink) çok daha iyi bir bağlama şekli sağlar. Örneğin, XML bağlamadaki bir fikir, tek bir internet bağının bir yerine birden çok kaynağa işaret etmesini içerir

5.2.3.XHTML Çeşitleri Burada sayfanın başında dosya tipini belirlemeye yarayan üç tip görüyoruz bunlar; XHTML 1.0 Strict Bu dosya tipi basit sayfalar yaparken kullanılabilir. CSS kullanarak istenilen sonuçları elde etmek kolaylaşır.



XHTML 1.0 Transitional Bu tip ile daha çok HTML'nin avantajları kullanılabilir ve CSS desteği bulunmayan tarayıcılar için de yine bu tip kullanılmalıdır.

XHTML 1.0 Frameset Bu tip HTML'den gelen ve bir pencerede birden fazla sayfayı göstermede kullanılan çerçeve (“frame”) yapısını destekler. Basit bir XHTML sayfası:

Basit döküman

basit paragraf



Görüldüğü gibi, XHTML ile HTML arasında çok fark yok. Bu bağlamda XHTML, HTML'nin daha disiplinli halidir de denilebilir. Gerçekten de XHTML’in temeli sıkı disiplindir. HTML tarayıcılarının genelde HTML kodundaki hataları görmezden gelerek HTML sayfasını görüntülemesi gibi bir durum XHTML de bulunmuyor. Bu, XHTML’e atası XML’den aktarılan bir özellik. XHTML’in XML’den aldğı bir diğer özellik XHTML sayfalarının well-formed olma özelliği. Aynı XML’de olduğu gibi XHTML’de de sözdizime uymayan belgelerin well-formed özelliği olmuyor ve sonuçta geçersiz XHTML belgeleri olarak karşımıza çıkıyorlar. Şimdi bir XHTML belgesinin well-formed sayılabilmesi için dikkat edilmesi gereken özelliklere bakalım. Bu özellikler HTML’de “olmasa da olur” özelliklerdir. 5.2.4. XHTML Belgelerinin Özellikleri İyi Şekillendirilme ve Çakışan kodlar Doğru:

bir paragraf içinde koyu kelimeler.

Yanlış :

bir paragraf içinde koyu kelimeler.



Buradaki örnekte kodların açılıp kapanma sırasında nasıl kullanılması gerektiği vurgulanmakta, en son açılan kod ilk kapanır.

Kodlar ve eklentiler küçük harf olmalı Doğru :
  • Yanlış :


  • Boş etiket olmamalı Doğru :

    bir paragraf.

    bir paragraf daha.

    Yanlış :

    bir paragraf.

    bir paragraf daha.

    Burada açılmış bir kodun mutlaka kapatılması gerektiğini görüyoruz. Eklenti değerleri tırnak içinde yazılmalı Doğru :

    Yanlış :


    Sayısal değerlerde tırnak kullanmama gibi bir durum söz konusu değil. Bütün değerler tırnak içerisinde yazılmalı. Eklentiler kısaltılmadan kullanılır Doğru:
    T1 bölümü
    T2 bölümü
    T3 bölümü


    THEAD bölümü TFOOT bölümü TBODY bölümü

    6.Teşekkür Herkesden önce bu çalışmanın hazırlanması için girişimde bulunan ve fikri ortaya atan değerli hocamız Ebru Sezer’e , bölüm öğrencileri ve BBM bölümü için çok büyük fayda sağlayacağına inandığımız bu faaliyetin altına imzasını attığı için çok teşekkür ediyoruz. Çalışmanın hazırlanması sırasında bize elinden geldiğince yardım eden , hazırlama aşamalarında yanımızda olan ve değerli görüşlerini bizden esirgemeyen Oğuz Aslantürk’e , bize kendisiyle çalışmayı tercih etmekte ne kadar haklı olduğumuzu gösterdiği için teşekkür ediyoruz.

    Bize çalışma esnasında gerekli olan mühendislik formasyonunu ve bilişim konusundaki yeniliklere kolayca adapte olup çalışmamızın gerek araştırma gerek hazırlama kısmında temel oluşturacak bilgileri bize sağlamış olan tüm BBM bölümü hocalarına ve araştırma görevlilerine sonsuz teşekkür ediyoruz. Çalışmanın hazırlanması esnasında bizi dinleyen ve etkili eleştirilerde bulunan , ayrıca manevi açıdan her zaman yanımızda olan ve bizi destekleyen başta sınıf arkadaşlarımız olmak üzere bütün arkadaşlarımıza teşekkür ediyoruz.

    Kaynakça www.w3c.org www.ibm.com www.microsoft.com www.softwareag.com www.softwareag.com.tr www.xml.com www.xml.org www.xmlnedir.com Using XHTML , XML and Java2 Platinum Edition Eric Ladd , Jim O’Donnell , Mike Morgan , Andrew H. Watt , November 2000 QUE Press

    Hazırlayanlar Mehmet Gursul Tolga Ovatman Levent Tanin

    Linkler http://ata.cs.hun.edu.tr/not/duyuru/duyuru09_09_2002_04-37-18.html http://www.turkcenet.org

  • Related Documents

    Xml Word
    November 2019 0
    Xml
    June 2020 21
    Xml
    November 2019 35
    Xml
    May 2020 25
    Xml
    November 2019 45