Hakkımda

Fotoğrafım
Dokuz Eylül Üniversitesi Bilgisayar Mühendisliği 4. Sınıf Öğrencisi.

23 Haziran 2009 Salı

XML Yönetim Sistemi

Artık blogumdan işinize yarayabileceği benimde zamanında çok araştırdığım konularla özellikle kodlama ile ilgili yazılarda paylaşmak istiyorum. XML ile ilgilenirken internette çok araştırdığım kaynağın az olduğunu düşündüğüm XML Validation konusuyla ilgili bir kod paylaşmak istiyorum. Bu konu ile ilgilenen arkadaşlara yardımcı olacağını düşünüyorum.

Bu çalışmada C, C++, ZORBA XQUERY,XERCES kullandım.

öncelikle eklenmesi gereken header dosyalarından başlamak istiyorum. Çünkü bunlar eklenmeden kod hiç birşekilde çalışmıyor.

#include iostream
#include sstream

#include stdlib.h
#include stdio.h
#include string.h

#include xercesc/util/PlatformUtils.hpp
#include xercesc/dom/deprecated/DOMParser.hpp
#include xercesc/framework/MemBufInputSource.hpp
#include xercesc/sax2/SAX2XMLReader.hpp
#include xercesc/sax2/XMLReaderFactory.hpp
#include xercesc/parsers/SAXParser.hpp
#include xercesc/util/OutOfMemoryException.hpp
#include "/usr/share/doc/libxerces-c2-dev/examples/StdInParse/StdInParseHandlers.hpp"

#include zorba/zorba.h
#include simplestore/simplestore.h
#include zorba/dynamic_context.h


bunun ardından yapılan çalışmayla ilgili küçük bir bilgi vermek istiyorum. Öncelikle bu uygulama birçok XML dosyasını tekbir txt dosyası gibi görmemizi sağlıyor. Bunun için öncelikle bir okuma yazma mekanizmasına ihtiyaç var. Daha sonra içerisinde birden fazla XML verisi olan txt dosyasından sorgulama yapabiliriz istediğimiz gibi. Tabi bu arada XML'lerin XSD ile uyumlu olması için bir Validation yapılması lazımki bu kısım gerçekten çok önemli.

Bu valiadation için önelikle txt dosyasına bir XSD dosyası kaydediyoruz. Burdan sonra XML dosyalarını txt dosyamıza ekliyoruz. Aşağıdaki kod gibi:

SXMS_Create("SXMS_File.txt","persons.xsd");

SXMS_Insert("SXMS_File.txt","persons1.xml");
SXMS_Insert("SXMS_File.txt","persons2.xml");
SXMS_Insert("SXMS_File.txt","note.xml");
SXMS_Insert("SXMS_File.txt","persons3.xml");
SXMS_Insert("SXMS_File.txt","persons4.xml");


Bu uygulamada sabit uzunluktaki dosyalarla ugrasmiyorduk. Tum XSD ve XML dosyalari farkli uzunluktalardi.
Benim bu dosyalarin uzunluklarini bilip ona gore hesaplamalar yapmam gerekeceginden benim bu uzunluklari hesaplayan bir fonksiyona ihtiyacim vardi.



long Calculate_File_Size(char * File_Name)

{

long count = 0;


FILE* fp;


fp = fopen( File_Name,"r+" );


while( !feof( fp ))
{


char count_variable;

fread(&count_variable,1,1, fp );

count++;


}


fclose(fp);



return count;



}



Bu uygulamada her txt dosyasinin (ben bir tane yarattim.) ilk yapisi xsd dosyasi olmali idi. FileHeader gibi de dusunulebilir.
Bu yuzden bu fonksiyonda oncelikle bu xsd dosyasi okunuyor, uzunlugu hesaplaniyor.

Daha sonra benim belirledigim bir txt dosyasina once boyutu sonra kendi icerigi olmak uzere yaziliyor.


