XML 'i kavramak

Bilgisayar dünyasının ilk kuşaklarında programcıların tek işlemli uygulamalar üzerine yaptıkları çalışmalar üzerinden nice değişimler geçti. Küçük bir eylemi yapmak için büyük makinelerin açılıp kapatılması gerektiği bir dönemde toplama işlemini yapabilen makineler birer teknoloji harikası görülüyordu. Bilişimin değişken teknoloji ve fizyonomisini tarihsel bir yaklaşıma yansıttığımız an, her zaman birkaç temel kavramın baskın olduğunu görürüz. “Zaman” ve  ”iş” kavramlarının, “iş”in hep büyümesi gölgesinde ters orantılı olarak yürütülmesi amaçlanıyordu. Birçok şey, yeni tasarım ve teoremler bekliyordu.
Ve “iş” hep büyüdü, istenilenler çoğaldı, parametreler daha kompleks hâl aldı, cevap bekleyen bir ton soru soruldu, “bunu da yapabilecek mi” beklentileri başladı, oluşan rekabette etik tartışıldı, kazalar oluştu, -farklılık- çok az bir fark olarak görüldü.“Yoksa, sahip olmak istendi.Varsa, daha fazlası istendi”, en zoru da bütün bunlar için mehil verilmiyor, zaman tanınmıyordu. Daha sı ortam “sanal” dı. 

