23

1200001 Mühendisliği user.ceng.metu.edu.tr/~erman/kku/secmeli_1/3hafta/xml_ders2.pdfXML ile veriler yapı bakımından

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 1200001 Mühendisliği user.ceng.metu.edu.tr/~erman/kku/secmeli_1/3hafta/xml_ders2.pdfXML ile veriler yapı bakımından
Page 2: 1200001 Mühendisliği user.ceng.metu.edu.tr/~erman/kku/secmeli_1/3hafta/xml_ders2.pdfXML ile veriler yapı bakımından

HTML gibi işaretleme etiketlerini kullanan, verilerin depolanmasını sağlayan ve bu verileri metin formatında saklayan bir dildir.

HTML ile XML arasındaki temel fark XML işaretleme etiketlerinin bilginin içeriğini tanımlamak için kullanılmasıdı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 o 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 dökümanındaki nesne kavramı ve bu nesneleri belirten tag yapıları bizim tarafımızdan oluşturulduğu için XML genişletilebilir özelliğe sahiptir.

XML'i HTML'in yerine geçecek bir dil değil de tanımlayıcısı olarak düşünmek daha uygundur.

2

Page 3: 1200001 Mühendisliği user.ceng.metu.edu.tr/~erman/kku/secmeli_1/3hafta/xml_ders2.pdfXML ile veriler yapı bakımından

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.

Aşağıda basit bir XML örneği görmektesiniz.

3

<öğrenci>

<isim>Mehmet</isim>

<soyisim>Levent</soyisim>

<numara>1200001</numara>

<bölüm>Bilgisayar Mühendisliği</bölüm>

<sınıf>4. sınıf </sınıf>

</öğrenci>

Page 4: 1200001 Mühendisliği user.ceng.metu.edu.tr/~erman/kku/secmeli_1/3hafta/xml_ders2.pdfXML ile veriler yapı bakımından

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 <p> ve <h1> 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.

4

<öğrenci>

<isim>Mehmet</isim>

<soyisim>Levent</soyisim>

<numara>1200001</numara>

<bölüm>Bilgisayar Mühendisliği</bölüm>

<sınıf>4. sınıf </sınıf>

</öğrenci>

Öğrenci nesnesi için bir etiket

Öğrenci nesnesi ait bir özellik

Page 5: 1200001 Mühendisliği user.ceng.metu.edu.tr/~erman/kku/secmeli_1/3hafta/xml_ders2.pdfXML ile veriler yapı bakımından

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

5

Page 6: 1200001 Mühendisliği user.ceng.metu.edu.tr/~erman/kku/secmeli_1/3hafta/xml_ders2.pdfXML ile veriler yapı bakımından

Veriyi HTML’den ayırır. Böylece küçük JS kodları ile bir XML dosyasını okuyarak web sayfamızın veri içeriğini dinamik olarak güncelleyebiliriz.

Veri paylaşımını basitleştirir. XML verisi düz metin şekline saklanır. Bu da verinin hem donanımdan hem de yazılımdan bağımsız saklanmasını sağlar. Böylece farklı platformlar arasında kolay veri paylaşımı gerçekleşir.

Veri taşınmasını basitleştirir. Uyumsuz sistemler arasındaki en büyük problem veri taşınması sırasında yaşanan zaman problemidir. XML bu zorluğu ortadan kaldırır.

Platform değişikliğini basitleştirir. Alt yapıda yapılacak bir işletim sistemi, uygulama, veritabanı veya tarayıcı değişikliğinden etkilenmez ve veri kaybını önler.

6

Page 7: 1200001 Mühendisliği user.ceng.metu.edu.tr/~erman/kku/secmeli_1/3hafta/xml_ders2.pdfXML ile veriler yapı bakımından

Data Island HTML sayfalarına iki şekilde gömülür:

o Direk XML datasını HTML‘nin içine gömerek

HTML sayfasından XML'i referans göstererek.

7

<XML ID="XMLID"> <öğrenci> <isim>Mehmet</isim> <soyisim>Levent</soyisim> <numara>1200001</numara> <bölüm>Bilgisayar Mühendisliği</bölüm> <sınıf>4. sınıf </sınıf> </öğrenci> </XML>