void SXMS_Create(char * To_File_Name,char * From_File_Name)
{



//Bunu daha sonra validationda kullanmak adina tutuyorum.

XSD_FILE_NAME=From_File_Name;



//xsd dosyasi uzerinde uzunluk hesaplama ve okuma islemi gerceklesitiriliyor.

long size=Calculate_File_Size(From_File_Name);


FILE* fp;

fp=fopen(From_File_Name,"r+");


if (fp==NULL)

{


puts("Unable to create/open file...");
exit(1);



}


char* header_xsd = (char *)malloc(size);



fread(header_xsd,size,1,fp);



fclose(fp);


// Okunan xsd dosyasi txt dosyasina yaziliyor.

FILE* file1;


file1=fopen(To_File_Name,"w+");


if (file1==NULL)

{

puts("Unable to create/open file...");
exit(1);


}


fwrite(&size,sizeof(long),1,file1);

fwrite(header_xsd,size,1,file1);


fclose(file1);


printf("File %s inserted successfully to the %s File\n",From_File_Name,To_File_Name);




}



Bu uygulamada bir dosyada birden cok XML dosyasi olacak.
Ama bununda oncesinde her xml dosyasi XSD dosyasi ile uyumlu olacak. (VALIDATION)

Oncelikle belirlenen xml dosyasini uzunlugu hesaplanir ve icerigi okunur.

Daha sonra SXMS_Validate fonksiyonu cagirilarak XML dosyasinin XSD dosyasi ile uyumlulugu belirlenir.
Eger uyumlu ise txt dosyasina eklenir.
Uyumlu degilse ekrana mesaj dondurulur ve ekleme islemi gerceklestirilmez.


void SXMS_Insert(char * To_File_Name,char * From_File_Name)
{

// XML dosyasinin uzunlugu hesaplanir ve okunur.

long size=0;

size=Calculate_File_Size(From_File_Name);


FILE* file3;

file3=fopen(From_File_Name,"r+");


if (file3==NULL)

{
puts("Unable to create/open file...");
exit(1);

}


char* Xml=(char*)malloc(size);
fread(Xml,size,1, file3);




// Validation islemleri baslamistir artik.

try
{

XMLPlatformUtils::Initialize();

}


catch (const XMLException& toCatch)

{


XERCES_STD_QUALIFIER cerr << "Error during initialization! Message:\n"<< XERCES_STD_QUALIFIER endl;

return ;


}



// Validation fonksiyonu bool bir deger dondurmektedir.
// Eger basarili ise yani valid uyumlu ise true, uygun degilse false doner fonksiyondan.


bool control=SXMS_Validate(From_File_Name);


XMLPlatformUtils::Terminate();


fclose(file3);




//True ise xml xsd ile uyumludur demek ve artik txt dosyasina ekleme islemleri gerceklestirilebilir.

if(control==true)
{


printf("YOUR %s FILE IS VALID!\n",From_File_Name);

printf("I INSERT THIS XML TO %s!\n",To_File_Name);




// txt dosyamizin sonuna ekleniyor direkt olarak. Artik uyumluluguna eminiz.

FILE* file4;

file4=fopen(To_File_Name,"a+");

if (file4==NULL){

puts("Unable to create/open file...");
exit(1);

}



// Once boyutu sonra icerigi olacak sekilde yerlestiriliyor.

fwrite(&size,sizeof(long),1,file4);

record_counter++;

fwrite(Xml,size,1,file4);

fclose(file4);


}


// xml xsd ile uyumlu degilse ekrana bir mesaj cikiyor ve ekleme islemi gerceklestirilmiyor.

else
{



printf("YOUR %s FILE DOESN'T MATCH WITH XSD!\n",From_File_Name);

printf("I CAN'T INSERT THIS XML TO %s!\n",To_File_Name);



}



}



Bu uygulamada txtye eklenecek olan XML'lerin txtde bulunan XSD ile uyumlu olmasi istenmekteydi.
// Asagidaki fonksiyon bu uyumu denetlemektedir.
// Bunuda DOMParser ile yapmakta.

