EGE ÜNİVERSİTESİ FEN BİLİMLERİ ENSTİTÜSÜ (YÜKSEK LİSANS TEZİ) İLİŞKİSEL VERİTABANI İLE ONTOLOJİLER ARASINDA DÖNÜŞÜMÜN GERÇEKLEŞTİRİLMESİ: ORACLE 10G RDF VERİ DEPOSU ÜZERİNDE ÖRNEK BİR UYGULAMA Kıvanç URGANCIOĞLU Bilgisayar Mühendisliği Anabilim Dalı Bilim Dalı Kodu: 619.01.00 Sunuş Tarihi:28.08.2006 Tez Danışmanı: Yrd. Doç. Dr. Murat Osman ÜNALIR III Kıvanç Urgancıoğlu tarafından yüksek lisans tezi olarak sunulan “İlişkisel Veritabanı İle Ontolojiler Arasında Dönüşümün Gerçekleştirilmesi:Oracle 10g Rdf Veri Deposu Üzerinde Örnek Bir Uygulama” başlıklı bu çalışma E.Ü. Lisansüstü Eğitim ve Öğretim Yönetmeliği ile E.Ü. Fen Bilimleri Enstitüsü Eğitim ve Öğretim Yönergesi’nin ilgili hükümleri uyarınca tarafımızdan değerlendirilerek savunmaya değer bulunmuş ve 28.08.2006 tarihinde yapılan tez savunma sınavında aday oybirliği/oyçokluğu ile başarılı bulunmuştur. Jüri Üyeleri: İmza Jüri Başkanı : ........................................... ................................. Raportör Üye: ........................................... ................................. Üye ................................. : ........................................... IV V ÖZET İLİŞKİSEL VERİTABANI İLE ONTOLOJİLER ARASINDA DÖNÜŞÜMÜN GERÇEKLEŞTİRİLMESİ: ORACLE 10G RDF VERİ DEPOSU ÜZERİNDE ÖRNEK BİR UYGULAMA URGANCIOĞLU, Kıvanç Yüksek Lisans Tezi, Bilgisayar Mühendisliği Bölümü Tez Yöneticisi: Yrd. Doç. Dr. Murat Osman ÜNALIR Ağustos 2006, 122 sayfa Anlamsal Web günümüz web sayfalarının anlamsal içeriğine yapı kazandırmak ve yazılım etmenleri tarafından işlenebilir hale getirilmesi hedefini taşımaktadır. Böylelikle sayfalar sadece kullanıcılar tarafından değil aynı zamanda akıllı etmenler tarafından işlenebilir hale getirilebilecektir. Buradaki en büyük problemlerden biri günümüz bilgi kaynaklarının anlamsal web’e nasıl dâhil edileceği konusudur. Özellikle veri odaklı dinamik sayfaların anlamsal web’e dâhil edileceği konusu son derece önemlidir. Bu konuda iki yaklaşım öne çıkmaktadır. Bunlardan bir tanesi web sayfalarına yorum ekleme “annotation” işlemidir. İkinci yaklaşımda ise dinamik sayfaların içeriklerinin oluşturulduğu veritabanlarının ontolojilere otomatik olarak eşlenmesi hedeflenmiştir. Bu yaklaşım ile veritabanlarındaki üst veriler ile birlikte veriler de ontolojisel yapılara dönüştürülmüştür Bu tez kapsamında, ilişkisel veritabanlarının ontolojisel varlıklara eşlenmesi ele alınmaktadır. Eşlenme sırasında ortak bir alan ontolojisine göre sistemlerin kendilerine özgü ontolojileri oluşturulur ve veriler oluşturulan ontolojiler üzerinden eşlenir. Böylelikle veri odaklı sistemler ortak ve paylaşılan ontolojiler kullanılarak anlamsal bir yapı kazanır. Ek olarak sistemler ortak bir ontolojiye göre eşlendikleri için birbirleriyle entegrasyonları da kolaylaşmaktadır. İlişkisel veritabanlarından ontolojilere eşlenen ontoloji varlıkları Oracle RDF veri deposunda saklanmıştır. Eşlenen varlıklar için ek olarak gerekli kural tabanları ve kural indeksleri de oluşturulmuştur. Ek olarak kullanıcı istediği takdirde Oracle RDF veri deposunda saklanmakta olan eşlenmiş ilişkisel veri tabanı ve verilerini yeniden oluşturmaları için gerekli kodları oluşturan modüllere de sahiptir. Anahtar sözcükler: Anlamsal web, RDF, tersine mühendislik, ontoloji eşleme, Oracle RDF veri deposu VI VII ABSTRACT REVERSE ENGINEERING OF RELATIONAL DATABASE SCHEMAS TO ONTOLOGIES: A SAMPLE APPLICATION ON ORACLE 10G RDF DATASTORE URGANCIOĞLU, Kıvanç MSc in Computer Eng. Supervisor: Assist: Yrd. Doç. Dr. Murat Osman ÜNALIR AUGUST 2006, 122 pages The vision of Semantic Web is to enable machine processability of web content with a well-defined meaning represented by ontologies. The ontologies provide consensual domain models, which are understandable to both human beings and machines as a shared conceptualization. The main problem arises in adapting today’s information resources into Semantic Web. Especially today’s web sites are dynamically generated from databases and commonly these pages do not exist. There are two major approaches exists on adapting today’s information resources into Semantic Web. One of them is annotating the web sites with ontological structures. The other one is mapping relational schemas into ontological structures. In this thesis we propose a system for Reverse Engineering of Relational Database Schemas into ontological structures. The shared, common relational ontology is used in abstract level and relational schemas are mapped into ontological structures by using relational ontology. The data included in relational databases are also mapped with ontological structures. The mapped ontological structures expressed in RDF are stored in Oracle RDF Datastore. Rulebases and rule indexes are also implemented by the system. The system also has modules to map the ontological structures stored in RDF Datastore into schema creation scripts. Keywords: Semantic Web, RDF, Reverse engineering, ontoloji mapping ,Oracle RDF Datastore, Relational database schema VIII IX TEŞEKKÜR Bu tez çalışması sırasında gösterdiği ilgi ve destek için değerli danışmanım sayın Yrd. Doç. Dr. Murat Osman Ünalır’a teşekkürlerimi sunarım. Sevgi, sabır ve desteklerinden dolayı sevgili eşime, aileme ve İzmir’deki yakın dostlarıma minnettar olduğumu belirtmek isterim. X XI İÇİNDEKİLER Sayfa ÖZET……………………………………………………………………………………….. ABSTRACT………………………………………………………………………………… TEŞEKKÜRLER…………………………………………………………………………… İÇİNDEKİLER……………………………………………………………………………... ŞEKİLLER DİZİNİ………………………………………………………………………… ÇİZELGELER DİZİNİ……………………………………………………………………... 1.GİRİŞ……………………………………………………………………………………… 2. ANLAMSAL WEB………………………………………………………………………. 2.I XML Sözdizimi Katmanı ……………………………………………………….. 2.2 RDF(Kaynak tanımlama Çatısı) Veri Katmanı………………………………….. 2.3 Ontoloji Katmanı………………………………………………………………… 3. VERİ MODELLERİ………………………………………………………………………. 3.1 İlişkisel Model…………………………………………………………………… 3.2 RDF Şema……………………………………………………………………….. XII İÇİNDEKİLER(devam) Sayfa 3.3 Ontolojiler ve İlişkisel Veri tabanları…………………………………………………… 4. ORACLE SPATİAL KAYNAK TANIMLAMA ÇATISI………………………………………... 4.1 ORACLE 10g Spatial Kaynak Tanımlama Çatısı Özellikleri…………………………… 4.2 Veritabanında RDF Veri Modeli ……………………………………………………….. 4.2.1 RDF Modelleri için Üst Veri………………………………………………….. 4.2.2 RDF İsim alanları (RDF Namespaces) ……………………………………….. 4.2.3 RDF Deyimleri………………………………………………………………... 4.2.3.1 Üçlülerin eşsizliği ve Sabitler için Veri Tipleri…………………....... 4.2.4 Tipli Sabitler…………………………………………………………………... 4.2.5 RDF Özne ve Nesneleri……………………………………………………….. 4.2.6 Boş Düğümler…………………………………………………………………. 4.2.7 RDF Yüklemleri (“Predicates”) ………………………………………………. 4.2.8 RDF Reifikasyon(Reification) ………………………………………………... 4.2.9 RDF Kapları(“RDF Collections”) ……………………………………………. 4.2.10 RDF Üst Veri Tabloları ve Görünümleri ……………………………………. 4.2.11 Oracle Uzamsal Ağ Modelinde Veri Depolama……………………………… 4.2.12 RDF veri deposuna üçlülerin eklenmesi……………………………………… 4.2.13 RDF Nesne Tipleri……………………………………………….................... 4.2.14 Üçlülerin Eklenmesi için “Constructor” Yapıları……………………………. 4.2.15 Boş düğümler için Yapıcı Yapıları…………………………………………... XIII İÇİNDEKİLER(devam) Sayfa 4.3 RDF Şema………………………………………………...……………………………….. 4.3.1 Kurallar ve Kural Tabanları…………………...………………………………… 4.3.2 Kural İndeksleri………………………………...……………………………….. 4.4 RDF verisinin SDO_RDF_MATCH Tablo Fonksiyonu ile Sorgulanması……………….. 4.5 RDF Güvenlik Hususları………………………………...………………………………… 4.6. Oracle RDF Yapısı için ilk adımlar……………………...……………………………….. 5. EŞLEME MİMARİSİ VE SÜREÇ………………………………...………………………………. 5.1 Tasarım Mantığı………………………………...………………………………………… 5.2 İlişkisel RDF Ontolojisi………………………………...………………………………… 5.3 Eşleme Mimarisi………………………………...……………………………………….. 5.4 Eşleme İşlemi………………………………...…………………………………………... 5.4.1 Şema Dönüşümü ………………………………...…………………………… 5.4.1.1 ORACLE RDF modelinin yaratılması...…………………………… 5.4.1.2 İlişkisel RDF ontolojisinin Oracle 10g RDF veri deposuna eklenmesi 5.4.1.3 Oracle Veri sözlüklerinin kullanılması.…………………………….. 5.4.1.4 Tabloların Eşlenmesi……………………...………………………… 5.4.1.5 Kolonların Eşlenmesi ……………………...……………………….. 5.4.1.6 İndekslerin Eşlenmesi……………………...………………………... 5.4.1.7 Kısıtlamaların Eşlenmesi……………………...…………………….. XIV İÇİNDEKİLER(devam) Sayfa 5.4.1.8 İlişkilerin Eşlenmesi……………………...………………………… 5.4.1.9 İlişkisel Veritabanındaki Anlamsallığın Eşlenmesi………………… 5.4.1.10 Kural tabanları, Kurallar ve Kural İndeksleri………………………. 5.4.2 Verilerin Taşınması……………………………………………………………. 5.5 Oracle 10g RDF veri deposundan ilişkisel şemanın elde edilmesi………………. 5.5.1 Tablo kodlarının elde edilmesi…………………………………………. 5.5.2 Verilerin elde edilmesi…………………………………………………. 5.5.3 Indekslerin elde edilmesi………………………………………………. 5.5.4 Birincil kısıtlamaların elde edilmesi…………………………………… 5.5.6 Dış anahtar kısıtlamaların elde edilmesi……………………………….. 5.5.7 Kontrol kısıtlama kodlarının elde edilmesi…………………………….. 6. İLGİLİ ÇALIŞMALAR……………………………..……………………………..…………….. 6.1 Veri Depolama Sistemleri……………..……………..……………..…………………… 6.2 Ontoloji Eşleme Sistemleri……………..……………..……………..………………….. 7. İZLEYECEK ÇALIŞMALAR……………..……………..……………..……………………….. 8.SONUÇ……………..……………..……………..……………………………………………….. KAYNAKÇA……………..……………..……………..………………………..………………….. XV İÇİNDEKİLER(devam) Sayfa EK A: ORASEMWEB Yükleme Adımları………………..………………..…………………….. EK B: ORASEMWEB PAKETİ ALTPROGRAMLARI..………………..……………………… EK C: KURAL TABANI ÜZERİNDE YARATILAN KURALLAR…..……………………….. EK D: EŞLEME SONUCU OLUŞAN YAPININ SORGULANMASI…..……………………… EK E: İLİŞKİSEL RDF ONTOLOJİSİ…..…………………………..…………………………… EK F SÖZLÜK …..…………………………..…………………………………………………… XVI ŞEKİLLER DİZİNİ Şekil Sayfa Şekil 1:Anlamsal Web katmanları…..…………………………..……………………………….. Şekil 2:RDF yönlendirilmiş çizge…..…………………………..……………………………….. Şekil 3:Tipi Sabitler…..…………………………..……………………………………………… Şekil 4: “Bag” deyimleri için örnek RDF/XML…..……………………………………………… Şekil 5: Oracle NDM RDF veri modelinde ”Bag” kap yapısı…………………………………… Şekil 6:RDF üçlüleri…………………………..…………………………………………………. Şekil 7 : Sistem Mimarisi……………………..…………………………………………………. XVII ÇİZELGELER DİZİNİ Çizelge Sayfa Çizelge 1: Örnek bir RDF Şema……………………..…………………………………………… Çizelge 2: RDF modeli için kullanıcı tablosu………..…………………………………………… Çizelge 3: RDF modelinin yaratılması………..………………………………………………….. Çizelge 4: RDF_VALUE$ görünümü yapısı..……………………………………………………. Çizelge 5: RDF_BLANK_NODE$ görünümü yapısı……………………………………………. Çizelge 6: Boş düğüm yapıcısı……………………..…………………………………………….. Çizelge7: Boş düğümün eklenmesi………………..……………………………………………… Çizelge 8:RDF_LINK$ görünümü………………..………………………………………………. Çizelge 9: Reifikasyon dörtlüsünü örneği………..……………………………………………….. Çizelge 10: “Bag” deyimleri için örnek RDF/XML………………………………………………. Çizelge 11:SDO_RDF_TRIPLE tipi………………..…………………………………………….. Çizelge 12: Üçlülerin Eklenmesi için Yapıcı “Constructor” Yapıları……………………………. Çizelge 13:Boş düğümler için Yapıcı Yapıları……..……………………………………………. Çizelge 14: Kural tabanının yaratılması……..…………………………………………………… Çizelge 15: Kural tabanının sorgulanması……..………………………………………………… Çizelge 16: Kural tabanı üzerinde indeks yaratılması……..…………………………………….. XVIII ÇİZELGELER DİZİNİ Çizelge Sayfa Çizelge 17: SDO_RDF_MATCH Tablo Fonksiyonu……..……………………………………… Çizelge 18: Tabloların Eşlenmesi……..………………………………………………………….. Çizelge 19: Eşlenmiş tabloların RDF veri deposuna girilmesi………………………………….. Çizelge 20: Kolonların Eşlenmesi……..………………………………………………………… Çizelge 21: Eşlenmiş kolonların RDF veri deposuna girilmesi………………………………….. Çizelge 22: İndekslerin Eşlenmesi……..………………………………………………………… Çizelge 23: Eşlenmiş kolonların RDF veri deposuna girilmesi………………………………….. Çizelge 24: Kısıtlamaların Eşlenmesi……..……………………………………………………... Çizelge 25: Eşlenmiş Kısıtlamaların RDF veri deposuna girilmesi……………………………… Çizelge 26: İlişkilerin Eşlenmesi……..…………………………………………………………... Çizelge 27: Örnek kural tabanı oluşturulması……………………………………………………. Çizelge 28: Verilerin taşınması için boş düğüm……..…………………………………………… Çizelge 29: Verilerin taşınması için hücrelerin eklenmesi………………………………………. Çizelge 30: Verilerin elde edilmesi……..………………………………………………………… Çizelge 31: Tablo kodlarının elde edilmesi……..………………………………………………… Çizelge 32: Tablo kolon kodlarının elde edilmesi………………………………………………… XIX ÇİZELGELER DİZİNİ Çizelge Sayfa Çizelge 33: Veri girdi kodlarının elde edilmesi………………………………………………………. Çizelge 34: Indeks kodlarının elde edilmesi…………………………………………………………... Çizelge 35: Birincil kısıtlamaların elde edilmesi……………………………………………………... Çizelge 36: Dış anahtar kısıtlamaların elde edilmesi………………………………………………..... Çizelge 37: Kontrol kısıtlamaların elde edilmesi……………………………………………………... 1 1.GİRİŞ Anlamsal Web günümüzün en çok konuşulan konularından biridir. Günümüz web sayfalarının anlamsal içeriğine yapı kazandırmak ve yazılım etmenleri tarafından işlenebilir hale getirilmesi hedefini taşımaktadır(Berners-Lee, 2000). Etmenler bu şekilde kullanıcılar için sayfaları tarayabilecek ve istenen bilgileri elde edebilecektir. Web sayfalarının anlamsal olarak işlenebilmesi için Web içeriğine biçimsel anlamsallık kazandıran üst veriler kullanılmaktadır. Üst veri için anahtar kavram ontolojilerdir. Ontolojiler ortak etki alanı modelleri sunmaktadır. Bu modeller hem insanlar hem de makineler tarafından anlaşılabilir yapıdadır ve belirli etki alanının ortak kavramsallaştırılmış halini sunmaktadır. Günümüzdeki web sayfalarının sadece insanlar tarafından kullanılabilir olmasının tersine, ontolojiler kullanılarak hazırlanan içerik, makinelerce de işlenebilecek bir hale gelmiştir. Günümüz Web ortamında statik, değişiklik göstermeyen web sayfaları yerine kullanıcıların isteklerine göre dinamik olarak değişen dinamik web sayfalarını kullanır hale gelmiştir. Bu tarz web sayfaları veri odaklı web sayfaları olarak da adlandırılabilirler. Bu tarz web sayfalarına örnek olarak eticaret uygulamaları gösterilebilmektedir. Bu tarz web sayfaları web tasarımını ve içeriğinin güncellenmesi işlemlerini çok kolaylaştırmaktadır. Ancak bu da bazı problemleri beraberinde getirmektedir. Veri odaklı web siteleri genelde dinamik olarak yaratıldığı için, bu tarz sayfaların URLleri genelde arama motorları tarafından incelenmez. Ek olarak bu tarz sayfalar veritabanlarından gelen verileri kullandıkları için etmenler tarafından işlenebilir biçimde değillerdir. Bu yüzden Anlamsal Web’e de dahil olmamaktadırlar. Veri odaklı web sayfalarının Anlamsal Web’e dahil edilebilmesi için iki temel yaklaşım bulunmaktadır. Bunlardan bir tanesi web sayfalarına yorum ekleme “annotation” işlemidir. Sayfalara ontoloji yapıları kullanarak yorumlar eklenir. Böylelikle makineler yorumlar sayesinde sayfalar hakkında bilgi sahibi olabilecektir. Ancak günümüz webinin büyüklüğü göz önüne alındığında yorumlama sürecinin otomatik olması gerekmektedir. Her koşulda yorumlama işlemi çok zaman isteyen bir işlemdir. İkinci yaklaşımda ise dinamik sayfaların içeriklerinin oluşturulduğu veritabanlarının ontolojilere otomatik olarak eşlenmesi hedeflenmiştir. Bu yaklaşım ile veritabanlarındaki üst veriler ile birlikte veriler de ontolojisel yapılara dönüştürülmüştür. Eşleme sırasında üst veri bilgileri RDFS gibi şema yapılarında veriler ise RDF gibi yapılarda saklanabilmektedir. 2 Kaynak tanımlama Çatısı, Evrensel Kaynak Belirteçleri “Universal Resource Identifier” tarafından tanımlanabilen bilgilerin gösterimi için kullanılan bir standarttır. Özellikle Web kaynakları ile ilgili üst verilerin betimlenmesi amacını taşır(RDF_PRIMER 2004). RDF birçok uygulama alanında verinin gösterimi için kullanılmaktadır. Bunlardan bazıları Dijital kütüphaneler, Geospatial Teknolojileri, Akıllı Elektronik Ticaret ve kişisel bilgi yönetim sistemleridir. RDF, Anlamsal Web’in gerçekleştirilmesi için temel yapı taşlarını sağlar(Berners-Lee,2000). Yapısındaki yalınlık değişik uygulamaların birlikte çalışabilmeleri için kolaylık sağlar ve RDF’in makineler tarafından anlaşılabilir yapısı Web kaynaklarının otomatik olarak işlenebilmesine olanak sağlar(RDF_FAQ). Oracle Spatial 10g v2 ile birlikte RDF verilerinin Oracle’da yönetilebilmesi için yeni veri tipleri tanımlanmıştır. Çizge veri modeli ile birlikte RDF üçlüleri diğer veri tipleri gibi indekslenebilir ve sorgulanabilir hale getirildi. Bunların yanı sıra RDF diğer ilişkisel veri tabanı nesneleriyle birlikte sorgulanabilir hale getirilmiştir. Bu rapor kapsamında ikinci yaklaşım kullanılmaktadır. Bu yaklaşım dâhilinde genel ilişkisel bir ontoloji yardımıyla ilişkisel veri tabanı üst verileri RDFS şekline dönüştürülüp ORACLE RDF depolama aracına eklenmektedir. Eşlenme sonucu ortaya çıkan ontoloji daha sonra veritabanlarındaki verilerin, rdf üçlüleri şeklinde Oracle RDF deposuna aktarılabilmesi için kavramsal model olarak kullanılmaktadır. Sonraki aşamada ise ilişkisel veritabanındaki ilişkiler ve anlamsallığı desteklemek ve çıkarsama gerçekleştirebilmek için kural tabanları oluşturulmaktadır. Süreç sonucunda Oracle deposunda oluşacak yapı ters mühendisliğe uygun halde veritabanı yapılarına geri dönüştürülebilir bir yapıda olmaktadır. 3 2. ANLAMSAL WEB Anlamsal Web, biçimsel anlamsallarla içeriği geliştiren yeni bir WWW mimarisi sunma çabalarını ifade etmektedir(Berners-Lee,2000). Bu sayede otomatik hale getirilmiş etmenler Web içeriklerini işleyebilecek, yorumlayabilecek ve kullanıcı istekleri doğrultusunda daha zeki görevleri gerçekleştirebilecektir. Anlamı ifade edebilmek anlamsal webin en temel görevlerindendir. Bu amaç doğrultusunda çok sayıda anlatımsal katman yapılarına ihtiyaç duyulmaktadır. Şekil 1 Anlamsal Web’in katmanlarını ifade etmektedir. Şekil 1:Anlamsal Web katmanları(Berners-Lee’den 2000) • XML katmanı sözdizimi katmanı olarak kullanılmaktadır • RDF katmanı veri katmanını ifade etmektedir. • Ontoloji katmanı üzerinde ortak bir karara dayanan verinin anlamını ifade eden katmandır. • Mantık katmanı akıllı çıkarsamanın gerçekleştirebilmesi için kurallar sunar. • Kanıt katmanı etmenler arası iletişimde tanıtların değiş tokuşunu destekleyen katmandır(Stojanovic et al., 2002). Tez kapsamında daha çok en üstteki üç katman üzerinde yoğunlaşacaktır. Anlamsal Web’in geliştirilebilmesi için gerekli ilk iki katman şu an kullanılmaktadır. Bunlar XML ve RDF olarak ilk iki katmanda kullanılabilmektedir. Bu nedenle son iki katman tez kapsamında değildir. 4 2.I XML Sözdizimi Katmanı XML dili kullanıcıların dokümanlarına gelişigüzel yapılar eklemesine olanak sunar ancak yapının ne anlama geldiği konusunda fikir vermez. İmleç isimleri anlamsallık kazandırmaz. Anlamsal Web XML’i sadece sözdizimi için kullanmaktadır. 2.2 RDF(Kaynak tanımlama Çatısı) Veri Katmanı Kaynak tanımlama Çatısı(“Resource Description Framework”) (RDF) Evrensel Kaynak Belirteçleri “Universal Resource Identifier” (URI) tarafından tanımlanabilen bilgilerin gösterimi için kullanılan bir standarttır. RDF üst verilerin kodlanması, değiş-tokuşu ve tekrardan kullanılabilmesini sağlayan bir mimari sunmaktadır. Özellikle Web kaynakları ile ilgili üst verilerin betimlenmesi amacını taşır(RDF_PRIMER) RDF birçok uygulama alanında verinin gösterimi için kullanılmaktadır. Bunlardan bazıları Dijital kütüphaneler, Geospatial Teknolojileri, Akıllı Elektronik Ticaret ve kişisel bilgi yönetim sistemleridir. RDF, Anlamsal Web’in gerçekleştirilmesi için temel yapı taşlarını sağlar(BernersLee,2000). Yapısındaki yalınlık değişik uygulamaların birlikte çalışabilmeleri için kolaylık sağlar ve RDF’in makineler tarafından anlaşılabilir yapısı Web kaynaklarının otomatik olarak işlenebilmesine olanak sağlar(RDF_FAQ). RDF’te veri gösterimi üçlüler “triples” ile gerçekleştirilir. Her bir üçlü özne (“subject”) yüklem (“predicate”) ve nesneden(“object”) oluşmaktadır. Bu üçlü yapı yönlendirilmiş çizgelerle modellenebilir. Üçlü ile tanımlanan deyimlerin özne ve nesne parçaları çizgede düğüm, yüklem parçası ise bu iki düğüm arasındaki bağlantı ile betimlenebilir. Yüklem bu kısımda iki düğüm arasındaki ilişkiyi tanımlar. Bağlantının yönü her zaman nesneye doğrudur(Şekil 2). Özne Nesne Yüklem Şekil 2:RDF yönlendirilmiş çizge (RDF Primer’den 2004) 5 2.3 Ontoloji Katmanı Anlamsal web’in üçüncü temel katmanı ontolojilerdir. Yapay zekâ ve Web araştırmalarında ontoloji belirli bir ilgi etki alanının resmi, ortak bir biçimde kavramsallaştırılmasıdır. Web üzerinde bulunana içerikler gibi heterojen, dağıtık ve yarı-yapılı bilgi kaynaklarının tanımlanması için birebirdir. Ortak ve paylaşılmış etki alanı teorilerinin tanımlanmasıyla birlikte hem insanların hem de makinelerin birbirleriyle düzgün bir haberleşmelerini sağlamakla beraber sadece sözdizimlerinin değil ayrıca anlamsalların da değiş tokuşunu desteklemektedir. Web ortamında bulunan anlamsalların ontolojileri temel alması son derece önemlidir. Bu şekilde Anlamsal Web dâhilinde tüketici ve üretici etmenler haberleşmeleri için gerekli olan sözlükleri ontolojilerin değiş tokuşuyla elde edebileceklerdir. 6 3. VERİ MODELLERİ Bu bölüm eşleme işlemi sırasında kullanılacak veri modellerini tanıtmaktadır. 3.1 İlişkisel Model İlişkisel veritabanlarının altında yatan model ilişkisel veri modelidir. İlişkisel veri modelinin resmi tanımıyla birlikte SQL DDL’lerinde bulunan yapılar şu şekilde düşünülebilir. Model bileşenleri şu şekildedir • İlişkiler(“Relations”) • Öznitelikler(“Attributes”) SQL-DDLlerin daha fazla söylemlere sahip olduğu aşikârdır. SQL-DDL ile “NOT NULL”, “UNIQUE” gibi kısıtlamalar belirtmek de mümkündür. Kısıtlamalar geliştirilen modelde kavramların özellikleri şeklinde belirtilecek ama anlamsallıkları ise kural tabanlarına kuralların eklenmesiyle korunmaya çalışılacaktır. Böylelikle gerektiğinde çıkarsama sonucu elde edilen ilişkiler ve anlamsallık kullanılabilecektir. Ek olarak ilerdeki çalışmalarda ontolojilerin statik yapısı nedeniyle SQL-DDLlerin dinamik özelliklerinden tetikleyicilerin “triggers” ontolojilere eşlenmesi de hedeflenmektedir. SQL-DDL’lerde ek olarak göndergesel bütünlük kısıtlamaları da belirtilebilir. Bu bilgi özellikle ontoloji kavramları arasındaki ilişkileri belirlemede son derece önemlidir. Dışsal anahtarlar olarak kullanılan bu kısıtlamalar da sistemde kavramların özellikleri olarak kullanılacak ve anlamsal bilgileri ise kural tabanlarına kuralların eklenmesiyle elde edilecektir. 3.2 RDF Ontoloji Modeli Temel olarak RDF şema şartnamesi bazı eşsiz özellikleriyle birlikte nesne tabanlı modelleme dili sunmaktadır: • Özniteliklerle ilişkiler arasında bir ayrım yoktur, her ikisi de özellik olarak betimlenir. • Sadece ikili ilişkiler özelliklerle modellenebilir, n-ary ilişkiler için yardımcı sınıflar bulunmaktadır. • Tip sistemi sadece iki temel tipe sahiptir. (rdf:Literal ve rdf:Resource). • Sınıflar ve özellikler “Resource” tipindedir, • RDF ile birlikte diğer nesne odaklı modeller gibi sınıf hiyerarşileri değil aynı zamanda özellikler için de hiyerarşiler tanımlanabilir. 7 <rdf:RDF> <rdfs:Class rdfs:ID="Student"/> <rdfs:Class rdfs:ID="PhDStudent" > <rdfs:subClassOf rdf:resource="http://xyz.org#Student"/> </rdfs: Class> <rdfs:Class rdfs:ID="School"/> <rdf:Property ID="schoolID" <rdfs:domain rdf:resource="#Student"/> <rdfs:range rdf:resource="School"/> </rdf:Property> </rdf:RDF> Çizelge 1: Örnek bir RDF Şema(RDF Primer’den 2004) 3.3 RDF Ontoloji Modeli ve İlişkisel Model Geliştirilen sistem ilişkisel veritabanını ontolojilere eşlemeyi hedeflemektedir. Ontolojiler ilişkisel veritabanı şemalarından şu yönlerle ayrılmaktadır: − Tip sisteminde temel tipler yoktur her şey birer kavramdır. − Kavramda öznitelik ya da ilişkiler yoktur, her şey özelliktir. − Kavramlar ve özellikler kalıtsal hiyerarşi oluşturulabilecek şekilde sınıflandırılabilir. 8 4. ORACLE UZAMSAL KAYNAK TANIMLAMA ÇATISI 4.1 ORACLE 10g Uzamsal Kaynak Tanımlama Çatısı Özellikleri Oracle Spatial 10g v2 ile birlikte RDF verilerinin Oracle’da yönetilebilmesi için yeni veri tipleri tanımlanmıştır(Alexander et al., 2004). Çizge veri modeli ile birlikte RDF üçlüleri diğer veri tipleri gibi indekslenebilir ve sorgulanabilir hale getirildi. Bunların yanı sıra RDF diğer ilişkisel veri tabanı nesneleriyle birlikte sorgulanabilir hale getirilmiştir. RDF Uygulama Alanları • • • • • • Web Üst veri: Web kaynakları ve sistemleri hakkından bilgi verme amacıyla kullanılabilir.(içerik değerlendirme, kişisel gizlilik) Hayat Bilimi Uygulamaları: Basit taksonomilerden gerçek tam yapılı ontolojilere kadar uzanan bilgi tabanlarının sorgulanması. Toplumsal Ağ Uygulamaları: “Friend of a Friend” uygulamaları, toplumsal ağ izleme ve zeka uygulamaları Anlamsal Bilgi Entegrasyonları: Değişik uygulamalar arasının bilgi paylaşımı için ortak,merkezi iş bilgi modellerinin tanımlanması Anlamsal Web : Etmenler yardımıyla Web üzerinde bilgi kaynaklarının otomatik olarak işlenebilmesi Universal Resource Identifier Portallar ve e-ticaret uygulamaları: Çok miktarda üst verinin sorgulanması RDF’e Özgü İşlevsellik • • • • • • • • • • • • • RDF deyimleri ve şeması için tam destek Çizge örüntüleri kullanarak RDF modellerinin sorgulanabilmesi ve elde edilmesi RDF veri tiplerinin tamamının desteklenmesi (URIs, boş uçlar, basit ve tipli sabitler, koleksiyon yapılarının desteklenmesi RDF şema üzerinde çıkarsamanın gerçekleştirilmesi RDF modelinin çizge örüntüleri kullanılarak RDF modelinin sorgulanması RDF modelinin çıkarsama sonucu oluşturulmuş üçlüler kullanılarak sorgulanabilmesi Deyimlerin açıklanması(reification) Çizge örüntülerinde takma isimli(alias) URI’ların kullanılabilmesi. Kullanıcı tarafından tanımlanabilen kuralların oluşturabilmesi SQL ve Java API’leriyle veriye ulaşılabilmesi Sınıflandırma subClassOf ve subPropertyOf desteği Kullanıcı tarafından tanımlanabilen çıkarsama kuralları RDF verisinin mantıksal çizgesinin gösterilmesi 9 Oracle DBMS ilişkili Özellikler • • • • • • • • • • • Kümelenmiş(Clustered) veritabanı sunucuları Bölümleme(Partitioning): Büyük grafikleri saklayabilmek için tabloların bölümlere ayrılması Paralellik: ): Büyük grafiklerin yüklenmesi, indekslenmesi ve sorgulanması sırasında paralelliğin kullanılabilmesi Veri Yükleme: Verinin üçlü formatta içeri ve dışarı aktarılabilmesi. Konum tabanlı bilginin uzamsal analizi Geçici Analizler(zaman serileri, zaman damgalama) Versiyonlama Metin arama Yapısız veri tipi desteği(:XMP, uzamsal, resimler, müzik, video vs) XML araçları Oracle Uygulama sunucusu mimarisiyle tümleştirilme 4.2 Veritabanında RDF Veri Modeli RDF deyimleri <özne, yüklem, özne> şeklindeki üçlüler halinde ifade edilir. Her bir üçlü belirli bir konuya özgü tam ve eşsiz bir olgudur ve yönlendirilmiş çizgede bir bağlantı şeklinde ifade edilebilir. Oracle 10g, Oracle Uzamsal Ağ veri Modeli(NDM) dâhilinde yönlendirilmiş ve yönlendirilmemiş çizgeleri destekler. Önerilen RDF veri modeli RDF üçlülerini NDM tarafından yönetilen mantıksal veri ağlarına eşler. Temel veriye ek olarak katalog servisi sunar. Katalog servisi değişik RDF modelleri hakkında bilgi içerir. RDF üçlü verisi özne ve yüklemlerin düğüm olarak ve yüklemlerin ise bağlantılar şeklinde eşlenmesi şeklinde çizge ile eşlenmektedir. RDF veri deposu Oracle tarafından yönetilir ve tüm RDF verisi tek bir şema altında yönetilir ve kullanıcı düzeyinde erişim fonksiyonları ve yapılar RDF verisinin sorgulanması ve güncellenmesi için kullanılabilmektedir. Veritabanında depolanacak tüm RDF verisi için tek bir evren vardır. Her bir RDF üçlüsüne eşsiz bir veritabanı nesnesi olarak davranılır. Sonuç olarak birden çok RDF üçlüsünden oluşan RDF dokümanı birden çok veritabanı nesnesi oluşturur. 4.2.1 RDF Modelleri için Üst Veri Veritabanında tanımlı tüm veri modelleri ile ilgili bilginin depolanabilmesi için sistem düzeyinde bir tablo yaratılmıştır. Yeni bir RDF modeli yaratıldığında bu tabloya yeni bir giriş yapılır. Yeni bir model yaratabilmek için kullanıcı bu model için bir isim, model içi rdf verilerini depolayabileceği bir tablo ve bu tabloda da RDF üçlülerine ait referansları depolayacağı bir kolonu belirtmek zorundadır. Bu bilgiler verildikten sonra sistem otomatik olarak bir modelid oluşturur ve bu modelid daha sonra model ismi 10 yerine kullanılabilmektedir. Modelid bilgisinin model ismi yerine kullanılabilmesi yer kaybına engel olmaktadır. Oracle sisteminde RDF modelleri hakkındaki bilgi MDSYS.RDF_MODEL$ tablosunda tutulur ve yeni bir model eklendiğinde ve çıkartıldığında bu tablo Oracle tarafından otomatik olarak yönetilebilir. Bu tablo üzerinde kullanıcılar DML operasyonları gerçekleştiremez. Yeni bir model yaratabilmek için ilk aşamada RDF verilerinin referanslarının tutulacağı kullanıcı tablosu yaratılmalıdır. CREATE TABLE FAMILY_RDF_DATA (id NUMBER, triple,SDO_RDF_TRIPLE_S) ; Çizelge 2: RDF modeli için kullanıcı tablosu (Murray et al.’dan 2005) Model yaratılabilmesi için model ismi, kullanıcı tablo ismi ve rdf veri referanslarının tutulacağı SDO_RDF_TRIPLE_S tipindeki kolon bilgisi kullanılmalıdır. EXECUTE SDO_RDF.CREATE_RDF_MODEL ('FAMILY', 'FAMILY_RDF_DATA', 'TRIPLE'); Çizelge 3: RDF modelinin yaratılması(Murray et al.’dan 2005) Yeni bir RDF modeli yaratıldığında bu modelle ilişkili tüm RDF üçlüleri mdsys şeması altında RDFM_modelismi formatındaki “view” altında depolanır. Bu “view” sadece modelin sahibi veya modeli sorgulamaya yetkisi olan kullanıcılar tarafından görüntülenebilir. Her bir MDSYS.RDFM_modelismi “ view”ı her bir üçlü için bir kayıt içerir. 4.2.2 RDF İsim Uzayları İsim uzayları RDF/XML dokümanlarının daha okunulabilir hale getirilmesi için kullanılmaktadır. Oracle RDF veri modelinde namespace’ler özne, yüklem ve nesnelerle birlikte tutulmaktadır ancak ek olarak RDF evreninde kullanılabilecek tüm namespacelerin tutulabilmesi için ek isteğe bağlı yapılar da mevcuttur. Yeni bir RDF namespace’i veritabanına eklendiğinde namespace ID otomatik olarak yaratılır. Bu namespaceid daha sonra isim uzayı göstermek için dış anahtar olarak kullanılabilmektedir. 11 Yeni bir isim uzayı eklendiğinde Oracle MDSYS.RDF_NAMESPACE$ tablosunu otomatik olarak yönetir. Yeni bir namespace ekleyebilmek için “SDO_RDF.ADD_NAMESPACES” işlemi gerçekleştirilmelidir. MDSYS.RDF_NAMESPACE$ tablosu üzerinde DML işlemleri gerçekleştirilmemelidir. 4.2.3 RDF Deyimleri RDF deyimleri özne, nesne ve yüklemden oluşan üçlülerden oluşmaktadır. Oracle RDF veri modelinde bu üçlünün değerleri RDF_VALUE$ tablosunda tutulur. SQL> desc RDF_VALUE$; Name Type ---------------------------------------------------VALUE_ID NUMBER VALUE_NAME URITYPE VALUE_TYPE VARCHAR2(10) LITERAL_TYPE XMLTYPE Çizelge 4: RDF_VALUE$ görünümü yapısı(Murray et al.’dan 2005) RDF modeline yeni bir deyim ekleneceği zaman bu tabloda üçlünün her bir parçası için bir kayıt eklenir. Bu parka değeri VALUE_NAME kolonuna eklenir. Eğer bu değerler sistemde mevcut ise RDF_VALUE$ tablosuna yeni bir değer eklenmez. VALUE_TYPE kolonu için kullanılabilecek tipler şu şekildedir: VALUE_TYPE=’UR’: metin değeri URI ise VALUE_TYPE=’PL’: metin değeri basit sabit ise VALUE_TYPE=’TL’: metin değeri tipe sahip sabit ise VALUE_TYPE=’TC_BAG’: metin değeri rdf:Bag koleksiyonu için boş düğüm ise VALUE_TYPE=’TC_ALT’: metin değeri rdf:Alt koleksiyonu için boş düğüm ise VALUE_TYPE=’TC_SEQ’: metin değeri rdf:Seq koleksiyonu için boş düğüm ise 12 VALUE_TYPE=’BN’: metin değeri boş düğüm ise Eğer bir deyimin nesne sabit ise bu değerin tipe sahip olması beklenebilir. Bu durumda tip bilgisi LITERAL_TYPE kolonunda saklanır diğer şekilde bu kolon “null” değer taşır. RDF_VALUE$ tablosu boş düğümler, URI’lar, basit sabitler, tipe sahip sabitler ve tipe sahip koleksiyonlar ve bağlantılar için bilgi bulundurmaktadır. 4.2.3.1 Üçlülerin eşsizliği ve Sabitler için Veri Tipleri Veri tabanında çoklayan üçlüler depolanmamaktadır. Yeni girilen bir üçlünün çoklanıp çoklanmadığı bilgisini kontrol edebilmek için üçlüdeki özne, yüklem ve nesnenin model içerisinde var olup olmadığı kontrol edilir. Eğer üçlünün herhangi bir parçası URI ise değerlerin birebir eşlenip eşlenmediği kontrol edilir. Ancak üçlünün nesnesi sabit ise öznenin ve yüklemin birebir eşlenmesi ile birlikte nesnenin kuralsal(canonical) eşlenmesi de kontrol edilir. Örneğin aşağıdaki üçlüler birbirlerinin aynısı olarak kabul edilir. <eg:a> <eg:b> "123"^^http://www.w3.org/2001/XMLSchema#int <eg:a> <eg:b> "123"^^http://www.w3.org/2001/XMLSchema#unsignedByte Buradaki ikinci üçlü ilkinin çoklanmış hali olarak Kabul edilir çünkü bu değerler kuralsal olarak aynıdır. "123"^^http://www.w3.org/2001/XMLSchema#int değeri kuralsal olarak "123"^^http://www.w3.org/2001/XMLSchema#unsignedByte değerine eşittir. Kuralsal olarak eşit olan iki varlık birbiriyle eşit olarak kabul edilir. RDF dışında bir örnek vermek gerekirse A*(B-C), A*B-C*A, (B-C)*A, ve -A*C+A*B aynı kuralsal değere denk gelir. Değer baz alınarak yapılacak elemelerde aşağıdaki tipler kullanılabilir. ■ STRING: sabit değer, xsd:string ve buna bağlı bazı XML şema alt tipleri ■ NUMERIC: xsd:decimal ve buna bağlı bazı XML şema alt tipleri, xsd:float, ve xsd:double. ■ DATETIME: xsd:datetime, ancak timezone desteği yoktur. ■ DATE: xsd:date, ancak timezone desteği yoktur ■ OTHER: Geri kalan tüm tipler. Bu durumda farklı gösterimler için karşılaştırma gerçekleştirilmez. 13 RDF_VALUE$ tablosunda bir sabitin ilk defa görüldüğü anda sabit bu değer için kuralsal biçim olarak kabul edilir. Kuralsal olarak eşit değerler RDF_VALUE$ tablosunda saklanabilir ancak kuralsal olarak eşit üçlüler veritabanında tekrar etmez. 4.2.4 Tipli Sabitler Tipli sabitler RDF_VALUE$ tablosunda LITERAL_TYPE xml tipi kolonunda sabitlerin tiplerinin saklanmasıyla depolanabilir. RDF Primer dokümanından alınmış aşağıdaki tipli sabitin karakter değeri ‘1999-08-16’ VALUE_NAME kolonuna http://www.w3.org/2001/XMLSchema#date’ tipi ise LITERAL_TYPE kolonuna eklenir. VALUE_TYPE kolonu değeri ise ‘TL’. Olarak oluşturulur. Şekil 3:Tipi Sabitler(RDF Primer’den 2004) 4.2.5 RDF Özne ve Nesneleri Oracle RDF veri modelinde özneler ve nesneler ağ veri modelinde düğümlere karşılık gelmektedir. Özne düğümleri grafikteki bağlantıların başlangıç düğümlerini ve nesne düğümleri ise bitiş düğümleri şeklindedir. Sabit olamayan değerler özne ya da nesne olabilir. RDF_NODE$ tablosu özne ve nesne bilgilerinin tutulduğu tablodur. RDF_VALUE$ tablosundaki VALUE_ID gibi bu tabloda NODE_ID kolonu bulunmaktadır. RDF_NODE$ tablosu sadece düğümlere ait VALUE_ID değerini tutar. 14 4.2.6 Boş Düğümler (“Blank Nodes”) RDF yapısında üçlüler bilinen ve bilinmeyen özne düğümlerine sahip olabilir. Boş uçlar bilinmeyen düğümleri betimlemek için kullanılmaktadır. Boş uçlar aynı zamanda bir özne düğümü ile nesne düğümü arasındaki ilişkinin koleksiyonlarda olduğu gibi n-ary olduğu durumlarda da kullanılmaktadır. Oracle RDF veri modelinde RDF üçlüsündeki her bir boş düğüm için bir kayıt girilir. Varsayılan olarak iki farklı nesneye karşılık gelen iki boş düğüm aynı ağ düğümüne karşılık gelmez. Ancak kullanıcı boş düğümleri tekrardan kullanılabilecek şekilde tanımlaması mümkündür. Eğer kullanıcı boş düğümleri tekrardan kullanabilmek isterse bu düğümleri RDF_BLANK_NODE$ tablosuna ekleyebilmektedir. Bu tablo aşağıdaki kolonlara sahiptir: SQL> desc RDF_BLANK_NODE$; Name Type -----------------------------------------------NODE_ID NUMBER NODE_VALUE VARCHAR2 ORIG_NAME VARCHAR2 MODEL_ID NUMBER Çizelge 5: RDF_BLANK_NODE$ görünümü yapısı(Murray et al.’dan 2005) Boş düğümün NODE_VALUE ya da VALUE_NAME değeri düğüm için eşsiz VALUE_ID değerini _:blankNode kısmına eklenmesi şeklinde elde edilebilir. Bu da boş düğümün VALUE_NAME değerinin blankNodenode_id şeklinde oluşmasını sağlar. Boş düğümün tekrardan kullanılabilmesi için boş düğüm yapıcısının(“constructor”) kullanılması gerekmektedir. 15 SDO_RDF_TRIPLE_S ( model_name VARCHAR2, -- Model ismi sub_or_bn VARCHAR2, -- Özne ya da boş düğüm property VARCHAR2, -- Yüklem obj_or_bn VARCHAR2, -- Nesne ya da boş düğüm bn_m_id NUMBER) – tekrardan kullanılacak boş düğümün modelid’si RETURN SELF; SDO_RDF_TRIPLE_S ( model_name VARCHAR2, -- Model ismi sub_or_bn VARCHAR2, -- Özne ya da boş düğüm property VARCHAR2, -- Yüklem obj_or_bn CLOB Nesne bn_m_id NUMBER) – tekrardan kullanılacak boş düğümün modelid’si RETURN SELF; Çizelge 6: Boş düğüm yapıcısı(Murray et al.’dan 2005) Boş düğümün eklenmesi: INSERT INTO nsu_data VALUES (SDO_RDF_TRIPLE_S( ‘nsu’, '_:BNSEQN1001A', '<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>', '<http://www.w3.org/1999/02/22-rdf-syntax-ns#Seq>', 4)); Çizelge7: Boş düğümün eklenmesi(Murray et al.’dan 2005) Boş düğüm yapıcısının kullanılması halinde RDF_BLANK_NODE$ tablosu aynı MODEL_ID ve ORIG_NAME ya da NODE_VALUE değerine sahip bir başka boş düğümün olup olmadığını kontrol etmek amacıyla sorgulanır. Eğer aynı özelliklere sahip bir boş düğüm bulunmazsa yeni bir boş düğüm girdisi gerçekleştirilir. RDF_BLANK_NODE$ tablosundan bir değerin silinmesi halinde RDF_VALUE$ ve RDF_NODE$ tablolarında bu düğüme karşılık gelen değerler silinmez. Ancak silinen boş düğümlerin tekrardan kullanılabilmesi engellenmiş olur. 16 4.2.7 RDF Yüklemleri (“Predicates”) RDF yüklemleri bağlantılara karşılık gelir. RDF modele yeni bir üçlü eklendiği zaman ilk aşamada özne, yüklem ve nesne değerlerinin RDF_VALUE$ tablosunda var olup olmadığı kontrol edilir. Eğer değerler mevcut ise yeni giriş gerçekleştirilmez. Eğer değerler mevcut değilse 3 tane yeni kayıt RDF_VALUE$ tablosuna eklenir. Eğer bu üçlü daha önceden var ise bir diğer kontrol de üçlünün daha önce var olup olmadığının kontrolüdür. Bu karşılaştırma RDF_LINK$ üzerinden gerçekleştirilir. RDF_LINK$ tablosu yüklemler ve üçlüler hakkında bilgi depolar. Bu tablo aşağıdaki kolonları içerir. SQL> desc RDF_LINK$; Name Type ------------------------------------------------------LINK_ID NUMBER VALUE_ID NUMBER START_NODE_ID NUMBER END_NODE_ID NUMBER LINK_TYPE VARCHAR2(10) ACTIVE VARCHAR2(1) LINK_LEVEL NUMBER PARENT_LINK_ID NUMBER MODEL_ID NUMBER görünümü(Murray et al.’dan 2005) Çizelge 8:RDF_LINK$ Eğer belirli bir model için bu üçlü daha önceden var ise yeni bir üçlü eklenmez. Eğer bu üçlü daha önceden sistemde yok ise bu üçlü için yenir bir “unique ID” yaratılır. Bu id LINK_ID (RDF_T_ID) şeklinde saklanır. Üçlü için RDF_VALUE$ tablosunda özneye karşılık gelen VALUE_ID START_NODE_ID ve nesneye karşılık gelen VALUE_ID END_NODE_ID olarak kaydedilir. 4.2.8 RDF Reifikasyon(Reification) Bir reifikasyon deyimi bir RDF deyiminin başka bir RDF deyimi ile açıklanması şeklinde tanımlanmaktadır. Oracle RDF veri modelinde deyimler hakkında tanımlama yapan diğer deyimleri ifade edebilmek için hiyerarşik bir bağlantı yapısı sunulmaktadır. RDF_LINK$ tablosundaki LINK_TYPE kolonu iki şekilde oluşabilmektedir (i) SS,bu deyimin basit bir deyim olduğunu ,(ii) RS ise bu deyimin bir reifikasyon deyimi olduğunu ifade etmektedir. Bağlantı tipinin RS olduğu durumda şu an ki deyimin başka bir deyim hakkında bir deyim oluşturduğunu ifade etmektedir. 17 Bir RDF deyiminin reifikasyonu, bu rdf deyimi için üst veri sağlanması şeklinde tanımlanabilir. Bu şekilde deyim bir başka RDF deyiminde nesne ya da özne olarak kullanılabilmektedir. Örneğin B kişisi A kişisinin belirli bir iş için iyi bir aday olduğunu söylerken C kişisi A kişisinin bu iş için uygun olmadığını belirtebilir. ■ PersonB: PersonA iş için uygun adaydır ■ PersonC PersonA iş için uygun aday değildir.. PersonB ve PersonC bu tarz deyimleri gerçekleştirebilmesi için “PersonA iş için uygun adaydır” reifikasyon dörtlüsünün “reification quad” sistemde bulunması gerekmektedir. <a:Stmt1, rdf:type, rdf:Statement> <a:Stmt1, rdf:subject, a:PersonA> <a:Stmt1, rdf:predicate, a:Aday> Çizelge 9: Reifikasyon dörtlüsünü örneği <a:Stmt1, rdf:object, "iyi"> PersonB ve PersonC daha sonra bu deyim hakkında kendi deyimlerini oluşturabilirler. <a:PersonB, a:kabul, a:Stmt1> <a:PersonC, a:red, a:Stmt1> SDO_RDF.IS_REIFIED_QUAD fonksiyonu bir deyim için reifikasyon dörtlüsünün sistemde olup olmadığını kontrol etmek için kullanılabilir. Ör:) SELECT SDO_RDF.IS_REIFIED_QUAD('modelismi', 'a:PersonA', 'a:aday', 'iyi') FROM DUAL; Sorgusu aşağıdaki sonucu türetir. <a:Stmt1> <rdf:type> <rdf:Statement> Bir reifikasyon deyiminin işlenebilmesi için özne düğümü(reifikasyonu yaratan deyimin öznesinin URIsi) ,rdf:Statement yüklemi ve bir boş düğüm RDF_VALUE$ tablosuna eklenir. Daha sonra RDF_LINK$ tablosuna yeni bir LINK_ID, rdf:Statement’I için VALUE_ID, özne VALUE_ID değeri START_NODE, ve boş düğüm VALUE_ID’si ise END_NODE olarak kaydedilir. Daha sonra reifikasyonu yapılan deyimin LINK_ID kolonu veritabanında bulunur ve reifikasyon yapan deyimin 18 PARENT_LINK_ID değeri bu LINK_ID değerini alır. Birden çok RDF deyimi bir deyim hakkında açıklamalarda bulunabilir. Bu veri modelinde birçok alt linke sahip link şeklinde ifade edilebilir. 4.2.9 RDF Kapları(“RDF Collections”) Çoğu kez birden çok varlığı içeren grupları tanımlamak gerekmektedir. Örneğin birden çok yazarı olan bir kitap ya da bir kurstaki öğrenci sayısı. RDF grupları tanımlayabilmek için yerleşik tipleri kullanıma sunmuştur. Kap “container” birden çok varlığı içeren kaynak olarak tanımlanabilir. Kap içerisindeki varlıklara ise üye varlıklar denmektedir. Bir kap içerisindeki üyeler kaynaklar(boş düğümler dahil) olabildiği gibi sabitler de olabilir. RDF 3 tip kap sunmaktadır: • • • rdf:Bag rdf:Seq rdf:Alt “Bag” (rdf:Bag tipindeki kaynaklar) kaynak ya da sabitlerden oluşan grupları tanımlamak için kullanılabilir. Çoklayan üyelere sahip olabilir ve üyelerin sıralanmasının herhangi bir önemi bulunmamaktadır. Sequence ya da Seq (rdf:Seq tipindeki kaynaklar) kaynak ya da sabitlerden oluşan grupları tanımlamak için kullanılabilir. Çoklayan üyelere sahip olabilir ve üyelerin sıralanmasının önemi bulunmaktadır. Alternative ya da Alt (rdf:Alt tipindeki kaynaklar) birbirine alternatif olabilecek kaynak ya da sabitlerden oluşan grupları tanımlamak için kullanılabilir . Örneğin bir kitabın farklı dillerde yer alan başlıklarını içeren kaynaklardan oluşan bir grup alt tipinde olabilir. Şekil 4, örnek bir “bag” kap yapısını kullanmaktadır. “6.001 nolu kursa Amy, Mohamed, Johann, Maria, ve Phuong öğrencileri kayıtlıdır” 19 Şekil 4: “Bag” deyimleri için örnek RDF/XML(RDF Primer’den 2004) 20 <?xml version="1.0"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdfsyntax-ns#" xmlns:s="http://example.org/students/vocab#"> <rdf:Description rdf:about="http://example.org/courses/6.001"> <s:students> <rdf:Bag> <rdf:li rdf:resource="http://example.org/students/Amy"/> <rdf:li rdf:resource="http://example.org/students/Mohamed"/> <rdf:li rdf:resource="http://example.org/students/Johann"/> <rdf:li rdf:resource="http://example.org/students/Maria"/> <rdf:li rdf:resource="http://example.org/students/Phuong"/> </rdf:Bag> </s:students> </rdf:Description> </rdf:RDF> Çizelge 10: “Bag” deyimleri için örnek RDF/XML(RDF Primer’den 2004) Oracle RDF modelinde bu kap yapıları aşağıdaki üçlü yaratma prensiplerini kullanır. Bir boş düğüm yaratılır. Bu boş düğümün VALUE_NAME değeri _:blankNodeNode_id, şeklindedir ve VALUE_TYPE değeri TC_CollectionType. Daha sonra her bir kap üyesi için Üçlü {_:blankNodeNode_id, rdf:blankNodeNode_id_coll#,collection_value} eklenir. Diğer üçlülerde olduğu gibi “collection_value” nesnesi daha önce veritabanında bulunuyorsa tekrar kullanılmaktadır. Kap üyeleri bağlantıları için PARENT_LINK_ID olarak, nesnesi kap’ın boş düğümü olan kaynak ilişki bağlantısının LINK_ID’si kullanılır. 21 Şekil 5: Oracle NDM RDF veri modelinde ”Bag” kap yapısı (Murray et al.’dan 2005) 4.2.10 RDF Üst Veri Tabloları ve Görünümleri Uzamsal veri modeli RDF ile ilişkili birçok üst veriyi tutabilmek için mdsys şeması altında çok sayıda tablo ve görünüm içermektedir. Bu tabloların ve görünümlerin çoğu SDO_RDF.CREATE_RDF_NETWORK yordamıyla oluşturulmaktadır. Tablo 1–1 bu tablo ve görünümleri göstermektedir. 22 Ad RDF_MODEL$ RDFM_model-name RDF_NAMESPACE$ RDF_RULEBASE_ INFO RDF_RULES_INDEX_ DATASETS RDF_RULES_INDEX_ INFO İçerdiği Bilgi Veritabanında tanımlı tüm RDF modelleri Belirli model içerisindeki tüm üçlüler RDF XML dokümanlarında kullanılabilecek isim uzayları Kural tabanları (RDF Rulebases) Kural indekslerinde kullanılan veritabanı nesneleri Kural İndeksleri(Rules indexes ) RDFR_rulebase-name RDF deyimlerini tanımlamakta kullanılan özne,yüklem ve nesneler Bir kural tabanındaki kurallar RDFI_rules-index-name Belirli kural indeksindeki üçlüler RDF_VALUE$ Tablo 1 RDF Üst Veri Tabloları ve Görünümleri(Murray et al.’dan 2005) 4.2.11 Oracle Uzamsal Ağ Modelinde Veri Depolama Oracle RDF deposu Oracle Uzamsal Ağ Veri modelinin “Oracle Spatial Network Data Model (NDM),” üzerine kurulmuştur. NDM içerisinde ağ ya da çizge nesneler arasındaki ilişkileri bağlantılar sayesinde elde eder. RDF çizgeleri NDM içerisinde yönlendirilmiş mantıksal çizgeler şeklinde modellenir. Bu ağ içerisinde nesneler ve özneler düğümlere eşlenir. Yüklemler ise bu iki düğüm arasındaki ilişkiyi ifade eden başlangıç noktası özne ve bitiş noktası nesneler olan bağlantılar şeklinde eşlenmektedir. Böylelikle bir bağlantı bütün bir RDF üçlüsünü tanımlar. Oracle içerisinde RDF depolamanın anahtar özelliği düğümlerin üçlülerde kaç defa yer aldığına bakılmaksızın sadece tek bir kere depolanmasıdır. Ancak yeni üçlü eklendiğinde bir bağlantı her zaman oluşturulmaktadır. Şekil 6 RDF üçlüleri <S1, P1, O1>; <S1, P2, O2>; <S2, P2, O2> nin nasıl modellendiğini göstermektedir. Bir üçlü veritabanından silindiğinde buna karşılık gelen bağlantı da silinmektedir. Ancak bu bağlantıyla ilişkili düğümler eğe bunlara bağlı başka bağlantılar var ise silinmemektedir 23 Şekil 6:RDF üçlüleri(RDF Primer’den 2004) Oracle’da RDF üçlüleri merkezi bir şema(mdsys) altında parçalanır ve depolanır. RDF çizgeleri içerisindeki her bir üçlü bu şema altındaki nesnelerde depolanır. Kullanıcı tarafından tanımlanan tablolarda sadece bu üçlülere ait referans idler depolanır. Ek olarak bu üçlülere erişim sağlamak için fonksiyonlar da sunulmuştur. RDF veri depolanması için gerekli tablolar RDF_MODEL$, RDF_VALUE$, RDF_NODE$, RDF_LINK$ ve RDF_BLANK_NODE$’dır. 4.2.12 RDF veri deposuna üçlülerin eklenmesi Kullanıcı sisteme üçlü eklemeye çalıştığı zaman ilk aşamada RDF_MODEL$ tablosu RDF çizgesinin olup olmadığını belirlemek amacıyla kontrol edilir. Daha sonra RDF_VALUE$ tablosu üçlünün her bir değerinin veritabanında olup olmadığını tespit edebilmek için kontrol edilir. Eğer daha önceden veritabanında bulunurlarsa bu değerlerin VALUE_IDleri elde edilir. Bir sonraki adımda belirli bir çizge için daha önceden bu üçlünün var olup olmadığı RDF_LINK$ yardımıyla kontrol edilir. Eğer üçlü sistemde daha önceden depolanmış ise daha önce eklenmiş üçlünün Id değeri geri döndürülür ve veri deposuna yeni bir giriş yapılmaz. Eğer üçlü için veri değerleri RDF_VALUE$ tablosunda bulunmuyor ise bu değerler tabloya eklenir ve yeni VALUE_ID değerleri atanır. Özne ve nesneye karşılık gelen VALUE_ID değerleri RDF_NODE$ tablosuna eklenir. RDF_LINK$ tablosunda oluşturulan üçlü için yeni bir LINK_ID atanır ve öznenin VALUE_ID değeri START_NODE_ID değeri olarak ve nesne değeri ise END_NODE_ID değeri olarak atanır. Yeni bir üçlü çizgeye eklendiğinde RDF_LINK$ tablosuna yeni bir kayıt eklenir. 24 Eklenen üçlüler özne ya da nesne olarak boş düğümleri içerebilir. Böyle bir durumda boş düğümler otomatik olarak küresel eşsiz bir değere dönüştürülür. Oracle sistemi tarafına otomatik olarak _:ORABNuniqueID formatında oluşturulan boş düğümler tekrardan kullanılmazlar. Ancak boş düğüler koleksiyonlarda olduğu gibi kullanılmak istenirlerse değerleri RDF_BLANK_NODE$ tablosuna kullanıcı tarafından eklenebilir. Böyle bir durumda boş düğümün orijinal ismi, Oracle sistemi tarafından oluşturulan ismi, ve VALUE_ID değeri RDF_BLANK_NODE$ tablosuna eklenir. Daha sonra eklenecek boş düğümler aynı çizgeye aitse ve eğer aynı değere sahipse veri tabanındaki varolan boş düğüm değeri tekrardan kullanılır. Kapların kullanılması sırasında boş düğümlerin kullanılması gerekmektedir. RDF_BLANK_NODE$ tablosundaki değerler istendiği zaman güvenilir bir şekilde sistemden silinebilir. 4.2.13 RDF Nesne Tipleri SDO_RDF_TRIPLE nesne tipi RDF verisini üçlü formatta göstermek için kullanılmaktadır. SDO_RDF_TRIPLE_S nesne tipi is kalıcı RDF verisini veritabanında tutmak için kullanılmaktadır. RDF verisi sadece merkezi bir şemada depolandığı için SDO_RDF_TRIPLE_S tipi veriye yönelik referanslara sahiptir. Bu tip tüm üçlüyü ya da üçlünün istenilen parçalarını elde edebilmek için metotlara sahiptir. SDO_RDF_TRIPLE tipi RDF üçlülerinin gösterimi için kullanılmaktayken SDO_RDF_TRIPLE_S tipi veritabanı tablolarında RDF üçlülerinin depolanması için kullanılmaktadır. SDO_RDF_TRIPLE nesne tipi aşağıdaki özniteliklere sahiptir: SDO_RDF_TRIPLE ( subject VARCHAR2(4000), property VARCHAR2(4000), object VARCHAR2(10000)) Çizelge 11:SDO_RDF_TRIPLE tipi(Murray et al.’dan 2005) SDO_RDF_TRIPLE_S nesne tipi ise aşağıdaki özniteliklere sahiptir(Murray et al.’dan 2005): SDO_RDF_TRIPLE_S ( RDF_T_ID NUMBER, -- RDF üçlü ID (link ID) RDF_M_ID NUMBER, -- RDF model ID Çizelge 12:SDO_RDF_TRIPLE_S tipi RDF_S_ID NUMBER, -- Özne value ID RDF_P_ID NUMBER, -- Yüklem value ID RDF_O_ID NUMBER) -- Nesne value ID 25 SDO_RDF_TRIPLE_S tipinde kaydedilen RDF_T_ID ve RDF_M_ID değerleri birlikte veritabanında bir RDF deyimini eşsiz olarak ifade edebilir. SDO_RDF_TRIPLE_S tipi üçlünün tamamını ya da belirli bir parçasını elde edebilmek için kullanılabilecek metotlara sahiptir: GET_TRIPLE() SDO_RDF_TRIPLE tipinde sonuç döndürür GET_SUBJECT()VARCHAR2 tipinde sonuç döndürür GET_PROPERTY()VARCHAR2 tipinde sonuç döndürür GET_OBJECT() CLOB tipinde sonuç döndürür Bu metotların kullanımlarına aşağıdaki sorgular örnektir. Sorgu: SELECT a.triple.GET_TRIPLE() AS triple FROM articles_rdf_data a WHERE a.id = 1; TRIPLE(SUBJECT, PROPERTY, OBJECT) Sorgu Sonucu: SDO_RDF_TRIPLE('http://www.nature.com/nature/Article1', 'http://purl.org/dc/elem ents/1.1/title', 'All about XYZ') Sorgu: SELECT a.triple.GET_SUBJECT() AS subject FROM articles_rdf_data a WHERE a.id = 1; SUBJECT Sorgu Sonucu http://www.nature.com/nature/Article1 Sorgu: SELECT a.triple.GET_PROPERTY() AS property FROM articles_rdf_data a WHERE a.id = 1; PROPERTY 26 Sorgu Sonucu http://purl.org/dc/elements/1.1/title Sorgu: SELECT a.triple.GET_OBJECT() AS object FROM articles_rdf_data a WHERE a.id = 1; OBJECT Sorgu Sonucu X,Y,Z hakkındaki herşey 4.2.14 Üçlülerin Eklenmesi için Yapıcı “Constructor” Yapıları RDF modeline üçlülerin eklenebilmesi için aşağıdaki yapıcı formatları kullanılabilmektedir. Bu iki yapı formatı arasındaki tek fark bir tanesinin nesne tipinin çok uzun sabitleri depolamak için kullanılan CLOB tipinde olmasıdır. SDO_RDF_TRIPLE_S ( model_name VARCHAR2, -- Model ismi subject VARCHAR2, -- Özne property VARCHAR2, -- Yüklem object VARCHAR2) -- Nesne RETURN SELF; SDO_RDF_TRIPLE_S ( model_name VARCHAR2, -- Model ismi subject VARCHAR2, -- Özne property VARCHAR2, -- Nesne object CLOB) -- Yüklem RETURN SELF; Çizelge 12: Üçlülerin Eklenmesi için Yapıcılar(Murray et al.’dan 2005) 27 Aşağıdaki örnek üçlü ekleyebilmek için ilk yapıcı formatı kullanmaktadır. Aşağıdaki örnekte “articles_rdf_data” kullanıcı tarafından tanımlanmış bir tablodur. INSERT INTO articles_rdf_data VALUES (2, sdo_rdf_triple_s ('articles','<http://www.nature.com/nature/Article1>', '<http://purl.org/dc/elements/1.1/creator>', '"Jane Smith"')); 4.2.15 Boş düğümler için Yapıcı Yapıları RDF model tablosuna boş düğümlere refere eden üçlüleri eklenmesi için aşağıdaki yapıcı formatları kullanılabilmektedir. Boş düğümün tekrardan kullanılabilmesi için boş düğüm yapıcısının(“constructor”) kullanılması gerekmektedir. SDO_RDF_TRIPLE_S ( model_name VARCHAR2, -- Model ismi sub_or_bn VARCHAR2, -- Özne ya da boş düğüm property VARCHAR2, -- Yüklem obj_or_bn VARCHAR2, -- Nesne ya da boş düğüm bn_m_id NUMBER) – tekrardan kullanılacak boş düğümün modelidsi RETURN SELF; SDO_RDF_TRIPLE_S ( model_name VARCHAR2, -- Model ismi sub_or_bn VARCHAR2, -- Özne ya da boş düğüm property VARCHAR2, -- Yüklem obj_or_bn CLOB Nesne bn_m_id NUMBER) – tekrardan kullanılacak boş düğümün modelidsi RETURN SELF; Çizelge 13:Boş düğümler için Yapıcı Yapıları(Murray et al.’dan 2005) Boş düğümün eklenmesi: INSERT INTO nsu_data VALUES (SDO_RDF_TRIPLE_S( ‘nsu’, '_:BNSEQN1001A', '<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>', '<http://www.w3.org/1999/02/22-rdf-syntax-ns#Seq>', 4)); 28 4.3 RDF Şema RDF, herhangi bir uygulama alanı hakkında varsayımlarda bulunmaz, ya da herhangi bir alan hakkında anlamsallığı tanımlamaz. Örneğin aile modeli düşünülecek olursa sadece erkeklerin “fatherOf” ilişkisinin nesneleri olabileceği konusunda bir kısıtlama bulunmamaktadır. RDF şema kullanıcılara uygulamalar için etki alanı tanımlarına imkân sağlar. Bu bilgi sınıflar, özellikler öznitelikler şeklinde betimlenebilir. Aile örneğinde İnsan bir sınıftır ve iki alt sınıfa sahiptir: Bay ve Bayan. parentOf özelliği ise iki alt özelliğe sahiptir: fatherOf ve motherOf. siblingOf özelliği de iki alt özelliğe sahiptir. “:brotherOf” ve “sisterOf”. brotherOf ve fatherOf özellikleri “Bay”, “motherOf” ve “sisterOf” özellikleri ise bayan özniteliklerine sahiptir. 4.3.1 Kurallar ve Kural Tabanları Bir kural RDF verisinde çıkarsama yapılabilmesi için uygulanan bir nesnedir. Bir kural bir isimle tanımlanır ve aşağıdaki parçalardan oluşmaktadır: ■ IF bölümü ■ IF bölümüne karşılık gelen alt çizgelerin belirli filtrelerden geçirilmesi ■ THEN bölümü Örneğin “bir konferansın kurul başkanı aynı zamanda konferansın eleştirmenlerinden biridir” kuralı aşağıdaki gibi temsil edilebilir. ('kurulbaskaniRule', --kural ismi ‘(?r :KurulBaskani ?c)’, -- IF bölümü NULL, -- filtre koşulu ‘(?r :elestirmen ?c)’, -- THEN bölümü SDO_RDF_Aliases (MDSYS.RDF_Alias(‘, 'http://some.org/test/')) ) Bu durumda kural belirli bir filtreleme koşuluna sahip değildir. Bu yüzden filtreleme kısmı “null” olarak bırakılmıştır. Bir “IF” bölümü eşleşmesi için birçok üçlü çıkarsamasının gerçekleştirilebilmesi için “Then” kısmında birden çok üçlü kullanılabilir. 29 Bir kural tabanı kuralları barındıran nesnedir. Oracle tarafından sağlanan kural tabanları şu şekildedir. ■ RDFS ■ RDF (RDFS’in alt kümesi) RDFS ve RDF kural tabanları veritabanına RDF desteği sağlamak için çalıştırılan SDO_RDF.CREATE_RDF_NETWORK yordamının çalıştırılması ile birlikte yaratılır. RDFS kural tabanları http://www.w3.org/TR/rdf-mt/ adresindeki World Wide Web Consortium (W3C) RDF Semantics dokümanında tanımlanan gereklilik kurallarını uygular. RDF kural tabanları RDFS gereklilik kurallarının bir alt kümesi olan RDF gereklilik kurallarını temsil eder. Bu kural tabanlarının içeriği MDSYS.RDFR_RDFS ve MDSYS.RDFR_RDF görünümlerinde görüntülenebilmektedir. Ek olarak SDO_RDF_INFERENCE.CREATE_RULEBASE yordamı kullanılarak kullanıcılar tarafından tanımlanan kural tabanları tanımlanabilir. Kullanıcı tarafından tanımlanan kural tabanları ek olarak özelleştirilmiş çıkarsama yetenekleri sunar. Her bir kural tabanı için bu kural tabanına ait kuralları tutulduğu sistem tabloları yaratılmaktadır ve MDSYS.RDFR_kuraltabanıismi formatında bir görünüm sağlanmaktadır. Bu görünüm kural tabanına yeni bir kuralın eklenmesi, çıkartılması ya da güncellenmesi amacıyla kullanılmalıdır. Tüm kural tabanları hakkındaki bilgiler MDSYS.RDF_RULEBASE_INFO görünümünde tutulmaktadır. Aşağıdaki örnek family_rb adında bir kural tabanı yaratmaktadır ve bu kural tabanına grandparent_rule adında bir kural eklemektedir. Bu kural eğer bir kişi(x) bir çocuğun(y) ebeveyni ise ve o kişi(y) de başka bir çocuğun(z) ebeveyni ise bu kişi(x) çocuğun(z) büyük ebeveynidir. EXECUTE SDO_RDF_INFERENCE.CREATE_RULEBASE('family_rb'); INSERT INTO mdsys.rdfr_family_rb VALUES( 'grandparent_rule', '(?x :parentOf ?y) (?y :parentOf ?z)', NULL, '(?x :grandParentOf ?z)', SDO_RDF_Aliases(SDO_RDF_Alias(‘,'http://www.example.org/family/' ))); 30 Çizelge 14: Kural tabanının yaratılması(Murray et al.’dan 2005) SDO_RDF_MATCH tablo fonksiyonu kullanırken birden fazla kural tabanı tanımlanabilmektedir. Aşağıdaki örnek family_rb kural tabanı ve grandParentOf ilişkisi kullanılarak aile modelinde yer alan tüm büyük ebeveynlerin ve torunların nasıl bulunduğunu göstermektedir. Çıkarsama yapılırken RDFS ve family_rb kural tabanları kullanılmaktadır. SELECT x, y FROM TABLE(SDO_RDF_MATCH( '(?x :grandParentOf ?y) (?x rdf:type :Male)', SDO_RDF_Models('family'), SDO_RDF_Rulebases('RDFS','family_rb'), SDO_RDF_Aliases(SDO_RDF_Alias(‘,'http://www.example.org/family/')) , null)); Çizelge 15: Kural tabanının sorgulanması(Murray et al.’dan 2005) 4.3.2 Kural İndeksleri Bir kural indeksi belirli model kümelerine belirli kural tabanlarını uygulanmasından çıkarsama yolu ile elde edilen üçlüleri içeren nesnelerdir. Eğer bir SDO_RDF_MATCH sorgusu bir kural tabanını refere ederse sorgudaki bu kural tabanı-model kombinasyonu için bir kural indeksi var olmalıdır. Kural indeksi yaratılırken SDO_RDF_INFERENCE.CREATE_RULES_INDEX Yordamı çağrılır. Bir kural indeksini silmek için ise SDO_RDF_INFERENCE.DROP_RULES_INDEX yordamı çağrılır. Bir kural indeksi yaratıldığında bu kural indeksiyle ilişkili olan üçlüler mdsys şeması altında bir görünümde saklanır. Bu görünüm RDFI_kuralindeksismi formatında bir isme sahiptir ve sadece kural indeksinin sahibi ve yetkisi olan kullanıcılar tarafından görüntülenebilmektedirler. MDSYS. RDFI_kuralindeksismi her bir üçlü için bir kayıt içermektedir ve RDFM_modelismi görünümü ile aynı kolonlara sahiptir. 31 Kural indeksleriyle ilgili tüm bilgiler MDSYS.RDF_RULES_INDEX_INFO görünümünde tutulur ve bu görünüm her bir kural indeksi için bir kayıt içermektedir.. Bir kural indeksi ile ilgili modeller ve kural tabanları gibi tüm veritabanı nesneleri MDSYS.RDF_RULES_INDEX_DATASETS görünümünde saklanır. Aşağıdaki örnek “family” modeli ve RDFS ve family_rb kural tabanlarını kullanarak family_rb_rix_family isminde bir kural indeksi tanımlar. BEGIN SDO_RDF_INFERENCE.CREATE_RULES_INDEX( 'rdfs_rix_family', SDO_RDF_Models('family'), SDO_RDF_Rulebases('RDFS','family_rb')); END; / Çizelge 16: Kural tabanı üzerinde indeks yaratılması(Murray et al.’dan 2005) 4.4 RDF verisinin SDO_RDF_MATCH Tablo Fonksiyonu ile Sorgulanması RDF verisinin sorgulanabilmesi SDO_RDF_MATCH tablo fonksiyonu kullanılmaktadır. Bu fonksiyon aşağıdaki özellikleri içermektedir. SDO_RDF_MATCH( sorgu VARCHAR2, model SDO_RDF_MODELS, kural tabanı SDO_RDF_RULEBASES, alias SDO_RDF_ALIASES, filtre VARCHAR2 ) RETURN ANYDATASET; Çizelge 17: SDO_RDF_MATCH Tablo Fonksiyonu(Murray et al.’dan 2005) Sorgu özelliği SDO_RDF_MATCH tablo fonksiyonu için gereklidir. Diğer özellikler ise opsiyoneldir. Sorgu özelliği dizgi sabitidir ve bir ya da birden fazla üçlü örüntülerinden oluşabilmektedir. 32 Genellikle değişkenleri içerir ve bağlı değişken ya da bağlı değişken içeren ifadelerden oluşamaz. Bir üçlü örüntüsü parantezlerle çevrelenmiş üçlü öğeciklerinden oluşmaktadır. Her bir öğe bir değişken(ör, ?x), varsayılan isim alanı kullanılarak genişletilebilen nitelendirilmiş ad(ör, rdf:type),arma(“alias”) parametre değeri ya da tam bir URI(ör <http://www.example.org/family/Male>) olabilir. Ek olarak üçüncü öğe sayısal sabit(ör, 3.14),basit sabit(ör, “herman”) ya da tipli sabit(ör, 123"^^xsd:int) olabilir. Örneğin aşağıdaki sorgu özelliği büyükbabaları ve torunlarına ait boyları bulmaya yönelik bir üçlü örüntüsünü ifade etmektedir. (?x :grandParentOf ?y) (?x rdf:type :Male) (?y :height ?h)' Model özelliği hangi RDF modelinin ya da modellerini kullanılacağını belirtir. Veri tipi TABLE OF VARCHAR2(25) tanımına sahip SDO_RDF_MODELS şeklindedir. Kural tabanı özelliği sorguya bir ya da daha fazla kural tabanlarının uygulanacağını belirtir. Veritipi TABLE OF VARCHAR2(25) tanımına sahip SDO_RDF_RULEBASES şeklindedir. Arma özelliği varsayılan sorgularda nitelendirilmiş adları genişletirken, varsayılan isim alanlarına ek olarak bir ya da birden fazla isim alanlarının kullanılabileceğini ifade etmek için kullanılır. Veri tipi TABLE OF RDF_ALIAS tanımına sahip SDO_RDF_ALIASES şeklindedir ve her bir RDF_ALIAS elemanı bir namespaceid ve namespace değer içermektedir. RDF_ALIAS veri tipi(namespace_id VARCHAR2(30), namespace_val VARCHAR2(4000)) tanımına sahiptir. Aşağıdaki isim alanları SDO_RDF_MATCH fonksiyonu tarafından varsayılan olarak kullanılır. ('rdf', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#') ('rdfs', 'http://www.w3.org/2000/01/rdf-schema#') ('xsd', 'http://www.w3.org/2001/XMLSchema#') Varsayılan isim alanları, arma özelliğine namespace_id değeri ve farklı bir namespace_val değeri tanımlanmasıyla geçersiz kılınabilir. Filtreleme özelliği ek bir seçim kriterinin belirtilmesiyle oluşturulur. Eğer bu değer “null” değilse “where” yan tümcesi şeklinde bir dizgi olmalıdır. Örneğin ‘h>=6’ filtrelemesi ile sonuçlar üzerinde torunun boyunun 6dan büyük olması şeklinde bir limit uygulanabilir. 33 SDO_RDF_MATCH tablo fonksiyonu girdi değişkenlerine bağlı olarak değişen ANYDATASET tipinde bir nesne geri döndürür. Aşağıdaki örnek RDFS ve family_rb kural tabanlarından çıkarsama gerçekleştirerek “family rdf” modelindeki büyükbabaları ve torunlarını seçmek için kullanılan bir tablo fonksiyonudur. SELECT x, y FROM TABLE(SDO_RDF_MATCH( '(?x :grandParentOf ?y) (?x rdf:type :Male)', SDO_RDF_Models('family'), SDO_RDF_Rulebases('RDFS','family_rb'), SDO_RDF_Aliases(SDO_RDF_Alias(‘,'http://www.example.org/family/')), null)); RDF verisinin SQL ile birlikte işlenmesi ile birlikte normal veritabanı tabloları RDF verileriyle beraber sorgulanabilmektedir. Örneğin bir sorguda RDF sorgusundan gelen sonuçlarla birlikte geleneksel veritabanı tabloları birleştirilebilir ve bu şekilde bir sorgu oluşturulabilmektedir. SELECT t.r reviewer, e.emailid emailid FROM TABLE(RDF_MATCH( ‘(?r ReviewerOf ?c) (?r rdf:type Faculty)’, RDFModels('reviewers'), NULL, NULL)) t, employees e WHERE t.r = e.name; SQL’de RDF sorgulama yeteneğinin bulunması uygulamaların, alana özel RDF verisi şeklinde saklanan anlamsalları rahatlıkla işlemesine neden olur.RDF’in anlamsal Web’in önemli bir yapı taşı olduğu düşünüldüğünde anlamsal web uygulamaları için bu özellik büyük bir önem arz eder. Ayrıca gelecekte ilişkisel veri tabanlarında tutulan çoğu bilgi RDF üçlüleri şeklinde saklanabilecektir, bu nedenle RDF_MATCH fonksiyonu bu verilerin sorgulanmasında kullanılabilecektir. Ek olarak büyük miktarda üst veri içeren e-pazaryerleri ve Portaller bu fonksiyonellikten faydalanabilecektir. 34 4.5 RDF Güvenlik Hususları RDF kullanımında aşağıdaki veritabanı güvenlik hususları uygulanmıştır. • Bir model ya da kural indeksi yaratıldığında bu nesnelerin sahibi GRANT opsiyonu ile birlikte select yetkisine sahip olur. Select yetkisi olan kullanıcılar SDO_RDF_MATCH tablo fonksiyonunu kullanarak model ya da sorgu indeksini üzerinde sorgulama yapabilirler. • Bir kural tabanı yaratıldığında kural tabanının sahibi kural tabanı üzerinde GRANT opsiyonu ile birlikte SELECT, INSERT, UPDATE, ve DELETE yetkilerine sahip olur. Kural tabanı üzerinde Select yetkisine sahip olan kullanıcılar kural tabanını kullanan kural indeksleri yaratabilir. , INSERT, UPDATE, ve DELETE yetkileri kullanıcıların kural tabanlarını kimlerin ve hangi şekilde değiştirebileceklerini kontrol eder. • Bir model üzerinde DML işlemleri gerçekleştirilebilmesi için kullanıcıların temel tablo üzerinde DML işlemi gerçekleştirme yetkisine sahip olması gerekmektedir. • Bir model için temel tabloyu yaratan kişi diğer kullanıcılara yetki verebilir. • Bir kural tabanı üzerinde DML işlemleri gerçekleştirilebilmesi için kullanıcı ilgili veritabanı görünümü üzerinde gerekli yetkilere sahip olmalıdır. • Modelin yaratıcısı modele karşılık gelen veritabanı görünümleri için diğer kullanıcılara select yetkisi verebilir. • Kullanıcılar sadece yetkilerinin olduğu veritabanı görünümleri üzerinde işlem gerçekleştirebilir. • Sadece kural tabanının sahibi bu kural tabanını silebilir. 4.6. Oracle RDF Yapısı için ilk adımlar Oracle veritabanında RDF verileriyle çalışabilmek için aşağıdaki adımlar izlenmelidir. RDF verilerinin büyümeye meyilli olduğu göz önünde bulundurulursa RDF tablolarının ayrı bir “tablespace”te tutulması önerilmektedir(Murray et al.’dan 2005). Kullanıcıların “tablespace” yaratabilmek için gerekli yetkilere sahip olması gerekmektedir. Aşağıdaki komut RDF_TBLSPACE adında bir tablespace oluşturmaktadır. 35 CREATE TABLESPACE rdf_tblspace DATAFILE '/oradata/orcl/rdf_tblspace.dat' SIZE 1024M REUSE AUTOEXTEND ON NEXT 256M MAXSIZE UNLIMITED SEGMENT SPACE MANAGEMENT AUTO; RDF ağının yaratılması: RDF ağının yaratılması ile birlikte Oracle veritabanı RDF depolayabilecek yeteneklere sahip olur. Veritabanı yöneticisi yetkisine sahip olan kullanıcılar RDF ağını yaratabilmektedir. Bir veritabanı örneği için sadece bir kez RDF ağı yaratılmalıdır. Aşağıdaki örnek RDF_TBLSPACE “tablespace”i kullanılarak bir RDF ağının yaratılmasını göstermektedir. EXECUTE SDO_RDF.CREATE_RDF_NETWORK('rdf_tblspace'); Kullanıcıların RDF uygulama tablolarını kullanabilmesi RDF modellerini yaratabilmesi için yetkilendirilmesi gerekmektedir. Aşağıdaki komut örnek SCOTT kullanıcısına yetki vermek için kullanılmalıdır. GRANT EXECUTE ON MDSYS.RDF_APIS_INTERNAL TO SCOTT; RDF verisi merkezi bir şema altında tutulur. Kullanıcı tarafından tanımlanan tablolar ise RDF verilerine referanslar gösterir. RDF verisine ait referansların tutulması için kullanıcı tarafınsan tablo oluşturulmalıdır. Kullanıcılar bu adımda veritabanı yöneticisi yetkisine sahip olmak zorunda değillerdir. Tablo tek bir modelle ilişkili olan RDF verilerine ait referansları tutabilmek için SDO_RDF_TRIPLE_S, tipinde bir kolona sahip olması gerekmektedir. Bu tablonun NUMBER tipinde bir id kolonuna ve SDO_RDF_TRIPLE_S tipinde TRIPLE ismine sahip bir kolona sahip olmaları önerilmektedir. Aşağıdaki örnek FAMILY_RDF_DATA adında bir tablo oluşturmaktadır. . CREATE TABLE FAMILY_RDF_DATA (id NUMBER, triple SDO_RDF_TRIPLE_S); RDF modeli bir model ismi, model için RDF verilerine ait referansları depolayan bir tablo ismi ve bu tablo içinde SDO_RDF_TRIPLE_S tipindeki kolonun isminin parametre olarak verilmesiyle oluşturulur. EXECUTE SDO_RDF.CREATE_RDF_MODEL('FAMILY', 'FAMILY_RDF_DATA', 'TRIPLE'); 36 5. EŞLEME MİMARİSİ VE SÜREÇ 5.1 Tasarım Mantığı Bir veritabanı yönetim sistemi tüm sistemi düzgün şekilde yönetebilmek için büyük miktarda üst veri barındırır. Günümüzde çoğu ilişkisel veritabanı sistemlerinde bu bilgi genellikle daha önceden tanımlanmış tablolarda tutulmaktadır. Bu tablolar Veri Sözlüğü ya da Veri havuzu olarak da adlandırılabilir. Geliştirilen model Oracle veritabanını kullanmaktadır. Oracle veri tabanında da üst veriler veri sözlükleri adı altında sistem tablolarında tutulmaktadır. Tablo tanımları, kolon bilgileri ayrıntıları ve kısıtlamalar, erişim yetkileri de dâhil olmak üzere çok sayıda üst veri daha önceden tanımlanmış Oracle veri sözlük tablolarında tutulur. Bir kullanıcı sadece kendi erişim yetkisinin olduğu tabloların üst verilerini elde edebilir. Genel anlamda veri havuzlarında tutulan bilgilerin büyük miktarının sisteme özgü olması ve anlamsal betimleme için uygun olmaması nedeniyle geliştirilen sistemde genel bir ontoloji tanımlanmıştır. Sadece en üst seviyede ve en genel üst verileri içermektedir. Gerçek veri gösteriminin düzgün bir şekilde yorumlanabilmesi için son derece önemlidir. Şema varlıkları daha sonradan genişletilebilmektedir. Genel ontoloji “Relational OWL (Laborda et al., 2004)’da tanımlanan ontoloji temel alınarak hazırlanmıştır. Tezde yapılan çalışma ilişkisel veri modeli teorisinden gelen kuralların kural tabanlı ontolojiksel bir yaklaşım ile eşleştirilmesinin gerçekleştirilmesiyle diğer çalışmalardan ayrılmaktadır. Ek olarak var olan yaklaşımlar daha çok tek taraflı bir eşleme mimarisini tanımlarken geliştirilen tasarım çift yönlü eşlemeye olanak sağlamaktadır. Eşleme sırasında ilişkisel şemada var olan tüm varlıklar ontolojiksel varlıklara eşlenmektedir. Böylelikle geri dönüşüm de tam olarak gerçekleştirilmektedir. İlişkisel RDF ontolojilerine aşağıdaki üst veri varlıkları eklenmiştir: Tablo ve Kolonlar: İlişkisel bir veri tabanı şemasının en önemli bileşeni tablolardır(ilişkiler). Tablolar ek olarak gerçek verinin depolandığı kolonlardan(öznitelik) oluşmaktadır. Bu iki şema bileşeni ilişkisel veritabanı şeması gösterimi için en gerekli bilgileri içermektedir bu yüzden genel RDF gösterimine dahil edilmelidir. Birincil ve Dış Anahtarlar: Bir ya da birden çok kolon bir tablonun birinci kolonu olabilir. Bu bilgi özellikle veri güncellemelerinin senkronize olması zorunlu olduğu durumlarda hedef sistem için son derece kullanışlı olmaktadır. Diğer türlü eski değerlere yenilerinin atanması sırasında problem çıkması 37 muhtemeldir. Aynı şekilde dış anahtarlar da gösterilmek zorundadır. Diğer türlü hedef sistem tutarsız olur ve verinin bütünlüğü sağlanamaz. Kısıtlamalar: Kısıtlamalar veriler üzerinde tutarlılığın kontrolünün en basit yoldan gerçekleştirilmesini sağlarlar. Örneğin bir tablodaki maaş kolonun değerinin ‘null’ değer girilmemesini ya da sıfırdan büyük değer girilmesini kontrol edebildiğimiz gibi birincil ve dış anahtarların da birbiriyle olan tutarlılığın sağlanması kısıtlamalar sayesinde gerçekleştirilebilir. Birincil ve dış anahtarlar dışında kontol kısıtlamaları da sisteme dâhil edilmiştir. İndeksler: İndeksler özellikle büyük miktarda veri barındıran sistemlerde verilerin daha hızlı edilmesini sağlayan veritabanı nesneleridir. Sorgunun kayıtların %2 ile %4 arasında değer döndürdüğü, null değerlerin çok olduğu durumlarda ve çok güncellemenin olmadığı durumlarda sorgu performansını üst düzeylere taşımaktadırlar. İndeksler ontoloji varlıkları olarak sistemde bulunmaktadır. Veri Tipleri: Veri tipleri bir kolonun alabileceği değerleri kısıtlar. Bu tarz tutarlılık kısıtlamaları ikili veri senkronizasyonlarının gerçekleşmesinde bir gerekliliktir ve hedef sisteme verinin gelmesi sırasında tutarlılık kontrollerinin yapılmasın çok kullanışlıdırlar. RDF’te kullanılan veri tipleri XML Şema: Veri Tipleri XML-SCHEMA dokümanındaki veri tipleriyle uyumludur. Ancak kolonlardaki değerlerin maksimum değerlerini belirten kısıtlamaların da sistemde gösterimi için bir teknik uygulanmalıdır. Sonuç olarak ortak RDF ontolojisi tablolar,kolonlar,indeksler,veri tipleri, veri tiplerine ait kısıtlamalar, birincil ve dışsal anahtarlar ve bunlar arasındaki ilişkileri kapsamalıdır. 5.2 İlişkisel RDF Ontolojisi Modelimizde ilişkisel veri tabanı şemasını soyut bir şekilde ifade edebilecek bir RDF ontolojisi kullanılmaktadır. Bu RDF ontolojisi RDF ontolojisini kullanabilen herhangi bir uzak veritabanı ya da uygulama tarafından rahatlıkla yorumlanabilmelidir. Bir sonraki adımda bu RDF ontolojisi gerçek verilerine karşılık gelen gösterim formatını oluşturmak için de kullanılacaktır. Veritabanı şemasını RDF ile tanımlayabilmek için merkezi bir ontoloji yaratılmalıdır. Bu ontoloji veritabanını tanımlayan herhangi bir doküman tarafından kullanılabilmelidir. Bu ontoloji içerisinde tablo, kolon gibi sınıflar soyut bir şekilde betimlenmiştir ve bilgi gösterim işleminin merkezini oluşturmaktadır. Ek olarak sınıflar ve kolonlar arasındaki ilişkileri de tanımlamamız bu ontolojiyle mümkündür. 38 Benzer şekilde RDF’I temel alan herhangi bir gösterim ilişkisel RDF ontolojisini kullanabilir ya da geliştirebilecektir. Sonuç olarak bu ontolojiler kullanılarak eşlenen veritabanı gösterimleri bu ontolojileri kullanan herhangi bir uygulama tarafından yorumlanabilecektir. Ontolojiler arasında anlamsal eşlemeler kurmak bu ontolojileri değiş tokuşunu sağlamak için yeterlidir. İlişkisel RDF ontolojisi içerisinde betimlenen tüm sınıflar Tablo 2’de gösterilmiştir. Tablo 3 de ise bu sınıfları birbirine bağlayan tüm ilişkiler yer alacaktır. İlişkisel ontolojide ilişkisel şemada yer alan tüm üst veriler yer almamaktadır ancak tetikleyiciler, sıralamalar gibi bilgiler de ontolojiye rahatlıkla eklenebilecektir. Ek olarak Oracle 10g RDF veri deposu kullanılmasıyla veri sözlüklerinden elde edilecek kullanıcı erişim hakları da ilişkisel şemanın RDF şemasına eşlenmesiyle Oracle 10g içerisine birlikte eklenecektir. Bu modelde hedeflenen daha çok veritabanında depolanan bilgilerin ontolojiye eşlenebilmesidir. Eşlenen ontoloji ve veriler Oracle RDF veri deposuna eklenecektir. rdf:ID Database Schema Table Column Index SuperClass SubClass EquivalentClass EquivalentColumn rdfs:subClassOf rdf:Bag rdf:Bag rdf:Seq rdfs:Resource rdfs:Resource rdf:Bag rdf:Bag rdf:Bag rdf:Bag rdfs:comment Veri tabanı sınıfı Veritabanı Şema sınıfı Veri tabanı tablo sınıfı Veritabanı kolonları sınıfı Veritabanı index sınıfı Veritabanı tablo üst sınıfı Veritabanı tablo alt sınıfı Veritabanı tablo denk sınıfı Veritabanı kolon denk sınıfı Tablo 2: İlişkisel ontoloji tarafından tanımlanan sınıflar 39 rdf:ID rdfs:domain rdfs:range rdfs:comment :has Rdfs:Class Rdfs:Class :hasSchema :Database :Schema :hasTable :hasColumn :referTable :Schema :Table :Table :Table :Column :Table :referColumn :Column :Column :hasConstraint :Column :Costraint :hasIndex :Table :Index :columnHasIndex :Column :Index :subclassOfTable :Table :SubClass :superclassOfTable :Table :SuperClass :equivalentclassOfTable :equivalentOfColumn :Table :Column :EquivalentClass :EquivalentColumn Başka sınıfları içinde tutmak için kullanılır Veritabanına ait şemalar Şema altındaki tablolar Tabloya ait kolonlar Kolonun referans kolonu Kolonun referans kolonu Kolon üzerindeki kısıtlama Tablo üzerindeki indeksler Kolon üzerindeki indeksler Tablonun alt sınıfı(tablosu) Tablonun üst sınıfı(tablosu) Tablonun denk sınıfı Kolonun denk sınıfı Tablo 3: İlişkisel ontolojide tanımlanan özellikler İlişkisel ontolojide tanımlanan özellikler EK E’ de ifade edilmektedir. Tablo 2 ve Tablo 3’te belirtilen özellikler dışında kolonun veritipi, veri uzunluğu gibi özellikler de EK E’de bulabilirsiniz 5.3 Eşleme Mimarisi Veritabanı şeması ontolojiye eşleme işlemi sonucu dönüştürülür. Eşleme sırasında her bir veri tabanı şema bileşeni için farklı kurallar uygulanmaktadır. Aynı şekilde veritabanı verileri de ontolojiyi temel alan bilgi tabanı sayesinde eşlenmektedir. İlk aşama Oracle 10g RDF veri deposunun işlemler için hazırlanması şeklindedir. Bunun için RDF veri kaynağında eşlenecek veritabanı için ilgili model oluşturulmaktadır. Bu aşamadan sonra ilişkisel RDF ontolojisi sisteme yüklenir. Eşleme ilk aşamada veritabanı şeması bileşenlerinin(tablo, kolon, kısıtlamalar vs) RDF şemasına dönüştürmektedir. Veritabanı şema bilgileri için Oracle veritabanı veri sözlükleri kullanılmaktadır. Veritabanı şemasından ontolojiye eşleme sırasında RDF veri deposuna yüklenen ilişkisel soyut RDF şemasını kullanmaktadır. Bu şema da daha sonra Oracle 10g RDF veri deposuna eklenir. 40 Bir sonraki aşamada ise ilişkisel veritabanındaki bilgilerin Oracle RDF veri deposuna yüklenmesi işlemidir. Bu işlem sırasında veritabanından eşlenen ontoloji kullanılarak RDF üçlüleri oluşturulmaktadır. Üçlüler daha sonra Oracle RDF veri deposuna eklenecektir. Bir sonraki aşamada ontolojideki varlıkların aralarındaki ilişkilerin çıkarsanabilmesi için kural tabanları oluşturulmaktadır. Kural tabanları özellikle tablolar arasındaki ilişkilerin çıkarsanması işlemi sırasında kullanılmaktadır. Oracle 10g RDF veri deposundaki bu kural tabanlarına varlıklar arasındaki ilişkileri betimleyen kurallar eklenecek ve daha sonra bu kurallar sayesinde Oracle 10g veri deposu üzerinde çıkarsama yolu ile istenen üçlüler ve bilgiler elde edilebilmektedir. Veritabanından eşleme sonucu oluşacak ontoloji sadece bir kez oluşturulacağından şemadaki yapılacak değişikliklerde tekrar oluşturulması gerekmektedir. İşlemler sonucunda Oracle RDF veri deposunda ilgili veri tabanı şemasının eşlenmiş hali yer alacak ve istendiği zaman veritabanı kodları halinde dosyalara aktarılabilmektedir. Veritabanı olarak Oracle veritabanı kullanılmaktadır ve RDF şemalarının oluşturulması ve RDF üçlülerinin sisteme eklenmesi sırasında PL/SQL depolanmış yordamlar kullanılmaktadır. Sistem mimarisi Şekil 7’de gösterilmektedir. Şekil 7: Sistem Mimarisi 41 5.4 Eşleme İşlemi Eşleme işlemi veritabanındaki anlamsallığı ek ontolojik varlıklar kullanarak geliştirir. Geliştirilen veritabanından ontoloji oluşturma işlemi aşağıdaki adımlardan oluşur. 1.İlişkisel RDF ontolojisi Oracle 10g RDF veri deposuna eklenir. 2.Oracle veritabanındaki ilişkisel şema bilgileri(tablolar, kolonlar, kolon özellikleri,birincil ve dışsal anahtarlar vb.) elde edilir. 3.Elde edilen şema bilgisi analiz edilir ve şema üzerinde eşleme kuralları uygulanmasıyla ilişkisel RDF ontolojisini temel alan gerçek ontoloji yaratılır ve RDF veri deposuna eklenir. 4. Eşleme tüm ontolojik varlıkları elde eder ve ontolojideki varlıkların aralarındaki ilişkilerin çıkarsanabilmesi için kural tabanları oluşturulacaktır. Oracle 10g RDF veri deposundaki bu kural tabanlarına varlıklar arasındaki ilişkileri betimleyen kurallar eklenecek ve daha sonra bu kurallar sayesinde Oracle 10g veri deposu üzerinde çıkarsama yolu ile istenen üçlüler ve bilgiler elde edilebilmektedir. 5. En son aşamada ise ilişkisel veritabanındaki bilgilerin Oracle RDF veri deposuna yüklenmesi işlemidir. Bu işlem sırasında veritabanından eşlenen ontoloji kullanılarak RDF üçlüleri oluşturulmaktadır. Bu üçlüler Oracle RDF veri deposuna eklenir. 6. Kural indekslerinin oluşturulmasıyla çıkarsama yoluyla elde edilmiş üçlüler de sorgulanabilmektedir. İşlem sonunda oluşturulacak ontoloji tersine mühendisliğin tüm özelliklerini taşımaktadır. Yaratılan ontolojiden kolaylıkla veri tabanı şeması oluşturulabilmektedir. İşlem tamamen otomatik olarak gerçekleşmektedir ve eşleme sırasında kullanıcı etkileşimine gerek duymamaktadır. Eşleme işlemi temel olarak iki işlemden oluşmaktadır. İlki şemanın dönüştürülmesi, ikincisi ise verilerin taşınmasıdır. 42 5.4.1 Şema Dönüşümü Şema dönüşümü ilişkisel veritabanı şemasının ontolojiye çevrimini ifade etmektedir. Şema dönüşümü sırasında yaratılacak ontoloji ilişkisel ontolojiyi temel almaktadır. Şema dönüşümü sırasında Oracle veritabanındaki tablo, kolon ve kısıtlama bilgileri sorgulanır. Sorgulama sonucu elde edilen şema ilişkisel veritabanın tüm şema özelliklerini taşımaktadır. Ek olarak tablolar arasındaki ilişkiler Oracle RDF kural tabanlarına işlenmektedir. Kural tablolarında yaratılan kurallar sayesinde birbiriyle ilişkili olan yapılar rahatlıkla elde edilebilmektedir. Tablolar arasındaki ilişkilerin tam olarak bilinebilmesi için dış anahtarlar kullanılmaktadır. Eşleme işlemi örneklerle devam eden bölümlerde anlatılmaktadır. 5.4.1.1 ORACLE RDF modelinin yaratılması Oracle RDF veri deposunda saklanacak verilerin büyük miktarda yer tutacağı düşünülerek sadece RDF verilerini saklayabilmek için ayrı bir tablo alanı oluşturulmalıdır. Bu işlem DBA yetkisine sahip bir kullanıcı tarafından yapılmalıdır. CREATE TABLESPACE rdf_tblspace DATAFILE '/oradata/orcl/rdf_tblspace.dbf' SIZE 1024M REUSE AUTOEXTEND ON NEXT 256M MAXSIZE UNLIMITED SEGMENT SPACE MANAGEMENT AUTO; Oracle veritabanı üzerinde RDF veri deposunun çalışır hale getirilebilmesi için RDF ağının oluşturulması gerekmektedir. Her bir Oracle örneği için bir tane ağ yaratılmalıdır. Bu işlem DBA yetkisine sahip bir kullanıcı tarafından yapılmalıdır. EXECUTE SDO_RDF.CREATE_RDF_NETWORK('rdf_tblspace'); Sistemde Oracle RDF verileriyle çalışacak kullanıcının gerekli yetkiye sahip olması gerekmektedir. Bu işlem DBA yetkisine sahip bir kullanıcı tarafından yapılmalıdır. GRANT EXECUTE ON MDSYS.RDF_APIS_INTERNAL TO SCOTT; 43 Orasemweb paketi altındaki “pre_install” yordamı kullanıcının RDF verilerini saklayabilmek için kullanabileceği tabloları ve RDF modellerini oluşturmaktadır. Ek olarak ortak RDF ontolojisinin RDF veri deposuna yüklenmesi de bu yordam ile gerçekleştirilmektedir. Orasemweb paketi yordamlarının kullanılabilmesi için bu yordamın çağrılması gerekmektedir. Sistemin kurulumu için gerekli adımlar EK A’da anlatılmaktadır. 5.4.1.2 İlişkisel RDF ontolojisinin Oracle 10g RDF veri deposuna eklenmesi İlişkisel RDF ontolojisinin EK E’de görülen varlıkları ve ilişkileri Oracle RDF veri deposuna girdiler şeklinde eklenmektedir. Eklenen ilişkisel RDF ontolojisi sistemin temelini oluşturmaktadır ve şemaya ait varlıklar bu ontolojiyi kullanarak modellenmektedir. 5.4.1.3 Oracle Veri sözlüklerinin kullanılması Şemanın eşlenebilmesi için ilk aşamada veritabanı şemasının elde edilmesi gerekmektedir. Bir kullanıcı yetkisi dâhilinde başka bir şemaya ait varlıkları sorgulayabilmektedir. Şema bilgilerinin elde edilebilmesi için Oracle veri sözlükleri kullanılmaktadır. Veri sözlüklerindeki verinin en güncel ve doğru halinin elde edilebilmesi için şema istatistiklerinin toplanması gerekmektedir. “All_” ön ekiyle başlayan veri sözlükleri şema bilgilerini toplamakta kullanılacaktır ve kullanıcının erişebildiği varlıkları belirtir. Örneğin “all_tables ” veri sözlük yapısı kullanıcının erişim hakkı olduğu tablolara ait bilgileri göstermektedir. select t.table_name, TABLESPACE_NAME,STATUS , nvl(NUM_ROWS,0) NUM_ROWS ,nvl(DEGREE,1)DEGREE from all_tables t where owner=:schemaname and upper(t.table_name) not in(:excludelist)'; Table_name: Tablo ismi Tablespace: Tabloların tutulacağı tablo alanı Status: Tablonun statusu Num_rows: Tablodaki kayıt sayısı Degree: Tablonun parallellik derecesi :schemaname : İşlemler sırasında kullanılacak şema ismi. Tablonun sahibi :excludelist: Eşleme işleminin gerçekleşmesinin istenmediği tablolar. 44 5.4.1.4 Tabloların Eşlenmesi İlk aşamada belirli bir şema altındaki tabloların veri sözlüklerindeki tanımları elde edilir. Bu işlem gerçekleştirilirken all_tables görünümü kullanılmaktadır. INSERT INTO semwebdata—RDF üçlülerinin tutulacağı tablo ismi VALUES (semweb_seq.NEXTVAL, sdo_rdf_triple_s(:modelismi, :tabloismi, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', 'http://www.ege.edu.tr/semweb/Table')); INSERT INTO semwebdata VALUES (semweb_seq.NEXTVAL, sdo_rdf_triple_s(modelismi, v_table, 'http://www.ege.edu.tr/semweb/tableTablespace', '"' tablo alanı ismi '"^^xsd:string')); INSERT INTO semwebdata VALUES (semweb_seq.NEXTVAL, sdo_rdf_triple_s(modelismi, v_table, 'http://www.ege.edu.tr/semweb/tableNumrows', '"' kayıt sayısı '"^^xsd:integer')); INSERT INTO semwebdata VALUES (semweb_seq.NEXTVAL, sdo_rdf_triple_s(modelismi, v_table, 'http://www.ege.edu.tr/semweb/tableDegree', '"' parallelik derecesi '"^^xsd:integer')); Çizelge 18: Tabloların Eşlenmesi 45 Ontoloji yapıları oluşturulurken genel ilişkisel RDF ontolojisi kullanılmaktadır. Eşlenen tablo varlıkları Oracle RDF veri deposuna bir bir eklenmektedir. Tabloya ait her bir özellik birer girdiye denk gelmektedir. İlk aşamada veri sözlüklerinden elde edilen tablonun ilişkisel ontolojideki ‘Table’ tipinde olduğunu belirtmemiz gereklidir. Bir sonraki aşamada tablo özellikleri sisteme girilmektedir. Son aşamada tablonun hangi şemaya ait olduğunu ‘hasTable’ ile birlikte bir girdi olarak tanımlayabiliriz. Tablolar arası dışsal anahtarlardan dolayı yaratılan ilişkiler sonraki bölümlerde ele alınacaktır. INSERT INTO semwebdata VALUES (semweb_seq.NEXTVAL, sdo_rdf_triple_s(modelismi, v_table, 'http://www.ege.edu.tr/semweb/tableValidity', '"' tablo durumu '"^^xsd:string')); INSERT INTO semwebdata VALUES (semweb_seq.NEXTVAL, sdo_rdf_triple_s(modelismi, şema ismi, 'http://www.ege.edu.tr/semweb/hasTable', tablo ismi)); Çizelge 19: Eşlenmiş tabloların RDF veri deposuna girilmesi 5.4.1.5 Kolonların Eşlenmesi Tablolardaki her bir kolon birincil ve dış anahtar olan kolonlar da dahil olmak üzere ontolojide birer ilişkiye karşılık gelir. Kolonların birincil ya da dış anahtar olduğu bilgisi kısıtlamalardan elde edilecektir. Kolonlar eşlenirken sadece kolonun isminde gitmek doğru bir yaklaşım olmayacaktır. Aynı isimli bir kolon farklı tablolarda farklı özelliklere sahip olabilir bu yüzden kolon isimleri sistem eklenirken ‘tabloismi.kolonismi’ formatına sahiptir. Kolon bilgileri Oracle all_tab_columns görünümünden elde edilmektedir. 46 select k.table_name,COLUMN_NAME ,DATA_TYPE, DATA_LENGTH , nvl(DATA_PRECISION,DATA_LENGTH) DATA_PRECISION ,nvl(DATA_SCALE,0) DATA_SCALE, nvl(NULLABLE,’Y’) NULLABLE ,CHARACTER_SET_NAME from all_tab_columns k where owner=upper(:şemaismi) and upper(k.table_name) not in(:istenmeyentablolar); table_name: tablo ismi column_name: kolon ismi DATA_TYPE : kolon veritipi DATA_LENGTH : veri uzunluğu DATA_PRECISION: Özellikle Number tipindeki kolonlarda ondalıktan önceki kısım DATA_SCALE: Özellikle Number tipindeki kolonlarda ondalıktan sonraki kısım NULLABLE: Kolonun değerinin ‘null’ olup olamayacağı bilgisi CHARACTER_SET_NAME : Karakter bilgisi Çizelge 20: Kolonların Eşlenmesi Genel anlamda bir tablonun kolonu genel ontolojide şu şekilde ifade edilir: INSERT INTO semwebdata VALUES (semweb_seq.NEXTVAL, sdo_rdf_triple_s(modelismi, tabloismi.kolonismi, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', 'http://www.ege.edu.tr/semweb/Column')); Kolon özellikleri sisteme şu şekilde girilir: INSERT INTO semwebdata VALUES (semweb_seq.NEXTVAL, sdo_rdf_triple_s(modelismi, tabloismi.kolonismi, 'http://www.ege.edu.tr/semweb/columnDataPrecision', '"' data_precision '"^^xsd:integer')); INSERT INTO semwebdata VALUES 47 (semweb_seq.NEXTVAL, sdo_rdf_triple_s(modelismi, tabloismi.kolonismi, 'http://www.ege.edu.tr/semweb/columnDataType', '"' data_type '"^^xsd:string')); INSERT INTO semwebdata VALUES (semweb_seq.NEXTVAL, sdo_rdf_triple_s(modelismi, tabloismi.kolonismi, 'http://www.ege.edu.tr/semweb/columnDataLength', '"data_length '"^^xsd:integer')); INSERT INTO semwebdata VALUES (semweb_seq.NEXTVAL, sdo_rdf_triple_s(modelismi, tabloismi.kolonismi, 'http://www.ege.edu.tr/semweb/columnDataPrecision', '"' data_precision '"^^xsd:integer')); INSERT INTO semwebdata VALUES (semweb_seq.NEXTVAL, sdo_rdf_triple_s(modelismi, tabloismi.kolonismi, 'http://www.ege.edu.tr/semweb/columnDataScale', '"' data_scale '"^^xsd:integer')); INSERT INTO semwebdata VALUES (semweb_seq.NEXTVAL, sdo_rdf_triple_s(modelismi, tabloismi.kolonismi, 48 'http://www.ege.edu.tr/semweb/columnNullable', '"' nullable '"^^xsd:string')); INSERT INTO semwebdata VALUES (semweb_seq.NEXTVAL, sdo_rdf_triple_s(modelismi, tabloismi.kolonismi, 'http://www.ege.edu.tr/semweb/columnCharset', '"' character_set_name '"^^xsd:string')); Bir kolonun hangi tabloya ait olduğunu şu şekilde belirtiriz. INSERT INTO semwebdata VALUES (semweb_seq.NEXTVAL, sdo_rdf_triple_s(modelismi, v_table, 'http://www.ege.edu.tr/semweb/hasColumn', tabloismi.kolonismi)); Çizelge 21: Eşlenmiş kolonların RDF veri deposuna girilmesi Kolonların veri tipleri eşlenirken veri tipi rdfs:range ile belirtilirken kolonun alabileceği maksimum değer “data_length” özelliği ile örnegin number(3,2) şeklinde tanımlanmış bir veri tipi ise bu tanımın ondalık kısmı olan “2” “data_scale” özelliğine yazılır. 5.4.1.6 İndekslerin Eşlenmesi İndeksler özellikle büyük miktarda veri barındıran sistemlerde verilerin daha hızlı edilmesini sağlayan veritabanı nesneleridir. İndeksler ile ilgili veri sözlük görünümleri all_indexes, all_ind_columns ve all_ind_expressions görünümleridir. All_indexes görünümü tablo üzerindeki indeksler hakkında bilgi verir. all_ind_columns ise hangi kolonlar üzerinde indeks oluşturulduğu, all_ind_expressions ise indeksler için deyimlerin bulunabilmesi için kullanılmaktadır. Birincil anahtar ve benzersiz kısıtlamaları için 49 indeksler otomatik olarak oluşturulmaktadır ve “SYS_” ön ekine sahip olmaktadırlar. Ek olarak ‘BITMAP’ indeksler de siste tarafından ele alınmaktadırlar. select INDEX_NAME, INDEX_TYPE, TABLE_NAME, UNIQUENESS ' ' , JOIN_INDEX,GENERATED ' ' , nvl(TABLESPACE_NAME,’ tabloalanı ‘) TABLESPACE_NAME ' ' from all_indexes t ' ' where owner=upper(‘ şemaismi ‘) and upper(t.table_name) not in(' istenmeyentablolar ')'; select INDEX_NAME,TABLE_NAME,COLUMN_NAME,DESCEND ' ' from all_ind_columns t ' ' where upper(index_owner)=upper(‘ şemaismi ‘) and upper(t.table_name) not in(' istenmeyentablolar ')'; INDEX_NAME: index ismi INDEX_TYPE: indeks Bitmap mi normal mi TABLE_NAME:tablo ismi COLUMN_NAME:kolon ismi UNIQUENESS: eşsiz indeks olup olmadığı GENERATED: İndex isminin otomatik yaratılıp yaratılmadığı TABLESPACE_NAME: Tablo alanı ismi DESCEND: İndex artarak mı yoksa azalan şeklinde organize edilecek Çizelge 22: İndekslerin Eşlenmesi İndeksler için sistemde şu girdiler gerçekleşir: INSERT INTO semwebdata VALUES (semweb_seq.NEXTVAL, sdo_rdf_triple_s(p_model, v_index, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', 'http://www.ege.edu.tr/semweb/Index')); INSERT INTO semwebdata VALUES (semweb_seq.NEXTVAL, sdo_rdf_triple_s(p_model, v_index, 'http://www.ege.edu.tr/semweb/indexType', '"' index_record.index_type '"^^xsd:string')); 50 INSERT INTO semwebdata VALUES (semweb_seq.NEXTVAL, sdo_rdf_triple_s(p_model, v_index, 'http://www.ege.edu.tr/semweb/indexUniqueness', '"' index_record.uniqueness '"^^xsd:string')); INSERT INTO semwebdata VALUES (semweb_seq.NEXTVAL, sdo_rdf_triple_s(p_model, v_index, 'http://www.ege.edu.tr/semweb/indexJoin', '"' index_record.join_index '"^^xsd:string')); INSERT INTO semwebdata VALUES (semweb_seq.NEXTVAL, sdo_rdf_triple_s(p_model, v_index, 'http://www.ege.edu.tr/semweb/indexGenerated', '"' index_record.generated '"^^xsd:string')); INSERT INTO semwebdata VALUES (semweb_seq.NEXTVAL, sdo_rdf_triple_s(p_model, v_index, 'http://www.ege.edu.tr/semweb/indexTablespace', '"' index_record.tablespace_name '"^^xsd:string')); INSERT INTO semwebdata VALUES (semweb_seq.NEXTVAL, sdo_rdf_triple_s(p_model, v_index, 'http://www.ege.edu.tr/semweb/indexExpression', v_expression)); INSERT INTO semwebdata VALUES (semweb_seq.NEXTVAL, sdo_rdf_triple_s(p_model, v_index, 'http://www.ege.edu.tr/semweb/indexDescend', 51 '"' index_record.descend '"^^xsd:string')); İndeksin hangi tablo üzerinde olduğu bilgisi şu şekilde girilir. INSERT INTO semwebdata VALUES (semweb_seq.NEXTVAL, sdo_rdf_triple_s(p_model, v_table, 'http://www.ege.edu.tr/semweb/hasIndex', v_index)); İndeksin hangi kolon üzerinde olduğu bilgisi şu şekilde girilir INSERT INTO semwebdata VALUES (semweb_seq.NEXTVAL, sdo_rdf_triple_s(p_model, v_column, 'http://www.ege.edu.tr/semweb/columnHasIndex', v_index)); Çizelge 23: Eşlenmiş kolonların RDF veri deposuna girilmesi 5.4.1.7 Kısıtlamaların Eşlenmesi Kısıtlamalar bir tabloya geçersiz veri girilmesini engellemeye yönelik yapılardır. Tablo düzeyinde bir kayıt eklendiğinde, güncellendiğinde veya silindiğinde kuralların uygulanmasını sağlamaktadırlar. Ek olarak başka tabloların bağlı olduğu bir tablonun silinmesini engellemektedir. Oracle’da kullanılan kısıtlamalar şu şekildedir. • • • • • NOT NULL UNIQUE PRIMARY KEY FOREIGN KEY CHECK Oracle veri sözlüğündeki “all_constraints” ve “all_cons_columns” görünümleri kısıtlamalar hakkında bilgi vermektedir. Bu görünümlerden all_constraints kısıtlamalar hakkında tablo düzeyinde bilgi vermekteyken “all_cons_columns” görünümü kolon düzeyinde kısıtlamalar hakkında bilgi vermektedir. Veriler elde edilirken kullanılan sorgular şu şekildedir: 52 select distinct t.CONSTRAINT_NAME,t.Table_Name,t.R_CONSTRAINT_NAME ,t.CONSTRAINT_TYPE, getConsCondition(CONSTRAINT_NAME)SEARCH_CONDITION from all_constraints t where owner=upper(:şemaismi) and upper(t.table_name) not in(:istenmeyentablolar)'; table_name: tablo ismi CONSTRAINT_name: kısıtlama ismi R_CONSTRAINT_NAME: Kısıtlamanın hangi kısıtlamayı referans gösterdiğini belirtir. Özellikle dış anahtarların bulunması açısından kullanılmaktadır CONSTRAINT_TYPE: R dış anahtar kısıtlamasını, P birincil anahtar kısıtlamasını, C control kısıtlamasını ifade etmektedir. SEARCH_CONDITION: Kontrol kısıtlamaları ve ‘NOT NULL’ kısıtlamaları için koşulları belirtir. select t.CONSTRAINT_NAME,t.TABLE_NAME,t.COLUMN_NAME from all_cons_columns t where owner=şemaismi and upper(t.table_name) not in(istenmeyentablolar)'; table_name: tablo ismi column_name: kolon ismi CONSTRAINT_name: kısıtlama ismi Çizelge 24: Kısıtlamaların Eşlenmesi Kısıtlamalar ilk aşamada ilgili ilişkisel RDF ontolojisindeki varlıkla eşleştirilir. INSERT INTO semwebdata VALUES (semweb_seq.NEXTVAL, sdo_rdf_triple_s(modelismi, kısıtlamaismi, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', 'http://www.ege.edu.tr/semweb/Constraint')); Bir sonraki aşamada kısıtlama özellikleri girilir. INSERT INTO semwebdata VALUES (semweb_seq.NEXTVAL, sdo_rdf_triple_s(modelismi, kısıtlamaismi, 'http://www.ege.edu.tr/semweb/constraintType', '"constraint_type '"^^xsd:string')); 53 INSERT INTO semwebdata VALUES (semweb_seq.NEXTVAL, sdo_rdf_triple_s(modelismi, kısıtlamaismi, 'http://www.ege.edu.tr/semweb/R_CONSTRAINT_NAME', referansgosterilenkısıtlama)); INSERT INTO semwebdata VALUES (semweb_seq.NEXTVAL, sdo_rdf_triple_s(modelismi, kısıtlamaismi, 'http://www.ege.edu.tr/semweb/constraintCondition', '"search_condition '"^^xsd:string')); Çizelge 25: Eşlenmiş Kısıtlamaların RDF veri deposuna girilmesi Hangi kolon üzerinde hangi kısıtlamanın olduğunu şu şekilde sisteme eklenmektedir. INSERT INTO semwebdata VALUES (semweb_seq.NEXTVAL, sdo_rdf_triple_s(modelimsi , kolonismi, 'http://www.ege.edu.tr/semweb/hasConstraint', kısıtlamaismi)); Eğer kısıtlama tipi ‘P’ ise bu bir birincil anahtarı temsil etmektedir ve sisteme şu şekilde eklenmektedir. INSERT INTO semwebdata VALUES (semweb_seq.NEXTVAL, sdo_rdf_triple_s(modelismi, v_table, 'http://www.ege.edu.tr/semweb/isIdentifiedBy', kısıtlamaismi)); Eğer kısıtlama tipi ‘R’ ise bu bir dışsal anahtarı temsil etmektedir ve sisteme şu şekilde eklenmektedir. 54 INSERT INTO semwebdata VALUES (semweb_seq.NEXTVAL, sdo_rdf_triple_s(modelismi, v_table, 'http://www.ege.edu.tr/semweb/foreignCons', kısıtlamaismi)); Eğer kısıtlama tipi ‘C’ ise bu bir kontrol ya da ‘Not Null’ kısıtlamasını ifade etmektedir ve sisteme şu şekilde eklenmektedir. INSERT INTO semwebdata VALUES (semweb_seq.NEXTVAL, sdo_rdf_triple_s(modelismi, v_table, 'http://www.ege.edu.tr/semweb/checkCons', kısıtlamaismi)); 5.4.1.8 İlişkilerin Eşlenmesi Sistem dahilinde ilişkiler, birincil ve dışsal anahtarlar temel alınarak bulunmaktadır. Birincil ve ikincil anahtar bilgileri kısıtlamalarda tutulmaktadır. Tablolar ve kolonlar arasındaki ilişkileri tespit edebilmek için kısıtlamalar üzerinde kurallar oluşturulmuş ve kural indeksleriyle gerekli üçlüler elde edilmiştir. Yaratılan kurallar EK C’de gösterilmektedir. Bu çalışma kapsamında ele alınan ilişkiler şu şekildedir: referTable: Bir tablonun hangi tabloyu referans gösterdiğini belirtir. Birincil ya da dış anahtarlar yoluyla başka bir tablo referans gösterilebilir. referColumn: Bir kolonun hangi kolonu dışsal anahtar olarak kullandığını belirtmek için kullanılmaktadır. hasPrimaryKey: Bir tablonun birincil anahtarını ifade etmektedir. İlişkiler açısından bakıldığında ise bir tablonun birincil anahtarının başka bir tabloyu referans gösterdiği durumları inceleyebilmek için kullanılabilir. hasForeignKey: Bir tabloya ait dışsal anahtarların bulunabilmesi amacıyla kullanılmaktadır. 55 Örneğin bir tablonun hangi tabloyu referans gösterdiği şu şekilde bulunabilmektedir. SELECT x , y FROM TABLE(SDO_RDF_MATCH( '(?x :referTable ?y)', SDO_RDF_Models('semweb'), SDO_RDF_Rulebases('RDFS','semweb_rb'), SDO_RDF_Aliases(SDO_RDF_Alias(‘,'http://www.ege.edu.tr/semweb/')), null)); Çizelge 26: İlişkilerin Eşlenmesi Yukardaki sql hangi tabloların hangi tabloları referans gösterdiği bilgisini sonuç olarak döndürmektedir. 5.4.1.9 İlişkisel Veritabanındaki Anlamsallığın Eşlenmesi Bu bölüme kadar özellikle sistemde tablolar, kolonlar ve kısıtlamalar hakkında eşlemeler üzerinde duruldu. Şu bir gerçektir ki ilişkisel veritabanlarından ontolojilere otomatik olarak eşleme gerçekleştirirken bazı anlamsallıkların sistemde nasıl gösterileceği konusu bir muammadır. Örneğin bir tablonun, özellikle büyüklüğü nedeniyle, küçük özet tabloları oluşturulabilmektedir. Büyük tablo ile küçük tablonun arasındaki kalıtsal ilişki kısıtlamalar ile elde edilemeyebilmektedir. Büyük tablo ile küçük tablonun kolon isimleri farklı olmasına rağmen aynı değerlere sahip olabilir. Örneğin bir tablodaki(equipment_id) kalıt aldığı tablodaki (equipment_type_id) kolonuna karşılık gelebilir. Bu tarz problemleri çözebilmek için farklı yöntemler sunulmaktadır. Bunlardan bazıları verilerin eşleşip eşleşmediği konusunda yapılan analizlerle gerçekleştirilir. Ancak sadece değer bazlı yapılan analizler Web ortamının büyüklüğü göz önüne alındığında ve veritabanlarının giderek büyümesi nedeniyle gerçekçi değildir. Bir diğer yöntem ise sistemde sıklıkla kullanılan SQL sorgularının incelenmesiyle gerçekleştirilebilir. SQL sorguları ilişkisel veritabanındaki ilişkileri tanıma konusunda yardımcı olabilmektedir. Ancak hiç sorgulanmayan tablolar hakkında bilgi sahibi olmamız çok zordur. Ek olarak aralarında kalıt ilişkisi olan tablolar genellikle SQL’le birbirleriyle birleştirilmez. Çünkü bu tarz tablolar sistemlerde sorgunun performansını arttırmaya yönelik oluşturulmuş tablolardır. Bu tez kapsamında önerilen yöntem Oracle veri tabanındaki veri sözlüklerinin kullanılmasıdır. Veri sözlüklerinin gerçek değerlerinin elde edilebilmesi için aşağıdaki yordamların çağrılması gerekmektedir. • gather_table_stats • gather_index_stats 56 • gather_schema_stats • gather_database_stats • gather_stale_stats Yukarıdaki yordamlar sonucu oluşan kolon istatistiklerini aşağıdaki örnek sorgu ile inceleyebiliriz. SQL> SELECT column_name, num_distinct, low_value, 2 high_value, num_nulls "NULLS", num_buckets "BUCKETS" 3 FROM user_tab_col_statistics 4 WHERE table_name = 'EMPLOYEES' 5 AND column_name = 'SALARY'; Tablo istatistikleri ise şu şekilde bulunabilir. SELECT num_rows, blocks, empty_blocks, 2 avg_space, avg_row_len, sample_size 3 FROM dba_tables 4 WHERE table_name = 'ORDERS' AND owner = 'OE'; Bu iki sorgu sonucu elde ettiğimiz değerler ile sık kullanılan sqllerin incelenmesi sonucu gerçekleştirilecek yöntem örtülü kalmış kalıt ve ilişkileri bulunması açısından daha uygun olacaktır. İzleyecek çalışmalarda bu konular üzerinde çalışma yapılması öngörülmektedir. 5.4.1.10 Kural tabanları, Kurallar ve Kural İndeksleri Oracle RDF veri deposunda kural tabanları yaratıp bu kural tabanlarına ilgili kuralların girilmesiyle gerçekleşir. Kurallar tanımlandıktan sonra kural indeksleri yaratılır. Bir kural indeksi belirli model kümelerine belirli kural tabanlarını uygulanmasından çıkarsama yolu ile elde edilen üçlüleri içeren nesnelerdir. Tablolar ve kolonlar arasındaki ilişkileri tespit edebilmek için kısıtlamalar üzerinde kurallar oluşturulmuş ve kural indeksleriyle gerekli üçlüler elde edilmiştir. Yaratılan kurallar EK C’de gösterilmektedir. 57 Örneğin aşağıdaki girdi bir kolonun hangi kolonu referans gösterdiğinin bulunması amacıyla kullanılmaktadır. INSERT INTO mdsys.rdfr_semweb_rb VALUES ('referColumn', '(?a :foreignCons ?b) (?c :hasConstraint ?b) (?b :R_CONSTRAINT_NAME ?d) (?e :hasConstraint ?d)', NULL, '(?c :referColumn ?e)', sdo_rdf_aliases(sdo_rdf_alias(‘, 'http://www.ege.edu.tr/semweb/'))); Çizelge 27: Örnek kural tabanı oluşturulması Kural tabanları ve indekslerinin kullanılmasına örnek olarak bir tablonun hangi kolonunun hangi tablodaki hangi kolonunu dışsal anahtar olarak kullandığının bulunması gösterilebilir. SELECT x tabloismi,y kolonismi ,z referekolonsmi,t referetabloismi FROM TABLE(SDO_RDF_MATCH( '(?s :hasTable ?x) (?x :hasForeignKey ?y) (?y :referColumn ?z) (?t :hasColumn ?z)', SDO_RDF_Models(‘semweb’), SDO_RDF_Rulebases('RDFS','semweb_rb'), SDO_RDF_Aliases(SDO_RDF_Alias(‘,'http://www.ege.edu.tr/semweb/')), null)) Çizelge 28: Örnek kural tabanı sorgulanması 5.4.2 Verilerin Taşınması Verilerin taşınma işlemi ilişkisel veritabanındaki verilerin RDF şemadaki yapılar kullanılarak RDF üçlüleri şeklinde sisteme aktarılmasıdır. Bunun gerçekleşebilmesi için veritabanı kayıtları ontolojik örneklere eşlenmesi gerekmektedir. Bu adımın gerçekleşebilmesi için veri tabanı şemasının ontolojiye dönüşümünün tamamlanması gerekmektedir. Her bir örnek üçlüler şeklinde ORACLE RDF deposuna eklenir. Buradaki temel nokta her bir kayıt için “_BNSEQN” ön ekine sahip birer boş düğümün oluşturulmasıdır. Ek olarak veriler hücre tabanlı eklenmektedir. Bu demektir ki eğer bir tablonun 10 58 kolonu 100 kaydı var ise sonuç olarak 1000 tane girdi deyimi çalıştırılacaktır. Aynı zamanda 100 tane boş düğüm oluşturulacaktır. Böylelikle sorgular yardımıyla bir tablodaki istenen kolonların değerleri elde edilebilecektir. Aynı boş düğüme ait olan girdiler aynı kayıda aittir. Sistem sadece şemanın eşlenip verinin istenmediği durumlarda eşlenmemesini desteklemektedir. Verilerin eşlenmesi sırasındaki temel problem büyük miktarda veri barındıran sistemlerde çok yoğun girdi işleminin yapılmasına neden olmasıdır. İlk aşamada boş düğümün hangi tablo tipinde olduğu belirlenir. INSERT INTO semwebdata VALUES ( semweb_seq.nextval ,SDO_RDF_TRIPLE_S( modelismi ,boş düğüm, ‘http://www.w3.org/1999/02/22-rdf-syntax-ns#type’ ,tablo_uri ,modelid));' Çizelge 28: Verilerin taşınması için boş düğüm Diğer aşamada tabloya ait her bir hücre için aşağıdaki deyim çalıştırılır. INSERT INTO semwebdata VALUES (semweb_seq.nextval,SDO_RDF_TRIPLE_S(‘ modelismi ,boşdüğüm,kolonismi ,veri"^^veritipi ‘));'; Çizelge 29: Verilerin taşınması için hücrelerin eklenmesi Belirli bir kolona ya da tabloya ait eşlenmiş verilerin bulunması şu şekilde gerçekleşir: SELECT x,y,z,t,t$rdfLTYP FROM TABLE(SDO_RDF_MATCH( '(?s :hasTable ?x)(?x :hasColumn ?y)(?z ?y ?t)', SDO_RDF_Models('semweb'), null, SDO_RDF_Aliases(SDO_RDF_Alias(‘,'http://www.ege.edu.tr/semweb/')), null)); 59 Çizelge 30: Verilerin elde edilmesi ‘z’ her bir kayıt için yaratılan boş düğümü, ‘y’ kolon değerini, ‘t$rdfLTYP’ ise kolon değer tipini ifade etmektedir. 5.5 Oracle 10g RDF veri deposundan ilişkisel şemanın elde edilmesi İlişkisel şema yapıları ve verileri sisteme başarılı bir şekilde aktarıldıktan sonra kullanıcılar Oracle 10g RDF veri deposunu kullanarak şema yaratma ve veri girdi kodlarını elde edebilmektedirler. Bu kodlar başka bir sistem ya da şemada çalıştırılarak istenen yere taşınabilmektedir. Oluşturulan kodlar ilk eşlemede kullanılan şemanın birebir aynısını üretebilmektedir. Oracle 10g RDF veri deposundan ilişkisel şemanın elde edilmesi işlemi 4 aşamadan oluşmaktadır: - Tablo kodlarının elde edilmesi - Verilerin elde edilmesi - Indexlerin elde edilmesi - Birincil kısıtlamaların elde edilmesi - Dış anahtar kısıtlamaların elde edilmesi - Kontrol kısıtlama kodlarının elde edilmesi Kod oluşturma adımlarının sırası son derece önemlidir. Örneğin bir tablodaki birincil ve eşsiz kısıtlamaları için otomatik olarak eşsiz indeks oluşturulur. Eğer birincil veya eşsiz kısıtlama kodları index yaratma kodlarından önce gelirse kodlar bu indeksler otomatik olarak oluşturulacağı için aynı kolonlar üzerinde kullanıcı kendi yarattığı benzer özellikteki indeksler yaratılamaz. Ek olarak veriler girildikten sonra kısıtlamaların eklenmesi verilerin bir başka sisteme eklenme sırasındaki performansını arttıracaktır. 5.5.1 Tablo kodlarının elde edilmesi Tablo ve özellikleri Oracle RDF veri deposundan şu sorguyla elde edilir. SELECT s,a,b,c FROM TABLE(SDO_RDF_MATCH( '(?t :hasSchema ?s) (?s :hasTable ?a) (?a :tableDegree ?b) (?a :tableTablespace ?c)', SDO_RDF_Models(‘p_model'), null, 60 SDO_RDF_Aliases(SDO_RDF_Alias(‘,'http://www.ege.edu.tr/semweb/')), null))'; where upper(t) like upper(‘% p_dbname%'); and upper(s) like upper('%p_schema%'); Çizelge 31: Tablo kodlarının elde edilmesi Her bir tabloya ait kolonlar şu şekilde bulunmaktadır. SELECT b,c,d,e,f,g,trim(h) h FROM TABLE(SDO_RDF_MATCH( ‘(?t :hasSchema ?s)(?s :hasTable ?a) (?a :hasColumn ?b) (?b :columnDataType ?c) (?b :columnDataLength ?d) (?b :columnDataPrecision ?e) (?b :columnDataScale ?f) (?b :columnNullable ?g) (?b :columnDefaultValue ?h)', SDO_RDF_Models(p_model), null, SDO_RDF_Aliases(SDO_RDF_Alias(‘,'http://www.ege.edu.tr/semweb/')), null)) where upper(substr(t,instr(t,'/',-1)+1)) = upper('p_dbname')'; and upper(substr(s,instr(s,'/',-1)+1)) = upper('p_schema')'; and upper(substr(a,instr(a,'/',-1)+1)) = upper('p_table'); b:kolon ismi c:kolon veritipi d:kolon veri uzunluğu e:duyarlık,ondalıktan önceki uzunluk f:ondalık kısım uzunluğu g:null değer alıp alamayacağı Çizelge 32: Tablo kolon kodlarının elde edilmesi Bir kolon tipine göre sistemde tablo yaratma koduna dönüştürülür. Eğer kolonun varsayılan değeri var ise bu da kodlara aktarılır. Eğer veri tipi ‘NUMBER’ ise duyarlık ve ondalık kısımları kullanılacaktır. Ek olarak kolon formatı ‘tabloismi.kolonismi’ biçiminden ‘kolon’ ismi formatına dönüştürülmelidir. Sonuç olarak her bir tablonun oluşturma kodları parametre olarak verilen dosyaya aktarılır. 61 5.5.2 Verilerin elde edilmesi Tablo ve kolon yaratma kodları oluşturulduktan bir sonraki adım tablolara ait verilerin aktarılmasıdır. Buradki temel problem bir kayıttaki her bir hücre için birer girdinin sistemde yer almasıdır. Bir hücre girdisinin hangi kolona ait olduğunun ve bir boş düğümün hangi tabloya ait olduğunun bulunması gerekmektedir. Aynı boş düğüme ait olan girdiler tek bir girdi deyimine dönüştürülmelidir. Ek olarak kolon sıralarının da değerlerle aynı sırada olması gerekmektedir. Bir tabloya ait olan veriler aşağıdaki sorguyla bulunabilmektedir. SELECT x,y,z,t,t$rdfLTYP FROM TABLE(SDO_RDF_MATCH( '(?s :hasTable ?x)(?x :hasColumn ?y)(?z ?y ?t)', SDO_RDF_Models('p_model'), null, SDO_RDF_Aliases(SDO_RDF_Alias(‘‘,’http://www.ege.edu.tr/semweb/’)), null)) where upper(substr(s,instr(s,'/',-1)+1)) = upper('p_schema ‘) order by x,z; x: tablo ismi y: kolon ismi z:boş düğüm t:hücre değeri t$rdfLTYP: hücre değer tipi Çizelge 33: Veri girdi kodlarının elde edilmesi Sorgu sonucu elde edilen kümeler belirli dönüşümlerden geçirilerek girdi deyimlerine dönüştürülür ve parametre olarak belirtilen dosyaya yazılır. 5.5.3 Indekslerin elde edilmesi Indeksler şemalar için önemli bir yer tutmaktadır. İndekslerin RDF veri deposundan elde edilebilmesi sırasında en önemli nokta işlevsel indeksler, eşsiz indeksler ve Bitmap indexlerin birbirlerinden ayırt edilme şekilleridir. Özellikle işlevsel indeksler için deyimlerin düzgün bir şekilde aktarılmaları gerekmektedir. Ek olarak indeksler bir ya da birden çok kolonu içerecek şekilde oluşturulabilmektedir. Sistem tüm bu durumları göz önünde bulundurmalıdır. 62 SELECT distinct a,t,b,c,d,g,h,i FROM TABLE(SDO_RDF_MATCH( ‘(?s :hasTable ?a) (?a :hasIndex ?b) (?b :indexType ?c) (?b :indexUniqueness ?d) (?b :indexTablespace ?g) (?b :indexDescend ?h) (?b :indexExpression ?i)’, SDO_RDF_Models(‘p_model '), SDO_RDF_Rulebases(‘RDFS’,’semweb_rb’), SDO_RDF_Aliases(SDO_RDF_Alias(‘‘,’http://www.ege.edu.tr/semweb/’)), null))'; where upper(substr(s,instr(s,’/’,-1)+1)) = upper(‘' p_schema')'; order by b; Çizelge 34: Indeks kodlarının elde edilmesi Sorgu sonucu elde edilen indeks bilgileri belirli dönüşümlerden geçirilerek girdi deyimlerine dönüştürülür ve parametre olarak belirtilen dosyaya yazılır. 5.5.4 Birincil kısıtlamaların elde edilmesi Birincil anahtarlar birden çok kolondan oluşabildiği gibi birincil anahtarda kullanılan kolon aynı zamanda bir dış anahtar olabilmektedir. Kod yaratılma sırasında kural tabanları üzeride oluşturulan kural indeksleri kullanılarak birincil anahtarlar elde edilir. SELECT x,y FROM TABLE(SDO_RDF_MATCH( '(?s :hasTable ?x)(?x :hasPrimaryKey ?y)', SDO_RDF_Models(' p_model '), SDO_RDF_Rulebases('RDFS','semweb_rb'), SDO_RDF_Aliases(SDO_RDF_Alias('','http://www.ege.edu.tr/semweb/')), null)) where upper(substr(s,instr(s,'/',-1)+1)) = upper(' p_schema')'; order by x; Çizelge 35: Birincil kısıtlamaların elde edilmesi 63 5.5.6 Dış anahtar kısıtlamaların elde edilmesi Dış anahtarlar tablolar arasında bütünlüğün korumasında çok önemli bir yere sahiptir. Ek olarak tablolar arasındaki ilişkilerin bulunmasında da önemli bir role sahiptir. Dış anahtarlar bazı durumlarda aynı zamanda tablonun birincil anahtarı olabilmektedir. SELECT x,y,z,t FROM TABLE(SDO_RDF_MATCH( '(?s :hasTable ?x)(?x :hasForeignKey ?y) (?y :referColumn ?z) (?t :hasColumn ?z)', SDO_RDF_Models('p_model'), SDO_RDF_Rulebases(''RDFS'',''semweb_rb''), SDO_RDF_Aliases(SDO_RDF_Alias('''',''http://www.ege.edu.tr/semweb/'')), null))'; where upper(substr(s,instr(s,'/',-1)+1)) = upper('p_schema ') Çizelge 36: Dış anahtar kısıtlamaların elde edilmesi 5.5.7 Kontrol kısıtlama kodlarının elde edilmesi Kontrol kısıtlamaları bir kolondaki değerlerin belirli koşulları sağlamasının en basit yollarından biridir. Kontrol kısıtlamaları aşağıdaki sorguyla elde edilir. SELECT distinct a,t FROM TABLE(SDO_RDF_MATCH( '(?s :hasTable ?a)(?a :checkCons ?b)(?b :constraintCondition ?t)', SDO_RDF_Models('p_model'), null, SDO_RDF_Aliases(SDO_RDF_Alias('','http://www.ege.edu.tr/semweb/')), null)) where upper(substr(s,instr(s,'/',-1)+1)) = upper(' p_schema '); Çizelge 37: Kontrol kısıtlamaların elde edilmesi 64 6. İLGİLİ ÇALIŞMALAR 6.1 Veri Depolama Sistemleri Bu bölüm RDBM S(İlişkisel veritabanı Yönetim Sistemleri) ya da arka uçları temel alan ana anlamsal web veri depolama sistemlerinin özelliklerini özetlemektedir. Temel özellikler RDF ya da ontolojiler gibi şema desteği, çıkarsama, indeksleme, sabit değerlerin sorgulanması ve uygulama dili ya da altta yatan ilişkisel veritabanı sistemleri için bağımlılıklar ve gereksinimleri içermektedir. JENA Jena(Jena) MySQL PostgreSQL, Oracle, Interbase gibi birçok veritabanlarıyla JDBC ya da Sleepycat / Berkeley DB yollarıyla depolamamayı gerçekleştiren Java anlamsal web aracıdır. Desteklenen her bir veritabanı için optimizasyonu sağlamak amacıyla farklı yapılandırma dosyaları bulunmaktadır. Tek bir veritabanında birden çok veritabanının saklanabilmesi ya da depolanmış yordamların kullanılabilmesi gibi farklı seçenekler sunmaktadır. RDBMS APIsi diğer veritabanları için kolaylıkla özelleştirilebilir ve standart SQL ile çalışabilecek genel bir şemaya sahiptir. Performans yaklaşımları ve veritabanları analiz edilmiş ve optimize edilmiştir. Jena RDBMS arka ucu sadece JDBC ile doğrudan çalışabilecek şekilde sınırlandırılmıştır, ancak daha özelleştirilmiş RDBMS veritabanı depolama sistemleri optimize edilecek şekilde rahatlıkla yazılabilir. Jena şuan Anlamsal Web programlama araçları içerisinde en önde gelen araçlardandır ve şu an ikinci nesil ürünü kullanılmaktadır. Jena 2 Jena1’de karşılaşılan bazı problemlerin üstesinden gelebilmek için oluşturulmuştur. Özellikle şema tasarımı çoklu tablo birleşimleri yüzünden oluşan performans problemlerini aşabilmek için değiştirilmiştir. Ek olarak reifikasyonlar yüzünden depolamadaki gereksiz şişmeler de engellenmeye çalışılmıştır. Jena 1 normalize edilmiş üçlü depolama yöntemini tercih etmiştir. Bir deyim tablosu özne, nesne, yüklemlere ait referansların ve URIların ve sabitlerin gerçek değerlerinin tutulduğu iki ana tabloyu kullanmaktadır. Tasarım tekrarlanan değerlerin üçlülerde ne kadar kullanıldığına bakılmaksızın sadece bir kez depolanmasını sağladığı için yer anlamında etkindir. Ancak bir işlemi bulabilmek için üç yönlü bir birleştirmenin gerçekleştirilmesi gerekmekteydi. Ek olarak tek bir deyim tablosu çoklu veri kümeleri için ölçeklenebilir değildi. 65 Jena 2 denormalize edilmiş çoklu model üçlü depolama yaklaşımını kullanır. Modeller farklı tablolarda tutulur ve her bir model belirtilen deyimler ve reifike edilmiş deyimleri ayrı tablolarda tutar. Bu yaklaşımlar opsiyoneldir ve yapılandırma sırasında değiştirilebilir. Belirtilen deyimlerin tutulduğu tablo üçlülerdeki özne, nesne ve yüklemlerin gerçek değerlerini depolar. Saklanan değerlerin farklı üçlülerde tekrardan girilmesi ile birlikte metin değerleri birden fazla tekrarlanabilir ve gereksiz şekilde tutulmuş olur. Jena 2 böylelikle Jena 1’e göre daha fazla yer kaplar ancak tablo birleştirme sayılarının daha az sayıda olması sorgulama performanslarını olumlu şekilde etkilemektedir. Reife edilmiş deyimler yüklemsınıf tablosunda tutulur ve StmtURI(reife edilmiş deyim), “rdf:subject”, “rdf:predicate”, “rdf:object”, ve rdf:type kolonlarına sahiptir. Tüm özniteliklere sahip bir kayıt reife edilmiş bir üçlüyü temsil eder. Belirtilen ve reife edilen deyimlere ek olarak Jena 2 çizge yaratımı sırasında deyimler için de bir tablo yaratılması şeklinde yapılandırılabilir. Bu tablolar belirli yüklemler için özne-değer ikililerini kaydeder. Tablo kolonları özne ve tabloda temsil edilecek her bir yüklemi barındırmaktadır. Örnek olarak Dublin Core yüklem tablosu “subject”, “dc:title”, “dc:Publisher”, ve “dc:description” kolonlarını içerebilir. Tek bir kayıt ortak bir özne için yüklem değerlerini kaydeder. Yüklem tabloları yüklem URIlarını içermediği için depolamada en uygun indirgeme seçeneğini sağlamaktadır. Ek olarak ortak olarak erişilen yüklemleri bir arada tutmaya çalışır, böylelikle performans kazancı sağlar. Sesame ve SAIL Sesame (Sesame) RDF e RDF şemanın depolanması ve sorgulanabilmesi için geliştirilmiş bir mimaridir. Farklı güçlü yanlara ve zayıflıklara sahip veritabanları gibi depolama sistemlerini kullanır. Bu sisemler çeşitli şekiller RDF verisini depolamak için kullanılabilir. Depolama ve çıkarsama arayüzü(SAIL) RDF’e özel metotlarla veritabanı api’si arasında arayüz olarak görev alır. Ayrıca bellekte kalıcı depolama işlemini gerçekleştirmek için dosyaları kullanan SAIL uygulaması bulunmaktadır. SAIL ayrıca RQL sorgulama dilini, yönetim(RDF verisinin ve şemasının yüklenmesi, silinmesi) ve RDF verisinin RDF/XML formatında dışarı verebilme gibi özellikleri içinde barındıran sesame modülleri için arayüzler sunmaktadır. SAIL, RDF şema anlamsalığını ve veri akış işlemini destekleyen yüksey düzeyli ve lightweight java APIsidir. SAIL herhangi bir RDBMS, ODBMS, var olan RDF depoları, RDF dosyaları ya da ağ servislerinin üzerinde çalışabilmektedir. Sesame JDBC’ye sahip her türlü veritabanını desteklemektedir ve şuan PostgreSQL, MySQL ve Oracle vertabanlarını desteklemektedir. 66 The PostgreSQL deposu nesne-ilişkisel RDBMS özelliklerini kullanarak tablolar arasında alt tablo ilşkisini destekler. Böylelikle RDF şema sınıf ve özelliklerin sınıflandırılması için uygundur. Mysql deposu sınıflandırmayı bir baksa mekanizma kullanarak destekler. SAIL in “Querying Community Web Portals(Karvounarakis et al.)” dokümanından esinlenrek dinamik veritabanı şeması kullanmaktadır. Bu yapıda her bir sınıf alt sınıf ilişkisi için yeni tablolar eklenmiş ve böylelikle tablonunun üst tablaların alt tablosu olması sağlanmıştır. Aynı durum özellikler için de geçerlidir. Sesame ek olarak SQL şeması üzerinde doğrudan çalışabilecek RDF model teori çıkarsama özelliğine de sahiptir. Kullanılmakta olan tabloların bilgilerini kullanmasına rağmen RDBMS’ten bağımsızdır. Çıkarsama aracının bir diğer versiyonunda deyimlerin çıkarsanmasında kullanılan diğer deyimler de izlenmektedir. Bu sisteme “Truth Maintainance System (TMS”) adı verilmiştir. Sesame’da örneğin PostgreSQL kaynağı yavaştır ve özellikle tablo yaratılması masraflı olduğu için şema değişmektedir. Ek olarak var olan iki sınıf arasında alt sınıflar eklemek çok yavaştır, çünkü bu işlem var olan tablolar üzerinde gerçekleştirilemez. Sesame SAIL Sorgulama Modülü Sorgulama modülü RQL sorgusunu bir modele dönüştürür ve bu modeli başka bir modele optimize eder. Değerlendirme RQL sorgulama motoru içinde SAIL sistemine çağrılar şeklinde gerçekleşir. RQL sorgusu kendi başına veri havuzuna iletilebilirdi ancak bu şekilde sadece RQL destekleyen veri havuzlarına erişme şeklinde kendini kısıtlamış olacaktı. RDFSuite örneğin bunun tam ters bir yaklaşım sergiler ve sadece RQL destekleyen veri havuzlarını kullanmaktadır. Sesame SAIL Yönetim Modülü Bu modül veri havuzuna veri eklenmesi, veri havuzundan veri silinmesi, RDF parçalayıcıdan gelen veriler gibi veri akımlarının eklenmesi gibi özellikler sağlar ve deyimlerin şemalarıyla uygunluğunun kontrol edilmesi ve çıkarsama yapılabilmesi için RDF şema bilgisini içermektedir. Sesame SAIL Dış veri Aktarma Modülü 67 Veri havuzunu RDF veri değişim biçimi olan RDF/XML şekline getirilmesinde görev alır. KAON KAONprojesi “Karlsruhe Ontology and Semantic Web Infrastructure Developer's Guide(KAON)”da tanımlandığı üzere verinin ilişkisel veri tabanında JDBC yardımıyla depolanabildiği J2EE uygulama sunucuları üzerinde kullanılabilen RDF veri havuzu sunmaktadır. Varsayılan sürerlilik EJB kabı ile sağlanmaktadır ancak gelişmiş “Mühendislik” ilişkisel şema ontolojiler oluşturulurken Mühendislik Sunucusunun parçası olarak sunulmaktadır. Bu yapıda ham içerik üzerinde kompleks indeksleme gerçekleştirilebilir. Kaon sunucusu yüksek seviyede ontolojiksel ara yüzler sunmaktadır. Bu ara yüzler yardımıyla üçlülere erişim sağlanabilmektedir. Ek olarak yüksek seviyede mantıksallar çıkarsama için eklenebilir. Parka Veritabanı Parka veritabanı(PARKA-DB) Praka-KB’nin bir parçası olarak anlamsal ağlar temel alınarak geliştirilmiş bir bilgi gösterim sistemidir. İlişkisel veritabanı altında yapıları kullanarak katmanlaşmıştır. Operasyonların daha kısa sürede gerçekleştirilebilmesi için yüklemler için sabit tablo boyutları kullanmaktadır ve her zaman bellekte depolanan sınıflar,yüklemlere ait kalıtsallığı işleyebilmek için optimize yapılara sahiptir. Yüklem tabloları disk ve bellek arasında ihtiyaca göre yer değiştirilir. RDF Suit ICS-FORTH’a ait Java RDFSuite(RDFSuite) ORDBMS modeli temel alınarak kalıcı bir depo yaratmayı hedeflemiştir. Temelde iki yaklaşım bulunmaktadır: genel depo ya da uygulamaya özel RDBMS şemaları. RDF üst verisinin (SQL3) nesne-ilişkisel gösterimini yaratabilmek için şema bilgisi kullanmaktadır. Sınıf, özellik, altsınıf, altözellik ve kullanılan RDF şema için belirli sınıf ve özelliklere ait tablolara sahiptir. Ek olarak sabit değerler için XML şema veri tiplerine, ilkel değerleri gruplama ve filtreleme özelliğine ve sıralama yeteneğine sahiptir. 68 TAP TAP Projesi(TAP Project, 2002) bir Apache modülü olarak C dilinde yazılmıştır ve RDF depolama sorgulama, ağ/web servisleri APIsi ve PERL ve Java dillerinde API’ler sunmaktadır.Ek olarak RDF şema altsınıf, altözellik sorgulama ve indeksleme konusunda BerkeleyDB deposu ya da MySQL üzerinde etkin bir çözüm sunmaktadır. MySql şeması TAP Bilgi Tabanı(TAP Knowlege Base, 2002) için optimize edilmiştir ancak farklı şemaları indeksleyebilecek şekilde özelleştirilebilmektedir. SOAP XML arayüzünde hazırlanmış GetData adında sorgulama diline sahiptir. Tez kapsamında Oracle RDF Veri deposu kullanılmaktadır. Oracle RDF veri deposu ölçeklenebilir yapısı, grafiksel verilerin depolanmasına yönelik yetenekleriyle diğer sistemlerden ayrılmaktadır. SDO_RDF_MATCH fonksiyonu Oracle mimarisinin sunduğu en önemli katkılardan biridir. Bu fonksiyon yardımıyla herhangi bir ilişkisel veri tabanı tablosu ile Oracle RDF veri deposundaki ontolojiksel varlıklar birlikte sorgulanmaktadır. Ek olarak bu fonksiyon ile çıkarsama sonucu elde edilmiş ontoloji varlıkları da sorgulanabilmektedir. Oracle RDF veri deposunun bir temel özelliği de RDF kural tabanları üzerinde tanımlanan kurallar yardımı ile rahat bir şekilde çıkarsama yapılabilmesine imkan sunan yapılara sahip olmasıdır. Bu yapının en büyük eksikliği, kurallarda yapılan bir değişiklikte tüm kural indeksinin baştan yaratılmasını gerektirmesidir. 6.2 Ontoloji Eşleme Sistemleri İlişkisel Veriden RDFS Modele (“From Relational Data to RDFS Models”) FDR2(Korotkiy ve Top) ilişkisel verilerin RDF/S yardımıyla daha önce tanımlanmış ontolojiyle bağlantısının tanımlanması ve gerçekleştirilmesi konu edilmiştir. Daha çok elektronik çizelgelerde saklanan ilişkisel verinin işlenmesi hedeflenmiştir. Buradaki temel amaç ilişkisel verinin ontoloji sorgularıyla birlikte sorgulanabilmesinin sağlanmasıdır. Ek olarak RDF/S e dönüştürülüş halinden tekrar ilişkisel veri elde edilebilmelidir. Bu yaklaşım doğrultusunda gerçek verinin yapısal üst verileri elde edilmeye çalışılmıştır. FDR2 sisteminde ilişkisel veri ve ontoloji sözdizimsel ve yapısal olarak birbirleriyle uygun halde olmalıdırlar. Bu yüzden ilk aşama tablolar halinde tutulan ilişkisel verinin şemasının elde edilmesidir. İkinci aşamada tablo verileri RDF halinde elde edilen ilişkisel şema cinsinden ifade edilmelidir. Üçüncü aşamada ilişkisel şemadaki varlıkların alan ontolojisiyle kullanıcı yardımıyla bağlantı kurulması işlemidir. 69 FDR2 sistemi ilişkisel verilerin ontolojilere eşlenmesi konusunda örnek bir yaklaşım sergilese de ilkel elektronik çizelgelerde saklanan ilişkisel verinin anlamsallığının elde edilmesi doğru bir yaklaşım sunmamaktadır. Günümüz bilgi teknolojileri düşünüldüğünde ilişkisel verilerin bu tarz çizelgelerde tutulamayacağı açıktır. Ek olarak eğer çizelgede birden çok tablo var ise bunların aralarındaki ilişkilerin nasıl ifade edileceği net bir şekilde ifade edilmemiştir. İki yapı arasındaki ilişki çizelgelerde belirtilemediği gibi hangi kolonun birincil hangi kolonun dışsal anahtar olacağı bilgisinin alınabileceği bir yapı çizelgelerde mevcut değildir. Bu yüzden karmaşık ilişkisel veri şemalarının bu sistemle ifade edilemeyeceği açıktır. Ek olarak yapısal problemler de mevcuttur. Örneğin bir tablodaki üç kolonun(kitap, yazar, editör) aralarındaki ilişkileri ifade edebilmek için kartezyen çarpım kullanılmıştır. Bu da bir tablodaki kolon sayısının çok olduğu durumlarda gereksiz çoklamalara neden olacaktır ve performans kaybı yaratacaktır. Anlamsal Web verilerinin İlişkisel veri tabanlarıyla eşlenmesi (“SWAD-Europe Deliverable 10.2: Mapping Semantic Web Data with RDBMSes”) SWAD (SWAD) , RDF üçlülerinin ilişkisel veritabanlarında saklanması konusunda bir yaklaşım sunmasının yanı sıra ilişkisel veritabanlarının RDF’e eşlenmesi konusunda da bir yaklaşım sunmaktadır. İlişkisel sistemdeki bir tablo tarafından ifade edilen özellikler boş düğümler ya da özellikler olarak ifade edilmektedir. Bu yaklaşım özellikler bir varlığı ifade edebilmek için belirli bir URIref’in var olmadığı durumlarda kullanılabilmektedir. Böylelikle bir kayıt RDF N-TRIPLE biçiminde şu şekilde gösterilebilmektedir. _:x(p1, ..., pn) <eg:p1> p1 . ... _:x(p1, ..., pn) <eg:pn> pn . _:x(p1, ..., pn) <eg:a1> a1 . ... _:x(p1, ..., pn) <eg:am> am . Burada _:x(p1, ..., pn) bir boş düğümü ifade etmektedir. Bir çizgeyi seri hale getirebilmek için bu varlığın birincil anahtarı kullanılarak bir isimlendirme kullanılabilir. Tabloların tam olarak normalize olmadığı durumlarda bire-bir ilişki halindeki varlıklar aynı ilişki tarafından tanımlanabilir. Örneğin aj ... ak öznitelikleri farklı bir varlığı tanımladığı varsayılırsa aşağıdaki RDF daha doğal bir ifade olabilir. 70 _:x(p1, ..., pn) <eg:r1> _:y(p1, ..., pn) . _:y(p1, ..., pn) <eg:aj> aj . ... _:y(p1, ..., pn) <eg:ak> ak . Burada _:y(p1, ..., pn) benzer şekilde yaratılmış ikinci bir boş düğümdür ve kaynağı belirleyebilmek için gerekli bilgiye sahiptir. Bu tarz denormalizasyonlar üretim sistemlerinde sıkça görülen bir yapıdır. Altyapı olarak kullanılan ER çizeneklerine başvurulası ya da ilgi alanına özel bilginin kullanılması birden çok varlığın tek bir ilişkide temsil edilebilmesi için verilecek karar için önemlidir. Yukarıdaki örneklerden de görüleceği üzere <eg:p1> ... <eg:am> yay etiketleri bir kaynağı özniteliklerine bağlamak için kullanılmıştır. Eşleştirme işlemi için daha uygun bir öznitelik isimlendirme yöntemi kullanmak daha doğru olacaktır. Aynı özellik etiketinin birden çok kaynakta doğal olarak kullanılabileceği de açıktır. Bu çalışmada ek olarak dışsal anahtarlar ve birden çok tablo konusuna değinilmiştir. Örneğin: Table 1: (p1, ..., pn, a1, ..., ar) Table 2: (f1, ..., fn, b1, ..., bs) Burada (fi) dışsal anahtarı ifade etmektedir. Bu konuda en basit yaklaşım birden çok yayın yaratılmasıdır. Tablo 2 de (fi) = (pi) olan her kayıt için aşağıdaki oluşturulur. _:x(p1, ..., pn) <eg:b1> b1 . ... _:x(p1, ..., pn) <eg:bs> bs . Ancak yukarıdaki yaklaşım bir çok durumda yanlıştır. Tablo1 ve tablo2 Bire-çok ilişkinin var olduğu durumlarda tablo2deki çoklu kayıtlardan oluşturulan üçlülerin birbirlerinden ayırt edilmesi mümkün değildir. Bu sebeple çalışmada tablo 2deki her bir kayıt için boş düğüm oluşturulmasını öngören bir yapı sunulmuştur. Tablo 2deki (fi) = (pi) denklemini sağlayan her bir kayıt _:x(p1, ..., pn) <eg:t1t2> _:y(p1, ..., pn) . 71 _:y(p1, ..., pn) <eg:b1> b1 . ... _:y(p1, ..., pn) <eg:bs> bs . Burada <eg:t1t2> tablo 1de tanımlanan varlığı tablo2deki değerler ile eşleyen bir yaydır. Ek olarak RDF ve RDFs daha etkin dillerde var olan kardinaliti kısıtlamaları konusunda pek bir şey ifade etmez. SWAD raporu daha çok RDF verilerinin eşlenmesi konusunda bir yaklaşım sunmaktadır. İlişkisel şemadan RDFS üst verisine eşlenebilmesi konusunda bir yaklaşım sunmamaktadır. Ayrıca kap yapıları da yaklaşımda kullanılmamıştır. Bu yaklaşımda en temel eksiklik üst verinin eşlenmesi konusunda bir yaklaşım sunmamasıdır. Ek olarak ilişkisel tablo verileri RDF’e eşlendikten sonra tekrar ilişkisel veri sistemine geri dönüştürülebilmesi için bir yaklaşım sunmamaktadır. Ek olarak bir tabloda birden çok birincil anahtar ve ya dışsal anahtarın olduğu durumlarda ve tablonun sadece dışsal anahtara sahip olduğu durumlarda neler yapılması gerektiği konusunda bir yaklaşım sergilememektedir. Ek olarak ‘NULL’ değerlerin nasıl ifade edilmesi gerektiği konusu pek açık değildir ve uygulamada anlam kazandırılması gerektiği belirtilmiştir , bud a eşleştirme mantığına uygun bir yaklaşım olmamaktadır. Aynı zamanda iki tablo arasındaki ilişkinin şemada tanımlanmadığı durumlarda neler yapılabileceği konusunu ele almamıştır. İlişkisel Verilerin Anlamsal Web’de Sergilemek “Cross ile Exposing relational data on the Semantic Web with CROSS” CROSS(Champin et al., 2005) bir ilişkisel veritabanının OWL tanımının gerçekleştirilmesi ve gerçekleştirilen tanımın ek OWL deyimleriyle zenginleştirilmesine imkan tanıyan bir sistem sunmaktadır. Bu sistem ile amaçlanan uygulamalarda bir tanesi de OWL’s eşlenen ilişkisel veritabanı ile diğer eşlenmiş ilişkisel veritabanları ve OWL veri kaynakları ile arabuluculuk işlevini gerçekleştirmektir. CROSS tasarımında ilişkisel veritabanının dönüştürülmesi tam otomatik olarak gerçekleştirilmesi ve daha sonra özelleştirme ya kurulum ayarlarının yapılmasına imkan tanıyan bir mimariyi kullanmaktadır. Brada kullanıcıların hedef dili OWL dilini öğrenmeleri gerekmektedir. Bu yaklaşımda özelleştirme işlemi artan şekilde gerçekleştirilebilmektedir, yeni tanımların girilmesi daha hızlıdır çünkü tüm eşleme işleminin tekrar çalıştırılması gerekmez. Kurulum ve ya özelleştirme işlemi veri kaynağı ile ek bilgi sisteme girilir. DBMS tarafından ele alınamayan bilgi ve kısıtlamalar genellikle uygulama kodları, kullanıcı ara yüzleri ve uygulama dokümantasyonları ile çözülmektedir. Veritabanı yapısında ya da anlamsallığında 72 yapılacak değişiklikler uygulamaya yansıtılabilir ama bu daha çok merkezi sistemlerde gerçekleştirilebilir. Web ortamı düşünüldüğünde bunu gerçekleştirmek zordur çünkü bilgiyi kullanan etmenler daha çok farklı yerlerde bulunurlar ve bağımsızdırlar. Cross tarafından sağlanan bilgi veritabanı ile ilgili tanımları en açık şekilde ifade eder ve veritabanı hakkında sabit bilgileri içerir. Cross platformu çevirme ve sarmalama olarak iki yapıyı sunmaktadır. Çevirme işlemi statik bir işlem iken sarım işlemi ie belirli bir sorgu gerçekleştiğinde dinamik olarak gerçekleşen bir işlemdir. Cross prototipinde ilişkisel şema evirme işlemine tabi tutulmuştur. Bu yaklaşım ilişkisel şemanın çoğunlukla pek değişime uğramadığını varsaymaktadır. Veriler ise sarma işlemine tabi tutulmaktadır çünkü veri sıklıkla değişmektedir ve genellikle verinin saklanması ve güncellenmesi için çok büyüktür. Cross ile dönüştürülen OWL yapısının üç bileşeni bulunmaktadır. Bunlar şema, veri ve ek bilgilerdir. Şema ve veri, ilişkisel veritabanı şemasının ve verilerin otomatik olarak dönüştürülmesi ile elde edilir. Ek bilgi bileşeni ise ilişkisel yapılardan otomatik olarak elde edilemeyen ve kullanıcılar tarafından elle girilen bilgileri içerir. Kullanıcıların otomatik dönüştürme işlemine müdahale etmeleri sistem tarafından engellenmiştir. Şema ve veri bileşenleri daha çok veritabanının kendisine ait olan bilgileri, ek bilgi bileşeni ise OWL çıkarsamaları için daha çok durum elde edilmesini sağlayabilmek amacıyla kullanılmaktadır. Çevrim işlemi sırasında her bir tablo bir sınıf ve her kayıt da bu sınıfın örnekleri şeklinde oluşturulur. Ayrıca her bir tablo ‘same-t’ nesne özelliği ile ilişkilendirilir. Her bir kayıt örneği de kendisini işaret eden bir ‘same-t’ özelliğine sahiptir. Cross sisteminde kolon değerleri doğrudan kayıtlarla ilişkili değildir ama hücreler tarafından tutulur. Böylelikle her bir kolon için bir nesne özelliği karşılık gelir ve kolona karşılık gelen hücre örneği ile kayıt örneği arasında bağlantı kurmak için kullanılmaktadır. Şemada ilişkisel kolonların genel özniteliklerini ifade edebilmek için ve şemada belirtilen özel kısıtlamalar için uygun aksiyomlar da bulunmaktadır. Son olarak da her bir dışsal anahtar bir nesne özelliğine dönüştürülür ve iki kayıt örneğini birbirleriyle ilişkilendirilmesini hedefler. Kolonlarla birlikte özellik ile ilgili uygun aksiyomları da şema bileşenine ekler. Şema ve veri bileşeni ilişkisel veritabanından otomatik olarak oluşturulur ve sadece ilişkisel yapının çevrimini oluşturur. Ek bilgi bileşeni ise kullanıcı tarafından bilgilerin çıkartıldığı bileşendir. İlk iki kısım sadece kullanıcılar tarafından değil ek olarak çıkarsama motorları tarafından 73 kullanılabilmektedir. Bu bileşen dahilinde başka ontolojilerden terimlerle tanımlanan sınıflar ilişkilendirilebilir. Ek olarak birden çok kolonun tek bir kolona karşılık gelebildiği(ör: ad,soyadı kolonları birleştirilip ad soyadı) durumlarda kolonların birleştirilmesi gerçekleştirilebilir. Sistemde OWL dilinin kullanılmasıyla kardinalitiler de eklenebilmektedir. Ek olarak sistemde tablolar arasında altsınıf üst sınıf ilişkileri de kullanıcılar tarafından tanımlanabilmektedir. Cross ilişkisel veritabanından ontolojilere çevrim konusunda güzel bir yaklaşım sunmaktadır. İlişkisel şemanın ontolojilere otomatik olarak çevrimi çoğu durumda sistem hakkındaki tüm bilgiyi içermez. Bir miktar bilgi uygulamalarda, sql sorgularında ve kullanıcı dokümantasyonlarında tutulmaktadır. Örneğin alt sınıf üst sınıf ilişkilerinin otomatik olarak çıkarsanması tam olarak doğru sonuçlar vermemektedir. Cross bu sebeple kullanıcıyı devreye sokup bu tarz bilgilerin kullanıcılar tarafından sağlanmasını desteklemiştir. Ancak bu konuda temel problem kullanıcıların OwL dilini bilmelerini gerektirmesidir. Kullanıcıların OWL dilini bilmesinin beklenmesi çok doğru bir yaklaşım değildir. Ek olarak kardinalitelerden başlayarak alt sınıf üst sınıf ilişkilerinin belirlenmesine kadar çoğu bilgi kullanıcı tarafından ele alınmaktadır. Bu da hatalara neden olabilecektir.Bunun yanı sıra dönüştürülen OWL ontolojilerden veritabanı şemasına geri dönmek istendiği taktirde nasıl bir yaklaşım sergilenmesi gerektiği de açıklanmamıştır. Bir diğer problem de oluşturulan ontolojilerin saklanabilmesi ve bakım işlemleridir. Örneğin veritabanı şemasında yapılan bir değişikliğin sistemi nasıl etkileyeceği, böyle bir durumda sadece değişikliklerin mi yoksa tüm şemanın mı baştan çevrim işlemine tabi tutulacağı net olarak ifade edilmemiştir. İlişkisel OWL OWL temel alan veri ve şema gösterim formatı “Relational.OWL - A Data and Schema Representation Format Based on OWL” Bu çalışmada(Laborda ve Conrad, 2004) ilişkisel şema ve verilerin OWL dili ile gösterim formatının hazırlanması hedeflenmiştir. OWL dilinde hazırlanmış olan bu gösterim uzak veritabanı sistemleri arasında varlıkların değiş tokuşu için uygun halde gerçekleştirilmesi amacını taşımaktadır. OWL fikir olarak Anlamsal Web’te sadece verinin değil verinin yorumunun(biçim,kaynak,kullanım vs) da gösterimini sağlamak amacıyla oluşturulmuştur. Böylelikle uzak veritabanları her iki tarafta da OWL kullanarak yeni bir veri değişimi formatına ihtiyaç duymadan birbirlerini anlayabilmiş olurlar. Bu xml diliyle sağlanamayacak bir özelliktir. Bu yaklaşım çoklu veritabanı sistemleri, bileşen veritabanlarının şema ve veriyi paylaştığı sistemlerde yaygın olarak kullanılabilecektir. 74 RDF verisinin ilişkisel şemalarda saklanmasının ve ilişkisel verilerin RDF’e çevrilmesi işlemine aksi bir yaklaşım olarak bu yaklaşım veritabanı verisinin ve şema bileşenlerinin OWL dilini temel alan ortak bir ara dil ile gösterimini hedeflemektedir. Bir diğer ifadeyle bu çalışma ile veritabanında depolanan şema ve veriler için OWL bilgi gösterim tekniklerini kullanan bir gösterim formatı oluşturulmuştur. Çalışma sonucunda herhangi bir sağlayıcıya bağlı kalmaksızın herhangi bir ilişkisel veritabanını ait şemayı daima aynı tarzda tanımlamak ve paylaşmak mümkün olacaktır. Sonuç olarak model 3 katmandan oluşmaktadır. En üst seviyede en soyut katman İlişkisel OWL’dır. Bir alt katman ise ilişkisel OWL’I kullanarak oluşturulan ontoloji katmanıdır ve belirli bir ilişkisel veritabanına ait şemanın gösterimi için kullanılmaktadır. En alt katmanda ise ikinci katmandaki ontoloji kullanılarak hazırlanan veri katmanı bulunmaktadır. İlişkisel owl en üst ve soyut düzeyde üst veri bilgisini içermektedir ve bu üst verinin kaynağı daha önceden sistem tarafından tanımlanmış veri sözlüğü ile ifade edilen sistem tablolarından alınmıştır. Bunun nedeni çok büyük miktardaki verinin sisteme özel olması ve anlamsal gösterim için uygun olmamasıdır. Seçilen üst veri gerçek verinin yorumlanabilmesi için vazgeçilmezdir. Ek olarak şema varlıkları rahatlıkla genişletilebilmektedir. Sonuç olarak ilişkisel owl ontolojisine veri sözlüklerinde yer alan tablolar,kolonlar, birincil ve dışsal anahtarlar ve veri tipleri barındırılmaktadır. Bir sonraki aşamada ilişkisel veritabanı şemasını soyut olarak tanımlayan bir owl ontolojisine ihtiyaç duyulmaktadır. Bu owl gösterimi ilişkisel owl’a erişimi olan ve owl işleyebilme yeteneğine sahip herhangi bir uzak veritabanı ya da uygulama tarafından kullanılabilmelidir. Bu gösterim şekli veri varlıklarının gösterimi için uygun olan gösterim biçimini yaratabilmek için temel ontoloji olarak kullanılacaktır. İlişkisel veritabanına ait şemanın tanımlanabilmesi için OWL sınıfları merkezi olarak tanımlanmalıdır, böylelikle bir veritabanını tanımlayan herhangi bir doküman rahatlıkla bu sınıfları referans olarak kullanabilecektir. Tablo ya da kolon gibi sınıfların soyut tanımları bilginin gösterimi için merkezi bir role sahiptir. Ek olarak sınıflar arası muhtemel ilişkilerin tanımlanması gerekmektedir. Bu soyut şema bileşenleri ve aralarındaki ilişkilerin merkezi gösterimi ilişkisel owl olarak ifade edilmektedir. Benzer şekilde RDF ya da OWL kullanılarak başka bir yerde geliştirilen sistemler ilişkisel owl’a owl:equivalentClass ya da owl:equivalentProperty ilişkileri kullanarak bağlanabilmektedir. Sonuç olarak bir ontoloji kullanılarak yapılan veri tabanı gösterimleri birbiriyle ilişkili başka gösterim formatlarında hazırlanmış dokümanları ele alabilmektedir. Sonuç olarak ilişkisel owl yaklaşımı ilişkisel veritabanlarının ontolojilere eşlenebilmesi için çok temel bir yaklaşım sergilemiştir. Bu yaklaşım ile birlikte çıkarsama işlemine gerek duymadan sadece ontolojilerin birbiriyle anlamsal olarak eşlenmesiyle ontolojiler değiş tokuşa uygun hale getirilmiştir. Bu 75 yaklaşımda tablo alanları(“tablespace”) , indeksler, tetikler ele alınmamıştır. İlişkisel şemadan ontolojiye çevrim konusunda bilgi verilse de yaratılan ontoloji ve oluşan veri gösterimlerinin nasıl tekrar ilişkisel şemaya dönüştürüleceği konusunda bir bilgi vermemektedir. Ek olarak sistemlerin çoğunda var olan “not null” kısıtlamaları, “check” kısıtlamaları ve birden çok dışsal anahtara sahip tablolar için bir yaklaşım sunulmamıştır. Örneğin tablolara ait birincil anahtarlar bir kap içinde tutulmaktadır ancak dışsal anahtarlar bir kap yapısı altında tutulmamaktadır. Bunun yanı sıra tablolar arası alt sınıf üst sınıf ilişkileri, kardinalitiler için bir çalışma yapılmamıştır. Son olarak da yaklaşım sonuçta ortaya çıkan ontoloji üzerinde çıkarsama yapılmasına engel olan OWL-Full üst veri modelleme yeteneklerini kullanmaktadır. Veri odaklı Web sitelerinin Anlamsal Web’e aktarılması “Migrating data-intensive Web Sites into the Semantic Web” Veritabanından yaratılan web siteleri makineler tarafından anlaşılabilir bir halde değildir ve daha çok kullanıcıların tüketimi için bilgi sunulmuştur(Stojanovic et al., 2002). Bu bildiride veri odaklı web sitelerinin otomatik olarak anlamsal web’e dâhil edilebilmesi için bir yaklaşım sunulmaktadır. Bu hedefi gerçekleştirebilmek için ilişkisel veritabanı şemaları ontolojilere dönüştürülür, dönüştürülen ontolojiler veritabanı örneklerinden otomatik olarak türetilen üst veri yorumları için alt yapı sunmaktadır. Önerilen yaklaşımın avantajlarından biri burada yaratılan anlamsal yorumlamanın ucuz ve hızlı olmasıdır. Ayrıca Dinamik web sayfalarının içeriği makineler tarafından anlaşılır hale getirilmiş olacaktır. Ek olarak üst veri gösterimi ile birlikte bilgi sistemleri arasında içerik bilgisinin iletişimi basitleştirilmiş olacaktır. Eşleme işlemi veritabanı anlamsallığını ek ontoloji varlıkları kullanarak geliştirmektedir. Veri tabanlarından ontoloji yaratılma işlemi sırasında şu adımlar izlenmektedir: 1- İlişkisel şemadaki bilgiyi(tablolar, kolonlar, kolon tipleri, birincil anahtarlar, dışsal anahtarlar) elde etmek 2-Elde edilen bilgi analiz edilir ve eşleme kuralları kullanılarak ontolojik varlıkların yaratılması 3-Kurallar uygulanarak ontolojinin yaratılması. Çevrim işlemi tüm ontoloji varlıklarını yaratmalı, kavramları sınıflandırmalı, yardımcı ilişkileri tespit etmeli ve gereksiz bilgiyi silmelidir. 4-Elde edilen ontoloji değerlendirilir, onaylanır ve arıtılır. 5-Bilgi tabanının oluşturulması(veri aktarımı) 76 Geliştirilen sistem her aşamada yardım sağlamaktadır. Aslında tersine mühendisliğin tam olarak otomatik olarak gerçekleştiği söylenemez. Bazı durumlarda özellikle etki alanı anlamsallığının çıkarsanamadığı durumlarda kullanıcı etkileşimine ihtiyaç duyulmaktadır. Kurallar hem tablolar hem de kalıtsallığın tespiti amacıyla kullanılmıştır. Tablolar için kurallar şu şekildedir: Kural 1: bazı tablolar sadece tablolar arası ilişkileri ifade edebilmek için yaratılmıştır. Bu durumda tablo sadece dışsal anahta içermektedir. Kural 2: Bilginin birden çok tablo arasında dağıtıldığı durumlarda bu tablolar tek bir varlık altında toplanabilir. Kural 3: Diğer kurallar uygulanamadığı zaman tablo doğrudan kavrama dönüştürülür. Kalıtsallıkla ilgili kurallar iki tablonun anahtarları arasında kapsama bağlılığının olduğu durumlarda kullanılmaktadır. Örneğin PhD öğrencileri hem PhD öğrenci tablosunda hem de Öğrenci tablosundaki kayıtlarda yer almaktadır. Bu çalışma çoğu veritabanından ontolojiye eşleme işlemini gerçekleştiren çalışmalar için temel olmuştur. Değişik durumlarda tablolar üzerinde kurallar uygulanarak bazen tek bir kavrama çevrilmiş bazen kalıtsallık elde edilmiştir. Bu yaklaşımdaki problem kurallar belirlenirken genellikle kolon isimlendirmelerinden gidilmesidir. Veritabanında farklı tablolarda kolonlar farklı isimlerle kaydedilmiş olabilir. Ek olarak tabloların tek bir kavram haline dönüştürüldüğü durumlarda tekrar veritabanına geri dönülemeyeceği açıktır. Tersine mühendisliğin bu sebeple bu çalışmada uygulanmadığı görülmektedir Bazı durumlarda birincil ve dışsal anahtarlar kullanılmamaktadır..Tablolar arasındaki anlamsal bağın açığa çıkartılması bu tarz durumlarda mümkün olmayacaktır. İlişkisel Veritabanlarından ontolojilere tersine mühendislik “Reverse Engineering of Relational Databases to Ontologies “ Web teknolojilerinin gelişmesiyle birlikte ilişkisel veritabanlarını temel alan web sayfalarının Anlamsal Web’e dâhil edilebilmesi için yollar aranmaya başladı. Tersine mühendislik alanında yapılan çalışmaların çoğu varlık-ilişki ve nesne modellerinin ilişkisel veritabanlarından çıkartılması üzerineydi. Çok az çalışma tersine mühendisliğin sonucunda ontolojiyi hedef almaktaydı(Astrova, 2004). 77 Bu çalışmada ilişkisel veritabanlarından ontolojilere dönüşümü sağlayabilmek için tersine mühendislik yaklaşımı sergilenmektedir. Yaklaşım anahtar, veri ve öznitelik analizlerini temel almıştır. Bu yaklaşım kullanıcıların ilişkisel veritabanından kalıtsallık ve eniyileme yapıları gibi daha çok anlamsallık elde edebilmesini sağlamayı hedeflemektedir. Ek olarak çıkartılan anlamsallığın onaylanması ve daha uygun isimlendirilmenin yapılabilmesi için gerekli olan kullanıcı etkileşimi de azaltılmıştır. Geçiş işlemi ilişkisel veritabanı şemasının ontolojiye eşlenmesi ile başlar. Ontoloji daha sonra ilişkisel veritabanındaki kayıtların ontoloji örneklerine eşlenmesi işleminde kullanılır. Ontoloji örnekleri bilgi tabanını oluşturur. Bilgi tabanındaki olgular RDF deyimlerine dönüştürülür ve Web’te yayınlanır. Web ortamında yayımlanan içerik makineler tarafından anlaşılabilir biçimdedir. Şema dönüştürme işlemi ilişkisel veritabanının ontolojiye eşlenme işlemini içerir. Bu işlemin iki fazı şu şekildedir: —Anahtar, veri ve öznitelik ilintileri kullanılarak kavramsal şema çıkartılır. Kavramsal şema ilişkisel şema ile ilgili anlamsallığı barındırır. — Kavramsal şema anlamsal eşdeğer ontolojiye çevrilir İşlem veritabanının üçüncü normal formdaki halini girdi olarak alır. Beş ana adımdan oluşur. -Tabloların sınıflandırılması -Tabloların Eşlenmesi -Kolonların Eşlenmesi -İlişkilerin Eşlenmesi -Kısıtlamaların Eşlenmesi Tablolar temel, bağımlı ya da bileşik tablolar halinde sınıflandırılır. Eğer bir tablo diğer tablolardan bağımsız ise bu tablo temel tablodur. Eğer bir tablonun birincil anahtarı başka bir tablonun birincil anahtarına bağımlı ise tablo bağımlı tablodur. Temel ya da bağımlı olmayan tablolar bileşik tablo tipine girer. 78 Tabloların eşlenmesi düz bir yöntemdir, şema dönüştürme işlemi sırasında pek sorun çıkartmamaktadır. Bileşik tipli tablolar hariç tablolar kavramlara karşılık gelir. Bileşik tipteki bir tablo ise duruma göre hem özellik olarak hem de kavram olarak kullanılabilir. Bir tablodaki her bir kolon kavramdaki bir özelliğe karşılık gelmektedir. Dışsal ve birincil anahtarlar istisnadır. Birincil ve dışsal anahtarlar ilişkileri ifade etmektedir. Bir ilişkisel veritabanında ilişkiler birincil ve dışsal anahtarlarla ifade edilir. Birincil ve dışsal anahtarlar anahtar, veri, ya da kolon ilintilerinin tipine göre kavram, özellik ya da kalıtsallık ilişkisine karşılık gelebilir. SQL dilinde birincil anahtar, tek (‘unique’), tanımsız (‘Not null’) gibi kısıtlamaları belirtmek mümkündür. İlişkisel veritabanlarında kısıtlamalar içerisinde gömülü olan tüm anlamsallık Frame Logic belitleri kullanılarak korunmaktadır. Bilgi geçiş işlemi ise ilişkisel veritabanındaki verilerin ontolojik örneklere eşlenmesi ile gerçekleştirilir. İki aşamadan oluşur: - Ontoloji örnekleri yaratılır. Her bir örneğe kendisini tek olarak tanımlayan bir isim atanır. - Ontoloji örnekleri arasında ilişkiler yaratılır. Bu yaklaşımda tabloların temel, bağımlı bileşik olarak sınıflandırılması doğru bir yaklaşım olarak gözükse de ilişkisel şemaya geri dönüş işlemi sırasında tabloların birleşerek bir kavramı oluşturduğu durumlarda bir tablonun kavramdan tekrar nasıl geri oluşturulacağı konusu problem teşkil edecektir. Ek olarak büyük sistemlerde veri analizleri yapmak da pek gerçekçi değildir. Kolon isimleri kullanarak yapılan analizlerin de doğru sonuç vermeyeceği de açıktır. Örneğin bir tablodaki “bolumid” başka bir kolonda “bolid” şeklinde yer alabilir. Bu tarz bir durumda iki kolon arasında ilişki olsa bile açığa çıkartılamayacaktır. D2R Eşleme: bir Veritabanından RDF’e eşleme Dili “D2R MAP – A Database to RDF Mapping Language” İlişkisel veritabanlarından RDF’e veri aktarılabilmesi için ilişkisel veri modeli çizge tabanlı RDF veri modeline döznüştürlmelidir. “D2R MAP”(Bizer, 2003) bu tarz eşlemeleri tanıtan bildirim deyimli 79 XML tabanlı bir dildir. Bu dilin tasarlanmasındaki temel hedef, var olan ilişkisel şemayı değiştirmeden karmaşık ilişkisel yapıların esnek şekilde eşlenebilmesidir. Buradaki esneklik SQL durumlarının eşleme kuralları içerisinde doğrudan yer almasıyla gerçekleştirilir. Sonuçta ortaya çıkan veri kümeleri daha sonra gruplanır ve veri yaratılan örneklere eşlenir. Bu yaklaşım ikili veya daha yüksek seviyedeki ilişkilerin, çok değere sahip sınıf özelliklerini, karmaşık koşulları ve veri örneklerinin birden çok tabloya dağıtıldığı veri örneklerinin olduğu yüksek seviyede normalize tabl yapılarını ele alabilecek özelliklere sahiptir. Eşleme işlemi D2R işlemcisi tarafından 4 mantıksal adımda gerçekleştirilir. Her bir sınıf ya da benzer sınıf grupları için veritabanında veri seti seçilir. İkinci adımda “ClassMap”te tanımlanan “groupBy” kolonları kullanılarak veri setleri gruplanır. Daha sonra sınıf örnekleri yaratılır ve bu örneklere birer URI ya da boş düğüm belirteci atanır. Son olarak da örnek özellikleri veri tipi ve nesne özelliği köprüleri kullanılarak yaratılmaktadır. “D2R Map” sisteminde veritabanı bağlantısı ve isim alanlarının kullanımı dışında kalan asıl eşlemeler sadece üç öğeden oluşmaktadır. Ontolojideki benzer her bir sınıf ya da sınıf grupları için ClassMap öğesi kullanılmaktadır. Her bir “ClassMap” öğesi bir sql ve groupBy özniteliğine sahiptir. URI örnekleri yaratabilmek için örüntüler ve değer ikame tabloları kullanılmaktadır. Sabit değerler için örnek özellikleri “DataTypePropertyBridge” öğeleri kullanılarak oluşturulmaktadır. Bu işlem sırasında XML veritipleri ve “xml:lang” özniteliği kullanılabilir. Veritipi özellikleri örüntüler ve değer ikame tabloları kullanılarak da çevrilebilir. Model içerisindeki dış kaynaklara ya da örneklere olan referanslar ObjectPropertyBridge öğesi ile birlikte yaratılmaktadır. Yaratılacak olan örneklere referans verme işlemi sırasında referredClass özniteliği ile birlikte referredGroupBy özniteliği kullanılmaktadır. Bir özelliğe sahip çoklu değerler “rdf:Bag”, “rdf:Alt” ya da “rdf:Seq” kapları içerisine konabilir. Bu işlem sırasında useContainer özniteliği “DataTypePropertyBridge” ve ya “ObjectPropertyBridge” öğeleri ile birlikte kullanılır. “D2R Map” aracı sadece ilişkisel veri ve RDF örnekleri üzerinde durmuştur. Sınıflar ve özelliklerin başka bir yerde tanımlandığını varsaymaktadır. Ancak bir OWL ontolojisini katalog tablolarına gönderilecek sorgularla yaratabilmek mümkündür. Ek olarak kural tabanlı sistemlerde kullanıcının çevrim kurallarını adanmış bir dilde hazırlamaları gerekmektedir. Bu kurallar sonra ilişkisel veritabanları üzerinde kullanmaktadır. Bu işlem kullanıcının bu dili bilmesini gerektirdiği için doğru bir yaklaşım değildir. Tezde yapılan çalışma İlişkisel owl’ı temel almakla beraber temel anlamda bu çalışmadan ayrılmaktadır. Tezde belirtilen yaklaşım, ilişkisel veri modeli teorisinden gelen kuralların kural tabanlı ontolojiksel bir yaklaşım ile eşleştirilmesinin gerçekleştirilmesiyle diğer çalışmalardan ayrılmaktadır. Ek olarak var olan yaklaşımlar daha çok tek taraflı bir eşleme mimarisini tanımlarken geliştirilen tasarım çift 80 yönlü eşlemeye olanak sağlamaktadır. Bu bölümde anlatılan mimarilerde eşleme tam olarak gerçekleşmemekle birlikte oluşturulan ontolojilerden geri dönüşüm de sağlanmamaktadır. Tez kapsamında eşleme sırasında ilişkisel şemada var olan tüm varlıklar ontolojiksel varlıklara eşlenmektedir. Böylelikle geri dönüşüm de tam olarak gerçekleştirilmektedir. 81 7. İZLEYECEK ÇALIŞMALAR Bu tez kapsamında Oracle veritabanı üzerinde veri sözlükleri kullanılarak ontolojiye eşleme gerçekleşti ve sonuçta ortaya çıkan RDf üçlüleri Oracle RDF veri deposu kullanılarak depolandı. Ancak Oracle dışındaki veri tabanı şemaları için bir çözüm bu tez kapsamında getirilmemiştir. Oracle veritabanı dışındaki veritabanlarının da desteklenmesiyle çoğu veritabanı ontolojileri baz alarak tanımlanabilecek ve böylelikle farklı sistemler çok fazla çaba gerektirmeden entegre edilebilecektir. Ek olarak kısımlara ayrılmış veya indeksle organize edilmiş tablolar bu çalışma kapsamına alınmamıştır. LOB, CLOB, BFILE gibi veri tipine sahip kolon değerleri de aynı şekilde sistemde yeralmamıştır. Oracle OWL desteği geldikten sonra sistem OWL’ı da ele alacak şekilde genişletilecektir. OWL’ın ifade konusunda RDF’e göre çok daha güçlü özelliklere sahip olması nedeniyle ilişkisel şemaların eşlenmesi çok daha başarılı bir şekilde gerçekleşecektir. Ek olarak eşlenmiş RDF yapısıyla ilişkisel veritabanı arasında kurulacak bir entegrasyon sistemi de planlar dahilindedir. Böylelikle iki taraftan herhangi birine yalpan bir değişiklik diğer sistemde de gerçekleşecektir. 82 8.SONUÇ Anlamsal Web’in geleceği açısından var olan bilgi kaynaklarının anlamsal web’e dahil edilmesi çok önemlidir. Günümüzde bilginin büyük bölümünün ilişkisel veritabanında tutulduğu göz önünde tutulduğunda ilişkisel bilgi sistemlerinin anlamsal varlıklar kullanılarak geliştirilmesi gerekmektedir. Geliştirilen sistem ilişkisel veritabanları şemalarının ontolojilere eşlenmesine örnek bir yapı sunmaktadır. Sistem şemada var olabilecek tüm varlıkları genel bir ontolojide, varlıkların şemaya özgü hallerini ise özelleştirilmiş ontolojilerde tutmaktadır. Herhangi bir etmen genel ontoloji kullanarak rahatlıkla eşlenmiş ontoloji kaynakları üzerinde gezinme ve kullanıcı istekleri doğrultusunda görevlerini yerine getirebilecektir. Ayrıca ilişkisel veritabanlarının büyüklükleri göz önünde bulundurulduğunda oluşturulacak ontoloji yapılarının ve verilerinin etkin ve iyi bir şekilde saklanması ve yönetilebilir olması gerekmektedir. Oracle 10g RDF veri deposu bu konuda çok iyi bir çözüm sunmaktadır. Ek olarak SDO_RDF_MATCH fonksiyonun geliştirilmiş özellikleriyle birlikte herhangidir ilişkisel tablo ile SDO_RDF_MATCH fonksiyonu sonucu oluşan ontolojik yapılar birbirleriyle birleştirilebilmektedir. Kural tabanlarını desteklemesiyle ontoloji varlıkları için çıkarsama imkanı da sunulmaktadır. Kural tabanları üzerinde kural indeksleri kullanılarak üçlüler elde edilebilmekte ve bu üçlüler üzerinde SDO_RDF_MATCH fonksiyonu ile sorgulanabilmektedir. Kural indekslerinin en kötü özelliği kuralın temelinde yatan yapıdaki her bir değişiklikten sonra kural indekslerinin baştan yaratılmasını gerektirmesidir. Sistem sonucu oluşan ontoloji yapıları(RDF) üçlüler şeklinde sistemde saklanmaktadır. İstendiği takdirde RDF veri deposunda saklanan üst veri kullanılarak şema yaratma kodları oluşturulabilecektir. Sonuç olarak ilişkisel veritabanlarındaki şema bilgileri(tablolar, kolonlar, kolon özellikleri, birincil ve dışsal anahtarlar vb.) tam olarak eşlenebilmektedir. Ancak burada önemli nokta ilişkisel veri tabanlarında gizli kalmış anlamsal sınıflandırma bilgilerinin de elde edilmesidir. Sınıflandırma bilgileri elde edilirken sık kullanılan SQL’ler ve tablo analizleri kullanılabilir. Ancak her şekilde iyi tasarımı olmayan mimarilerde ve çok büyük sistemlerde eşleşmenin tam olarak gerçekleşebilmesi için yeni metodolojiler üzerinde çalışılmaktadır. 83 KAYNAKLAR DİZİNİ Alexander N., Lopez X., Ravada S., Stephens S., and Wang J.., 2004, RDF Data Model in Oracle. in W3C Workshop on Semantic Web for Life Sciences. Cambridge, Massachusetts, USA. Astrova Irina, 2004, Reverse Engineering of Relational Databases to Ontologies Tallinn University of Technology, Ehitajate tee 5 19086 Tallinn, Estonia Atzeni P., Mecca G. ve Merialdo P., 1998, Design and Maintenance of Data-Intensive Web Sites, In: th Proceedings of the 6 International Conference on Extending Database Technology ,436.450 Behm A., Geppert A. ve Dittrich K., 1997, On the migration of relational database schemas and data to th object-oriented database systems, In: Proceedings of the 5 International Conference on ReTechnologies for Information Systems ,13.33 Berners-Lee T., 2000, XML. Semantic Web Talk, tbl/slide10-0.html (2000) http://www.w3.org/2000/Talks/1206-xml2k- Bizer Christian , 2003, D2R MAP – A Database to RDF Mapping Language Freie Universität Berlin Institut für Produktion,Wirtschaftsinformatik und OR Garystr Brickley D. ve Miller L., 2000, University of Bristol, UK, RDF, SQL and the Semantic Web - a case study, http://ilrt.org/discovery/2000/10/swsql/ Carroll J., Dickinson I., Dollin C., Reynolds D., Seaborne A., ve Wilkinson K.. 2004, Jena: Implementing the Semantic Web Recommendations. in World Wide Web Conference 2004. New York, New York, USA. Champin Pierre-Antoine, Thiran Philippe, Houben Geert-Jan, ve Broekstra Jeen, 2005,Cross ,Exposing relational data on the Semantic Web with CROSS,LIRIS, Universit´e Claude Bernard Lyon , Facult´es Universitaires Notre-Dame de la Paix, Namur, Vrije Universiteit Brussel, Technische Universiteit Eindhoven 84 Chiang R., Barron T. ve Storey V., 1996, A Framework for the Design and Evaluation of Reverse Engineering Methods for Relational Databases, In: Data and Knowledge Engineering, Vol. 21, No. 1 ,57.77 Dogan G. ve Islamaj R., 2002, Importing Relational Databases into the Semantic Web, http://www.mindswap.org/webai/2002/fall/Importing_20Relational_20Databases_20into_20the_20Sem antic_20Web.html Erdmann M., Maedche A., Schnurr H. ve Staab S., 2000, From Manual to Semi-automatic Se-mantic Annotation: About Ontology-based Text Annotation Tools, In: Proceedings of the Workshop on Semantic Annotation and Intelligent Content (COLING), P. Buitelaar and K. Hasida (eds.) Jena,Jena Semantic Web Toolkit, HP Labs Semantic Web Activity, http://www.hpl.hp.com/semweb/ KAON, The Karlsruhe Ontology and Semantic Web Tool Suite (KAON), http://kaon.semanticweb.org/ Karvounarakis G., Christophides V., Plexousakis D., ve Alexaki S., Querying Community Web Portals, , Technical Report, ICS-FORTH, Heraklion, Greece Korotkiy Maksym ve Top Jan L., From Relational Data to RDFS Models, Vrije Universiteit Amsterdam, Department of Computer Science, De Boelelaan 1081a,1081 HV Amsterdam, The Netherlands Kowari,2005, http://www.kowari.org/. Laborda C. P., Conrad S., 2004, Relational.OWL - A Data and Schema Representation Format Based on OWL, , Institute of Computer Science,Heinrich-Heine-UniversitÄat DÄusseldorf D-40225 DÄusseldorf, Germany Lawrence S. and Giles C., 1999, Accessibility of Information on the Web, In: Nature, No. 400,107.109 Murray Chuck, Alexander Nicole, Das Souri, Eadon George, Ravada Siva, 2005, Oracle Spatial Resource Description Framework (RDF), 10g Release 2 (10.2), Noy N. ve Klein M., 2003, Ontology Evolution: Not the Same as Schema Evolution, In: Knowl-edge and Information Systems, No. 5 17. A. Maedche, S. Staab, N. Stojanovic, R. Studer and Y. Sure, Semantic 85 Portal . The Seal Approach, In: Creating the Semantic Web, D. Fensel, J. Hendler, H. Lieberman and W. Wahlster (eds.), MIT Press, MA, Cambridge (2001) Oracle Corporation,2003a, Application Developer's Guide – Object-Relational Features. 10g Release 1 (10.1) ed. Oracle Corporation, 2003b, Topology and Network Data Models. 10g Release 1 (10.1) ed. 2003. Oracle Corporation, 2003c, Oracle XML DB Developer's Guide, 10g Release 1 (10.1) ed. 2003. PARKA-DB: A Scalable Knowledge Representation System, http://www.cs.umd.edu/projects/plus/Parka/parka-db.html Powers S., 2003, Practical RDF. First ed.: O'Reilly & Associates, Inc. 331. RDFSuite Project, http://139.91.183.30:9090/RDF/ Sesame, 2005, Sesame Open Source RDF Schema-based Repository and Querying facility, http://sourceforge.net/projects/sesame/ Stojanovic L., Stojanovic N. ve Volz R., 2002, Migrating Data-intensive Web Sites into the Se-mantic th Web, In: Proceedings of the 17 ACM Symposium on Applied Computing (SAC) (2002) SWAD-Europe Deliverable 10.2: Mapping Semantic Web Data with RDBMSes, http://www.w3.org/2001/sw/Europe/reports/scalable_rdbms_mapping_report/ TAP Project, 2002, Stanford University, http://tap.stanford.edu/ TAP Knowlege Base, 2002, Stanford University, , http://tap.stanford.edu/tapkb/ W3C, ,RDF Primer, 2005, http://www.w3.org/TR/rdf-primer/. Berners-Lee, T. XML , 2000 - Semantic Web talk, http://www, w3.org/2OlX)/Talks/1206-xml2k-thl/slide l O-O.html W3C, 2003,Frequently Asked Questions about RDF, http://www.w3.org/RDF/FAQ, 86 EK A ORASEMWEB Yükleme Adımları Orasemweb sisteminin kullanılabilmesi için gerekli ön hazırlıklar şu şekildedir. Sistem gereksinimleri: İşletim sistemi: İşletim sistemi bağımsız İşlemci: Pentium III 600 Mhz işlemci ya da daha yükseği Bellek: En az 256 MB RAM Depolama alanı: RDF verilerinin depolanabilmesi için greksinime göre en az 200 MB Veri tabanı : Oracle 10g Release2 Not: Oracle RDF desteği 10g Release2 ile birlikte gelmiştir. Sistem Oracle Spatial 10g release 2 ile birlikte çalışacaktır. ORASEMWEB Paketi Yükleme Adımları 1. Orasemweb paketinin sisteme yüklenebilmesi için orasemweb.spc ve orasemweb.bdy PL/SQL kodlarının bir seferlik derlenmesi gerekmektedir. 2. Orasemweb projesi iki yönlü bir eşleme işlemini içinde barındırmaktadır. Oracle RDF veri deposunda saklanan şema tanımlarının ve verilerin kod halinde metine aktarabilmesi için güvenlik nedeniyle Oracle’ın hangi dizinlere dosya oluşturabileceğini belirtmemiz gerekmektedir. Herhangi bir dizine yazma işlemini gerçekleştirebilmesini sağlayabilmek için ‘*’ imlecini kullanabiliriz. Ek olarak utl_file_dir parametresine istediğimiz bir dizini de parameter olarak verebiliriz. alter system set utl_file_dir=* scope=spfile 87 3. Orasemweb paketi kullanıcısının bir başka kullanıcıya ait şemayı işleyebilmesi için o kullanıya ait varlıklar üzerinde ‘select’ sorgulama yetkisine sahip olmalıdır. Aşağıdaki sorgu scott kullanıcısa herhangi bir tablo üzerinde sorgulama yapabilmesi için yetki vermektedir. Grant select any table to scott; 4. Sorgulanan bir şemadaki varlığın varsayılan tablo alanı üst verilerde mevcut değilse kullanıcıya ait varsayılan tablo alanı kullanılarak tanımlanmaktadır. Bu yüzden kullanıcıya ait varsayılan tablo alanının bulunabilmesi için gerekli yetkilere sahip olması gerekmektedir. Bu işlem DBA yetkisine sahip bir kullanıcı tarafından yapılmalıdır. Grant select on dba_users to scott; 5-Oracle RDF veri deposunda saklanacak verilerin büyük miktarda yer tutacağı düşünülerek sadece RDF verilerini saklayabilmek için ayrı bir tablo alanı oluşturulmalıdır. Bu işlem DBA yetkisine sahip bir kullanıcı tarafından yapılmalıdır. CREATE TABLESPACE rdf_tblspace DATAFILE '/oradata/orcl/rdf_tblspace.dbf' SIZE 1024M REUSE AUTOEXTEND ON NEXT 256M MAXSIZE UNLIMITED SEGMENT SPACE MANAGEMENT AUTO; 6. Oracle veritabanı üzerinde RDF veri deposunun çalışır hale getirilebilmesi için RDF ağının oluşturulması gerekmektedir. Her bir Oracle örneği için bir tane ağ yaratılmalıdır . Bu işlem DBA yetkisine sahip bir kullanıcı tarafından yapılmalıdır. EXECUTE SDO_RDF.CREATE_RDF_NETWORK('rdf_tblspace'); 7. Sistemde Oracle RDF verileriyle çalışacak kullanıcının gerekli yetkiye sahip olması gerekmektedir. Bu işlem DBA yetkisine sahip bir kullanıcı tarafından yapılmalıdır. GRANT EXECUTE ON MDSYS.RDF_APIS_INTERNAL TO SCOTT; 88 8. Orasemweb paketi altındaki “pre_install” yordamı kullanıcının RDF verilerini saklayabilmek için kullanabileceği tabloları ve RDF modellerini oluşturmaktadır. Ek olarka ortak RDF ontolojisinin RDF veri deposuna yüklenmesi de bu yordam ile gerçekleştirilmektedir. Orasemweb paketi yordamlarının kullanılabilmesi için bu yordamın çağrılması gerekmektedir. Orasemweb paketi dahilindeki process_model yordamı doğrudan kulanılacaksa bu yordamın çağrılmasına gerek yoktur. Bu yordam kendi içinde bu yordamı kullanmaktadır. Execute orasemweb.pre_install(‘model ismi’,‘şemaismi’) 89 EK B ORASEMWEB PAKETİ ALTPROGRAMLARI Orasemweb paketi Oracle RDF veritabanında Kaynak tanımlama çatısı ile birlikte çalışan foksiyon ve yordamlara sahiptir. Orasemweb paketi iki yönlü çevrim işlemi gerçekleştirmektedir. Orasemweb paketinin düzgün bir şekilde kullanılabilmesi için kavramsal yapının iyi bir şekilde anlaşılması gerekmektedir. 90 ORASEMWEB.PRE_INSTALL Biçim ORASEMWEB.PRE_INSTALL ( modelismi IN VARCHAR2, şemaismi IN VARCHAR2 veritabanısmi IN VARCHAR2 ); Tanım Orasemweb paketinin çalışabilmesi için gerekli işlemleri gerçekleştirir. Parametreler Modelismi: Orasemweb paketi için yaratılacak RDF veri modelinin ismidir. Şemaismi: Orasemweb paketinin hangi şema üzerinde işlem yapacağını belirtir. Kullanım Notları RDF verilerinin kullanıcı tarafında tutulabilmesi için gerekli olan tabloyu yaratır.Bu tablonun ismi ‘semwebdata’ . Bir sonraki aşamada RDF veri modelini yaratır. Ek olarak sistem için gerekli Oracle ‘sequence’ yapıları yaratılır. Bu yordamın en önemli özelliklerinden bir tanesi kullanıcı şema istatiğini toplamasıdır. Diğer önemli özelliği ise ilişkisel RDF ontolojisinin sisteme yüklenmesi için gerekli yordamı çağırmasıdır. Örnek Aşağıdaki örnek EXECUTE ORASEMWEB.PRE_INSTALL (‘semwebmodel’,’scott’); 91 ORASEMWEB.PROCESS_RELATIONALRDF Biçim ORASEMWEB. PROCESS_RELATIONALRDF( modelismi IN VARCHAR2, ); Tanım Ortak ve paylaşılan RDF ontolojisinin Oracle RDF veri deposuna yerleştirilmesi görevine sahiptir. Parametreler Modelismi:Orasemweb paketi için ortak ilişkisel ontolojinin giriliceği RDF veri modelinin ismidir. Kullanım Notları İlişkisel RDF ontolojisi ilişkisel veritabanı şemasının ontolojilere eşlenmesi sırasında kullanılmaktadır. İlişkisel RDF ontolojisi şemanın eşlenmesi sonucunda oluşan ontolojinin temel aldığı ontolojidir. Örnek Aşağıdaki örnek EXECUTE ORASEMWEB. PROCESS_RELATIONALRDF (‘semwebmodel’); 92 ORASEMWEB.PROCESS_MODEL Biçim ORASEMWEB. PROCESS_MODEL ( modelismi IN VARCHAR2, p_dbname IN VARCHAR2, şemaismi IN VARCHAR2, p_excludetable IN VARCHAR2, p_dataflag IN VARCHAR2); Tanım Sistemin bütün eşleme işlevlerini birleştiren modüldür. Bu yordam eşlemenin tamamını gerçekleştirir. Parametreler Modelismi: Orasemweb paketi için yaratılacak RDF veri modelinin ismidir. P_dbname: Orasemweb paketinin kullanılacağı veritabanını belirtir.. Şemaismi: Orasemweb paketinin hangi şema üzerinde işlem yapacağını belirtir. P_excludetable: Eşleme sırasında kullanılması istenmeyen tabloların listesini barındırır. Formatı ‘tablo1,tablo2….’ şeklindedir. P_ dataflag: Eşleme sırasında verilerin eşlemeye dahil edilip edilmeyeceğini belirtir. İki değer alır. (‘Y’ ya da ‘N’). Kullanım Notları Eşleme için gerekli olan tüm adımları üzerinde barındırmaktadır. RDF verilerinin kullanıcı tarafında tutulabilmesi için gerekli olan tabloyu yaratır.Bu tablonun ismi ‘semwebdata’dır . Bir sonraki aşamada RDF veri modelini yaratır. Ek olarak sistem için gerekli Oracle ‘sequence’ yapıları yaratılır. Kullanıcı şema istatiği toplanır. İlişkisel RDF ontolojisinin sisteme yüklenmesi 93 için gerekli yordamı çağırır. Tablo, kolon, index, kısıtlama gibi eşleme işlemleri ile çıkarsama için gerekli kural tabanları, kural indekslerinin oluşturulması için gerekli yordamları çağırmaktadır. Örnek Aşağıdaki örnek EXECUTE ORASEMWEB. PROCESS_MODEL (‘semwebmodel’,’orcl’,’scott’,’semwebdata,depts’,’Y’); ORASEMWEB. PROCESS_TABLE Biçim ORASEMWEB. PROCESS_TABLE ( modelismi IN VARCHAR2, p_dbname IN VARCHAR2, şemaismi IN VARCHAR2, p_excludetable IN VARCHAR2, p_dataflag IN VARCHAR2 ); Tanım Şema altındaki tabloların eşlenebilmesini sağlayan yordamdır. Parametreler Modelismi:Orasemweb paketi için yaratılacak RDF veri modelinin ismidir. P_dbname:Orasemweb paketinin kullanılacağı veritabanını belirtir.. Şemaismi:Orasemweb paketinin hangi şema üzerinde işlem yapacağını belirtir. P_excludetable:Eşleme sırasında kullanılması istenmeyen tabloların listesini barındırır. Formatı ‘tablo1,tablo2….’ şeklindedir. 94 P_ dataflag:Eşleme sırasında verilerin eşlemeye dahil edilip edilmeyeceğini belirtir. İki değer alır. (‘Y’ ya da ‘N’). Kullanım Notları Şema altındaki tabloların eşlenebilmesini sağlayan yordamdır. Tablolar ontolojideki varlıklara karşılık gelmektedir.Eğer verilerin aktarılması istenirse bu işlemi de gerçekleştirmektedir. Örnek Aşağıdaki örnek EXECUTE ORASEMWEB. PROCESS_TABLE (‘semwebmodel’,’orcl’,’scott’,’semwebdata,depts’,’Y’); ORASEMWEB. PROCESS_COLUMN Biçim ORASEMWEB. PROCESS_ COLUMN ( modelismi IN VARCHAR2, şemaismi IN VARCHAR2, p_excludetable IN VARCHAR2 ); Tanım Şema altındaki kolonların eşlenebilmesini sağlayan yordamdır. Parametreler Modelismi:Orasemweb paketi için yaratılacak RDF veri modelinin ismidir. Şemaismi:Orasemweb paketinin hangi şema üzerinde işlem yapacağını belirtir. P_excludetable:Eşleme sırasında kullanılması istenmeyen tabloların listesini barındırır. Formatı ‘tablo1,tablo2….’ şeklindedir. 95 Kullanım Notları Şema altındaki kolonların eşlenebilmesini sağlayan yordamdır. Kolonlar ontolojideki özniteliklere karşılık gelmektedir. Örnek Aşağıdaki örnek EXECUTE ORASEMWEB. PROCESS_COLUMN (‘semwebmodel’, ,’scott’,’semwebdata,depts’); ORASEMWEB. PROCESS_INDEX Biçim ORASEMWEB. PROCESS_ INDEX ( modelismi IN VARCHAR2, şemaismi IN VARCHAR2, p_excludetable IN VARCHAR2 ); Tanım Şema altındaki indekslerin eşlenebilmesini sağlayan yordamdır. Parametreler Modelismi:Orasemweb paketi için yaratılacak RDF veri modelinin ismidir. Şemaismi:Orasemweb paketinin hangi şema üzerinde işlem yapacağını belirtir. P_excludetable: Eşleme sırasında kullanılması istenmeyen tabloların listesini barındırır. Formatı ‘tablo1,tablo2….’ şeklindedir. 96 Kullanım Notları Şema altındaki indekslerin eşlenebilmesini sağlayan yordamdır. İndeksler ontolojideki valıklara karşılık gelmektedir. Örnek Aşağıdaki örnek EXECUTE ORASEMWEB. PROCESS_ INDEX (‘semwebmodel’, ,’scott’,’semwebdata,depts’); ORASEMWEB. PROCESS_CONSTRAINTS Biçim ORASEMWEB. PROCESS_ CONSTRAINTS ( modelismi IN VARCHAR2, şemaismi IN VARCHAR2, p_excludetable IN VARCHAR2 ); Tanım Şema altındaki kısıtlamaların eşlenebilmesini sağlayan yordamdır. Parametreler Modelismi:Orasemweb paketi için yaratılacak RDF veri modelinin ismidir. Şemaismi:Orasemweb paketinin hangi şema üzerinde işlem yapacağını belirtir. P_excludetable:Eşleme sırasında kullanılması istenmeyen tabloların listesini barındırır. Formatı ‘tablo1,tablo2….’ şeklindedir. 97 Kullanım Notları Şema altındaki kısıtlamaların eşlenebilmesini sağlayan yordamdır. Kısıtlamalar ontolojideki varlıklardandır. Örnek Aşağıdaki örnek EXECUTE ORASEMWEB. PROCESS_ CONSTRAINTS (‘semwebmodel’, ,’scott’,’semwebdata,depts’); ORASEMWEB. PROCESS_RULEBASE Biçim ORASEMWEB. PROCESS_ RULEBASE ( modelismi IN VARCHAR2); Tanım Kural tabanı oluşturulması ve kural tabanı üzerine gerekli kuralların eklenmesini sağlar. Parametreler Modelismi: Orasemweb paketi için hangi model üzerinde kural tabanının oluşturulacağını ifade etmektedir. Kullanım Notları Şemanın eşlendikten sonra birbiriyle ilişkili tabloların bulunabilmesi için gerekli kural tabanı oluşturulması ve kuralların eklenmesi görevini üstlenir. Ek olarak bu kural tabanı için kural indeksi de oluşturulmaktadır. Eklenen kurallar EK C’de bulunmaktadır. 98 Örnek Aşağıdaki örnek EXECUTE ORASEMWEB. PROCESS_ RULEBASE (‘semwebmodel’); ORASEMWEB. PROCESS_ RULESINDEX Biçim ORASEMWEB. PROCESS_ RULESINDEX ( modelismi IN VARCHAR2 p_rulebase IN VARCHAR2); Tanım Kural tabanı oluşturulması ve kural tabanı üzerine gerekli kuralların eklenmesini sağlar. Parametreler Modelismi:Orasemweb paketi için hangi model üzerinde kural indeksinin oluşturulacağını ifade etmektedir. P_rulebase:Orasemweb paketi için hangi kural tabanı için kural indeksinin oluşturulacağını ifade etmektedir. Kullanım Notları Oluşturulan kural tabanı için kural indeksinin oluşturulması hedeflenmektedir. Örnek Aşağıdaki örnek EXECUTE ORASEMWEB. PROCESS_ RULESINDEX (‘semwebmodel’,’semweb_rb’); 99 ORASEMWEB. GETTABLESCRIPT Biçim ORASEMWEB. GETTABLESCRIPT ( modelismi IN VARCHAR2, p_dbname IN VARCHAR2, şemaismi IN VARCHAR2, p_path IN VARCHAR2, p_dataflag IN VARCHAR2); Tanım Oracle Rdf veri deposunda eşlenmiş olarak tutulan ilişkisel veritabanı şeması ve verisinin geri elde edilmesi işlemini gerçekleştirir Parametreler Modelismi:Orasemweb paketi için hangi model üzerinde tersine eşleme gerçekleştirileceğini ifade etmektedir. P_dbname:Orasemweb paketi için hangi veritabanı üzerinde tersine eşleme gerçekleştirileceğini ifade etmektedir. Bu parametre daha önce eşlenmiş olan veritabanının ismini içermelidir. Şemaismi:Orasemweb paketi için hangi şema üzerinde tersine eşleme gerçekleştirileceğini ifade etmektedir. Bu parametre daha önce eşlenmiş olan şema ismini içermelidir. P_path:Tersine eşleme sonucu elde edilen kodların yazılacağı dizini ifade eder. Kullanıcının bu dizin üzerinde yazma yetkisine sahip olması gerekmektedir. ‘c:\a.txt’ gibi bir değer içermelidir. P_dataflag:Tersine eşlemenin veriler için de gerçekleştirilip gerçekleştirilmeyeceğini ifade eder. Kullanım Notları Oracle Rdf veri deposunda eşlenmiş olarak tutulan ilişkisel veritabanı şeması ve verisinin geri elde edilmesi işlemini gerçekleştirir . İşlem sonucunda yaratılan kodlar P_path parametresiyle 100 belirtilmiş olan dosyaya aktarılır. Tüm terine eşleme işlemlerini üzerinde barındırır. Tüm şema yaratma kodları bu yordamla oluşturulabilir. Örnek EXECUTE ORASEMWEB. GETTABLESCRIPT (‘semwebmodel’,’orcl’,’semweb’,’c:\a.sql’,’Y’); ORASEMWEB. GETTABLEDATASCRIPT Biçim ORASEMWEB. GETTABLEDATASCRIPT ( modelismi IN VARCHAR2, şemaismi IN VARCHAR2, p_path IN VARCHAR2); Tanım Oracle Rdf veri deposunda eşlenmiş olarak tutulan ilişkisel veritabanı verilerinin oluşturulma kodlarını belirtilen dizindeki dosyaya yazar. Parametreler Modelismi:Orasemweb paketi için hangi model üzerinde tersine eşleme gerçekleştirileceğini ifade etmektedir. Şemaismi:Orasemweb paketi için hangi şema üzerinde tersine eşleme gerçekleştirileceğini ifade etmektedir. Bu parametre daha önce eşlenmiş olan şema ismini içermelidir. P_path:Tersine eşleme sonucu elde edilen kodların yazılacağı dizini ifade eder. Kullanıcının bu dizin üzerinde yazma yetkisine sahip olması gerekmektedir. ‘c:\a.txt’ gibi bir değer içermelidir. 101 Kullanım Notları Oracle Rdf veri deposunda eşlenmiş olarak tutulan ilişkisel veritabanı verilerinin oluşturulma kodlarını belirtilen dizindeki dosyaya yazar. Örnek EXECUTE ORASEMWEB. GETTABLEDATASCRIPT (‘semwebmodel’,’semweb’,’c:\a.sql’); ORASEMWEB. GETINDEXSCRIPT Biçim ORASEMWEB. GETTABLEDATASCRIPT ( modelismi IN VARCHAR2, şemaismi IN VARCHAR2, p_path IN VARCHAR2); Tanım Oracle Rdf veri deposunda eşlenmiş olarak tutulan ilişkisel veritabanı indekslerinin oluşturulma kodlarını belirtilen dizindeki dosyaya yazar. Parametreler Modelismi:Orasemweb paketi için hangi model üzerinde tersine eşleme gerçekleştirileceğini ifade etmektedir. Şemaismi:Orasemweb paketi için hangi şema üzerinde tersine eşleme gerçekleştirileceğini ifade etmektedir. Bu parametre daha önce eşlenmiş olan şema ismini içermelidir. P_path:Tersine eşleme sonucu elde edilen kodların yazılacağı dizini ifade eder. Kullanıcının bu dizin üzerinde yazma yetkisine sahip olması gerekmektedir. ‘c:\a.txt’ gibi bir değer içermelidir. 102 Kullanım Notları Oracle Rdf veri deposunda eşlenmiş olarak tutulan ilişkisel veritabanı indekslerinin oluşturulma kodlarını belirtilen dizindeki dosyaya yazar. Örnek EXECUTE ORASEMWEB. GETINDEXSCRIPT (‘semwebmodel’,’semweb’,’c:\a.sql’); ORASEMWEB. GETPRIMARYKEYSCRIPT Biçim ORASEMWEB. GETPRIMARYKEYSCRIPT ( modelismi IN VARCHAR2, şemaismi IN VARCHAR2, p_path IN VARCHAR2); Tanım Oracle Rdf veri deposunda eşlenmiş olarak tutulan ilişkisel veritabanı birincil anahtarlarının oluşturulma kodlarını belirtilen dizindeki dosyaya yazar. Parametreler Modelismi:Orasemweb paketi için hangi model üzerinde tersine eşleme gerçekleştirileceğini ifade etmektedir. Şemaismi:Orasemweb paketi için hangi şema üzerinde tersine eşleme gerçekleştirileceğini ifade etmektedir. Bu parametre daha önce eşlenmiş olan şema ismini içermelidir. P_path:Tersine eşleme sonucu elde edilen kodların yazılacağı dizini ifade eder. Kullanıcının bu dizin üzerinde yazma yetkisine sahip olması gerekmektedir. ‘c:\a.txt’ gibi bir değer içermelidir. 103 Kullanım Notları Oracle Rdf veri deposunda eşlenmiş olarak tutulan ilişkisel veritabanı birincil anahtarlarının oluşturulma kodlarını belirtilen dizindeki dosyaya yazar. Örnek EXECUTE ORASEMWEB. GETPRIMARYKEYSCRIPT (‘semwebmodel’,’semweb’,’c:\a.sql’); ORASEMWEB. GETFOREIGNKEYSCRIPT Biçim ORASEMWEB. GETFOREIGNKEYSCRIPT ( modelismi IN VARCHAR2, şemaismi IN VARCHAR2, p_path IN VARCHAR2); Tanım Oracle Rdf veri deposunda eşlenmiş olarak tutulan ilişkisel veritabanı dışsal anahtarlarının oluşturulma kodlarını belirtilen dizindeki dosyaya yazar. Parametreler Modelismi:Orasemweb paketi için hangi model üzerinde tersine eşleme gerçekleştirileceğini ifade etmektedir. Şemaismi:Orasemweb paketi için hangi şema üzerinde tersine eşleme gerçekleştirileceğini ifade etmektedir. Bu parametre daha önce eşlenmiş olan şema ismini içermelidir. P_path:Tersine eşleme sonucu elde edilen kodların yazılacağı dizini ifade eder. Kullanıcının bu dizin üzerinde yazma yetkisine sahip olması gerekmektedir. ‘c:\a.txt’ gibi bir değer içermelidir. 104 Kullanım Notları Oracle Rdf veri deposunda eşlenmiş olarak tutulan ilişkisel veritabanı dışsal anahtarlarının oluşturulma kodlarını belirtilen dizindeki dosyaya yazar. Örnek EXECUTE ORASEMWEB. GETFOREIGNKEYSCRIPT (‘semwebmodel’,’semweb’,’c:\a.sql’); ORASEMWEB. GETFOREIGNKEYSCRIPT Biçim ORASEMWEB. GETCHECKCONSSCRIPT ( modelismi IN VARCHAR2, şemaismi IN VARCHAR2, p_path IN VARCHAR2); Tanım Oracle Rdf veri deposunda eşlenmiş olarak tutulan ilişkisel veritabanı kontrol kısıtlamalarının oluşturulma kodlarını belirtilen dizindeki dosyaya yazar. Parametreler Modelismi:Orasemweb paketi için hangi model üzerinde tersine eşleme gerçekleştirileceğini ifade etmektedir. Şemaismi:Orasemweb paketi için hangi şema üzerinde tersine eşleme gerçekleştirileceğini ifade etmektedir. Bu parametre daha önce eşlenmiş olan şema ismini içermelidir. P_path:Tersine eşleme sonucu elde edilen kodların yazılacağı dizini ifade eder. Kullanıcının bu dizin üzerinde yazma yetkisine sahip olması gerekmektedir. ‘c:\a.txt’ gibi bir değer içermelidir. 105 Kullanım Notları Oracle Rdf veri deposunda eşlenmiş olarak tutulan ilişkisel veritabanı kontrol kısıtlamalarının oluşturulma kodlarını belirtilen dizindeki dosyaya yazar. Örnek EXECUTE ORASEMWEB. GETCHECKCONSSCRIPT (‘semwebmodel’,’semweb’,’c:\a.sql’); 106 EK C KURAL TABANI ÜZERİNDE YARATILAN KURALLAR 1-İki tablonun birbirini referans göstermesi INSERT INTO mdsys.rdfr_semweb_rb VALUES ('referTable', '(?a :foreignCons ?b) (?b :R_CONSTRAINT_NAME ?c) (?d :hasConstraint ?c) (?e :hasColumn ?d)', NULL, '(?a :referTable ?e)', sdo_rdf_aliases(sdo_rdf_alias(‘, 'http://www.ege.edu.tr/semweb/'))); 2- Kolonların birbirlerini referans göstermesi INSERT INTO mdsys.rdfr_semweb_rb VALUES ('referColumn', '(?a :foreignCons ?b) (?c :hasConstraint ?b) (?b :R_CONSTRAINT_NAME ?d) (?e :hasConstraint ?d)', NULL, '(?c :referColumn ?e)', sdo_rdf_aliases(sdo_rdf_alias(‘, 'http://www.ege.edu.tr/semweb/'))); 3. Tablonun birincil anahtarının bulunması INSERT INTO mdsys.rdfr_semweb_rb VALUES ('hasPrimaryKey', '(?a :isIdentifiedBy ?b) (?c :hasConstraint ?b)', NULL, '(?a :hasPrimaryKey ?c)', sdo_rdf_aliases(sdo_rdf_alias(‘, 'http://www.ege.edu.tr/semweb/'))); 107 4. Bir tablonun dışsal anahtarının bulunması INSERT INTO mdsys.rdfr_semweb_rb VALUES ('hasForeignKey', '(?a :foreignCons ?b) (?d :hasConstraint ?b)', NULL, '(?a :hasForeignKey ?d)', sdo_rdf_aliases(sdo_rdf_alias(‘, 'http://www.ege.edu.tr/semweb/'))); 108 EK D EŞLEME SONUCU OLUŞAN YAPININ SORGULANMASI Bir modele ait model_id’nin bulunması select /*+ +*/ orasemweb.getmodelid('SEMWEB') from dual; Eşlenen Veritabanın Bulunması select t schemaname from Table(SDO_RDF_MATCH('(?s rdf:type :Database)', SDO_RDF_Models(‘modelismi’), null, SDO_RDF_Aliases(SDO_RDF_Alias(‘,'http://www.ege.edu.tr/semweb/')), null)) Eşlenen şemanın Bulunması select t schemaname from Table(SDO_RDF_MATCH('(?s rdf:type :Schema)', SDO_RDF_Models(‘modelismi’), null, SDO_RDF_Aliases(SDO_RDF_Alias(‘,'http://www.ege.edu.tr/semweb/')), null)) Tablo örnek sorguları: Ör:Belirli bir modeldeki tüm tabloların bulunması select t tablename from Table(SDO_RDF_MATCH('(?t rdf:type :Table)', SDO_RDF_Models(‘modelismi’), null, SDO_RDF_Aliases(SDO_RDF_Alias(‘,'http://www.ege.edu.tr/semweb/')), null)) 109 Ör:Belirli bir veritabanı ve şemaya ait tabloların bulunması: select /*+ +*/ d database,s schema,t tablename from Table(SDO_RDF_MATCH('(?d :hasSchema ?s)(?s :hasTable ?t)', SDO_RDF_Models('semweb'), null, SDO_RDF_Aliases(SDO_RDF_Alias(‘,'http://www.ege.edu.tr/semweb/')), null)) where d like '%orcl%' and s like '%semweb%' Ör: Dışsal Anahtarla birbirlerine bağlı tabloların bulunması X tablosu y tablosuyla dışsal anahtar ile bağlıdır. SELECT x , y FROM TABLE(SDO_RDF_MATCH( '(?x :referTable ?y)', SDO_RDF_Models('semweb'), SDO_RDF_Rulebases('RDFS','semweb_rb'), SDO_RDF_Aliases(SDO_RDF_Alias(‘,'http://www.ege.edu.tr/semweb/')), null)); Not: Bu tarz bir ilişkinin bulunabilmesi için semweb_rb kural tabanı temel alınmalıdır. Ör: Bir tablonun birincil anahtarının bulunması SELECT x, y FROM TABLE(SDO_RDF_MATCH( '(?x :hasPrimaryKey ?y)', SDO_RDF_Models('semweb'), SDO_RDF_Rulebases('RDFS','semweb_rb'), SDO_RDF_Aliases(SDO_RDF_Alias(‘,'http://www.ege.edu.tr/semweb/')), null)) order by x; Not: Bu tarz bir ilişkinin bulunabilmesi için semweb_rb kural tabanı temel alınmalıdır 110 Ör: Bir tablonun dışsal anahtarının bulunması SELECT x, y FROM TABLE(SDO_RDF_MATCH( '(?x :hasForeignKey ?y)', SDO_RDF_Models('semweb'), SDO_RDF_Rulebases('RDFS','semweb_rb'), SDO_RDF_Aliases(SDO_RDF_Alias(‘,'http://www.ege.edu.tr/semweb/')), null)) order by x; Not: Bu tarz bir ilişkinin bulunabilmesi için semweb_rb kural tabanı temel alınmalıdır Ör: Bir tablonun özelliklerinin elde edilmesi Semweb şemasına ait tabloların parallellik derecesinin ve tablo uzayının elde edilmesi SELECT s,a,b,c FROM TABLE(SDO_RDF_MATCH( '(?s :hasTable ?a)(?a :tableDegree ?b)(?a :tableTablespace ?c)', SDO_RDF_Models('semweb'), null, SDO_RDF_Aliases(SDO_RDF_Alias(‘,'http://www.ege.edu.tr/semweb/')), null)) where upper(s) like upper('%semweb%') order by 2 Ör: Bir tabloya ait kolonların bulunması select /*+ +*/ distinct s,a,b from Table(SDO_RDF_MATCH('(?s :hasTable ?a)(?a :hasColumn ?b)', SDO_RDF_Models('semweb'), null, SDO_RDF_Aliases(SDO_RDF_Alias(‘,'http://www.ege.edu.tr/semweb/')), null)) 111 Ör: Bir tabloya ait indekslerin ve indeks özelliklerinin bulunması select a,t,b,c,d,i from Table(SDO_RDF_MATCH(' (?s :hasTable ?a) (?a :hasIndex ?b) (?t :columnHasIndex ?b) (?b :indexType ?c) (?b :indexUniqueness ?d) (?b :indexExpression ?i)', SDO_RDF_Models('semweb'), null, SDO_RDF_Aliases(SDO_RDF_Alias(‘,'http://www.ege.edu.tr/semweb/')), null)) order by b Ör: Bir tablonun hangi kolonunun hangi tablodaki hangi kolonunu kullandığının bulunması dışsal anahtar olarak SELECT x tabloismi,y kolonismi ,z referekolonsmi,t referetabloismi FROM TABLE(SDO_RDF_MATCH( '(?s :hasTable ?x) (?x :hasForeignKey ?y) (?y :referColumn ?z) (?t :hasColumn ?z)', SDO_RDF_Models(‘semweb’), SDO_RDF_Rulebases('RDFS','semweb_rb'), SDO_RDF_Aliases(SDO_RDF_Alias(‘,'http://www.ege.edu.tr/semweb/')), null)) Not: Bu tarz bir ilişkinin bulunabilmesi için semweb_rb kural tabanı temel alınmalıdır Belirli bir kolona ya da tabloya ait verilerin bulunması: SELECT x,y,z,t,t$rdfLTYP FROM TABLE(SDO_RDF_MATCH( '(?s :hasTable ?x)(?x :hasColumn ?y)(?z ?y ?t)', SDO_RDF_Models('semweb'), null, SDO_RDF_Aliases(SDO_RDF_Alias(‘,'http://www.ege.edu.tr/semweb/')), null)); 112 Not:z her bir kayıt için yaratılan boş düğümü, y kolon değerini, t$rdfLTYP ise kolon değer tipini ifade etmektedir. Bir tabloya ait kontrol kısıtlamasının ve kıstlama koşulunun bulunması select /*+ +*/ s,a,t from Table(SDO_RDF_MATCH( ‘(?s :hasTable ?a) (?a :checkCons ?b) (?b :constraintCondition ?t)', SDO_RDF_Models('semweb'), null, SDO_RDF_Aliases(SDO_RDF_Alias(‘,'http://www.ege.edu.tr/semweb/')), null)) where t not like '%NOT NULL%' –not null kısıtlaması dahil değildir. 113 EK E İLİŞKİSEL RDF ONTOLOJİSİ <?xml version="1.0" ?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:semweb="http://www.ege.edu.tr/semweb " xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" > <rdfs:Class rdf:ID="Database"> <rdfs:label xml:lang="en">Database</rdfs:label> <rdfs:subClassOf rdf:resource="rdf:bag"/> </rdfs:Class> <rdfs:Class rdf:ID="Schema"> <rdfs:label xml:lang="en"> Schema </rdfs:label> <rdfs:subClassOf rdf:resource="rdf:bag"/> </rdfs:Class> <rdfs:Class rdf:ID="Table"> <rdfs:label xml:lang="en">Table</rdfs:label> <rdfs:subClassOf rdf:resource="rdf:Seq"/> </rdfs:Class> <rdfs:Class rdf:ID="Column"> <rdfs:label xml:lang="en">Column</rdfs:label> <rdfs:subClassOf rdf:resource="rdf:resource"/> </rdfs:Class> <rdfs:Class rdf:ID="Index"> <rdfs:label xml:lang="en">Index</rdfs:label> <rdfs:subClassOf rdf:resource="rdf:resource"/> </rdfs:Class> <rdfs:Class rdf:ID="Constraint"> <rdfs:label xml:lang="en"> Constraint </rdfs:label> <rdfs:subClassOf rdf:resource="rdf:resource"/> </rdfs:Class> <rdfs:Class rdf:ID="SuperClass"> <rdfs:label xml:lang="en">SuperClass</rdfs:label> <rdfs:subClassOf rdf:resource="rdf:Bag"/> </rdfs:Class> 114 <rdfs:Class rdf:ID="SubClass"> <rdfs:label xml:lang="en">SubClass</rdfs:label> <rdfs:subClassOf rdf:resource="rdf:Bag"/> </rdfs:Class> <rdfs:Class rdf:ID="EquivalentClass"> <rdfs:label xml:lang="en">EquivalentClass</rdfs:label> <rdfs:subClassOf rdf:resource="rdf:Bag"/> </rdfs:Class> <rdfs:Class rdf:ID="EquivalentColumn"> <rdfs:label xml:lang="en">EquivalentColumn</rdfs:label> <rdfs:subClassOf rdf:resource="rdf:Bag"/> </rdfs:Class> <rdf:Property rdf:ID="has"> <rdfs:domain rdf:resource="rdf:Class"/> <rdfs:range rdf:resource="rdf:Class"/> <rdfs:label xml:lang="en">has</rdfs:label> </rdf:Property> <rdf:Property rdf:ID="hasSchema"> <rdfs:subPropertyOf rdf:resource="#has" /> <rdfs:domain rdf:resource="#Database"/> <rdfs:range rdf:resource="#Schema" /> <rdfs:label xml:lang="en"> hasSchema </rdfs:label> </rdf:Property> <rdf:Property rdf:ID="hasTable"> <rdfs:subPropertyOf rdf:resource="#has" /> <rdfs:domain rdf:resource="#Schema"/> <rdfs:range rdf:resource="#Table" /> <rdfs:label xml:lang="en">hasTable</rdfs:label> </rdf:Property> <rdf:Property rdf:ID="hasColumn"> <rdfs:subPropertyOf rdf:resource="#has" /> <rdfs:domain rdf:resource="#Table"/> <rdfs:range rdf:resource="#Column" /> <rdfs:label xml:lang="en">hasColumn</rdfs:label> </rdf:Property> 115 <rdf:Property rdf:ID="referColumn"> <rdfs:subPropertyOf rdf:resource="#has" /> <rdfs:domain rdf:resource="#Column "/> <rdfs:range rdf:resource="#Column" /> <rdfs:label xml:lang="en"> referColumn </rdfs:label> </rdf:Property> <rdf:Property rdf:ID="hasIndex"> <rdfs:subPropertyOf rdf:resource="#has" /> <rdfs:domain rdf:resource="#Table"/> <rdfs:range rdf:resource="#Index" /> <rdfs:label xml:lang="en">hasIndex</rdfs:label> </rdf:Property> <rdf:Property rdf:ID="hasConstraint"> <rdfs:subPropertyOf rdf:resource="#has" /> <rdfs:domain rdf:resource="#Column"/> <rdfs:range rdf:resource="#Constraint" /> <rdfs:label xml:lang="en">hasConstraint</rdfs:label> </rdf:Property> <rdf:Property rdf:ID="columnHasIndex"> <rdfs:subPropertyOf rdf:resource="#has" /> <rdfs:domain rdf:resource="#Column"/> <rdfs:range rdf:resource="#Index" /> <rdfs:label xml:lang="en">columnHasIndex</rdfs:label> </rdf:Property> <rdf:Property rdf:ID="subClassOfTable"> <rdfs:subPropertyOf rdf:resource="#has" /> <rdfs:domain rdf:resource="#Table"/> <rdfs:range rdf:resource="#SubClass" /> <rdfs:label xml:lang="en">SubClass</rdfs:label> </rdf:Property> <rdf:Property rdf:ID="superClassOfTable"> <rdfs:subPropertyOf rdf:resource="#has" /> <rdfs:domain rdf:resource="#Table"/> <rdfs:range rdf:resource="#SuperClass"/> <rdfs:label xml:lang="en">SuperClass</rdfs:label> </rdf:Property> 116 <rdf:Property rdf:ID="equivalentClassOfTable"> <rdfs:subPropertyOf rdf:resource="#has"/> <rdfs:domain rdf:resource="#Table"/> <rdfs:range rdf:resource="#EquivalentClass"/> <rdfs:label xml:lang="en">EquivalentClass</rdfs:label> </rdf:Property> <rdf:Property rdf:ID="equivalentOfColumn"> <rdfs:subPropertyOf rdf:resource="#has"/> <rdfs:domain rdf:resource="#Column"/> <rdfs:range rdf:resource="#EquivalentColumn" /> <rdfs:label xml:lang="en">EquivalentColumn</rdfs:label> </rdf:Property> <rdf:Property rdf:ID="tableOwner"> <rdf:type rdf:resource="rdf:Property"/> <rdfs:domain rdf:resource="#Table"/> <rdfs:range rdf:resource="xsd:string"/> <rdfs:label xml:lang="en">tableOwner</rdfs:label> </rdf:Property> <rdf:Property rdf:ID="tableTablespace"> <rdf:type rdf:resource="rdf:Property"/> <rdfs:domain rdf:resource="#Table"/> <rdfs:range rdf:resource="xsd:string"/> <rdfs:label xml:lang="en">tableTablespace</rdfs:label> </rdf:Property> <rdf:Property rdf:ID="tableNumrows"> <rdf:type rdf:resource="rdf:Property"/> <rdfs:domain rdf:resource="#Table"/> <rdfs:range rdf:resource="xsd:nonNegativeInteger"/> <rdfs:label xml:lang="en">tableNumrows</rdfs:label> </rdf:Property> <rdf:Property rdf:ID="tableDegree"> <rdf:type rdf:resource="rdf:Property"/> <rdfs:domain rdf:resource="#Table"/> <rdfs:range rdf:resource="xsd:nonNegativeInteger"/> <rdfs:label xml:lang="en">tableDegree</rdfs:label> </rdf:Property> 117 <rdf:Property rdf:ID="tableValidity"> <rdf:type rdf:resource="rdf:Property"/> <rdfs:domain rdf:resource="#Table"/> <rdfs:range rdf:resource="xsd:string"/> <rdfs:label xml:lang="en">tableNumrows</rdfs:label> </rdf:Property> <rdf:Property rdf:ID="tableIOT"> <rdf:type rdf:resource="rdf:Property"/> <rdfs:domain rdf:resource="#Table"/> <rdfs:range rdf:resource="xsd:string"/> <rdfs:label xml:lang="en"> tableIOT </rdfs:label> </rdf:Property> <rdf:Property rdf:ID="isIdentifiedBy"> <rdfs:domain rdf:resource="#Table"/> <rdfs:range rdf:resource="#Constraint"/> <rdfs:label xml:lang="en">isIdentifiedBy</rdfs:label> </rdf:Property> <rdf:Property rdf:ID="foreignCons"> <rdfs:domain rdf:resource="#Table"/> <rdfs:range rdf:resource="#Constraint"/> <rdfs:label xml:lang="en"> foreignCons </rdfs:label> </rdf:Property> <rdf:Property rdf:ID="ColumnDatatype"> <rdfs:domain rdf:resource="#Column"/> <rdfs:range rdf:resource="xsd:string"/> <rdfs:label xml:lang="en">Datatype</rdfs:label> </rdf:Property> <rdf:Property rdf:ID="ColumnDataLength"> <rdfs:domain rdf:resource="#Column"/> <rdfs:range rdf:resource="xsd:nonNegativeInteger"/> <rdfs:label xml:lang="en">DataLength</rdfs:label> </rdf:Property> <rdf:Property rdf:ID="ColumnDataPrecision"> <rdfs:domain rdf:resource="#Column"/> <rdfs:range rdf:resource="xsd:nonNegativeInteger"/> <rdfs:label xml:lang="en">LENGTH</rdfs:label> </rdf:Property> 118 <rdf:Property rdf:ID="ColumnDataScale"> <rdfs:domain rdf:resource="#Column"/> <rdfs:range rdf:resource="xsd:nonNegativeInteger"/> <rdfs:label xml:lang="en">ColumnDataScale</rdfs:label> </rdf:Property> <rdf:Property rdf:ID="ColumnNullable"> <rdfs:domain rdf:resource="#Column"/> <rdfs:range rdf:resource="xsd:string"/> <rdfs:label xml:lang="en">ColumnNullable</rdfs:label> </rdf:Property> <rdf:Property rdf:ID="ColumnDefaultValue"> <rdfs:domain rdf:resource="#Column"/> <rdfs:range rdf:resource="xsd:string"/> <rdfs:label xml:lang="en">ColumnDefaultValue</rdfs:label> </rdf:Property> <rdf:Property rdf:ID="columnCharset"> <rdfs:domain rdf:resource="#Column"/> <rdfs:range rdf:resource="xsd:string"/> <rdfs:label xml:lang="en"> columnCharset </rdfs:label> </rdf:Property> <rdf:Property rdf:ID="indextype"> <rdfs:domain rdf:resource="#Index"/> <rdfs:range rdf:resource="xsd:string"/> <rdfs:label xml:lang="en">INDEXtype</rdfs:label> </rdf:Property> <rdf:Property rdf:ID="indexUniqueness"> <rdfs:domain rdf:resource="#Index"/> <rdfs:range rdf:resource="xsd:string"/> <rdfs:label xml:lang="en">indexUniqueness</rdfs:label> </rdf:Property> <rdf:Property rdf:ID="indexExpression"> <rdfs:domain rdf:resource="#Index"/> <rdfs:range rdf:resource="xsd:string"/> <rdfs:label xml:lang="en">indexExpression</rdfs:label> </rdf:Property> <rdf:Property rdf:ID="indexDescend"> <rdfs:domain rdf:resource="#Index"/> <rdfs:range rdf:resource="xsd:string"/> <rdfs:label xml:lang="en"> indexDescend </rdfs:label> </rdf:Property> 119 <rdf:Property rdf:ID="indexJoin"> <rdfs:domain rdf:resource="#Index"/> <rdfs:range rdf:resource="xsd:string"/> <rdfs:label xml:lang="en"> indexJoin </rdfs:label> </rdf:Property> <rdf:Property rdf:ID="indexGenerated"> <rdfs:domain rdf:resource="#Index"/> <rdfs:range rdf:resource="xsd:string"/> <rdfs:label xml:lang="en"> indexGenerated </rdfs:label> </rdf:Property> <rdf:Property rdf:ID="indexTablespace"> <rdfs:domain rdf:resource="#Index"/> <rdfs:range rdf:resource="xsd:string"/> <rdfs:label xml:lang="en"> indexTablespace </rdfs:label> </rdf:Property> <rdf:Property rdf:ID="constrainttype"> <rdfs:domain rdf:resource="#Constraint"/> <rdfs:range rdf:resource="xsd:string"/> <rdfs:label xml:lang="en">constrainttype</rdfs:label> </rdf:Property> <rdf:Property rdf:ID="constraintCondition"> <rdfs:domain rdf:resource="#Constraint"/> <rdfs:range rdf:resource="xsd:string"/> <rdfs:label xml:lang="en">constraintCondition</rdfs:label> </rdf:Property> <rdf:Property rdf:ID="R_CONSTRAINT_NAME"> <rdfs:domain rdf:resource="#Constraint"/> <rdfs:range rdf:resource="xsd:string"/> <rdfs:label xml:lang="en"> R_CONSTRAINT_NAME </rdfs:label> </rdf:Property> </rdf:RDF> 120 EK F Sözlük A alt sınıf :subclass anlamsal :semantic anlamsal web :semantic web ardalan :range B belge :document bilgi gösterimi :knowledge representation bilgi tabanı :knowledge base birincil anahtar : primary key boş düğüm: blank node Ç çıkarsama :inference çıkarsama motoru :inference engine çizge :graph çözümleyici :parser çıkarsama :reasoning D deyim hakkında deyim :reification dizge :string dizgi :system dış anahtar: foreign key düğüm :node E etiket :tag etmen :agent Eşsiz kısıtlama: unique constraint G güven :trust isimuzayı :namespace Görünüm:view H Hücre:cell İ İndeks:index İlişki: Relation İlişkisel şema: Relational Schema 121 işlevsel indeks:Functional index K kavram :concept kavramsal model :conceptual model Kural tabanı: Rulebase Kural indeksi:Rule index Kısıtlama: Constraint Kontrol kısıtlaması: Check Constraint N nitelik :property O ontoloji :ontology ontoloji biçimleme dili :ontology markup language ontolojik yorum ekleme :ontological annotation Ö önalan :domain öznitelik :attribute R RDF deyimi :RDF statement RDF veri deposu: RDF data store S sınıflandırma :classification sıradüzen :taxonomy, hierarchy soysal :generic sözdizim :syntax T tanımlayıcı :identifier tablo alanı: tablespace U Uzamsal Kaynak Tanımlama Çatısı: Spatial Resource Description Framework Ü üçlü :triple üçüncü parti program :third party application üstveri :metadata V Veri sözlüğü:data dictionary 122 ÖZGEÇMİŞ Kişisel Bilgiler Uyruğu T.C. Doğum Tarihi 19.04.1981 Doğum Yeri Denizli Eğitim Lisans: İzmir Yüksek Teknoloji Enstitüsü Bilgisayar Mühendisliği (2003) Lise: Denizli Fen Lisesi(1999) Yabancı Dil: İngilizce, Almanca Teknik İlgi Alanları Veri Ambarı Anlamsal Web uygulamaları Oracle veritabanı yönetim sistemleri İş Tecrübesi 2004-2005 yılları arasında İzmir’de Oracle veritabanı yöneticiliği eğitimleri vermiştir. 2005 yılından günümüze kadarki sürede İstanbul’da Pegasus, Sunexpress firmalarının veritabanı yöneticiliğini yapmaktadır. Turkcell dataquality ve BIS departmanında danışman olarak görev almıştır. Şu anda Turkcell Datawarehouse reengineering projesinde Oracle firması ile birlikte çalışmaktadır.