COCOON 2 ye GİRİŞ. İçindekiler. Ali GAZİOĞLU 20021871



Benzer belgeler
Üst Düzey Programlama

Öğr. Gör. Serkan AKSU 1

Üst Düzey Programlama

AJAX nedir? AJAX nasıl çalışır? AJAX. Tahir Emre KALAYCI. Sunucu Yazılım Teknolojileri

1. HAFTA KBT204 İNTERNET PROGRAMCILIĞI II. Öğr.Gör. Hakan YILMAZ.

Mobil Cihazlardan Web Servis Sunumu

Asp.Net Veritabanı İşlemleri

PHP I PHP I. E. Fatih Yetkin. 26 Eylül 2011

Seçenekler Menüsünden Genel Sekmesi

Üst Düzey Programlama

Google Scripts. Neticaret Sistemine Google Analytics ve AdWords sistemleriyle ilgili 3 yeni parametre eklenmiştir.

İnternet Programcılığı Öğr. Gör. Serkan AKSU PHP de Dizi-Değişkenler, Nesneler. Dizi Oluşturma. Tek Boyutlu Diziler

WebInstaller. 1. Kurulum Đçin Gereksinimler

Microsoft Office Access Ders İçeriği 25 Saat. Access Temel 10 saat

ASP.NET TEMELLERİ. Öğr. Gör. Emine TUNÇEL Kırklareli Üniversitesi Pınarhisar Meslek Yüksekokulu

Üst Düzey Programlama

ICATT ÇEVİRİ UYGULAMASI SİSTEM MİMARİSİ VE VERİTABANI TASARIMI

1.1 Web Kavramlar URL terimini tanımlayınız ve anlayınız.

Fatura Dosyalarını Yükleme ile ilgili Detaylar. 14 Temmuz 2014

İNTERNET PROGRAMLAMA 2 A S P. N E T. Marmara Teknik Bilimler MYO / Hafta 5 Veri Tabanı İşlemleri

2. Belgeye Metin Ekleme

Aktarımı Çalıştırmak/Geri Almak 146 Alan Seçenekleri 148 Veri Tabanı Şeması 150 Veri Tabanı ile İlgili Bazı Rake Görevleri 162 Modeller 164

Üst Düzey Programlama

Coslat Monitor (Raporcu)

NESNEYE YÖNELİK PROGRAMLAMA

2. HAFTA KBT204 İNTERNET PROGRAMCILIĞI II. Öğr.Gör. Hakan YILMAZ.

ELN1001 BİLGİSAYAR PROGRAMLAMA I

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

HTML içerik oluşturmak için düşünülen bir işaret dilidir. Örnek

Kepware Veritabanı Ürünleri. Teknolojiye Genel Bir Bakış

Veritabanı Uygulamaları Tasarımı

BİH 605 Bilgi Teknolojisi Bahar Dönemi 2015

IdeaSoft E-Ticaret ile LOGO Ticari Yazılım Entegrasyon Kullanım Kılavuzu

2-Hafta Temel İşlemler

MODSECURITY DENETİM KAYITLARINI ANLAMAK. Gökhan Alkan,

PHP 1. Hafta 1. Sunum

İNTERNET PROGRAMCILIĞI DERSİ

MAYIS 2010 ÖZGÜR DOĞAN İŞ GELİŞTİRME YÖNETİCİSİ KAMU SEKTÖRÜ

VERİ KAYNAKLARI. Bilgi sisteminin öğelerinden biride veri

Microsoft SQL Server 2008 Oracle Mysql (Ücretsiz) (Uygulamalarımızda bunu kullanacağız) Access

Script. Statik Sayfa. Dinamik Sayfa. Dinamik Web Sitelerinin Avantajları. İçerik Yönetim Sistemi. PHP Nedir? Avantajları.

Sunum Planı. Django Nedir? Django projesi oluşturmak Basit bir blog uygulaması. Şablon Kullanımı Diğer özellikleri

BSM 532 KABLOSUZ AĞLARIN MODELLEMESİ VE ANALİZİ OPNET MODELER

Bilgisayar Programcılığı Ön Lisans Programı WEB EDİTÖRÜ. Öğr. Gör. Rıza ALTUNAY

Bimel Ürün Veritabanı Paylaşım Platformu. XML Servisleri

Excel de Pivot Tablolar Tasarım ve Kullanımı

Java Temel Özellikleri

Outlook ta Mail Arama

Bilgi Servisleri (IS)

NovaFortis Yazılım Danışmanlık. E-dönüşüm adaptörü

Değişkenler. Geçerli değişken isimleri : baslamazamani, ad_soyad, x5 Geçersiz değişken isimleri : 3x, while

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

PROGRAMLAMA DERSİ 1. İNTERNET

DESTEK DOKÜMANI. Web hizmetleri hesap ayarları bölümüne, mylogo.com.tr de tanımlanmış olan hesap kodu ve, ve portal adresi bilgileri kaydedilir.

HTML Bloklar. CSS Display özelliği

Sunum İçeriği. Programlamaya Giriş

Sistem Geliştirme Yaşam Döngüsü (The Systems Development Life Cycle) (SDLC)

Bütün XML dökümanlarının bir kök elemanı olmalıdır. Diğer bütün elemanlar kök elemanı tarafından kapsanır.

İNTERNET PROGRAMCILIĞI HAFTA MYSQL - PHPMYADMIN. Hazırlayan Fatih BALAMAN. İçindekiler. Hedefler. Mysql Nedir.

HSancak Nesne Tabanlı Programlama I Ders Notları