Süreç, hergün gebe kalıp erken doğumlar yapıyordu.Evler, işyerleri kapılarını dünyaya açtılar, bireylerin heran yeni coğrafik keşiflere çıkabilmeleri için daha görkemli alanlar yaratıldı, ama hiç asfalt dökülmüyordu bunun için. Daha önce düşünmediğimiz birçok şey artık bizim için olmazsa olmaz sistemler haline geldi. Sunulan teknolojiler, “daha az yeni doktrin daha çok yeni etkinlik”ler getirdi. Artık özellikle yazılım teknolojisi kuram olmaktan çıkıp bir olgu olmuştu. Üretken olana kayıldı,-esneklik, verimlilik, bütünleşme, destek- sözcükleri yazılımcıların dillerinden düşmedi.Yeni lisanın elifbası çoktan yazılmıştı. Kullanıcıya sadece okumak ve bu kavramlarla ilgili cümleler kurmak kaldı. Ancak yazılımcıların ortaya koyduğu ve çeşitli farklı organik yapıya göre değişkenlik gösteren uygulamalar arasında bir standardın
olmaması  herzaman tartışma konusu oldu. Her yazılımcı çıkardığı birçok yenlikte kendi donelerini kendi bileşenlerini kullandı. Bu  hem rekabeti canlı tutuyordu hem de kullanıcılar arasında renkli bir ortam oluşturuyordu. Birinin yaptığını diğeri yapamıyordu. Bu şekilde birbirinden ayrılan ancak aynı amaçlı birçok yazılım ortaya çıkmıştı. Bütün yazılım dillerin genel amacı; en kısa yoldan hızlı, profesyonel,güçlü ve güvenli uygulamalar için altyapı hazırlamaktır. Öngörülen bu mantık çerçevesinde uygulamaların altyapılarında bir standart oluşturulmaya çalışıldı. Özellikle gerek kurumsal bağlamda gerekse bireysel bağlamdaki kullanıcıların birçok zaman veri paylaşım sorunu vardı. Çünkü her kullanıcı verilerini farklı profil ve biçimlerde saklamış kullanmıştı. Yeni bir platform için söz konusu ortamın kopyasını oluşturması gerekiyordu. Başka bir departmandaki veriler arasında aynı organlar olmadığı zaman iletişim kurulamıyordu.  Birçok firma bazı standartları oluşturma yoluna girdi özellikle Internet denen bulgu bunun için bulunmuş en güzel fırsattı. Ancak bunun tohumları daha yeni filizleniyor. Yine de yazılım çevresi daha önceki başarılarını üstüne Internet’teki gelişmeleri de başarıyla kaydedip mirasa devam etti. Bununla beraber herkesi aynı ortam üzerinde iletişime götüren Internet geçen hergün genişlediği halde birçok standarttan eksikti. Ve bu kesinlikle gerekliydi. Yani yazılım dünyası, donanım cephesinin kendi içinde kurduğu standartlığı kuramamıştı.
Platform zenginliği yaşadığımız günümüzde yazılımcıların işi daha da zor. Hem işletim sistemi hem de uygulamalar hem de organik platformlar bazında birçok “ayrı” var. Örneğin günümüzde yaşam biraz daha mobil oluyor, biraz daha mekandan bağımsız oluyor, GSM’ce davranıyor, GPRS’ce konuşuyoruz.WAP telefonları, el bilgisayarları ve PDA’lar PC’lerin misyonunu tehdit ediyor. 3. kuşak (3G) denilen UMTS, EDGE gibi teknolojiler için yatırımlar yapılıyor. Artık mekan kavramına mahkum olmadan verilerimize ulaşabilme ihtimali sonuçlanıyor, sesli ve görüntülü iletişim derinden ilerliyor.
Öyle görülüyor ki zor zamanda çok iş yapılmış gibi. Bütün bunlarla beraber insanlığın dramatik bir değişim yaşadığı da en açık ifadedir. Aslında benim üzerinde  duracağım XML  teknolojisi için böyle bir giriş yapmaya gerek var mıydı bilmiyorum. XML bahsettiğim bu değişimler içinde gerçekten büyük bir konuma sahip mi bunu da hep beraber göreceğiz.
Neyse, yukarıda bahsettiğim  gelişimde oturulmak istenen standart kavramlar için belirli nitelikte belirli örneklikte uyulacak tekbiçimler oluşuyor günümüzde. Bunu yapabilecek teknolojiden biri olan ve veri iletişimi sağlayacak XML yapısından söz edeceğim.
Geleceğin iş modelleri değişmektedir.
Dünyada birçok yerde Internet ve bilgisayar çözümü kendini normal katsayısında göstermediği halde mobilişim kısa süre içinde gündeme oturdu. “e-”’li birçok şey sanki “m”li olacak.e-işàm-iş. Şu halde bilgisayar dallarının mobil aygıtlara taşınmasıyla beraber kurumlar işlerini de beraberinde bu aygıtlara sorunsuz taşımak istiyorlar.
Müşterilerin bir işletme ile kurduğu ilişkiler için kullandığı farklı kanallar mevcuttur. Bu kanallar(web, faks, e-mail,telefon) arasında iletişim her zaman sorun olmuştur. Ve bu entegrasyon olumlu olmadığı sürece iş akış süreci zaman kaybediyor.
Öyle bir şey olmalı ki . . .
Platform sayısı bu kadar fazla iken kullanıcıların veya kurumların verilerini sadece bir alanda değil diğer aygıtlarda da sunulmasını istediklerinde hiç de kolay bir şekilde bunu yapamayacaklardır. Bu veriyi yeniden biçimlendirmeli, kostümünü yeniden şekillendirmelidirler. Yani verinin başka ortamlara alınarak değişik biçimlerde değişik renkte sunulması her zaman sorun olmuştur.
Ayrıca veriyi saklamada ve veriye ulaşmada da metot değişmektedir. Artık ağaç yapısına geçiliyor. Klasik database modellerine karşın iç içe veriler saklanabilecekler. Dolayısıyla aralarındaki ilişki daha toplu olmuş olacaktır. Veriye derinlik kazandırılmaktadır. Bundan dolayı yapısal olarak erişilebilmesi (diğer sistemlerden tarafından),yapılan işe uygun olması, işlevsellik ve entegrasyon açısından XML önemli bir rol oynuyor.
Öyle bir sistem olmalı ki, hem verilerin daha güvenli olarak dolaşması sağlanmalı, aralarda bir yerlerde kaybolmamalı, hem de zamandan büyük kazanç sağlamalı.
Günümüzde mühendislik, ticari ve bilimsel alanlarda yaygın olarak kullanılacak standart bir olgu : XML .
XML : Post-Modern motif ve modern (elektronik) iş arasındaki entegrasyon
Evet entegrasyon sorunu için XML iyi bir çözümdür.
XML içerik sağlıyor, diyor eWeek dergisi.Ve devam ediyor ; XML verinin dış dünyaya nasıl gösterileceği ile beraber verinin içeriğini de dış dünyaya sunuyor. Örneğin bir hava durumu bilgisini XML biçiminde aklayabilirsek; farklı kullanıcılar farklı biçimde bu bilgiye ulaşabilir. Örneğin bir WAP telefonu ile bu bilginin sadece metin tabanlı bölge ve rakamsal sonuçları alınabilirken, bir tarayıcı üzerinden aynı bilginin grafik gösterimi veya gözlerin görmeyenler için de krill alfabesi biçiminde bilgisi alınabilir. XML içinde ilgili veri “Tag”larlar ayrıldığı için, XML üzerine inşa edilen bir arama motoru, sorgunun ilgili diğer bölümlerini kullanıcının isteğine göre birleştirerek de sunabiliyor. Böylece aynı veritabanı içindeki “pazarlama” sonuçları pazarlama müdürüne, “üretim” sonuçları üretim ve planlama müdürüne ulaşırken, genel müdür, bu bilgileri birleştirerek çok farklı bir analiz sonucuna kolayca ulaşabiliyor.
XML şirketler, bankalar, üreticiler, kullanıcılar  arası  veri değişimi ve depolanması konusunda çok büyük yararlar sağlayacaktır. Özellikle B2B entegrasonunda önemli bir oyun sergileyecektir.
200 organizasyon arasında yapılan bir araştırmada, katılımcıların yüzde 41'i XML'e yatırım yapmalarının B2B borsalarına katılmalarıyla ilişkili olduğunu belirttiler. Aşağıda yöneticilerin XML'e neden para harcamaları gerektiğinin nedenlerini bulacaklar.


