![]() |
|
| |||||||
|
| WebMasTer SiTeSi |
| | Seçenekler |
|
#1
| |||
| | |||
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. |
![]() |
| Arama Etiketleri: belgerinin, denetlemek, gecerliligini, xml |
| 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 |
![]() |