EKLER EK 12UY0106-5/A4-1:

MENÜ AYARLAMA 1. MENÜ AYARLAMA. [X] [X] Standard. [X] [X] Yeni Fonksiyon

Java Programlama Giriş

8. HAFTA KBT204 İNTERNET PROGRAMCILIĞI II. Öğr.Gör. Hakan YILMAZ.

Önemli noktalar. Paradigma Nesnelere Giriş Mesajlar / Ara bağlantılar Bilgi Gizleme (Information Hiding ) Sınıflar(Classes) Kalıtım/Inheritance

BTP 207 İNTERNET PROGRAMCILIĞI I. Ders 2

Basamaklı Stil Şablonları (CSS) BIM206 Web Programlama

Hızlı Başlangıç Kılavuzu

JasperReports Server ve Ireport raporlama Sistemi Kurulumu / Kullanımı 1. Bölüm 2. Bölüm 1- JasperReports Server ve Ireport Nedir?

TeraStation 3000/4000/5000/7000 ile Replikasyon. Buffalo Technology

DESTEK DOKÜMANI. Tablolu Malzeme Sınıfları

5651 ve 5070 Sayılı Kanun Tanımlar Yükümlülükler ve Sorumluluklar Logix v2.3 Firewall. Rekare Bilgi Teknolojileri

EDI MIGROS (Sipariş) LOGO ENTEGRASYONU

ELEKTRA LOGO AKTARIM PROGRAMI...3

DESTEK DOKÜMANI. Ürün : Tiger Enterprise/ Tiger Plus/ Go Plus/Go Bölüm : Kurulum İşlemleri

Yükleme Emrinde bulunan belge numarası, kamyon plaka numarası ve şoför adının irsaliyeye taşınması,

Web Hizmeti Bağlantıları

Android e Giriş. Öğr.Gör. Utku SOBUTAY

Metin İşlemleri, Semboller

e-yazışma Projesi TBD Kamu-BİB Aylık Bilgilendirme Toplantısı

e-arşiv Uygulaması Tarih: Her hakkı Logo Elektronik Ticaret Hizmetleri A.Ş' ye aittir.


Web Formlar ve Sayfalar Arasında Bilgi Gönderme. BATML İnternet Programcılığı 1

GELİŞMİŞ ARAMA MOTORU OPTİMİZASYONU

AĞ HİZMETLERİ. Öğr.Gör.Volkan ALTINTAŞ. Version 4.0

BM208- Nesneye Dayalı Analiz ve Tasarım. Sunum 7

BLM401 Mobil Cihazlar için ANDROİD İşletim Sistemi UYGULAMA KAYNAKLARI. BLM401 Dr.Refik SAMET

Linux Ubuntu Kurulumu

OBJECT GENERATOR 2014

Bilgi ve İletişim Teknolojileri (JFM 102) Ders 7. LINUX OS (Sistem Yapısı) BİLGİ & İLETİŞİM TEKNOLOJİLERİ. LINUX Yapısı

Checkpoint SmartCenter da hızlı obje yaratmak

İNTERNET PROGRAMLAMA 2 A S P. N E T. Marmara Teknik Bilimler MYO / Hafta 4 MasterPage

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş

Mikro Ayarları. Mikro Programının kurulu olduğu veritabanı ve web servisi için bağlantı ayarlarının yapıldığı menüdür.

BSOFTefat E-FATURA ÇÖZÜMÜ

BİL-142 Bilgisayar Programlama II

Linux Kurulumu (Sürüm 1.52) İçindekiler

Internet Programming II. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

1.1 Metodolojiyi Gerçeklemek Üzere Geliştirilen Altyapı

Genel Programlama II

Transkript:

COCOON 2 ye GİRİŞ Ali GAZİOĞLU 20021871 İçindekiler 1. Giriş Cocoon Nedir? Cocoon 1 ve Cocoon 2 2. Cocoon u Kurmak ve Ayarlamak Tomcat i kurmak Cocoon hızlı kurma işlemi 3. Cocoon 2 Mimarisi Giriş Pipeline modeli Pipeline Bileşenleri Girdiler: Üreticiler ve Okuyucular İşleme: Dönüştürücüler ve Eylemler(Actions) Çıktılar: Serileştiriciler Koşullu İşlemler: Eşleyiciler ve Seçiciler Pipeline ı Çalıştırmak 4. Sitemap in Temelleri Sitemap in Görevleri Sitemap in Yapısı Sitemap Bileşenlerinin Tanımlanması Genişleyebilirlik 5. Sitemap: Pipeline ları tanımlamak Sitemap Ayarları Bileşen Tanımlamaları Durağan Bir Belgenin Sunulması Wildcard ların Kullanımı Dönüşüm Yapma İşlemi Diğer Çıktı Biçimlerinin Oluşturulması Parametrelerin Aktarımı KAYNAKLAR