* Verilerin XML'le dönüştürülmesi kurumların arama yeteneklerini genişletiyor
* XML yeni uygulama geliştirme zamanını kısaltıyor
* XML destekli iş süreçleri iş döngülerinin kısalmasını sağlıyor
* XML dahili uygulamalarının müşteri uygulamalarına bağlanmasını sağlıyor
* XML uygulamaları dağıtıcılara ve iş ortaklarına bağlıyor
Kaynak: Zona Research
XML’i kavramak . . .
Üzerinde binlerce makinenin aynı anda haberleşmesini sağlayan bir yapıya sahip Internet gün geçtikçe kavramları, olguları, gelişim, nüfusu ve yoğunluğu ile gündeme oturmaktadır. Gelişim Internet denen dünya ağını öyle bir konumu getirdi ki, artık yalnızca bilgisayarlar değil mobil telefonlar, arabalar, televizyonlar hatta evdeki buzdolabı gibi değişik amaçtaki cihazlar da Internet’e bağlanabiliyorlar. Kendileri bu yeteneğin kazandırıldığı bu aygıtlar değişik amaçlı, fabrikasyon özellikleri farklı, üreticileri, organik yapıları, üzerlerindeki yazılım ve donanım farklı en önemlisi Internet'e bağlanma yöntemleri farklıdır. Buna rağmen bütün bu cihazların birbirleri ile anlaşmalarını sağlayan ortak bir şey var. Bunların hepsi aynı dili konuşuyorlar. Hepsi TCP/IP isimli adap erkânı biliyor. Internet’e bağlanıp diğer aygıtlarla iletişim kurma hünerlerini bu TCP/IP etiketine borçludurlar. Internet’in tutanağı, iletişimin resmi kurallar kümesi olan bu standart dil bu denli bir esneklik sağlanmıştır.
Şahit olduğunuz gibi, çok daha önce, insanlar arasında bile sorun teşkil edebilen iletişim problemini donanım cephesi halletmiştir. Herkesin kendi algoritmasıyla, kendi doneleriyle, kendi bakış açılarıyla ve en önemlisi kendi pazar paylarını dikkate alarak  oluşturdukları yazılımlar, kendi dışındaki yazılımlarla konuşturulmak istendikleri zaman ciddi problemlerle karşılaşılıyordu.  Aslında bu bahsettiğim standart yapı, yazılımların her türlü bileşeniyle diğer yazılımlarla haberleşmesi değil veya her yönüyle ona açık olması değildir. Tek sorun ; zaman ve mekandan etkilenmeden hepsinin aynı veriyi kullanabilmesidir. Yazılımların, yalnızca kendilerinin anlayabileceği bir veri biçimi değil bütün yazılım ve aygıtların rahatlıkla alıp kullanabileceği, çıkarım yapabileceği bir yapı olmalıdır. Her türlü veri(data)nin tek bir formatı olmalı ki bu sorun çözülsün.
İşte bahsettiğim, bahsetmeye devam edeceğim ve gelişmeye açık teknoloji olan XML bu sorunun tek çözümüdür. Kimsenin tekelinde olmayan, World Wide Web Consortium (W3C) tarafından oluşturulan XML, veri yapısının, biçiminin oluşturduğu daralanları genişletecektir. Yazılım dünyasının en önemli argümanı olan Veri’yi  geniş bir paylaşımda, güçlü bir iletişimle kurumsal pazara açacaktır. Böylece hem yeni pazar payları açacaktır , özellikle e-ticaret alanında esneklik sağlayacaktır,  hem de bireysel istekler için kurumsal giriş kapılarını (portallar) açacaktır. XML'in  iş dünyasına getirdiği en önemli şey, kurumların birbirleri ile konuşabilmesi için altyapıyı sağlıyor olması. XML bugüne kadar başarılamayan bir şeyi başardı ve kurumların farklı uygulamalarının birbiri ile konuşabilmesini sağladı.