// parser.setExternalSchemaLocation("http://www.test.com persons.xsd"); satirinda bu XSD ile yapmakta kontrolu.

// Islemler yapildiginda hata sayisi (errorCount) sifir ise valide edilmis dogru,uyumlu dosyadir.
// Sonuc sifirdan farkli ise bir sekilde bir hata meydana gelmistir.
// Dosyalar birbirleriyle uyumlu degildir.

// Fonksiyon bool bir deger dondurdugunden, dosyalar uyumlu ise true, uyumlu degilse false doner.



/********************************************************************************************************************************************/



bool SXMS_Validate(char* filename)

{



printf("\n\n SXMS VALIDATION \n");
printf("--------------------------------------------\n");



long duration;
long errorCount;



// Bu kismida daha generic bir kod olmasi ve txt'nin icine yazilan XSD'den kontrol yapildigini garantilemek adina gerceklestirdim.
// Burasi parser.setExternalSchemaLocation icin gerekli



std::string location="http://www.test.com ";
location.append(XSD_FILE_NAME);


const char* schemaLocation=location.c_str ();



DOMParser parser;
parser.setValidationScheme(DOMParser::Val_Always);
parser.setDoSchema(true);
parser.setDoNamespaces(true);
parser.setExternalSchemaLocation(schemaLocation); //parser.setExternalSchemaLocation("http://www.test.com persons.xsd");


const unsigned long startMillis = XMLPlatformUtils::getCurrentMillis();

parser.parse(filename);

const unsigned long endMillis = XMLPlatformUtils::getCurrentMillis();
duration = endMillis - startMillis;
errorCount = parser.getErrorCount();


if(errorCount==0)
{

return true;

}


else
{

return false;

}



}


Umarım işinize yarar.


Silverlight 3.0 Öğrenme Ayı : Haziran'da 12 Online Seminer

Haziran Ayı boyunca Daron Yöndem tarafından online Silverlight seminerleri verilecektir. Herkese faydalı bir eğitim olacağını düşünüyorum. İlgilenenler için seminer takvimi aşağıdadır.




Silverlight'a Giriş - 8 Haziran, 21.00
Bu webinerde Silverlight nedir sorusuna cevap verirken mimari yapısına bakarak Silverlight dünyasına bir giriş yapacağız. Silverlgiht projeleri nasıl oluşturulur,nasıl yayınlanır, XAML nedir? ve "Neden Silverlight" gibi soruların cevapları da bu webinerde.
https://www.livemeeting.com/cc/usergroups/join?id=GFRH8M&role=attend



Silverlight ile Animasyonlar - 9 Haziran, 21.00
Animasyon mantığını kavrayacağımız bu webinerde ilk olarak Expression Blend arayüzüne bakarak animasyonlarının Blend tarafında nasıl oluşturulabildiğine göz atacağız. Sonra bu animasyonların programatik olarak yaratılmasını ve kontrollerini inceleyerek Silverlight tarafında bir animasyon uzmanı olacağız.
https://www.livemeeting.com/cc/usergroups/join?id=6GRJPM&role=attend



Layout Kontrolleri ve Dinamik Arayüzler, 10 Haziran, 21.00
Silverlight içerisinde istediğiniz görsel arayüzü oluşturabilmek için arayüz oluşturma esnasından kullanabileceğiniz Layout kontrollerini çok iyi tanımanız gerekir. Diğer yandan dinamik olarak tüm nesneleri yaratbilmeniz, bu nesnelerin birbiri ile konuşabilmesi ve projenizi doğru biçimde UserControl yapıları ile şekillendirmeniz de şart. İşte bu webinerde bu konulara değineceğiz.
https://www.livemeeting.com/cc/usergroups/join?id=PBRM8P&role=attend



