John Squirrels
Seviye
San Francisco

Java'da XML

grupta yayınlandı
MERHABA! Bugün, XML adı verilen başka bir veri formatını tanıtacağız. Bu çok önemli bir konu. Gerçek Java uygulamaları üzerinde çalışırken, neredeyse kesinlikle XML ile ilgili görevlerle karşılaşacaksınız. Java geliştirmede, bu format neredeyse evrensel olarak kullanılır (nedenini aşağıda öğreneceğiz), bu yüzden bu dersi yüzeysel olarak gözden geçirmemenizi, bunun yerine her şeyi tam olarak anlamanızı ve ayrıca ek literatürü/bağlantıları incelemenizi tavsiye ederim :) Bu kesinlikle zaman kaybı olmayacaktır. Öyleyse, kolay şeylerle başlayalım: "ne" ve "neden"!

Java XML nedir?

XML, Genişletilebilir İşaretleme Dili anlamına gelir. Bir biçimlendirme diline zaten aşina olabilirsiniz — web sayfaları oluşturmak için kullanılan HTML'yi duydunuz mu :) XML nedir?  - 1HTML ve XML bile benzer bir görünüme sahiptir:
HTML1
<h1>title</h1>
<p>paragraph</p>
<p>paragraph</p>
xml 1
<headline>title</headline>
<paragraph>paragraph<paragraph>
<paragraph>paragraph<paragraph>
HTML2
<h1>title</h1>
<p>paragraph</p>
<p>paragraph</p>
xml 2
<chief>title</chief>
<paragraph>paragraph<paragraph>
<paragraph>paragraph<paragraph>
Başka bir deyişle XML, verileri tanımlamaya yarayan bir dildir.

Neden XML'e ihtiyacınız var?

XML başlangıçta, İnternet dahil olmak üzere verileri daha rahat depolamak ve göndermek için icat edildi. Bunu başarmanıza yardımcı olan çeşitli avantajları vardır. İlk olarak, hem insan hem de bilgisayar tarafından okunması kolaydır. Bu XML dosyasının neyi açıkladığını kolayca anlayabileceğinizi düşünüyorum:
<?xml version="1.0" encoding="UTF-8"?>
<book>
   <title>Harry Potter and the Philosopher’s Stone</title>
   <author>J. K. Rowling</author>
   <year>1997</year>
</book>
Bir bilgisayar da bu formatı kolayca anlar. İkincisi, veriler düz metin olarak saklandığından, bir bilgisayardan diğerine aktardığımızda herhangi bir uyumluluk sorunu olmayacaktır. XML'in yürütülebilir kod olmadığını anlamak önemlidir - bu bir veri tanımlama dilidir. Verileri XML kullanarak tanımladıktan sonra, bu verileri gönderebilen/alabilen/işleyebilen kod (örneğin Java'da) yazmanız gerekir.

XML nasıl yapılandırılır?

Ana bileşen etiketlerdir: bunlar köşeli parantez içindeki şeylerdir:
<book>
</book>
Açılış etiketleri ve kapanış etiketleri vardır. Kapanış etiketi, yukarıdaki örnekte de görülebileceği gibi ek bir sembole (" / ") sahiptir. Her açılış etiketinin bir kapanış etiketi olmalıdır. Dosyadaki her öğenin açıklamasının nerede başladığını ve bittiğini gösterirler. Etiketler iç içe olabilir! Kitap örneğimizde, <kitap> etiketinde iç içe geçmiş 3 etiket bulunur: <başlık>, <yazar> ve <yıl>. Bu, tek bir iç içe yerleştirme düzeyiyle sınırlı değildir: iç içe etiketlerin kendi iç içe etiketleri vb. olabilir. Bu yapıya etiket ağacı denir. Bir otomobil bayiliğini tanımlayan örnek bir XML dosyası kullanarak bu ağaca bakalım:
<?xml version="1.0" encoding="UTF-8"?>
<carstore>
   <car category="truck">
       <model lang="en">Scania R 770</model>
       <year>2005</year>
       <price currency="US dollar">200000.00</price>
   </car>
   <car category="sedan">
       <title lang="en">Ford Focus</title>
       <year>2012</year>
       <price currency="US dollar">20000.00</price>
   </car>
   <car category="sport">
       <title lang="en">Ferrari 360 Spider</title>
       <year>2018</year>
       <price currency="US dollar">150000.00</price>
   </car>