Terim olarak XML nedir ?
XML'de veri (data), verinin görünüşünden (presentation) ayrıldığı için programlara, özelliklerini kaybetmeden veriyi ortak bir yapıda saklama imkanı sağlamaktadır. Her uygulama bu veriyi dilediği gibi sunabilmektedir.
Veri, bir veritabanında olduğu gibi yapısal özellikleri korunarak saklandığından, yığın olmaktan kurtulmakta ve gerektiğinde filtre edilebilen, sorgulanabilen bilgi olarak saklanmaktadır. XML, doküman ve verinin çok geniş bir yelpazede mantık tanımını yapabilen bir meta dildir. Evrensel ve esnek yapısı nedeniyle kelime işlem uygulamalarından e-iş uygulamalarına varan geniş ve sınırsız bir uygulama alanında kullanılmaktadır.
Web uygulamalarında XML'e ihtiyaç duymamızın önemli sebepleri var. Web sayfaları hazırlarken şu ana kadar kullandığımız HTML, öncelikle sununun, görünüşün nasıl olacağına odaklanmış bir script (betik) dili. HTML taglarının büyük çoğunlu sayfalarımızın şeklen nasıl olacağını belirlemek için kullanılıyor.
HTML'de veri ve biçim iç içe geçmiş durumda. Veriyi, bu sayfanın içinden ayıklamak ve kullanmak mümkün olmamakta.
Kısacası ; XML'de veri ve verinin sayfamızda nasıl gösterileceği birbirinden ayrılmıştır ve verileri, aynı bir veritabanında yer alan veri gibi etkili bir şekilde kullanabilme imkanımız vardır.
XML Extensible Markup Language (Genişleyebilir İşaretleme Dili)
Markup, yazılı metinlerin gösterim aygıtlarda uygun biçimde yayınlamasını sağlayan özel semboller olarak tanımlanıyor. Bu metinin belirli kısımlarının özel bir anlam kazandırmak üzere işaretlenmesi işlemidir. Bu şekilde kullanılan işaretler, kurallar ve gramer kümesi markup language (işaretleme dili) olarak tanımlanır.
Metin ve belgelerin kolay bir şekilde taşınabilmesi, paylaşılabilmesi ve işlenebilmesi için ilk işaretleme dili GML (Generalized Markup Language) 1960 sonlarında IBM’de yapılan araştırma çalışmaları sonunda ortaya çıktı.  GML daha sonra ANSI (American Natitional Stardard Institute) 1978 te oluştuturlan bir grup tarafından geliştirilerek  SGML (Standardized Generalized Markup Language) adı altında 1986 yılında ISO (the International Organization for Standardization) kurumunca uluslararası bir standard olarak kabül edildi . Birçok sektörde aktif olarak kullanılan SGML, belge ve metin sunumda kullanılan standartlaşmış bir sözlük, semboller kümesidir. Yeni biçim dillerinin üretilmesine olanak sağlar. SGML çok güçlü bir dil olmasına rağmen son derece karmaşık yapısı ve yüksek uygulama geliştirme maliyeti bu dilin yaygın bir şekilde kullanımını engellemiştir.
Tim Berners-Lee ve Anders Berlung 1989 yılında internet ortamında belge paylaşımını kolaylaştırmak için Web uygulamalarının temel öğelerinden biri olan HTML (Hypertext Markup Language) dilini geliştirdiler. HTML bir SGML uygulaması olarak geliştirildi. Diğer bir deyişle HTML dilinin yapısı SGML dilinde tanımlandı.  HTML dili çok basit yapısı ile son derece başarılı oldu. 1996 yılında Word Wide Consortium (W3C, http://www.w3.org)’u SGML güç ve esnekliğini içereçek basit bir işaretleme dili oluşturmak amaçıyla XML dilini tasarlamaya başladı.  Şubat 1998’de  XML 1.0 bir standard olarak W3C tarafından yayınlandı. XML dili SGML dilinin bir çok özelliğini içeren basitleştirilmiş dildir.  SGML dilinin  bir alt kümesidir.   XML SGML gibi bir meta dildir. Yani başka dillerin yapısını tanımlamakta kullanılan bir dildir.
Gelecek yazılarda XML söz dizimi kuralları, XML DTD, XML Schema, XML Namespaces, Xpath, Xpointer, XSL, XSLT, XSLF, SAX ve DOM gibi bir çok belirtim ve teknolojiden anladığım kadarıyla bahsedeceğim. 


XML SÖZ DİZİMİ  (SYNTAX)
 XML içerisinde kullanılacak işaretleme ifadeleri;
elemanlar (elements),
varlık referansları (entity refererences),
açıklamalar (comments),
işleme komutları (processing instructions),
CDATA bölümleri,
ve veri tipi tanımlamalarından (document type declaretions) oluşur.
Bir XML belgesi yazılmaya başlandığında bu belgenin bir XML belgesi olduğunu ve hangi versiyonu kullandığını belirlemek için ilk satır, aşağıdaki biçimde yazılmak zorundadır. 
<?xml version="1.0"?>
Bundan sonra anlatacaklarımı tablodaki örneği referans alarak anlatacağım.


<?xml version="1.0"?>
<tezkere>
       <kime>Mehmet</kime>
       <kimden>Ahmet</kimden>
       <konu>Hatırlatma</konu>
       <mesaj>Murat’ı unutma !</mesaj>
</tezkere>


XML belgesi gövdesi hiyerarşik bir ağaç yapısında oluşmuş belge elemanlarından oluşur. Her bir eleman bir başlangıç ve bitiş etiketi içerir. Örneğin konu elemanı, <konu> başlangıç etiketini, “Hatırlatma”  karakter verisini ve </konu> bitiş etiketinden oluşmaktadır. Elemanlar diğer elemanları veya karakter verileri içerebilir. Örnekte “tezkere”elemanı kime, kimden, konu ve mesaj elemanlarından oluşmaktadır. Bir belgenin en üst seviyesinde bulunan eleman kök eleman olarak adlandırılır. Bu örnekte kök eleman “tezkere”tur.
Eleman : XML belgesinde veri içeriğinin tutulduğu alanlardır. Elemanlar etiketlerle ayrılırlar. Her bir etiket bir eleman tip ismi (element type name) içerir ve bir çift (“<>”) açı parantezle içe alınır. kime, konu ... gibi. Ancak boş eleman tek taraflı olarak gösterilebilir. <br/> gibi.
İsimler harf,sayı ya da diğer karakterleri içerebilir, bir sayı veya _ (underscore) karakteri ile başlamamalıdır ve boşluk içermemelidir.
XML dili harflerin büyük veya küçük olmasına duyarlı (case sensitive)dır. <araba> ve <Araba> etiketleri aynı değildirler.
<Mesaj>Bu gösterim yanlıştır.</mesaj>
<mesaj>Bu gösterim doğrudur.</mesaj>
Elemanlar  iç içe yuvalandığında yuvalama (nesting) kurallarına uymalıdırlar. HTML’den diğer farkı da budur.
<b><i> Bu gösterim yanlıştır.</b></i>
<b><i> Bu gösterim doğrudur.</i></b> 


XML syntax'ında tüm XML dökümanlarının bir root elementi olması gerekmektedir.XML dökümanları içerisinde ilk tag "root tag" olarak isimlendirilir:Bahsedilen bu root elementin altındaki tüm elementler "child element" olarak adlandırılır. Bu child elementler ise daha önceden belirtilmiş olan synax'a uymak zorundadır.Yani elementlerin içiçe geçme durumları belirli bir hiyerarşiye göre olmaktadır.
<root>
  <child>
    <subchild>
    </subchild>
  </child>
</root>
Özellikler (Attributes) : Elemanlara eklemek istediğimiz ek bilgiler özellikler olarak ifade edilir. Özelikler başlangıç etiketi içerisinde isim ve değer ikilileri olarak geçer.
Tarih için özellik kullanmak
Tarih için Element kullanmak

<?xml version="1.0"?>
<tezkere tarih=”10.08.2001”>
      <kime>Mehmet</kime>
      <kimden>Ahmet</kimden>
      <konu>Hatırlatma</konu>
       <mesaj>Murat’ı unutma !</mesaj>
</tezkere>

<?xml version="1.0"?>
<tezkere>
       <tarih>10.08.2001</tarih>
       <kime>Mehmet</kime>
       <kimden>Ahmet</kimden>
       <konu>Hatırlatma</konu>
       <mesaj>Murat’ı unutma</mesaj>
</tezkere>

Açıklamalar HTML’de olduğu gibi “<!--“ ile başlar ve “-->” ile biter. Açıklamalar XML uygulamasında verinin bir parçası olarak görülmezler.
İyi Oluşmuş (Well-formed) ve Doğru (Valid) Belgeler
XML söz dizimi (syntax) kurallarına uyan XML belgeler iyi-oluşmuş (Well-formed) belgeler olarak adlandırılır. Eğer XML söz dizimi hem well formatta hem de yapı bilgilerini aldığı DTD'ye uyumluluk gösteriyorsa bu belgelere doğru (Valid) belgeler denir.
Well Formed XML dökümanı
Valid XML dökümanı

<?xml version="1.0"?>
<tezkere tarih=”10.08.2001”>
      <kime>Mehmet</kime>
      <kimden>Ahmet</kimden>
      <konu>Hatırlatma</konu>
       <mesaj>Murat’ı unutma !</mesaj>
</tezkere>

<?xml version="1.0"?>
<tezkere tarih=”10.08.2001”>
      <kime>Mehmet</kime>
      <kimden>Ahmet</kimden>
      <konu>Hatırlatma</konu>
       <mesaj>Murat’ı unutma !</mesaj>
</tezkere>

DTD (Document Type Declaration): DTD'leri, XML dökümanlarının yapı bilgilerini tutan modüller olarak tanımlamak mümkündür.Döküman içinde kullanılacak olan tüm varlıklar daha önceden DTD içerisinde tanımlanmalıdır. XML veri tanımlaması olan DTD harici veya dahili olarak kullanılabilir. XML belge tipi deklarasyonu hakkında daha genişçe konuşmamız gerekiyor. Gelecek yazılarda daha esnek deyimlerle görüşmek üzere . . .

11.12.2001   Ahmet Kaymaz
xxxxxx