Kontrol Şablonları ve VisualStateManager, 11 Haziran, 21.00
Standart kontroller arasında sıkışmayın ve kontrollerinizi tamamen baştan yaratın. Hatta bu tasarımları tekrar ve tekrar kullanın. Bu webinerde silverlight kontrollerinin şablonlarının değiştirilmesini, Template Binding mekanizmasını ve visual State Manager'ın kullanımını Custom State yapıları ile beraber inceleyeceğiz.
https://www.livemeeting.com/cc/usergroups/join?id=R8JSQH&role=attend



Silverlight içerisinde Veri Erişimi, 12 Haziran, 21.00
İster klasik web servisleri kullanın, ister WCF servisleri veya ister Socket üzerinden haberleşin hepsinin de kendine göre avantaj ve dezavantajları var. Gelin hepsinin de Silverlight tarafındaki detaylarını beraber inceleyip Silverlight uygulamalarımızı veri ile tanıştıralım.
https://www.livemeeting.com/cc/usergroups/join?id=GH9T5W&role=attend



Silverlight 3.0 ile bir web sitesi yapalım!, 14 Haziran, 13.00
Bu webinerde geçen bir hafta boyunca öğrendiklerimizi uygulayacak ve Silverlight 3.0 ile sıfırdan bir web sitesi yapacağız!
https://www.livemeeting.com/cc/usergroups/join?id=T3KG5H&role=attend



Offline/Online/Desktop çalışma yapıları, 15 Haziran, 21.00
Silverlight 3.0 ile beraber uygulamalarınızı masaüstüne birkaç tıklama ile taşıyabilirsiniz. Peki hem masaüstünde hem webde hem online hem offline çalışırken tüm bu sistemi, verilerinizi nasıl kontrol edeceksiniz. Bu webinerde farklı çalışma yapılarını göz atarken verilerimizi IsolatedStorage içerisinde saklayacağız.
https://www.livemeeting.com/cc/usergroups/join?id=QTZH9R&role=attend



İş Uygulamaları Yaparken Silverlight, 16 Haziran, 21.00
Animasyonlar hoştur, güzeldir ama herşey değildir. DataGrid'ler, Comboboxlar, Calendar'lar bir araya girdiğinde hepsinden bir iş uygulaması arayüzü yaratıp kontrol etmeye ne dersiniz? Bu webinerde hep beraber bir iş uygulamasının ekranını hazırlayacağız.
https://www.livemeeting.com/cc/usergroups/join?id=BGN6BT&role=attend



RIA Services, 17 Haziran, 21.00
Farklı bir bakış açısı ile Silverlight uygulamalarınızdan veritabanına erişimine çocuk oyuncağına dönüştürmek ister misiniz? RIA Services sadece verinin taşınmasını değil aynı anda kendi kontrolleri ile düzenlenmesini de kolaylaştırıyor. Nasıl olacağını merak ediyorsanız bekleriz.
https://www.livemeeting.com/cc/usergroups/join?id=P9KQ6B&role=attend



Silverlight projelerinde SEO, 18 Haziran, 21.00
Arama motorlarına dair optimizasyonların çoğumuz için önemli. Silverlight projelerinde özellikle asenkron veri erişimi nedeniyle söz konusu veriye arama motorları ulaşamıyor. Peki ya bir çözümü varsa? Tabi ki o çözümü paylaşma vakti.
https://www.livemeeting.com/cc/usergroups/join?id=Q6H2G7&role=attend




Video Aşkına! Canlı/Cansız Yayın, 19 Haziran, 21.00
İnternette televizyoz izlemek veya cansız kayıtları yayınlamak, amacınız ne olursa olsun video konusunda Silverlight çok güçlü. Bu webinerde Silverlight ile canlı yayın, Media Services ayarları, Adaptive Streaming, cansız yayın ve Video Player hazırlanması gibi konulara değineceğiz.
https://www.livemeeting.com/cc/usergroups/join?id=BNPK36&role=attend