</carstore>
Burada bir üst düzey etiketimiz var: <carstore>. Aynı zamanda kök eleman olarak da adlandırılır. <carstore> bir alt etikete sahiptir: <car>. <car> da 3 alt etikete sahiptir: <model>, <year> ve <price>. Her etiket, ek önemli bilgiler içeren niteliklere sahip olabilir. Örneğimizde, <model> etiketi, model adını kaydetmek için kullanılan dili belirten bir "lang" özelliğine sahiptir:
<model lang="en">Scania R 770</model>
Burada ismin İngilizce yazıldığını belirtiyoruz. <price> etiketimizin bir "para birimi" özelliği vardır.
<price currency="US dollar">150000.00</price>
Burada arabanın fiyatının ABD doları cinsinden verildiğini belirtiyoruz. Bu nedenle, XML'in "kendi kendini tanımlayan" bir sözdizimi vardır. Verileri açıklamak için ihtiyacınız olan herhangi bir bilgiyi ekleyebilirsiniz. Ek olarak, dosyanın üst kısmına XML sürümünü ve verileri yazmak için kullanılan kodlamayı gösteren bir satır ekleyebilirsiniz. Buna "prolog" denir ve şöyle görünür:
<?xml version="1.0" encoding="UTF-8"?>
XML sürüm 1.0 ve UTF-8 kodlaması kullanıyoruz. Bu gerekli değildir, ancak örneğin dosyanız farklı dillerde metin kullanıyorsa kullanışlı olabilir. XML'in "Genişletilebilir Biçimlendirme Dili" anlamına geldiğinden bahsetmiştik, ancak "genişletilebilir" ne anlama geliyor? Bu, nesnelerinizin ve dosyalarınızın yeni sürümlerini oluşturmak için mükemmel olduğu anlamına gelir. Örneğin, otomobil bayimizde motosiklet satışına da başlamak istediğimizi varsayalım! Bununla birlikte, programımızın her iki <carstore> sürümünü de desteklemesi gerekiyor: eski (motosikletsiz) ve yeni. İşte eski versiyonumuz:
<?xml version="1.0" encoding="UTF-8"?>
<carstore>
   <car category="truck">
       <model lang="en">Scania R 770</model>
       <year>2005</year>
       <price currency="US dollar">200000.00</price>
   </car>
   <car category="sedan">
       <title lang="en">Ford Focus</title>
       <year>2012</year>
       <price currency="US dollar">20000.00</price>
   </car>
   <car category="sport">
       <title lang="en">Ferrari 360 Spider</title>
       <year>2018</year>
       <price currency="US dollar">150000.00</price>
   </car>
</carstore>
Ve işte yeni genişletilmiş olanı:
<?xml version="1.0" encoding="UTF-8"?>
<carstore>
   <car category="truck">
       <model lang="en">Scania R 770</model>
       <year>2005</year>
       <price currency="US dollar">200000.00</price>
   </car>
   <car category="sedan">
       <title lang="en">Ford Focus</title>
       <year>2012</year>
       <price currency="US dollar">20000.00</price>
   </car>
   <car category="sport">
       <title lang="en">Ferrari 360 Spider</title>
       <year>2018</year>
       <price currency="US dollar">150000.00</price>
   </car>
   <motorcycle>
       <title lang="en">Yamaha YZF-R6</title>
       <year>2018</year>
       <price currency="Russian Ruble">1000000.00</price>
       <owner>Vasia</owner>
   </motorcycle>
   <motorcycle>
       <title lang="en">Harley Davidson Sportster 1200</title>
       <year>2011</year>
       <price currency="Euro">15000.00</price>
       <owner>Petia</owner>
   </motorcycle>
</carstore>
İşte dosyamıza motosiklet tanımını eklemek bu kadar kolay ve basit :) Üstelik motosikletler için de arabalarla aynı alt etiketlere sahip olmamıza kesinlikle gerek yok. Lütfen, arabaların aksine motosikletlerin bir <sahip> öğesine sahip olduğunu unutmayın. Bu, bilgisayarın (veya insanın) verileri okumasını engellemez.

XML ve HTML arasındaki farklar

