XML ve Temel Kavramlar

XML üzerine farklı bağlamlarda yayınladığım yazılar ve özellikle WooCommerce XML entegrasyonu için sunduğum XML2WOO eklentisi üzerinden pek çok soru almaktayım.

AA

Bu soruların gruplandırdığımda XML yapısına dair anlaşılmayan bazı noktalar olduğunu görmekteyim.

XML (eXtensible Markup Language)

XML, belirli bir yazım biçimi / kuralına uygun olarak insanların ve uygulamaların kolayca anlamlandırabileceği dokümanlar oluşturmak amacıyla geliştirilen bir işaretleme dilidir. HTML ise XML’i temel alarak geliştirilmiştir1. Aralarındaki farkı kısaca izah etmek gerekirse; HTML dokümanlarda önceden tanımlanmış ve belirli biçimlere / özelliklere sahip etiketler kullanılırken XML dokümanlarda etiketler tanımlandıkları veri(ler) ile ilişkilidir ve verinin sunum biçimi ile ilgilenmez.

<?xml version="1.0" encoding="UTF-8"?>
<breakfast_menu>
<food>
    <name>Belgian Waffles</name>
    <price>$5.95</price>
    <description>
   Two of our famous Belgian Waffles with plenty of real maple syrup
   </description>
    <calories>650</calories>
</food>
<food>
    <name>Strawberry Belgian Waffles</name>
    <price>$7.95</price>
    <description>
    Light Belgian waffles covered with strawberries and whipped cream
    </description>
    <calories>900</calories>
</food>
</breakfast_menu>

XML, W3C tarafından tanımlanmış bir standarttır. HTML ile W3C ve WHATWG tarafından geliştirilmektedirve her iki işaretleme dilinin de tasarımcısı Tim Berners Lee‘dir1 2.

Google Search Console kullanıcılarının büyük bir çoğunluğunun Sitemap olarak ifade edilen standart site haritası protokolüne aşina olduğunu düşünebiliriz.

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>http://www.example.com/foo.html</loc>
    <lastmod>2018-06-04</lastmod>
  </url>
</urlset>

Temel bilgilerin ardından şimdi XML ile ilgili detaylara bir bakalım.

XML DOM Nodes (XML DOM Düğümleri)

DOM başlıklı yazımda da belirttiğim üzere HTML, XHTML ve XML gibi belgelerin script dilleriyle iletişim kurabilmesini sağlamak için geliştirilmiş bir arabirimdir. XML DOM yine bu açıklama üzerinden ele alındığında her düğüm ve parçalarına arayüz aracılığıyla ulaşılabilir3. XML DOM’ye göre, bir XML belgesindeki her şey bir düğümdür. Yukarıdaki XML örneği üzerinden açıklamak gerekirse; breakfast_menu, food, name, price, description ve calories gibi tanımların hepsi birer düğümdür. Aynı zamanda bu dosyanın kendisi de bir belge düğümüdür. Düğümler içerisinde yer alan değerler de metin düğümleridir4 5. Kimi XML dosyalarında metinlerin düğüm içerisinde nitelik (veya özellik) olarak belirtildiğini görebilirsiniz. Bu değerler nitelik düğümü olarak ifade edilirler. Son olarak, XML dokümanı içerisinde yer alan yorumlar da yine düğüm niteliği taşırlar ve yorum düğümleri olarak ifade edilirler6. Bu açıklamaları bir kitap satış sitesi örneği üzerinden ele alalım.

 <?xml version="1.0" encoding="UTF-8"?>
<bookstore>
  <book category="cooking">
    <title lang="en">Everyday Italian</title>
    <author>Giada De Laurentiis</author>
    <year>2005</year>
    <price>30.00</price>
  </book>
  <book category="children">
    <title lang="en">Harry Potter</title>
    <author>J K. Rowling</author>
    <year>2005</year>
    <price>29.99</price>
  </book>
  <book category="web">
    <title lang="en">XQuery Kick Start</title>
    <author>James McGovern</author>
    <author>Per Bothner</author>
    <author>Kurt Cagle</author>
    <author>James Linn</author>
    <author>Vaidyanathan Nagarajan</author>
    <year>2003</year>
    <price>49.99</price>
  </book>
  <book category="web" cover="paperback">
    <title lang="en">Learning XML</title>
    <author>Erik T. Ray</author>
    <year>2003</year>
    <price>39.95</price>
  </book>
</bookstore>