<XML ID="XMLID" SRC="students.xml"></XML>

Page 8: 1200001 Mühendisliği user.ceng.metu.edu.tr/~erman/kku/secmeli_1/3hafta/xml_ders2.pdfXML ile veriler yapı bakımından

1. satır XML versiyonunu ve kullanılacak karakter setini deklare eder.

2. satır ise belgenin KÖK elemanını tanımlar.

Sonraki 4 satır ise KÖK elemanın ÇOCUKLARINI tanımlar

ÇOCUKLAR birbirleriyle kardeştirler ve her çocuğun kendi çocuğu da olabilir.

Son satır ise KÖK elemanın bittiğini belirtir.

8

<?xml version="1.0" encoding="windows-1254"?>

<not>

<kime>Erman</kime>

<kimden>Ozgur</kimden>

<konu>TBMM Ders</konu>

<icerik>Yarın yapılacak XML dersini unutmayalım!!!</icerik>

</not>

Satır 1

Satır 2

Satır 7

Page 9: 1200001 Mühendisliği user.ceng.metu.edu.tr/~erman/kku/secmeli_1/3hafta/xml_ders2.pdfXML ile veriler yapı bakımından

XML başlangıç ve bitiş etiketi kurallarına sıkı sıkıya bağlıdır.

HTML’de örneğin <p> ile başlamamız gereken bir paragrafı </p> etiketiyle kapatmasak bile tarayıcı çoğu zaman bu hatayı göz ardı ederek HTML belgesini görüntüler. XML bunu kesinlikle kabul etmez.

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.

XML Yorum: • <!– Bu bir yorumdur-->

XML sözdiziminin temel taşı olan elemanların(element) isimlendirilmesinde uyulması gereken kurallar şunlardır:

o İsimler harf,sayı ya da diğer karakterleri içerebilir.

o İsimler bir sayı veya _ (alt çizgi) karakteri ile başlamamalıdır.

o İsimler “xml“(ya da XML veya Xml) şeklinde başlamamalıdır

o İsimler boşluk içermemelidir.

9

Page 10: 1200001 Mühendisliği user.ceng.metu.edu.tr/~erman/kku/secmeli_1/3hafta/xml_ders2.pdfXML ile veriler yapı bakımından

5 tane ön tanımlı özel karakter vardır.

Kullanım

o <mesaj>maas < 1000 then</mesaj> YANLIŞ

o <mesaj>if maas &lt; 1000 then</mesaj> DOĞRU

10

&lt; < Küçüktür

&gt; > Büyüktür

&amp; & ampersand

&apos; ' apostrof

&quot; " Çift tırnak

Page 11: 1200001 Mühendisliği user.ceng.metu.edu.tr/~erman/kku/secmeli_1/3hafta/xml_ders2.pdfXML ile veriler yapı bakımından

Özellikler elemanlar hakkında ek bilgiler verir.

o <img src="bellek.gif">

o <a href="index.asp">

Özellikler tırnak için gösterilmelidir.

o <person sex="female">

veya

o <person sex='female'>

Eğer bir özellik kendi içinde Tırnak karakterini içiyorsa:

o <gangster name='George "Shotgun" Ziegler'>

veya

o <gangster name="George &quot;Shotgun&quot; Ziegler">

11

Page 12: 1200001 Mühendisliği user.ceng.metu.edu.tr/~erman/kku/secmeli_1/3hafta/xml_ders2.pdfXML ile veriler yapı bakımından

<person sex="female">

<firstname>Anna</firstname>

<lastname>Smith</lastname>

</person>

<person>

<sex>female</sex>

<firstname>Anna</firstname>

<lastname>Smith</lastname>

</person>

12

Tercih edilen yöntem

<not tarih="10/01/2008">

<kime>Erman</kime>

<kimden>Jani</kimden>

<konu>Reminder</konu>

<icerik> Dersi Unutma</icerik>

</not>

<not">

<tarih>=10/01/2008</tarih>

<kime>Erman</kime>

<kimden>Jani</kimden>

<konu>Reminder</konu>