XML ve HTML'nin görünüşte çok benzer olduğunu daha önce söylemiştik. Bu, nasıl farklı olduklarını bilmeyi çok önemli kılar. İlk olarak, farklı amaçlar için kullanılırlar. HTML, web sayfalarını işaretlemek içindir. Örneğin, bir web sitesi oluştururken HTML kullanarak şunu belirtebilirsiniz: "Menü sağ üst köşede olmalı. Şu ve şu düğmelere sahip olmalı". Başka bir deyişle, HTML'nin işi verileri görüntülemektir. XML, bilgileri insanlar ve bilgisayarlar için uygun bir biçimde depolamak ve göndermek içindir. Bu biçim, bu verilerin nasıl görüntülenmesi gerektiğine dair herhangi bir gösterge içermez: bu, onu okuyan programın koduna bağlıdır. İkincisi, büyük bir teknik fark var. HTML etiketleri önceden tanımlanmıştır. Başka bir deyişle, bir HTML başlığı oluşturmak (örneğin, sayfanın üst kısmında büyük bir başlık) oluşturmak için yalnızca <h1></h1> kullanır. etiketleri (<h2></h2> ve <h3></h3> daha küçük başlıklar için kullanılır). Diğer etiketleri kullanarak HTML başlıkları oluşturamazsınız. XML önceden tanımlanmış etiketler kullanmaz. Etiketlere istediğiniz adı verebilirsiniz: <header>, <title>, <idontknow2121>.

Çatışma çözümü

XML'in sağladığı özgürlük bazı sorunlara yol açabilir. Örneğin, bir ve aynı varlık (örneğin bir araba) bir program tarafından farklı amaçlar için kullanılabilir. Örneğin, arabaları tanımlayan bir XML dosyamız var. Ancak programcılarımız kendi aralarında bir ön anlaşmaya varamadılar. Ve şimdi, gerçek arabalarla ilgili verilere ek olarak, XML'imizde oyuncak arabalarla ilgili veriler bulabiliriz! Üstelik aynı özelliklere sahipler. Diyelim ki programımız böyle bir XML dosyasında okuyor. Gerçek arabayı oyuncak arabadan nasıl ayırt ederiz?
<?xml version="1.0" encoding="UTF-8"?>
<carstore>
   <car category="truck">
       <model lang="en">Scania R 770</model>
       <year>2005</year>
       <price currency="US dollar">200000.00</price>
   </car>
   <car category="sedan">
       <title lang="en">Ford Focus</title>
       <year>2012</year>
       <price currency="US dollar">100.00</price>
   </car>
</carstore>
Burada ön ekler ve ad alanı bize yardımcı olacaktır. Programımızda oyuncak arabaları gerçek arabalardan (ve aslında herhangi bir oyuncağı gerçek muadillerinden) ayırt etmek için iki önek ekledik: "gerçek" ve "oyuncak".
<real:car category="truck">
   <model lang="en">Scania R 770</model>
   <year>2005</year>
   <price currency="US dollar">200000.00</price>
</real:car>
<toy:car category="sedan">
   <title lang="en">Ford Focus</title>
   <year>2012</year>
   <price currency="US dollar">100.00</price>
</toy:car>
Artık programımız farklı varlıklar arasında ayrım yapabilecek! Oyuncak ön ekine sahip her şey oyuncak olarak ele alınacaktır :) Ancak işimiz henüz bitmedi. Ön ekleri kullanmak için her birini bir ad alanı olarak kaydetmemiz gerekir. Aslında, "kayıt" güçlü bir kelime :) Her biri için benzersiz bir isim bulmamız gerekiyor. Sınıflarda olduğu gibi: bir sınıfın kısa bir adı ( Cat ) ve tüm paketleri içeren tam bir adı vardır ( zoo.animals.Cat). Bir URI genellikle benzersiz bir ad alanı adı oluşturmak için kullanılır. Bazen bu, bu ad alanının işlevlerinin açıklandığı bir İnternet adresi kullanılarak yapılır. Ancak geçerli bir İnternet adresi olmak zorunda değildir. Çoğu zaman projeler, ad alanı hiyerarşisini izlemeye yardımcı olan URI benzeri dizeleri kullanır. İşte bir örnek:
<?xml version="1.0" encoding="UTF-8"?>
<carstore xmlns:real="http://testproject.developersgroup1.companyname/department2/namespaces/real"
         xmlns:toy="http://testproject.developersgroup1.companyname/department2/namespaces/toy">
<real:car category="truck">
   <model lang="en">Scania R 770</model>
   <year>2005</year>
   <price currency="US dollar">200000.00</price>
</real:car>
<toy:car category="sedan">
   <title lang="en">Ford Focus</title>
   <year>2012</year>
   <price currency="US dollar">100.00</price>