Bölüm 1 Giriş Cocoon Nedir? Cocoon; XSLT (XML Stylesheet Language-Transformation) dönüşümlerini kullanarak XML içeriğinin dinamik yayınını sağlayan bir Java sunucu yapısıdır. Cocoon, içeriğini tanımlamak için XML i, bu içeriği çeşitli biçimlere dönüştürmek için XSLT yi kullanarak ; içerik,mantık ve sunum arasında güçlü bir ayırım yeteneğine sahip uygulamalar geliştirebileceğimiz bir platform sağlar. Cocoon ağa içerik yayınlamada pipeline anlayışını kullanır. Geniş bir bileşen çeşitliliği sunar ve bu bileşenlerin ayarlanması ile, fazla bir geliştirim süresi harcanmadan karmaşık işlemlerin yapılmasını sağlar. Örneğin yalnızca XML ve XSLT kullanılarak Cocoon Dinamik olarak yaratılan sonuçları sunabildiği gibi durağan kütüklerin yayınlanmasını da sağlayabilir. Basit ve çok kademeli XSLT dönüşümleri yapar. Parametrelerin dinamik olarak XSLT dönüşümlerine geçirilmesini sağlar. XML, HTML, PNG, JPEG, SVG,ve PDF gibi pek çok türde çıktı oluşturulabilir. Cocoon sayesinde olabilecek en az karmaşıklıkla dinamik web siteleri yaratmak mümkündür. Cocoon 1 ve Cocoon 2 Cocoon, Apache XML çalışmasının bir parçası olarak geliştirilen serbest kaynak kodlu bir projedir. Cocoon 2 orijinal cocoon projesinin güncellenerek yeniden yazılmış halidir ve kullanılması tavsiye edilen sürümüdür. Mevcut Cocoon 1 kullanıcıları cocoon 2 ye geçmeli ve yeni kullanıcılar doğrudan Cocoon 2 ile başlamalıdır. Cocoon 2 nin geliştirim amacı Cocoon 1 in geliştirimi sırasında alınan dersleri kullanarak daha verimli ve ölçeklenebilir bir platform geliştirmektir. Cocoon 1 XML verilerinin parçalar arasındaki iletişimini sağlamak için Belge Nesne Modeli(Document Object Model - DOM -) API sine dayanır. DOM,veri aktarımı için etkisiz bir yoldur çünkü tipik bir DOM ağacı orijinal XML belgelerinden birkaç kat daha fazla bellek tüketebilir. Bu durum Cocoon un ölçeklenebililirliğini kısıtlıyordu. Cocoon 2, XML verilerini işlemenin daha verimli bir yolu olan SAX 2 üzerine kurulmuştur.

Cocoon un bu iki sürümü arasındaki bir diğer önemli farklılık uygulama yönetimidir. Cocoon 1 de; XML belgeleri, Cocoon işleme komutlarıyla nasıl işleneceklerine göre tanımlanırlar. Bu durum belgelerin Cocoon 1 e özel bir şekilde düzenlenmelerine yol açarak içeriğin farklı şekillerde yeniden kullanılma esnekliğini kısıtlar. Cocoon 2, işlem yönetimini sitemap olarak bilinen bir ayar kütüğüne kaydeder. Bu durum, işlem mantığının içerikten ayrılmasını sağlar. Böylece içerik,mantık ve sunum birbirinden ayrılmış olur. Cocoon 2, orjinal Cocoon uygulamasından daha ölçeklenebilir ve esnek bir platform olduğu için bu belgenin konusudur. Bölüm 2 Cocoon u Kurmak ve Ayarlamak Tomcat i kurmak Bu bölüm, Jakarta Tomcat servlet motorunun nasıl kurulacağının anlatan talimatlarla başlamaktadır. Bölümün geri kalan kısmı, Cocoon 2 nin nasıl indirilip, kurulup, ayarlanacağını anlatır. Cocoon un doğrudan kaynak kodunu derleyerek veya hazır bir kurulumunu kullanarak nasıl kurulacağını açıklar. Jakarta Tomcat 4.0.1 in son sürümüne http://jakarta.apache.org/builds/jakarta-tomcat-4.0/release/ bağlantısından erişilebilir. Jakarta Tomcat in hazır kurulumunu indirdikten sonra yapılması gereken tek şey sıkıştırılmış kütüğü bir dizine açmaktır. Bu dizine işaret eden bir değişken (CATALINA_HOME) oluşturulur. Örneğin : CATALINA_HOME=/usr/local/jarkarta-tomcat-4.0.1. Tomcat, $CATALINA_HOME/bin dizinindeki script leri kullanarak başlatılabilir ve kapatılabilir. Tomcat başlangıçta port 8080 i kullanacak şekilde ayarlanmıştır. Bu port un kullanımının bir çakışmaya yol açması durumunda; $CATALINA_HOME/conf/server.xml belgesindeki 8080 değeri uygun bir değerle değiştirilebilir. Tomcat, $CATALINA_HOME/bin/startup.sh scriptini kullanarak başlatıldığında, kurma işleminin sonucu http://localhost:8080 sayfasına girilerek test edilebilir. Eğer kurma işlemi başarıyla sonuçlanmışsa bir açılış sayfası gözükür.

Cocoon hızlı kurma işlemi Cocoon 2, http://xml.apache.org/cocoon/dist/. bağlantısından hazır olarak da elde edilebilir. Kütüğü indirip uygun bir dizine açtıktan sonra, cocoon.war kütüğünü bulmak gerekir. Bu kütük servlet motoru içine yerleşebilen Cocoon Web uygulama arşividir. Cocoon u, Tomcat içine yerleştirmek basittir. Eğer Tomcat çalışıyorsa, öncelikle $CATALINA_HOME/bin/shutdown.sh scripti kullanılarak kapatılmalıdır. Daha sonra, cocoon.war kütüğü, $CATALINA_HOME/webapps dizinine kopyalanmalı ve daha sonra Tomcat başlatılmalıdır. Tomcat Web arşivini otomatik olarak $CATALINA_HOME/webapps/cocoon yoluna açar. Kurma işlemi http://localhost:8080/cocoon/ bağlantısına bağlanarak sınanabilir. Sunucu ayar kütüklerini derlerken bir duraklama olacaktır.