Yukarıdaki örnek XML dokümanındaki kök düğüm <bookstore> ve diğer tüm düğümler bu kök düğüm tarafından kapsanmakta. Kitapların türlerini ifade eden <book> ise bir eleman ve içerisinde detay olarak da ifade edebileceğimiz <title>, <author>, <year>, <price> alt düğümleri kapsamakta. Bu alt düğümler içerisindeki değerlerin her biri ise ayrı birer metin düğümü. Altını çizmekte fayda var; örneğin, <year>2003</year> bu düğümdeki 2003 year düğümünün değeri değil, bir metin düğümüdür. <year> sadece 2003‘ü kapsamaktadır. Tekrar <book> düğümüne bakacak olursak, bu düğümün category ve cover gibi nitelikler taşıdığını görebiliriz.

XML DOM Tree

DOM Düğüm Ağacı (DOM Node Tree)

XML dokümanı iç içe geçmiş düğümlerden (eleman, element veya öğe olarak da ifade edilebilir) meydana gelir ve bu düğüm yığını yapısı düğüm ağacı olarak ifade edilir. Her düğüm iç içe geçtikte hiyerarşik bir yapıya bürünür ve bu yapı sayesinde her düğüme erişilebilir, düğümün içeriği değiştirilebilir, yeni düğümler eklenebilir veya düğüm alt düğümleriyle birlikte silinebilir. Yukarıdaki görselde kitap satış sitesine ait örneğe ait ağaç yapısını görebilirsiniz.

Kapsayıcı Düğüm, Alt Düğüm ve Kardeş Düğüm

Kapsayıcı, alt ve kardeş düğüm ifadeleri düğümler arasındaki hiyerarşik ilişkileri ifade etmektedir. Yukarıda da belirttiğim üzere, XML dokümanı iç içe düğümlerden oluşur ve bu yapı ağaç olarak ifade edilir. Dolayısıyla, her katman bir dal görevi görmektedir. En üst düğüm kök olarak nitelendirilir ve aynı zamanda kapsayıcı düğümdür. Ancak tek ve benzersizdir. Kitap satış sitesi örneğindeki bookstore bir kök düğümdür. Alt düğüme sahip her düğüm kapsayıcı düğüm olarak nitelendirilir. Kapsayıcılar aynı zamanda kardeş düğüme sahip olabilirler. Kapsayıcı altında yer alan düğümler ise alt düğüm olarak ifade edilir ve kardeş düğümlere sahip olabilirler. Özetle, aynı kapsayıcıya sahip düğümler kardeş düğüm olarak nitelendirilir ve çok sayıda olabilirler. Kök düğüm dışındaki her düğüm bir kapsayıcıya sahiptir. Dal benzetmesinden yola çıkarak, alt düğüme sahip olmayan düğüm yaprak olarak adlandırılır. Alt düğümler arasında da sıralamaya başlı olarak bir hiyerarşi bulunur. Örneğin, kitap satış sitesine ait XML dokümanında kardeş düğümler olan <book category="cooking"> ilk düğüm iken <book category=”web” cover=”paperback”> son düğümdür. Bu kapsayıcı düğümler altında ise <title> ilk düğüm, <price> son düğümdür.

XML Düğüm ve Nitelik Kullanımları

Yukarıdaki örneklerde mümkün olduğunca farklı kullanımlara yer vermeye çalıştım. Çünkü, XML’de düğüm ya da nitelik kullanımına dair bir sınırlandırma bulunmamaktadır. Yani, aşağıdaki örneklerin ikisi ile de karşılaşmak mümkündür ve her iki kullanım da doğrudur.

<person sex="female">
  <firstname>Anna</firstname>
  <lastname>Smith</lastname>
</person>
<person>
  <sex>female</sex>
  <firstname>Anna</firstname>
  <lastname>Smith</lastname>
</person>

Her iki kullanımın da doğru olduğunu söyledim. Ancak, performans bağlamında bakıldığında temel bir kaç konuya dikkat çekilebilir. Öncelikle, düğüm kullanımında düğüm ağacının derinliği artacaktır, ancak daha anlaşılabilir ve kontrol edilebilir bir yapı oluşacaktır. Nitelik kullanımında niteliğe atanan bir değerdir, alt düğüm ile doğrudan bir ilişkisi bulunmaz, birden fazla değer alamaz. Alt düğümler birden fazla değer alabilir. Nitelikler kolayca genişletilemezler ancak alt düğümler genişletilebilirler7 8.

Diğer yandan, sistem entegrasyonlarında genel olarak verilerin alt düğümlerle taşınması önerilmektedir.

İleri Okumalar