</toy:car>
</carstore>
Elbette, "http://testproject.developersgroup1.companyname/department2/namespaces/real" adresinde bir web sitesi yoktur, ancak bu dize yararlı bilgiler içerir: "gerçek" ad alanını oluşturmaktan Bölüm 2'deki Grup 1'in geliştiricileri sorumludur. . Yeni isimleri tanıtmamız veya olası çatışmaları tartışmamız gerekirse, nereye döneceğimizi bileceğiz. Bazen geliştiriciler, benzersiz bir ad alanı adı olarak gerçek bir tanımlayıcı web adresi kullanır. Örneğin, projesi dünya çapında milyonlarca insan tarafından kullanılacak olan büyük bir şirket için durum böyle olabilir. Ancak bu kesinlikle her zaman yapılmaz: Stack Overflow'un bu konuda bir tartışması vardır. Genel olarak, URI'leri ad alanı adları olarak kullanmak için kesin bir gereklilik yoktur: rastgele dizeleri de kullanabilirsiniz. Bu seçenek de işe yarar:
xmlns:real="nvjneasiognipni4435t9i4gpojrmeg"
Bununla birlikte, bir URI kullanmanın çeşitli avantajları vardır. Bununla ilgili daha fazla bilgiyi buradan okuyabilirsiniz .

Temel XML standartları

XML standartları, XML dosyalarına ekstra işlevsellik ekleyen bir dizi uzantıdır. XML'in pek çok standardı vardır, ancak en önemlilerine bakacağız ve bunların en ünlü XML standartlarından biri olan AJAX'ı mümkün kıldığını öğreneceğiz. Bir web sayfasının içeriğini yeniden yüklemeden değiştirmenizi sağlar! XSLT, XML metnini diğer biçimlere dönüştürmenizi sağlar. Örneğin, XML'i HTML'ye dönüştürmek için XSLT'yi kullanabilirsiniz! Daha önce de belirttiğimiz gibi, XML'in amacı verileri görüntülemek değil, açıklamaktır. Ancak XSLT ile bu sınırlamayı aşabiliriz! XML DOM, bir XML dosyasındaki öğeleri tek tek almanıza, değiştirmenize, eklemenize veya silmenize olanak tanır. İşte bunun nasıl çalıştığına dair küçük bir örnek. Bir books.xml dosyamız var:
<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>
</bookstore>
İki kitabı vardır. Kitaplarda bir <title> öğesi vardır. Burada XML dosyamızdan tüm kitap başlıklarını almak ve ilkini konsola yazdırmak için JavaScript'i kullanabiliriz:
<!DOCTYPE html>
<html>
<body>

<p id="demo"></p>

<script>
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
  myFunction(this);
  }
};
xhttp.open("GET", "books.xml", true);
xhttp.send();

function myFunction(xml) {
    var xmlDoc = xml.responseXML;
  document.getElementById("demo").innerHTML =
  xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue;
}
</script>

</body>
</html>
DTD ("belge türü tanımı"), bir XML dosyasındaki bir varlık için izin verilen öğelerin bir listesini tanımlamanıza izin verir. Örneğin, bir kitapçı web sitesinde çalıştığımızı ve tüm geliştirme ekiplerinin XML dosyalarındaki kitap öğeleri için yalnızca başlık, yazar ve yıl özniteliklerinin belirtilmesi gerektiği konusunda hemfikir olduğunu varsayalım. Ama kendimizi dikkatsizlikten nasıl koruruz? Çok kolay!
<?xml version="1.0"?>
<!DOCTYPE book [
       <!ELEMENT book (title,author,year)>
       <!ELEMENT title (#PCDATA)>
       <!ELEMENT author (#PCDATA)>
       <!ELEMENT year (#PCDATA)>
       ]>

<book>
   <title>The Lord of The Rings</title>
   <author>John R.R. Tolkien</author>
   <year>1954</year>
</book>
Burada <kitap> için geçerli niteliklerin bir listesini tanımladık. Oraya yeni bir öğe eklemeye çalışın ve hemen bir hata alırsınız!
<book>
   <title>The Lord of The Rings</title>
   <author>John R.R. Tolkien</author>
   <year>1954</year>
   <mainhero>Frodo Baggins</mainhero>
</book>
Hata! "Mainhero öğesine burada izin verilmez" Daha birçok XML standardı vardır. Her birini tanıyabilir ve kodun derinliklerine inmeye çalışabilirsiniz. Her neyse, XML hakkında bilgiye ihtiyacınız varsa, hemen hemen her şeyi orada bulabilirsiniz :) Ve bununla dersimiz sona eriyor. Görevlere geri dönme zamanı! :) Bir sonrakine kadar!
Yorumlar
  • Popüler
  • Yeni
  • Eskimiş
Yorum bırakmak için giriş yapmalısınız
Bu sayfada henüz yorum yok