Bölüm 3 Cocoon 2 Mimarisi Giriş Bu bölümde Cocoon 2 mimarisinin temel ilkeleri üzerinde durulacaktır. İlk olarak, bir XML belgesini işlemek birkaç bağımsız adıma bölünebilir. Bu adımların birleşimiyle bir pipeline oluşur. Bu pipeline; girdi, işlem ve çıktı oluşturma adımlarını içerir. Cocoon 2 bu adımlar arasındaki bağlantıyı SAX olaylarını(sax events) kullanarak sağlar. Pipeline daki her bir aşama farklı bileşenler kullanılarak modellenebilir. Mesela girdi üretmek için bir üretici (generator) ve çıktı üretmek için de bir dizileştirici (serializer) kullanılabilir. Cocoon birden fazla bileşen, ve her bir bileşen için birçok gerçekleştirim yolu sunar. Kullanıcı istemlerine yanıt vermek için doğru pipeline ı saptamak (girdilere göre) ve o pipeline ın istemciye sonuç üretmek için komutlarla yönlendirmek gereklidir. Pipeline modeli Cocoon 2 mimarisini gözden geçirdiğimizde, bu mimarinin öne çıkan özelliği pipeline dır. Bir pipeline bir girdi verisi ve bu veriyi işleyen bir işlem dizisinden oluşur. Her bir işlem adımı bir öncekinin çıktısını girdi olarak kabul eder ve bu işlem son çıktı üretilene kadar devam eder. Karmaşık bir işlemi, daha küçük alt adımlara bölmek basit bir işlemdir. Bu işlem find, grep, sort gibi basit işlemleri bir araya getirerek görevler yaratan UNIX kullanıcılarına tanıdık gelecektir. Bu da bize pipeline ın başka bir olası faydasını örnekler. Çünkü her işlem adımı düzenli bir şekilde tanımlanmış davranışlar ve sabit girdi-çıktılar içerir. Böylece genel amaçlı ve yeniden kullanılabilir pipeline bileşenleri elde edilebilir. Bu yeniden kullanılabilirlik az kod yazarak uygulama geliştirilmesine olanak sağlamaktadır.

Pipeline Bileşenleri Cocoon birbirilerine verimli şekillerde bağlanabilen genel pipeline bileşenleri içerir. Bu bileşenler pipeline da oynadıkları rollere göre çok farklı şekillerde gruplanabilirler. Pipeline girdileri -Üreticiler (generators) ve okuyucular (readers) İşlem adımları -Dönüştürücüler (transformers) ve eylemler (actions) Pipeline çıktıları -Serileştiriciler(serializers) Koşullu işlemler -Eşleyiciler (matchers) ve seçiciler (selectors) Bir Cocoon pipeline, genellikle en az bir üretici ve bir serileştiriciden oluşur, fakat birden fazla işlem adımından da oluşabilir. Veri, Cocoon pipeline ından bir SAX olayı olarak geçirilir. Girdiler: Üreticiler ve Okuyucular Üreticiler, veri kaynağını okumakla (örneğin bir kütük) ve o veriyi bir SAX olayları dizisi olarak pipeline a geçirmekle sorumludurlar. En basit üretici SAX parser dır. SAX olaylarının serisi olarak gösterilebilen herhangi bir veri kaynağı bir üreticinin temelini oluşturabilir. Cocoon içinde birkaç tane kullanılabilir üretici vardır. Bunların arasında en faydalıları: Kütük üreticileri(filegenerator): XML kütüklerini kütük sistemlerinden veya Web den okurlar. HTML üreticileri: HTML kütüklerini kütük sistemlerinden veya Web den okurlar. Dizin üreticisi : Dizin listesini oluşturmak için kütük sistemlerini okur. Okuyucular Cocoon pipeline modelinde özel bir durum teşkil eder. Çünkü okuyucular XML den bağımsızdır. Okuyucuların tek yaptığı, harici bir kaynağa erişip veriyi doğrudan yanıt olarak kopyalamaktır. Bunlar genellikle resim veya CSS stylesheets gibi durağan kütükleri sunmak için kullanılır. Okuyucular kendi içlerinde birer pipeline gibi görülebilirler; girdi verisini oluşturup,bunu sonuç olarak serileştirirler. İşleme: Dönüştürücüler ve Eylemler(Actions) Dönüştürücüler, Cocoon pipeline içerisinde temel işlem adımlarını oluşturur. SAX olaylarını girdi olarak kabul eder, bu girdi üzerinde işlemler yapar ve sonuçları SAX olayları olarak pipeline a geçirir.bir dönüştürücü, SAX olaylarını işleyip değiştiren bir bileşen olarak da tanımlanabilir. Bu bakış açısıyla, dönüştürücülerin SAX filtrelerine benzer işlemler yaptığını söyleyebiliriz.