DeepZoom Uygulamaları, 22 Haziran, 21.00
Yaklaştıkça daha çok detay görmek isteyenlerin tarzı DeepZoom uygulamalarını hızlı bir şekilde geliştirmenin yanı sıra sıfırdan DeepZoom uygulamalarını yazmak, uygulamaları özelleştirmek ve veri bağlantısı yaparak dinamik DeepZoom projeleri yaratmak isteyenler bu webineri kaçırmasın.
https://www.livemeeting.com/cc/usergroups/join?id=BZFCH9&role=attend



Tarayıcı Entegrasyonu, 23 Haziran, 21.00
Silverlight ile tarayıcı arasındaki ilişkiyi inceleyeceğimiz bu webinerde Silverlight tarafındaki C#/VB kodunuz ile DOM entegrasyonunun yanı sıra tam ekran uygulamaları, ön yükleme ekranlarını ve RunTime yükleme ekranlarını özelleştirmeye göz atacağız.
https://www.livemeeting.com/cc/usergroups/join?id=3GZKMH&role=attend

Microsoft Türkiye Yaz Okulu 2009 sonuçları açıklandı

Microsoft Türkiye Yaz Okulu 2009 İzmir, İstanbul ve Ankara'da gerçekleştirelecek. 1500 üzeri başvurunun olduğu Yaz Okulu katılımcıları belli oldu.


MICROSOFT TÜRKİYE YAZ OKULU 2009 KATILIMCI LİSTESİ

ANKARA YAZ OKULU 20 Temmuz - 14 Ağustos - Microsoft Ankara Ofisi
HALIL ENDER ÜNAL
TURGUT IŞIK
GIZEM AKMAN
HÜSEYIN GÜLER
ALP ÇOKER
HASAN ALPER ÖCALAN
SINAN ÖZKAN
GAMZE MAFIZER
ÇIĞDEM AVCI
BURAK TIKNAZ
TOLGA YILMAZ
MEHMET NUH AZGINOĞLU
MUHAMMED FATIH POLAT
MEHMET AYDIN BAHADIR
FATIH GENÇTÜRK
OSMAN EMRE KARAGÜL
TUBA URHAN
MEHTAP TUZLU
TUĞÇE ÖZDEĞER
SINAN ALTINSOY


ISTANBUL YAZ OKULU 27 Temmuz - 21 Ağustos - Microsoft Istanbul Ofisi
NEVZAT YUŞEN
MURAT BOZKURT
YÜKSEL YÜZÜGÜLDÜ
UTKU ÜLKÜ
GOKNUR SIRIN
BEKIR AYTAÇ AĞMA
MUSTAFA BURAK AMASYALI
MEHMET ALTIPARMAK
AYŞE ACAR
HÜSEYIN ONUR ÖZCAN
DUYGU ARSLAN
MURAT ESER
MURAT GÖKHAN ENGIN
ALP YUCEBILGIN
ALI HAKTAN IŞILAK
MAKBULE GÜVEN
ÇINAR YILDIRIM
AYHAN KARGIN
TARIK KAZANCI
MUHAMMED EMIN DURSUN
HALIM GÖREN
YASEMIN ELARSLAN



IZMIR YAZ OKULU 3 Ağustos - 28 Ağustos - İzmir Yüksek Teknoloji Enstitüsü
ENGIN YAĞIZ HATAY
GIZEM GÜLŞEN
ILKAY ILKNUR
MERVE BAYRAMUSTA
CEMIL AYBARS URAL
FILIZ ÖLMEZ
YAVUZ KARA
BURÇIN ARICA
ASIYE TEKIN
HATICE MERIC
MEHMET DURAN
UMIT CETIN
DILAN ŞAHIN
ÇAĞKAN TAŞTEKIN
MURAT DERYA ÖZEN



Not : İzmir Yaz Okulu evsahibi üniversitemiz İzmir Yüksek Teknoloji Enstitüsü kendi öğrencilerini belirleyerek ilan edecektir.