XML Belgerinin Geçerliliğini Denetlemek -II-

.NET programcılığı XML Belgerinin Geçerliliğini Denetlemek -II- Programlama Dilleri hakkında bilgi paylaş; Makalemin ilk kısmında XML belgelerinin “geçerlilik” kavramını ve bu konuyla ilgili diğer temel ...
Cevapla
WebMasTer SiTeSi
 
Seçenekler
  #1  
Arama 24-01-2008, 01:52
Banlı
Üyelik Tarihi: 18/09/07
Mesajlar: 1.551
 
     WS-Ticareti: (1)
Blog Yazıları: 1
Teşekkürleri: 0
20 Msg. 27 Tşkr.
Rep Gücü: 0 B737 rep gücü epey yüksek

XML Belgerinin Geçerliliğini Denetlemek -II-

Makalemin ilk kısmında XML belgelerinin “geçerlilik” kavramını ve bu konuyla ilgili diğer temel kavramları açıklamıştım. Buna göre bir XML belgesine denetim getirebileceğimizi ve bunun yöntemlerinde birinin schema lar olduğunu görmüştük. Örnek bir uygulama ile bir schema’nın (şemanın) XML belgesi kurallarını nasıl oluşturabileceğine ve XML belgesine nasıl bağlanacığına açıklık getirmiştim. Yine ilk makalemde, geçerlilik denetiminin Internet Explorer da yapılmadığını (sadece iyi biçimlilik denetimi yapılır) bunun için bir takım 3. uygulamalar gerektiğini belirtmiş ve ASP.NET de bunun nasıl yapılacağını bu makaleme bırakmıştım. Devam eden kısımda XML belgesi geçerlilik denetiminin ASP.NET de nasıl yapıldığını örneklerle göreceğiz.



XML belgemiz:



turlar_2.xml

<?xml version="1.0" encoding="iso-8859-9" ?>

<turlar-rehberi xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="sema.xsd">

<tur>

<tur-adı>Güneydoğu</tur-adı>

<güzergah>Ayvalık, İzmir, Çeşme, Kuşadası, Aydın</güzergah>

<başlangıç-tarihi>09-10-2001</başlangıç-tarihi>

<bitiş-tarihi>19-10-2001</bitiş-tarihi>

<ulaşım>Otobüs</ulaşım>

<ulaşım>Uçak</ulaşım>

<konaklama>3,4 yıldızlı oteller</konaklama>

</tur>

</turlar-rehberi>



şeklinde idi.



XML belgemize bağlanan Schemamızda



sema.xsd



1. <?xml version="1.0" encoding="iso-8859-9" ?>

2. <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

3. <xs:element name="turlar-rehberi">

4. <xs:complexType>

5. <xs:sequence>

6. <xs:element ref="tur" />

7. </xs:sequence>

8. </xs:complexType>

9. </xs:element>

10.<xs:element name="tur">

11.<xs:complexType>

12.<xs:sequence>

13.<xs:element name="tur-adı" type="xs:string" />

14.<xs:element name="güzergah" type="xs:string" />

15.<xs:element name="başlangıç-tarihi" type="xs:string" />

16.<xs:element name="bitiş-tarihi" type="xs:string" />

17.<xs:element name="ulaşım" type="xs:string" maxOccurs="2" />

18.<xs:element name="konaklama" type="xs:string" />

19.</xs:sequence>

20.</xs:complexType>

21.</xs:element>

22.</xs:schema>



şeklinde idi. Şimdi bu şemaya göre XML belge denetimi yapan ASP.NET sayfamızı oluşturalım. Önce kodları ve çalışmasını görelim daha sonra açıklamasını yapayım.

Sayfamız şöyle:



1. <%@ Page Language="VB" codePage="28599" %>

2. <%@ import Namespace="System.Xml" %>

3. <%@ import Namespace="System.Xml.Schema" %>

4. <script runat="server">

5. private okuyucu as XMLTextReader

6. private onaylayici as XMLValidatingReader



7. sub Page_Load(obj as object, e as eventargs)



8. okuyucu = new XMLTextReader(Server.MapPath("turlar_2.xml"))

9. onaylayici = new XMLValidatingReader(okuyucu)

10. onaylayici.ValidationType = ValidationType.Schema



11. AddHandler onaylayici.ValidationEventHandler, new ValidationEventHandler(addressof hata_goster)



12. While onaylayici.Read()

13. End While



14. okuyucu.close



15. end sub



16. sub hata_goster(obj as object, e as ValidationEventArgs)

17. Response.write("<font color=""red"">" & e.Message & "<br>")



18. if (okuyucu.LineNumber > 0)

19. Response.Write("satır: " & okuyucu.LineNumber & " Pozisyon: " & okuyucu.LinePosition & "</font><p>")

20. end if

21. end sub

22. </script>

23. <html>

24. <head>

25. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-9">

26. </head>

27. <body>

28. </body>

29. </html>





Bu sayfamızda turlar_2.xml belgemiz, kendisine bağlı sema.xsd le göre geçerlilik kontrolüne tabii tutuluyor. Yani belgemiz sema.xsd de belirlenen kurallara göre denetleniyor ve eğer bu kurallara göre oluşturulmuşsa geçerli kabul ediliyor ve sayfada hiç bir hata mesajı verilmiyor.

Tersi durumda ise geçersiz kabul edilyor ve sayfada aşağıdaki gibi hata mesajı veriliyor. (örneğin xml belgemizdeki bir satırı çıkaralım ve sayfamızı buna göre çalıştıralım);


Aynı zamanda hatanın hangi satır ve sütunda gerçekleştiğide hata mesajında yukarıdaki gibi bildiriliyor.



Şimdi kodlarımızı sırayla inceliyelim:

2. ve 3. satırda XML belgeleri ve schema larla çalışmamızı sağlayan namespace’ler sayfaya import ediliyor. Eğer bunları import etmez isek XML ile ilgi bir çalışma yapmasını, ASP.NET sayfasından baklememeliyiz.



5. satırda XMLTextReader tipinde “okuyucu” isminde bir nesne değişken tip tanımlaması yapıyoruz. XMLTextReader nesnesi, belirtilen bir XML belgesini satır satır okur. Nitekim 8. satırda bu nesne oluşturuluyor ve belirtilen yol tanımındaki xml (turlar_2.xml) belgesini okuyacağı belirtiliyor.

Bizim yapmak istediğimiz belgeyi okutturmak değil, geçerlilik denetimini yapmak. Ama denetim yapabilmemiz için öncelikle belgenin okunmasını sağlamalıyız. İşte bunu XMLTextReader nesnesi ile yapıyoruz.



Belgenin geçerlilik denetimini yapacak nesne ise 6. satırda “onaylayici” değişken ismi ile tanımlanan ve 9. satırda nesnesi oluşturulan



XMLValidatingReader



Nesnesidir. Bu nesneyi oluştururken hangi XMLTextReader için denetim yapacağımızı belirtmeliyiz. Nitekim bu 9. satırda “okuyucu” olarak belirtilmiş.



10. satırda belge denetimimizi hangi tip’e göre yapacağımız belirtiliyor. Hatırlayacağınız gibi DTD, Schema gibi birden fazla belge kurallarını oluşturan teknoloji mevcuttu. Biz örneğimizde schemayı kullandığımız için, doğal olarak denetim tip tanımını, 10. satırdaki gibi schema olarak belirtmeliyiz.



11. satırda bir olay yakalama bildirimi mevcuttur. Buna göre olay yakalandığında, yani belge denetiminde bir hata ile karşılaşıldığında yapılacak işlemlerin yordamını oluşturan rutinin adres tanımı burada yapılıyor. Buna göre hata oluştuğunda “hata_goster” ismindeki 16. satırdaki alt rutine gidilecek. Bu rutine özel parametreler aktarıldığına dikkatinizi çekerim.

12 ve 13. satırda belgenin okunarak denetimden geçirilmesi sağlanıyor. While döngüsü kullanılıyor çünkü bu denetim her bir satır için yapılıyor.



16. satırdaki hata göster rutinimizi dikkatlice incelersek, yukarıdada söylediğim gibi “ValidationEventArgs” ismindeki bir argumana Validation nesnesinden parametreler aktarıldığını görürüz. Bu parametrelerden biri örneğimizdeki gibi “message” dir. Bir hata yakalanması durumunda, hata mesajını veren ifade “e.Message” dır. Böylece validation nesnemizden gelen hata bildirimi bir mesaj olarak, bu rutin sayesinde, sayfaya yazdırılır. 18-20. satırlarda, if denetimi ve okuyucu nesnesi sayesinde, hataya konu olan satırın, satır numarası ve pozisyonu elde edilir.



XML belgenizdeki tanımların bazılarını değiştirerek bu denetimin nasıl işlediğini, daha rahat anlarsınız.

ASP.NET herhangi bir 3. programa ihtiyaç duymadan bu şekilde belge denetimini, sayfalarımızda yapmamıza imkan sağlar.
Alıntı ile Cevapla
Cevapla
Arama Etiketleri: , , ,



Seçenekler


Benzer Konular
Konu Konu Açanlar Forum Cevaplar Güncel Mesajlar
XML Belgerinin Geçerliliğini Denetlemek B737 .NET programcılığı 0 24-01-2008 01:50
Ses Kartının Olup Olmadığını Denetlemek Celebrian Visual Basic & Action script 0 24-12-2007 01:19


Webmaster web tasarım online reviews ~ Kadınlar blogu ~ Apple iPhone, iPod Touch ( iTouch ) Forum ~ iPhone