<icerik> Dersi Unutma</icerik>

</not>

<not>

<tarih>=10/01/2008</tarih>

<gun> 18</gun>

<ay> 12 </ay>

<yil> 2012</yil>

<kime>Erman</kime>

<kimden>Jani</kimden>

<konu>Reminder</konu>

<icerik> Dersi Unutma</icerik>

</not>

Page 13: 1200001 Mühendisliği user.ceng.metu.edu.tr/~erman/kku/secmeli_1/3hafta/xml_ders2.pdfXML ile veriler yapı bakımından

DTD'leri, XML dokümanlarının yapı bilgilerini tutan modüller olarak tanımlamak mümkündür.

Doküman içinde kullanılacak olan tüm varlıklar daha önceden DTD içerisinde tanımlanmalıdır.

XML belgelerinin platformdan bağımsız olması ve kolayca oluşturulabilmesi uygulamada çok fazla anlam ifade etmiyor.

Belgeyi kullanacak olan uygulamalara belgenin yapısı hakkında tanımlamalar da bulunulması gerekir.

Bu tanımlamalar sayesinde belgeyi işleyecek olan uygulama belgenin içeriği hakkında bilgi sahibi olur ve işlemlerini bu çerçevede sürdürür.

Kısaca DTD belgenin içeriğini tanımlamamıza yarar.

DTD bildirim sözcükleri XML belgesine eklenir.

13

Page 14: 1200001 Mühendisliği user.ceng.metu.edu.tr/~erman/kku/secmeli_1/3hafta/xml_ders2.pdfXML ile veriler yapı bakımından

Örnek

14

<?XML version=”1.0”?> <öğrenci> <isim>Mehmet</isim> <soyisim>Levent</soyisim> <numara>1200001</numara> <bölüm>Bilgisayar Mühendisliği</bölüm> <sınıf>4. sınıf </sınıf> </öğrenci>

Bu bilginin parser tarafından işlenebilmesini sağlamak amacıyla

<?XML version=”1.0”?> <!DOCTYPE öğrenci SYSTEM ”öğrenci.dtd”> <öğrenci> <isim>Mehmet</isim> <soyisim>Levent</soyisim> <numara>1200001</numara> <bölüm>Bilgisayar Mühendisliği</bölüm> <sınıf>4. sınıf </sınıf> </öğrenci>

yukarıdada görüldüğü gibi sisteme öğrenci nesnesinin tanımını öğrenci.dtd isimli dosyada

bulunduğunu belirtmiş oluyoruz.

Page 15: 1200001 Mühendisliği user.ceng.metu.edu.tr/~erman/kku/secmeli_1/3hafta/xml_ders2.pdfXML ile veriler yapı bakımından

Öğrenci.dtd isimli dosya:

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

15