En çok kullanılan dönüştürücü XSLT dönüştürücüsüdür. Kendi girdisini XSLT dönüşümlerini yapan XSLT işleyicilerine verir. Dönüşümün sonuçları da SAX olayları olarak pipeline a girer. Eylemler, pipeline ların daha dinamik yapılara kavuşmasını sağlar ve genellikle uygulamaya özel hazırlanırlar. Yine de Cocoon bazı genel eylemleri içinde barındırır. Mesela veri tabanı etkileşimlerini sağlamak, mail yollamak gibi. Bir eylemin başarıyla tamamlanması işlemin ilerleyen adımları da etkiler. Çıktılar: Serileştiriciler Serileştiriciler, Cocoon pipeline nın son aşamasıdır. Serileştiriciler bir üretici tarafından üretilmiş veya bir önceki işlem adımından (örneğin bir dönüştürücü) çıktı olarak üretilmiş bir SAX olayları dizisini alıp uygun bir biçime sokmakla görevlidirler. Bu uygun biçim kullanılan serileştiriciye bağlıdır. En basit serileştirici, SAX olaylarını XML kütüklerine dönüştüren XML serileştiricisidir. Diğer serileştiriciler HTML, düz metin, PDF kütükleri ve hatta resimler üretebilirler. Bütün bu serileştiriciler; SAX olayı akışının, özel bir XML sözdizimine uygun hale getirildiğini varsayarlar : HTML serileştiricisi: XHTML yi geçerli HTML ye dönüştürür. SVG serileştiricisi: SVG kütüklerini JPEG yada PNG formatına dönüştürür. PDF serileştiricisi: XSL-FO yu PDF kütüklerine dönüştürür. XML bileşenlerini alma, işleme ve çeşitli biçimlerde sunma Cocoon un esas özelliğidir.

Koşullu İşlemler: Eşleyiciler ve Seçiciler Bir pipeline genellikle bazı koşullu kesimler içerir. Örneğin işlem adımlarını tam olarak oluşturmak; istem parametreleri ve kullanıcının kullandığı browser gibi koşullara bağlıdır. Eşleyiciler, bu iki koşullu bileşenin basit olanıdır ve programa dillerinden tanıdık olduğumuz if ifadesine karşılık gelirler. Koşulların kontrol edilmesiyle bir pipeline seçilir yada pipeline nın bir bölümü işleme alınır. Diğer koşullu bileşen ise if-then-else ifadesine karşılık gelen seçicilerdir. Seçiciler, birden fazla seçenekten biri uygunsa kullanılır. Eşleyiciler bir pipeline a girilip girilmeyeceğini anlamakta kullanılırken, seçiciler genellikle bir pipeline içerisinde koşullu kesimler oluşturmakta kullanılır. Bu bileşenlerin her birinin değişik uygulamaları vardır. Hepsi, istemleri(usr-agent, hostname, parametreler veya URL gibi) ya da kullanıcının oturumunu sınamak için ortak bir örüntüyü kullanır. Seçiciler, bütün olabilecek koşulları sınar ; eşleme işlemi ise wildcard veya sıradan ifadeler kullanarak yapılabilir. Pipeline ı Çalıştırmak Cocoon pipeline larını oluşturmakta kullanılan bileşenleri gördük.istemlerin alınması ve sonuçların sunulması işlemini oluşturan mantıksal çevrim şu şekilde özetlenebilir: 1. Kullanıcıdan istemi al. 2. Bu istemi yorumlamak ve yanıt oluşturmak için kullanılacak doğru pipeline ı belirle.(eşleyici kullanarak) 3. Uygun,önceden tanımlanmış bileşenleri kullanarak pipeline oluştur. 4. İstemi karşılaması için pipeline a komut ver. 5. Pipeline tarafından oluşturulan yanıtı kullanıcıya döndür. (Sonuçlar muhtemelen sonraki kullanımlar için önbelleğe alınır.) Bu, Cocoon un XML verilerini Web de yayınlamak için kullandığı temel istem-yanıt çevrimidir. Bu çevrimi yönetmek için Cocoon, sitemap denilen bir XML ayar kütüğü sağlar. Bu bölümde, Cocoon pipeline larını oluşturmak için sıkça kullanılan bileşenlerin yalnızca bir kısmı gözden geçirildi. Yeniden kullanılabilir bu bileşenler, pipeline modelinin bir avantajıdır ve bu bileşenlerin kullanılması gelişmiş işlem mantığının hiç yada çok az programlamayla oluşturulmasına sağlar (XSLT style sheet lerin oluşturulması hariç).

Bölüm 4 Sitemap in Temelleri Sitemap in Görevleri Sitemap, Cocoon Web sitesinin yönetildiği merkezdir. İki görevi yerine getirir. SiteMap: Bileşenlerin pipeline içinde kullanılmadan önce tanımlandığı yerdir. Pipeline ların bileşenleri kullanarak tanımlandığı yerdir. Bu bölüm, bu görevlerin birincisi üzerinde durur ve sitemap in temel yapısını anlatır. Sitemap in Yapısı Sitemap, bir ayar kütüğüdür ve doğası gereği iyi tanımlanmış bir yapıya sahiptir. Varsayılan Cocoon sitemap i (sitemap.xmap), Cocoon Web uygulama dizininden bulunabilir: $CATALINA_HOME/webapps/cocoon/sitemap.xmap Sitemap, aşağıda yazılı olan XML parçasında verilen ana şekle göre yapılandırılır. Özel bir sitemap namespace olduğuna dikkat çekmek gerekir. http://apache.org/cocoon/sitemap/1.0, sitemap unsurlarını belirlemede kullanılır. Sitemap, belirtilen bu iki görevini belirten iki ileri düzey bölüme ayrılmıştır; map:components ve map:pipelines. <map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0"> <map:components> <! bileşen tanımları --> <map:generators/> <map:readers/> <map:transformers/> <map:actions/> <map:serializers/> <map:actions/> <map:matchers/> <map:selectors/> </map:components> <map:pipelines> <!-- pipeline tanımları --> </map:pipelines> </map:sitemap> Her türdeki bileşen için yapılan tanımlamalar belirli ana başlıklarla gruplandırılırlar. Örneğin, bütün üreticilerin tanımlamaları map:generators başlığı altında bulunabilir.

