The European Union s Making the Labour Market more Inclusive III programme For North Cyprus Upgrading Internet Technology skills of Information and Communication Technologies (ICT) Professionals Module 4: Semantic Web Modül 4: Anlamsal Ağ Laboratuar Notları #2 A project implemented by CyberSoft Bilişim Teknolojileri Ltd. This project is funded by European Union. The contents of this publication are the sole responsibility of Cybersoft Bilişim Teknolojileri Ltd. and can in no way be taken to reflect the views of the European Union.
İçerik Bölüm 1: XML Şema ve XSL 1. XML Şema... 1 2. XML Şemanın İçyapısı... 1 3. XSL (Extensible Stylesheet Language)... 4 3.1. XPATH (XML Adresleme Dili)... 4 3.2. XSLT (Extensible Stylesheet Language Transformation)... 7
1.XML Şema (XML Schema) Bir uygulamadaki XML belgesinin hangi etiketleri içerebileceği, etiketlerin sahip olabileceği özellikleri, hangi elemanların diğer hangi elemanları içerebileceği gibi dil yapısı bilgileri o uygulama için geliştirilmiş olan XML DTD (Document Type Definition Veri Tipi Tanımlama) veya "XML schema" olarak adlandırılan belge tanımlama dosyalarında belirtilir. Daha onceki derste XML DTD leri incelemiştik. XML şema da 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 şema elemanların bu tanım işleminde zengin bir veri tipi çesitliliğ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 şema çok geniş bir veri tipi desteği sağlamaktadır (integer,floating point sayılar,date,time,gibi). XML şema ayrıca açık içerik modeli(open content model) ve isim uzayı(namespace integration) gibi ek özellikler de sunmaktadir. XML şema 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 şemaya özel komutlarını öğrenmek yeterli olur. Aşağıda XML şemanın DTD ye göre olan yararları liste halinde verilmiştir: XML şemalar 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 kurulmasi ve vocabulary haznesinin genişletilmesi sağlanır. Namespace desteği sağlar.bu özellik şema içerisindeki bildirimler için ayrı node ları birleştirmeye yarar. Özellik gruplarını destekler. Böylece özellikler mantıksal olarak gruplanabilir. 2. XML Şema nin İçyapısı XML şema nın kendisi de bir XML uygulamasıdır, yani kendisi de bir XML vocabulary olarak değerlendirilebilir. XML şema kullanarak şemaların oluşturulması tıpkı diğer XML belgelerinin oluşturulmasına benzer. Bu sınırlamalara rağmen XML şema vocabulary yapısının anlaşılabilmesi için XML şema 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 vardir. 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"> <! - -Schema içergi buraya yazilir- -> </Schema> 1
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 içergi buraya yazilir- -> </Schema> 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 belirtilebilmesi 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 bunlari bir örnek üzerinde görelim: <ElementType 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"/> </ElementType 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. Aşağıda elektronik posta örneği için tanımlanmış bir DTD dosyası bulunmaktadır. Bu dosyada bu DTD ye göre oluşturulmuş bir adres listesinde hangi etiketlerin bulunabileceği, bu etiketlerin hangi etiketleri içerebileceği gibi bilgiler verilmektedir. Örnek 1. <!ELEMENT e_posta (kime, kimden, tarih, konu, mesaj)> <!ELEMENT kime (#PCDATA)> <!ELEMENT kimden (#PCDATA)> <!ELEMENT tarih (#PCDATA)> <!ELEMENT konu (#PCDATA)> <!ELEMENT mesaj (#PCDATA)> 2
XML şemaları XML belgelerinin yapısını DTD te olduğu gibi tanımlada kullanılan yeni bir yöntemdir. DTD nin bazı sınırlamaları nedeniyle yeni bir alternatif olarak XML-Data note yayınlanmıştır. Bu yeni belge yapısı tanımlama yöntemi XML şema (XML Schema) olarak adlandırılmakta ve daha yaygın olarak desteklenmektedir. XML şemaları bir XML sözlüğü olarak tanımlandığından normal bir XML belgesi olarak işlenebilir ve ayrıştırılabilir. Bunun yanında birçok veri tipini desteklemesi, açık bir model olarak genişleyebilmesi, katılım (inheritance) ilişkilerini desteklemesi gibi avantajları vardır. Bu yöntem, gelişme aşamasında olması nedeniyle henüz son şeklini alamamıştır. Aşağıda elektronik posta örneği için tanımlanmış bir XML şeması bulunmaktadır. <?xml version="1.0"?> <Schema name="elektronikposta" xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes"> <ElementType name="kime" content="textonly"/> <ElementType name="kimden" content="textonly"/> <ElementType name="tarih" content="textonly"/> <ElementType name="konu" content="textonly"/> <ElementType name="mesaj" content="textonly"/> </Schema> Örnek 2. Aşağıda DTD si verilen dökümanın XML Şemasını çıkarınız. ADRESBOOK DTD <!ELEMENT addressbook (contact)+> <!ELEMENT contact (name, address+, city, state, zip, phone, email, web, company)> <!ELEMENT name (#PCDATA)> <!ELEMENT address (#PCDATA)> <!ELEMENT city (#PCDATA)> <!ELEMENT state (#PCDATA)> <!ELEMENT zip (#PCDATA)> <!ELEMENT phone (voice, fax?)> <!ELEMENT voice (#PCDATA)> <!ELEMENT fax (#PCDATA)> <!ELEMENT email (#PCDATA)> <!ELEMENT web (#PCDATA)> <!ELEMENT company (#PCDATA)> ADRESBOOK XML ŞEMASI <?xml version="1.0"?> <Schema name="addressbookschema" xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes"> <ElementType name="name" content="textonly"/> <ElementType name="address" content="textonly"/> <ElementType name="city" content="textonly"/> <ElementType name="state" content="textonly"/> <ElementType name="zip" content="textonly" dt:type="int"/> <ElementType name="voice" content="textonly" dt:type="int"/> <ElementType name="fax" content="textonly" dt:type="int"/> 3
<ElementType name="phone" content="eltonly"> <element type="voice" minoccurs="1" maxoccurs="1"/> <element type="fax" minoccurs="0" maxoccurs="1"/> </ElementType> <ElementType name="email" content="textonly"/> <ElementType name="web" content="textonly"/> <ElementType name="company" content="textonly"/> <ElementType name="contact" content="eltonly"> <element type="name" minoccurs="1" maxoccurs="1"/> <element type="address" minoccurs="1" maxoccurs="2"/> <element type="city" minoccurs="1" maxoccurs="1"/> <element type="state" minoccurs="1" maxoccurs="1"/> <element type="zip" minoccurs="1" maxoccurs="1"/> <element type="phone" minoccurs="1" maxoccurs="1"/> <element type="email" minoccurs="0" maxoccurs="1"/> <element type="web" minoccurs="0" maxoccurs="1"/> <element type="company" minoccurs="0" maxoccurs="1"/> </ElementType> <ElementType name="addressbook" content="eltonly"> <element type="contact" minoccurs="1"/> </ElementType> </Schema> 3. XSL (Extensible Stylesheet Language) XSL (Extensible Stylesheet Language), W3C tarafından geliştirilmiş XML tabanlı stil sayfası dilidir. XSL, XML belgelerinin nasıl görüntüleneceğini tanımlar. XSL, üç kısımdan oluşur. XPATH (XML Path Language) : XML belgelerinde gezinmek (navigate), veri bulmak için kullanılan dildir. Diğer bir anlatımla XML ağacının içindeki düğümleri adreslemeyi ve ağacın belirli kısımlarını adresleyerek ağaç içinde dolaşmamızı sağlayan dildir. XSLT (Extensible Stylesheet Language Transformations) : XML belgelerini dönüştürmek (trasform) için kullanılan dildir. XSL-FO (XSL Formatting Objects ) : XML belgelerini biçimlendirmek (format) için kullanılan dildir. 3.1 XPATH (XML Adresleme Dili) Xpath ile XML belgesi içindeki eleman, özellik gibi düğümler arasında dolaşmak mümkündür. XPath adres (yol) tanımlamaya benzer bir gösterim kullanır. Temel Xpath sözdiminde kullanılabilecek ifadeler aşağıdaki tabloda verilmiştir. 4
İfade Anlamı / /kitaplar ifadesi <kitaplar> elemanını tanımlar. /kitaplar/kitap ifadesi <kitaplar> elemanın yavru elemanı olan her <kitap> elemanını seçer. @ Bir düğümün özelliğini seçer. /kitaplar/kitap/@id ifadesi <kitap> elemanın id isimli özelliğini seçer. // Nerede olduğuna bakmaksızın seçimle eşleşen yürürlükteki (current) düğümden itibaren belge içindeki düğümleri seçer. @ Bir düğümün özelliğini seçer. /kitaplar/kitap/@id ifadesi <kitap> elemanın id isimli özelliğini seçer. * Yol tanımlamasındaki tüm yavru elemanları seçer. /kitaplar/kitap/* ifadesi <kitap> elemanın tüm yavru elemanlarını seçer.. Yürürlükteki düğümü gösterir... Ana düğümü gösterir. Eğer yürürlükteki düğüm <ad> ise.. ifadesi <kitap> düğümünü gösterir. [ ] Bir seçim kriteri tanımlar. /kitaplar/kitap[yazar= Mevlana ] ifadesi kritere uyan <yazar> elemanını içeren <kitap> elemanlarını seçer. startswith position count Bir eleman metninin başlangıç karakterlerine bakarak elemanları seçer. /kitaplar/kitap[starts-with(yazar, 'R')] ifadesi R harfi ile başlayan metni içeren <yazar> elemanına sahip tüm <kitap> elemanlarını bulur. Konuma bakarak elemanları seçer. /kitaplar/kitap[position()=2] ifadesi ikinci <kitap> elemanını seçer. Belirtilen düğümün sayısını hesaplar. count(kitap) ifadesi <kitap> elemanlarının sayısını döndürür. Tablo 1.1: Temel XPath Sözdizimi Örnek 3. <?xml version="1.0" encoding="utf-16"?> <!DOCTYPE library PUBLIC "library.dtd"> <library location="bremen"> <author name="henry Wise"> <book title="artificial Intelligence"/> <book title="modern Web Services"/> <book title="theory of Computation"/> </author> <author name="william Smart"> <book title="artificial Intelligence"/> </author> <author name="cynthia Singleton"> 5
<book title="the Semantic Web"/> <book title="browser Technology Revised"/> </author> </library> 1. Bütün author elementlerini tanımlar. /library/author 2. Bir önceki örneğe alternatif olarak //author 3. library elementindeki bütün location lar /library/@location 4. title'ı Artificial Intelligence olan bütün kitaplar //book[@title="artificial Intelligence"] 5. Dökümandaki ilk author elementi //author[1] 6. İlk author elementinin son kitabı //author[1]/book[last()] 7. title özelliği olmayan bütün book elementleri //book[not (@title)] Şekil 1. Library dökümanın ağaç gösterimi 6
Örnek 4. <?xml version="1.0"> <items> <philosphy> <book id="13" title="the Main Principles Of Philosphy"/> <book id="12" title="the Traditional Turkish Philosphy"/> <book id="43" title="the Great Turkish Thinkers"/> <dictionary title="the Dictionary Of Philosphy"/> </philosphy> <psychology> <book id="14" title="an Introduction To Psycho-Analysis"/> <book id="47" title="the Life Of Freud"/> </psychology> <sociology> <book id="54" title="the Contribution of Ibn Haldun To Sociology"/> <book id="44" title="the Main Characteristics of Turkic Peoples"/> </sociology> <items> Yukarıdaki xml dosyasını kullanarak aşağıdaki verileri seçen ifadeleri yazınız. 1. Philosphy'de ki ikinci item /items/philosphy[2] 2. Bütün Sözlükler /items/*/dictionary 3. Id'si 12 olan kitabın title'ı /items/*/book[@id="12"]/@title 4. Sociology kitaplarının sayısı count(/items/sociology/book) 5. Son psychology kitabı /items/psychology[last()] 6. İçerisinde Turk geçen bütün maddeler /items/*/[contains(@title,"turk")] 3.2 XSLT (Extensible Stylesheet Language Transformations) XML belgesini diğer XML belgesine veya diğer formatlara (HTML, XHTML) dönüştürmek için kullanılır. Kaynak belgeyi değiştirmeden bir hedef belge oluşturur. XML belgesini HTML belgesine dönüştürme işleminde XML belgesi kaynak belge, HTML belgesi hedef belgedir. XML de veri ile verinin sunumunun birbirinden ayrılması bir avantaj oluşturmaktadır. Bu avantaj XML verilerinin XSLT ile birleştirilerek dinamik olarak dönüşümün gerçekleştirilip herhangi bir formatta verilerin sunulabilmesidir. Yani veriler her zaman XML belgesinde tutulup, isteğe göre farklı şekillerde kullanıcıya sunulabilmektedir. XSLT, bir XML belgesinin dönüşümü için ilk önce belgeyi ayrıştırarak (parse) bir ağaç yapısı oluşturur. Oluşan ağaç yapısının kök elemanından başlayarak ağacı tarar ve XSL 7
stil dosyasında tanımlanan kurallara göre belgeyi dönüştürür. XSLT, dönüşüm işlemini her XML elemanını (X)HTML elemanına dönüştürerek gerçekleştirir. XSLT, ağaç yapısını tararken Xpath ifadelerini kullanarak ağacın farklı kesimlerine erişir. Bir XML belgesini başka bir XML belgesine dönüşümüne örnek olarak cep telefonlarındaki uygulama verilebilir. Cep telefonlarındaki WAP uygulamalarında kullanılan WML (Wireless Markup Language) cep telefonlarındaki kısıtlamalar düşünülerek XML dilinde tanımlanmış bir işaretleme dilidir. XML belgeleri XSLT kullanılarak WML e dönüştürülür ve cep telefonlarında görüntülenir. XSLT ile çıktı dosyasına eleman ve özellik eklenebilir, çıkış dosyasından eleman ve özellik çıkartılabilir. Ayrıca elemanları sıralanabilir, tekrar düzenlenebilir, elamanlar gizlenebilir. XSLT, XML belgelerinde veri aramak, gezinmek için XPath i kullanır. Dönüşüm işleminde XSLT, şablonlarla eşleşmesi gereken kaynak belgenin kısımlarını Xpath vasıtasıyla bularak tanımlar. CSS yle kıyaslandığında XSLT nin kullanımı daha çok tavsiye edilir. Örnek 5. Aşağıdaki kitaplar.xml isimli dökümanı HTML ye dönüştürmek için bir XSL stylesheet hazırlamalıyız. <?xml version="1.0" encoding="utf-8"?> <kitaplar> <kitap> <nu>1</nu> <ad>nutuk</ad> <yazar>m.kemal Atatürk</yazar> <yayinevi>kanarya</yayinevi> </kitap> <kitap> <nu>2</nu> <ad>mesnevi'den Seçmeler</ad> <yazar>mevlana</yazar> <yayinevi>serçe</yayinevi> </kitap> <kitap> <nu>3</nu> <ad>çalıkuşu</ad> <yazar>reşat Nuri Güntekin</yazar> <yayinevi>doğan</yayinevi> </kitap> </kitaplar> Önce XML yi HTML ye dönüştürmek için kullanılan xsl dosyasını oluşturalım. kitaplar1.xsl <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:template match="/"> 8
<html> <body> <table border="1"> <tr bgcolor="#ffccff"> <th>sıra No</th> <th>kitap Adı</th> <th>yazar Adı</th> <th>yayınevi</th> </tr> <xsl:for-each select="kitaplar/kitap"> <tr> <td><xsl:value-of select="no" /></td> <td><xsl:value-of select="ad" /></td> <td><xsl:value-of select="yazar" /></td> <td><xsl:value-of select="yayinevi" /></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet> XSL stil sayfası, şablon adı verilen bir veya daha fazla kurallar setinden oluşur ve eşleşen düğüme (node) uygulanacak kuralları içerir. <xsl:template> elemanı şablonları yapılandırmak için kullanılır. Match özelliği XML elemanı ile şablonu ilişkilendirmek için kullanılır. Match, tüm XML belgesi için bir şablon tanımlamak amacıyla da kullanılabilir. Match özelliğinin değeri bir XPath ifadesidir. Örnekteki match="/" ifadesi tüm belgeyitanımlar. Diğer bir ifadeyle XML belgesinin kök elemanı ile şablonu ilişkilendirir. <xsl:foreach> elemanı XML belgesi içindeki elemanlara bir döngü içerisinde erişmemizi sağlar. <xsl:value-of > belirtilen elemana erişim sağlayarak değerini almayı mümkün kılar. XSL stil sayfasının kendisi de bir XML belgesi olduğundan XML bildirimi ile başlamıştır : <?xml version="1.0" encoding=" utf-8"?> <xsl:stylesheet> elemanı bu belgenin XSLT stil sayfası belgesi olduğunu belirtir. XSLT eleman ve özelliklerine erişmek için XSLT ad alanı ve versiyon numarası bildirilir. Sayfadaki xmlns:xsl="http://www.w3.org/1999/xsl/transform" ifadesi W3C XSLT ad alanını belirtir. Belgenin sonundaki </xsl:stylesheet> satırıyla bu eleman kapatılmıştır. <xsl:template> içinde çıktıyı oluşturmak için HTML elemanları kullanılmıştır. <xsl:template match="/"> belgenin köküne uygulanacak şablonu tanımlamaktadır. Bu eleman </xsl:template> satırıyla kapatılmıştır. 9
<xsl:for-each select="kitaplar/kitap"> satırı ile kitap düğümü içinde bir döngü oluşturulmuştur. <xsl:value-of select= > satırlarıyla no, ad, yazar, yayinevi elemanlarına erişim sağlanarak değerleri alınmıştır. XML belgesinden stil sayfasına bağlanmak için kitaplar.xml belgesinin ikinci satırına <?xml-stylesheet type="text/xsl" href="kitaplar1.xsl"?> satırını ekleyelim. Ardından tarayıcıda görüntüleyelim. Şekil 2. Kitaplar1.xsl ile dönüştürülmüş kitaplar.xml nin tarayıcıdaki görüntüsü Görüldüğü gibi XML belgesinin sadece veri içermesine rağmen tarayıcıda html sayfasından farksız görüntülenmesinin nedeni, belgeye bağlanmış bir xsl belgesinin de yüklenip biçimlendirme için şablon olarak kullanılmasıdır. NOT: Örneklerde kitaplar.xml belgesine satırlar eklenmektedir. Bu eklenen satırlar sadece o örnek içindir. Diğer örneklerde kitaplar.xml belgesinin özgün (orijinal) hali kullanılacaktır. Örnek olarak kitaplar.xml belgesi için farklı XSL belgeleri (kitaplar2.xsl, kitaplar3.xsl) kullanıp aynı verinin farklı görünümlerini içeren sayfalar elde edelim. Örnek 6. kitaplar2.xsl <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:template match="/"> <html> <body> <h2>kitaplar</h2> <xsl:apply-templates/> </body> </html> </xsl:template> <xsl:template match="kitap"> <p> <xsl:apply-templates select="ad"/> <xsl:apply-templates select="yazar"/> </p> </xsl:template> <xsl:template match="ad"> Kitap adı : <span style="color:#ff0000"> 10
<xsl:value-of select="."/></span> <br /> </xsl:template> <xsl:template match="yazar"> Yazar adı : <span style="color:#0099ff"> <xsl:value-of select="."/></span> <br /> </xsl:template> </xsl:stylesheet> Şekil 3. Kitaplar2.xsl ile dönüştürülmüş kitaplar.xml nin tarayıcıdaki görüntüsü Örnek 7. Kitaplar3.xsl <?xml version="1.0" encoding="utf-8"?> <html xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform" xmlns="http://www.w3.org/1999/xhtml"> <body style="font-family:arial;fontsize:12pt;backgroundcolor:# CCFFCC"> <xsl:for-each select="kitaplar/kitap"> <div style="backgroundcolor:#66ccff;color:white;padding:4px"> <span style="font-weight:bold"><xsl:value-of select="nu"/></span> - <xsl:value-of select="ad"/> </div> <div style="margin-left:20px;marginbottom:1em;fontsize:10pt"> <xsl:value-of select="yazar"/> <span style="font-style:italic"> - <xsl:value-of select="yayinevi"/> Yayınevi </span> </div> </xsl:for-each> </body> </html> 11
Şekil 4. Kitaplar3.xsl ile dönüştürülmüş kitaplar.xml nin tarayıcıdaki görüntüsü 12