<!ELEMENT öğrenci(isim, soyisim, numara, bölüm, sınıf)> <!ELEMENT isim (#PCDATA)> <!ELEMENT soyisim (#PCDATA)> <!ELEMENT numara (#PCDATA)> <!ELEMENT bölüm (#PCDATA)> <!ELEMENT sınıf (#PCDATA)>

<!DOCTYPE öğrenci[ <!ELEMENT öğrenci(isim,soyisim,numara,bölüm,sınıf)> <!ELEMENT isim (#PCDATA)> <!ELEMENT soyisim (#PCDATA)> <!ELEMENT numara (#PCDATA)> <!ELEMENT bölüm (#PCDATA)> <!ELEMENT sınıf (#PCDATA)> ]>

Page 16: 1200001 Mühendisliği user.ceng.metu.edu.tr/~erman/kku/secmeli_1/3hafta/xml_ders2.pdfXML ile veriler yapı bakımından

DTD Oluşturma

o Bir DTD oluşturmak için öncelikle XML’in temel özelliklerini bilmeliyiz.

o Bir doctype bildirimi, DTD ile XML belgesini birbirine bağlar.

o Doctype bildirisi XML belgesinin girişine yazılır ve herhangi bir elemandan önce gelir.

o Bu bildiriden önce XML bildirisi yer alır. Bundan başka işleyici komutları, yorum satırları da olabilir.

o Bir öğrenci elementini data halinde XML kullanarak geliştirebilmek için önce elementin hangi özellikleri bulunduğunu belirlememiz gerekir.

o Diyelim ki buna karar verdik:

o Özelliklerimiz isim, soyisim, numara, bölüm ve sınıf olsun.

o O zaman içinde <isim>, <soyisim>, <numara>, <bölüm>, <sınıf> elementlerini bulunduran <öğrenci> elementine ihtiyacımız var.

16

Page 17: 1200001 Mühendisliği user.ceng.metu.edu.tr/~erman/kku/secmeli_1/3hafta/xml_ders2.pdfXML ile veriler yapı bakımından

Eğer DTD yi XML kodunun içine yazıyorsak aşağıdaki gibi olmalıydı.

17

<!DOCTYPE öğrenci[ <!ELEMENT öğrenci(isim,soyisim,numara,bölüm,sınıf)> <!ELEMENT isim (#PCDATA)> <!ELEMENT soyisim (#PCDATA)> <!ELEMENT numara (#PCDATA)> <!ELEMENT bölüm (#PCDATA)> <!ELEMENT sınıf (#PCDATA)> ]>

<!DOCTYPE öğrenci [

Bu satırda <öğrenci> 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 parantezden önce dış DTD referansı yer alacaktı.

<!ELEMENT öğrenci(isim,soyisim,numara,bölüm,sınıf)>

Bu satır ise <öğrenci> elementinin, bir <isim>, <soyisim> <numara> <bölüm>

<sınıf> elementlerini içerdiğini, bunlardan sadece birer tane olabilceğini ve bu

elementlerin sırasının yukarıdaki gibi olacağını ve örneğin <soyisim> elementini

<isim> elementinden önce gelmemesi gerektiğini anlatmaktadır.

Page 18: 1200001 Mühendisliği user.ceng.metu.edu.tr/~erman/kku/secmeli_1/3hafta/xml_ders2.pdfXML ile veriler yapı bakımından

18

<!ELEMENT isim (#PCDATA)> <!ELEMENT soyisim (#PCDATA)> <!ELEMENT numara (#PCDATA)> <!ELEMENT bölüm (#PCDATA)> <!ELEMENT sınıf (#PCDATA)>

Bu satırlar ise bize <isim>, <soyisim>

<numara> <bölüm> <sınıf> elementlerinin

her birinin “parsed character” verisi

tuttuğunu fakat herhangi bir çocuk element

içermediğini belirtir.

Page 19: 1200001 Mühendisliği user.ceng.metu.edu.tr/~erman/kku/secmeli_1/3hafta/xml_ders2.pdfXML ile veriler yapı bakımından

XML önceden tanımlanmış etiketleri kullanmadığı için (kendi etiketlerimizi tanımlayabildiğimiz için) , bu etiketlerin anlamı anlaşılmaz.

<table>, 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.

W3C XML formatlamak için XSLT yi kullanmayı önermiştir.

19

Page 20: 1200001 Mühendisliği user.ceng.metu.edu.tr/~erman/kku/secmeli_1/3hafta/xml_ders2.pdfXML ile veriler yapı bakımından

XSL (eXtensible Stylesheet Language), XML’in tercih edilen “style sheet” dilidir.

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

20

Page 21: 1200001 Mühendisliği user.ceng.metu.edu.tr/~erman/kku/secmeli_1/3hafta/xml_ders2.pdfXML ile veriler yapı bakımından

XSL 3 kısımdan oluşur:

o XML belgelerini çevirmeye yarayan yöntem.

o XML’in bölümlerini ve şablonlarını tanımlamaya yarayan yöntem

o 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.

21

Page 22: 1200001 Mühendisliği user.ceng.metu.edu.tr/~erman/kku/secmeli_1/3hafta/xml_ders2.pdfXML ile veriler yapı bakımından

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.

Ü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.

22

Page 23: 1200001 Mühendisliği user.ceng.metu.edu.tr/~erman/kku/secmeli_1/3hafta/xml_ders2.pdfXML ile veriler yapı bakımından

Tesekkurler

23