Sitemap Bileşenlerinin Tanımlanması Bileşenler, sitemap te aşağıdaki örnekte belirtilen genel bir sözdizimiyle tanımlanır. Component-type, bileşenin türüdür. Örneğin; üretici elemanı üretici tanımlarını içerir. Her bileşenin biricik bir nitelik olarak bir adı olmalıdır. Bileşen isimleri sitemap te bileşenlere erişmek için kullanılır. Her bileşen kendi gerçekleştirimini bilmelidir. Aynı gerçekleştirime sahip fakat farklı isimlerle tanımlanmış birden fazla bileşen içerilmesi mümkündür. Varsayılan bir bileşen sistem tarafından tanınabilir. Bu durum bileşene isim verilmediği zaman işimize yarar. Bileşenler, parametre geçirebilirler. Bu nedenle aynı bileşeni farklı parametrelerle kullanmak mümkündür. Parametreler bileşenleri birbirinden ayırt etmekte kullanılabilir. <map:component-types default="bileşen_adı"> <map:component-type name="bileşen_adı" src="implementation"> <! bileşen türü parametreler --> </map:component-type> </map:component-types> Bileşen tanımlarının özel örnekleri için, default sitemap in 1.bölümünü okuyunuz. $CATALINA_HOME/webapps/cocoon/sitemap.xmap Genişleyebilirlik Cocoon, sitemap teki tanımlamalarla belirtilen bileşenleri Java nın dinamik sınıf yükleme yeteneğini kullanarak yükler. Her bileşen dinamik olarak yüklenebilmek ve pipeline a yerleştirilmek için, kendi türüne göre değişen bir Java arayüzünü(interface) implement etmelidir. Örneğin, bütün üreticiler aşağıdaki interface i implement etmek zorundadır. org.apache.cocoon.generation.generator Bileşen türlerini tanımlamak için ara yüzlerin esas alınması, Cocoon un yeteneklerinin, bu ara yüzlerin yeni gerçekleştirimlerini yazarak ve sitemap e uygun tanımlamalar ekleyerek kolayca genişletilebilmesini sağlar.

Şu basit senaryoyu göz önüne alalım: Hem orijinal haliyle hem de HTML şeklinde sunulabilmesi gereken CSV (comma seperated values virgülle ayrılmış veri) türünde büyük miktarda verimiz var. Bir yaklaşım, CSV verisini okuyan ve onu XML haline dönüştüren bir uygulama yazmak olacaktır. Bu yaklaşım bize, hem esas veriyi ham haliyle, hem de XML olarak saklama gibi fazladan bir yük yükler. Bunun yanı sıra yeni veri geldikçe onu XML haline dönüştürme işlemi de sistemin taşıması gereken fazladan bir yüktür. Cocoon ile bu soruna daha verimli bir çözüm üretilebilir. CSV verilerini doğrudan SAX olayları haline getiren bir dönüştürücü yazmak mantıklı bir çözüm olacaktır. (com.mycompany.csvgenerator) Bu sınıf sitemap in içinde tanımlanarak, aşağıda gösterildiği gibi Cocoon a entegre edilebilir. <map:generator name="csv" src="com.mycompany.csvgenerator"/> Bu bileşen, artık pek çok türe dönüştürülebildiği, kullanabildiği ve serileştirilebildiği CSV verilerini Cocoon pipeline larına girdi olarak vermekte kullanılabilir. Yine de esas CSV kütüğü READER bileşeni kullanılarak okunabilir. Çünkü sadece bir tane kaynak veri kütüğü var ve bütün dinamik dönüşümler Cocoon tarafından sağlanıyor. Gereksiz veri yönetimi yükünden kurtulmuş oluyoruz. Bu örnek pek çok farklı belge biçimi için genişletilebilir ve içerik yönetim sistemlerinden belgeleri okumak için kullanılabilir. Bu da Cocoon un genişleyebilirlik yeteneğini ortaya koyar.

5. Bölüm Sitemap: Pipeline ları tanımlamak Sitemap Ayarları Bu bölümde, önceki bölümlerde tanıtılan bileşenlerin verimli bir şekilde kullanılmak amacıyla nasıl bir araya getirilebileceklerini gösteren birkaç örnek içermektedir. Bu bölümde özel dönüşümler ve XML türlerinin detaylarından ziyade Cocoon sitemap ayarları üzerinde durulacaktır. Örnekler, aşağıdaki dizin yapısının $CATALINA_HOME/webapps/cocoon ( bu noktadan itibaren bu yol $COCOON_HOME olarak kabul edilecektir) dizini altında oluşturulduğunu varsaymaktadırlar. /static Durağan HTML belgesi /content XML içeriği /styles CSS style sheets /transforms XSLT style sheets İpucu: Cocoon ile çalışırken, $CATALINA_HOME/webapps/cocoon-dev altında bir dizin oluşturun. Daha sonra gerekli bütün Cocoon sınıflarını kapsayan $COCOON_HOME/cocoon.xconf ve $COCOON_HOME/WEB-INF dizilerini bu dizin altına kopyalayın. Böylece temiz bir çalışma ortamı oluşturmuş oluruz. Bu şekilde, http://localhost:8080/cocoon-dev/ bağlantısından erişilebilecek ayrı bir Cocoon Web uygulaması oluşturulur. Son olarak, bu dizin içinde yeni bir sitemap.xmap oluşturun. Böylece çalışmalar, orijinal örnek ve belgeleri bozmadan yapılabilir.

Bileşen Tanımlamaları Aşağıdaki ayar örnekleri, tanımlamalarının sitemap içinde yapıldığı varsayılarak verilmiştir : <map:generators default="file"> <map:generator name="file" src="org.apache.cocoon.generation.filegenerator"/> </map:generators> <map:transformers default="xslt"> <map:transformer name="xslt" src="org.apache.cocoon.transformation.traxtransformer"/> </map:transformers> <map:readers default="resource"> <map:reader name="resource" src="org.apache.cocoon.reading.resourcereader"/> </map:readers> <map:serializers default="html"> <map:serializer name="xml" mime-type="text/xml" src="org.apache.cocoon.serialization.xmlserializer"/> <map:serializer name="html" mime-type="text/html" src="org.apache.cocoon.serialization.htmlserializer"/> <map:serializer name="svg2png" src="org.apache.cocoon.serialization.svgserializer" mime- <map:serializer name="fo2pdf" src="org.apache.cocoon.serialization.fopserializer" mimetype="</map:serializers> <map:matchers default="wildcard"> <map:matcher name="wildcard" src="org.apache.cocoon.matching.wildcardurimatcher"/> </map:matchers>

Durağan Bir Belgenin Sunulması Cocoon kullanarak durağan bir belgenin sunumunu yapmak başlangıç için iyi bir örnektir. Aşağıdaki pipeline tanımlaması, bunun bir okuyucu kullanarak nasıl yapıldığını gösterir. Açıkçası,mevcut Web sunucusunun durağan kütükleri ele almasını sağlamak tercih edilen yöntemdir, fakat bu konu bize pipeline larla çalışma konusunda basit bir örnek sağlayabilir. <map:pipelines> <map:pipeline> <map:match pattern="index.html"> <map:read src="static/index.html" mime-type="text/html"/> </map:match> </map:pipeline> <map:pipelines> İlk olarak, tüm pipeline tanımlarının map:pipelines elemanının bir çocuğu olan map:pipeline kullanılarak yapıldığını görmek gerekir. Eşleyici bileşen, bir eşleme örüntüsü kullanarak pipeline ile istemi eşeleştirmekte kullanılır. Bu örnekte, "index.html" (http://localhost:8080/cocoon/index.html) belgesi için yapılacak bir istem pipeline ı tetikleyecektir. Daha sonra, pipeline tetiklendiğinde yapılması gereken işlem tanımlanır. Burada okuyucu(reader) bileşenine, $COCOON_HOME/static/index.html kütüğünü mimetype text/html ile kullanıcıya göndermesi için komut verilir. Kütüğün yeri, onu istemek için kullanılan URL yolundan tamamen bağımsızdır. Bir kütüğü bir pipeline ile bu şekilde ilişkilendirmek çok zahmetli bir işlem olacaktır. Fakat eşleyici bileşen bu işlemlerden kurtarır.

Wildcard ların Kullanımı Başlangıçtaki örnek, istenmiş URL parçalarını eşleştirmek için wildcard ların kullanımını göstermek amacıyla genişletilebilir. Pipeline, HTML belgeleri gibi CSS stylesheets e de erişimi sağlamak için bir parça genişletilmiştir. Bu işlemi yapmak için, mevcut pipeline a fazladan bir eşleyici eklemek gerekir. Bu durum yeni bir pipeline tanımlamakla aynı maliyete sahiptir. Çünkü Cocoon tüm örüntüleri sınayacaktır. <map:pipeline> <map:match pattern="*.css"> <map:read src="styles/{1}.css" mime-type="text/css"/> </map:match> <map:match pattern="**.html"> <map:read src="static/{1}.html" mime-type="text/html"/> </map:match> </map:pipeline> Wildcard eşleyicisi iki çeşit wildcard ın kullanımına izin verir. Başlangıçta bir asterisk forward slash(/) dışındaki bütün karakterleri eşler. Çift asteriks ise forward slash dahil tüm karakterleri eşler. Bu örüntülerle eşleştirilmiş metin diğer sitemap bileşenleriyle uyumludur ve kullanılan wildcard sayısına göre {1}, {2}, {3} şeklinde erişilebilir durumdadır. Yukarıdaki örnekte, http://localhost:8080/mysite.css bağlantısına yapılacak bir istem, CSS örüntüsünü eşleyecek ve "mysite" ın değeri {1} olarak atanacaktır. Daha sonra okuyucu(reader) $COCOON_HOME/styles/mysite.css i doğru mime-type ile kullanıcıya gönderecektir. http://localhost:8080/styles/mysite.css bağlantısına yapılacak bir istem tek bir asterisk belirttiği için örüntüyle eşleşmez. Geliştirilmiş HTML eşleme örüntüsü, wildcard gibi çift asterisk kullanır. Böylece http://localhost:8080/help/help.html bağlantısına yapılan bir istem başarıyla eşleştirilmiş olacaktır ve help/help değeri {1} olarak atanacaktır. Daha sonra okuyucu, $COCOON_HOME/static/help/help.html i kullanıcıya geri gönderecektir. Cocoon, eşleştirme örüntülerini sitemap te tanımlanmış olan sıra ile çalıştırır. Cocoon, başarıyla eşleştirilen ilk örüntüye göre istemi işler. Yani, sitemap teki sıra anlamlı bir sıradır ve ilk önce ele alınması gereken eşleşmeler; en anlamlı eşleşmeler, yani türe özel eşleşmeler olmalıdır. Örneğin, index.html için, bir eşleştirme örüntüsü *.html den önce tanımlanmalıdır.aksi takdirde eşelşme sağlanamaz.

Dönüşüm Yapma İşlemi Bir dönüşüm için en az üç bileşen gereklidir: XML belgelerini okumak için bir üretici, dönüşümü sağlamak için bir dönüştürücü ve sonuçları oluşturmak için bir serileştirici. Aşağıda, dönüşümü sağlamak için nasıl birleştirildikleri gösterilmektedir. İlk olarak pipeline ı ve onu tetiklemekte kullanılan örüntüyü tanımlanmalıdır. <map:pipe> <map:match pattern="content/*.html"> Sonra XML belgelerini içerik dizininden okumak için, bir üretici eklenmelidir. <map:generate src="content/{1}.xml"/> Daha sonra XML belgelerini belirtilen bir style sheet i kullanarak dönüştürecek bir dönüştürücü eklenmelidir. <map:transform src="transforms/content2html.xsl"/> Son olarak, dönüşümün sonuçlarını HTML belgesine çevirmek için bir serileştirici kullanılmalıdır <map:serialize type="html"/> </map:match> </map:pipe> //localhost:8080/content/document.html URL sine istem yapmak pipeline ı tetikleyecek ve Cocoon un ilk önce document.xml i oluşturmasını sağlayacaktır. Daha sonra Cocoon, sonuçları browser a döndürmeden önce $COCOON_HOME/transforms/content2html.xsl yi kullanarak dönüştürür. Pipeline a daha fazla dönüştürücüler eklenerek daha karmaşık dönüşümler gerçekleştirilebilir. Burada wildcard kullanımı bizi, eşleştirme işleminin sonuçlarını kullanarak pipeline ın girdilerini tanımlama işinden kurtarır.

Diğer Çıktı Biçimlerinin Oluşturulması XML içeriğinden HTML nin nasıl oluşturulduğunu gördük. Fakat burada önemli bir konu da diğer belge biçimlerini nasıl ele alabileceğimizdir. Cocoon bu durumu serileştiricileri kullanarak ele alır. Dönüşüm sonucu olarak HTML değil de XML elde etmek için XML serileştiricisi kullanılmalıdır. Eğer içeriği gruplamak için bir RSS kütüğü oluşturacak bir dönüşüm yapabiliyorsak, pipeline aşağıdaki kesimi içererek yazılabilir: <map:transform src="transforms/content2rss.xsl"/> <map:serialize type="xml"/> Burada serileştirici bileşeninin type niteliği kullanılarak, özel bir serileştirici seçilmiştir. Ve bu serileştiricinin Value niteliği daha önceki sayfalarda yapılan bileşen tanımlamalarındaki serileştiricilerden biri ile aynıdır. SVG (Scalable Vector Graphics) doğru diyagramlarını tanımlamak için kullanılan bir XML türüdür. Normalde, SVG belgelerini görmek için bir browser plugin gereklidir. Fakat Cocoon, bir SVG belgesinden JPEG veya PNG resmi oluşturabilen bir serileştiriciye sahiptir. Bu serileştirici aşağıdaki gibi çalıştırılabilir : <map:transform src="transforms/content2svg.xsl"/> <map:serialize type="svg2png"/> Cocoon, XSL-FO belgelerinden PDF kütüklerinin oluşturulmasını da destekler. Bunun için Style sheet in belirlenmiş serileştiriciye girdi olarak doğru belge biçimini vermesi yeterlidir: <map:transform src="transforms/content2fo.xsl"/> <map:serialize type="fo2pdf"/> Parametrelerin Aktarımı Parametreleri XSLT dönüşümlerine aktarmak genellikle faydalı bir yöntemdir. Cocoon sitemap in içinden parametre geçirmeyi destekler. Bunu yapmanın bir yolu map:parameter elemanını kullanmaktır. Buna bir örnek: <map:transform src="transforms/content2html.xsl"> <map:parameter name="myfixedparam" value="fixed-value"/> <map:parameter name="mydynamicparam" value="{1}"/> </map:transform Parametrenin adı ve değeri map:parameter elemanının nitelikleri olarak belirlenmiştir. Bu yöntemle, sabit ve dinamik parametreleri style sheet lere aktarmak mümkündür. İkinci parametre elemanı değerini bir eşleştirme örüntüsündeki ilk wildcard ı kullanarak alacaktır. Style Sheet, xsl:param elemanını içerdiği sürece, parametre dönüşüme doğru olarak aktarılacaktır.

Parametreleri style sheet e aktarmanın alternatif bir yolu, URL istem parametrelerinin hepsinin aktarılmasına izin verir. Örneğin, Eğer http://localhost:8080/content.html?param1=value1&param2=value2 için bir istem pipeline nın tetiklenmesine sebep olursa bu iki parametre (param1 ve param2) Style sheet e aktarılır. <map:transform src="transforms/content2html.xsl"> <map:parameter name="use-request-parameters" value="true"/> </map:transform Bu yöntem, bir isteme aktarılacak parametre sayısı değişkense işimize yarar. Fakat bu biraz performans kaybına neden olur. Çünkü, Cocoon bu tarz dönüştürme işlemlerinin sonuçlarını ön belleğe alma işleminde, sabit sayıda parametre ile yapılan dönüştürümlere göre daha verimsizdir. Eğer herhangi bir URL parametresi değiştirilirse (style sheet tarafından doğrudan kullanılmamış olsa bile) saklanmış sonuçlar kullanılmayacaktır. KAYNAKLAR: http://www-106.ibm.com/developerworks/views/java/tutorials.jsp METİN YAZARI: Leigh Dodds ÇEVİREN: Ali GAZİOĞLU