Makale Özeti

Bu bölümde XPathNavigator sınıfının kullanımını detaylı olarak ele alıyor olacağız..

Makale

Bu bölümde XPathNavigator sınıfının kullanımını detaylı olarak ele alıyor olacağız..

XPathNavigator İle Çalışmak
Şu ana kadar XML dokumanlarını okumak ve yazmak için XmlTextReader ve XmlTextWriter nesnelerinin kullanımını ele aldık. XML dokumanının belirli bir node’una veya node setine erişmek yani sorgular oluşturmak için XML Path (Xpath) dilini kullanırız. .NET Framework’un XpathNavigator sınıfı ise XML dokumanı üzerinde Xpath sorguları oluşturmak için kullanabileceğimiz metodları içermektedir. Bu bölümde XpathNavigator sınıfının metodlarını ve kullanımını ve Xpath sorgularının oluşturulmasını ele alıyor olacağız.

XPathNavigator Sınıfı

Bir XML dokumanı oluşturduktan sonra belirli node’ların değerlerini öğrenmeye ihtiyacımız olur. XPath XML dokumanındaki bir node’a veya node setine erişme imkanı veren yapıdır. Ek olarak XPath ile metinleri, sayıları ve boolean değerler üzerinde işlemler yapabilmenizi sağlayan ifadeler oluşturabiliriz. XPath XML dokumanını element, attribute ve metinsel değerler içeren, farklı türlerde node’lar içeren bir ağaç yapısı olarak görür. XML dokumanındaki bu node’ları tanımlayan XPath ifadelerini türüne, ismine ve değerine göre oluştururuz. Ek olarak XPath ifadeleri dokuman içindeki node’lar arasındaki ilişkiyi tanımlayabilir. XPath implementasyonu XML dokumanı içindeki Root, Element, Attribute, Namespace, text, ProcessingInstruction, Comment, SignificantWhiteSpace, WhiteSpace ve benzeri pek çok node türünü tanır.

XpathNavigator sınıfı http://www.w3.org/TR/xpath adresinde yer alan XPath 1.0 rcommendation’da tanımlanan veri modeli temel alır ve XML dokumanı, veritabanı veya dataset gibi veri kaynakları üzerinde XPath sorguları oluşturmamıza olanak tanır. XPathNavigator sınıfı System.Xml.XPath namespace’inde yer alır. Aşağıdaki tablo XML dokumanları üzerinde XPath sorguları oluşturmamıza olanak tanıyan System.Xml.Xpath namespace’inde yer alan sınıfları tanımlar;

Sınıf ve Interface’ler Açıklama
Sınıflar  
XPathNavigator Bu sınıf veri kaynağı üzerinde read-only, random access bir cursor oluşturmamıza olanak tanır.
XPathNodeIterator Bu sınıf bir XPath metodu ile seçtiğiniz node’ları tekrarlamamızı sağlar.
XPathExpression Bu sınıf bir XPath ifadesini barındırır. Bir XpathExpression nesnesi Compile metodunu çağırdığımız zaman döner. Select, Evaluate ve Matches metodları bu sınıfı kullanır.
XPathDocument Bu sınıf bir XML dosyasının XSLT kullanarak işlenmesi için read-only ve optimize edilmiş bir önbellek oluşturur.
XPathException Bir XPath ifadesinin çalıştırılması esnasında hata oluşması durumunda oluşturulan exception’dır.
Interface  
IXPathNavigable Bu Interface bir XpathNavigator sınıfı oluşturmamıza olanak verir. Bu Interface’i implement eden sınıflar, CreateNavigator metodu ile navigator’lar oluşturmamıza imkan verir.

 

XML dokumanı için bir XpathNavigator nesnesi oluşturmak için IXPathNavigable interface’ini implement eden XmlNode veya XpathDocument sınıflarının CreateNavigator metodunu kullanırız. Sonrasında XpathNavigator nesnesini XPath sorguları oluşturmak için kullanabiliriz. XpathNavigator sınıfını IXPathNavigable interface’ini implement eden herhangi bir veri kaynağındaki node’ları seçmek için kullanabilirsiniz. Veri kaynağı bir dosya, veritabanı, XmlDocument nesnesi veta DataSet nesnesi olabilir. Aynı zamanda kendi XpathNavigator sınıfınızı geliştirerek farklı veri kaynakları üzerinde sorgulama yapabilirsiniz.

XpathNavigator nesnesi XML dokumanındaki veriyi node’lar arasında ileri ve geri hareket etmeyi sağlayan bir cursor ile okur. Ek olarak XpathNavigator node’lara rastgele erişimi destekler ancak XpathNavigator nesnesinin kullandığı cursor read-only olduğu için XML dokumanındaki veriyi XpatNavigator kullanarak değiştiremeyiz.

XPath Sorgularının Oluşturulması
XPath sorgularını çalıştırmadan önce XPath sorgularını çalıştıracağınız node’ları seçmemiz gerekir. Bu işlem için XpathNavigator sınıfnın Select metodunu kullanırız. Select metodu geriye bir XPathNodeIterator nesnesi döndürür. Dönen XPathNodeIterator nesnesini kullanarak seçilen node'lar arasında hareket edebiliriz. Select metoduna ek olarak SelectChilderen, SelectAncestors, SelectDescendents ve Evaulate metodları da geriye XPathNodeIterator nesnesi döndürürler. Bir XPathNodeIterator nesnesine sahip olduktan sonra seçilen node'lar arasında hareket edebiliriz. Aşağıdaki kod bir XPathNavigator nesnesinin nasıl oluşturulacağını, Select metodunu kullanarak bir node setinin nasıl seçileceğini ve seçilen node'lar arasında nasıl hareket edileceğini göstermektedir. Bu örnekte, başta oluşturduğumuz personel personel.xml dosyasını kullandık.

Imports System.Xml

Imports System.Xml.XPath

 

Module Module1

Sub Main()

Dim Doc As XPathDocument = New XPathDocument("personel.xml")

Dim Navigator As XPathNavigator

Navigator = Doc.CreateNavigator()

Dim Iterator As XPathNodeIterator = Navigator.Select("/personel/calisan")

While Iterator.MoveNext()

Console.WriteLine(Iterator.Current.Name)

Console.WriteLine(Iterator.Current.Value)

End While

Console.ReadLine()

End Sub

End Module

Aşağıdaki grafikte ise XpathNavigator nesnesinin çalışması sonucu oluşan çıktı yer almaktadır;

Select metodu ile dönen node’lar şu özelliklere sahip;

-         Node seti, node’ların oluşturduğu bir virtual ağaç yapısıdır

-         Attribute ve Namespace node’ları ağaç navigasyon metodlarının bir bölümü değillerdir.

Select metoduna ek olarak XpathNavigator XpathNavigator sınıfı en iyi performansı sunmak için bazı ek metodları sunar. Bu metodlar node’lara, gereken XPath sorgularına göre çok daha hızlı bir şekilde ulaşmamızı sağlamayı hedefler. Optimize edilmiş metodlar; SelectChilderen, SelectAncestors, SelecDescendants ve IsDescendant metodlarıdır.

IsDescendant dışındaki tüm metodlar geriye bir XpathNodeIterator nesnesi döndürürler. Bu metodları çalıştırmak XpathNavigator nesnesinin pozisyonunu etkilemez.

Bir node setini seçtikten sonra node’lar arasında XpathNavigator nesnesini kullanarak hareket edebiliriz. Aşağıdaki tabloda seçilen node’lar arasında hareket etmek için kullanabileceğimiz metodlar ve açıklamaları yer almaktadır.

Metod Açıklama
MoveTo Bu metod XpathNavigator nesnesini başka bir node’a taşıma imkanı verir. MoveTo metodu geriye işlemin başarılı bir şekilde tamamlanıp tamamlanamadığını belirten boolean bir sonuç döndürür.
MoveToNext Bu metod XpathNavigator nesnesini aktif node’un bir sonraki sibling’ine taşır.
MoveToPrevious Bu metod XpathNavigator nesnesini aktif node’un bir önceki sibling’ine taşır.
MoveToFirst Bu metod XpathNavigator nesnesini aktif node’un ilk sibling’ine taşır.
MoveToFirstChild Bu metod XpathNavigator nesnesini aktif node’un ilk child’ına taşır. Bu metodu sadece aktif node root node ise veya child node’ları varsa kullanabiliriz.
MoveToParent Bu metod XpathNavigator nesnesini aktif node’un parent node’una taşır. Bu metodu aktif node root node ise çalıştıramayız. Bunun nedeni root node’un parent node’unun olamayacak olmasıdır.
MoveToRoot Bu metod XpathNavigator nesnesini root node’a taşır.
MoveToId Bu metod XpathNavigator nesnesini ID attribute’u olan bir node’a taşımak için kullanılır.

XML Schema Nesne Modeli
Şu ana kadar XpathNavigator nesnesini ve belirli bir element ve attribute’larına nasıl erişebileceğimizi gördük. Aynı zamanda XPath sınıflarını ve XPath sınıflarını kullanarak bir XML dokumanında nasıl sorgular çalıştırabileceğimizi gördük. Bu bölümde ise XML Schema Nesne Modelini ele alıyor olacağız. Aynı zamanda System.Xml.Schema namespace’ine değineceğiz. Son olarak bir XML Schema’nın nasıl oluşturulacağını ve bir XML dosyasını, Schema dosyasına bağlı olarak nasıl doğrulayacağımızı ele alıyor olacağız.

XML Schema Nesne Modeli Hakkında

XML dokumanlarının yapısı grammar olarak adlandırılan kurallara dayanmaktadır. Bu kurallar bir XML Schema Definition (XSD) dosyasında tanımlanırlar. XSD dosyası element, attribute ve veri türlerine dair tanımlamaları içerir. Oluşturulan herhangi bir XML dosyası, bir Schema dosyası aracılığıyla doğrulanabilir.

Schema, XML dokumanının yapısını tanımlama olanağı verir. Bir XML dosyasının yapısını tanımlamak için aşağıdakileri belirtiriz;

-         Dokumanlarda kullanabileceğimiz element’lerin isimleri

-         Şemaya bağlı olarak element’lerin yapı ve türleri

Schema, bir XML dosyasıdır ve xsd uzantısına sahiptir. XSD dosyaları, hedef XML dokumanlarının içeriğini tanımlamak için geçerli XML nesnelerini kullanırlar. Bu XML nesneleri, XSD dosyasında element ve attribute elementleri kullanılarak tanımlanmış element ve attribute’leri içerir. XML dokumanının yapısı SimpleType ve ComplexType elementleri kullanılarak oluşturulur. Bir SimpleType element’i built-in veri türleri veya mevcut basit türler kullanılarak oluşturulur ve element ve attribute’leri içeremez. ComplexType tanımlaması element ve attribute’lerden oluşabilir. Aşağıda, Personel.Xml dosyasındaki element’leri, attibute’leri ve veri türlerini tanımlayan bir XSD dosyası yer almaktadır.

<?xml version="1.0" ?>

<xs:schema id="personel" targetNamespace=http://tempuri.org/personel.xsd

xmlns:mstns="http://tempuri.org/personel.xsd"

xmlns="http://tempuri.org/personel.xsd"

xmlns:xs="http://www.w3.org/2001/XMLSchema"

xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"

attributeFormDefault="qualified" elementFormDefault="qualified">

<xs:element name="personel" msdata:IsDataSet="true"

msdata:EnforceConstraints="False">

<xs:complexType>

<xs:choice maxOccurs="unbounded">

<xs:element name="calisan">

<xs:complexType>

<xs:sequence>

<xs:element name="Ad" type="xs:string" />

<xs:element name="Soyad" type="xs:string" />

<xs:element name="DogumTarihi" type="xs:date" />

<xs:element name="DateOfJoining" type="xs:date" />

<xs:element name="Adres" type="xs:string" />

<xs:element name="Unvan" type="xs:string" />

<xs:element name="Derece" type="xs:int" />

</xs:sequence>

</xs:complexType>

</xs:element>

</xs:choice>

</xs:complexType>

</xs:element>

</xs:schema>

Schema Nesne Modeli (Schema Oject Model – SOM) bizim schema tanımlamasını bir dosyadan okumamızı sağlayan bir takım sınıfın birleşiminden oluşur. Ek olarak bu sınıfları schema definition dosyalarını programatik olarak oluşturmak için de kullanabiliriz. SOM sınıfları, System.Xml.Schema namespace’inin bir parçasıdır. System.Xml.Schema namespace’ini kullanarak bir schema oluşturduğumuz zaman, schema bellekte barındırılır. Schema’yı bir dosyaya yazmadan önce doğrulamamız ve compile etmemiz gerekir.

SOM aşağıdaki özellikleri sunar;

-         Geçerli XSD schema’ları dosyalardan yükleyebilir ve aynı zamanda geçerli XSD Schema’ları dosyalara yazabiliriz.

-         Strongly-Typed sınıfları kullanarak in-memory schema’lar oluşturabiliriz.

-         XmlSchemaCollection sınıfını kullanarak schema’ları cache’leyebilir ve okuyabiliriz.

-         XML instance dokumanlarını schema’lara bağlı olarak XmlValidatingReader sınıfını kullanarak doğrulayabiliriz.

-         Schema’ları yönetmek için editörler oluşturabiliriz.

 

XmlSchema sınıfını, programatik olarak bir schema oluşturmak için kullanabiliriz. Schema definition dosyasını oluşturduktan sonra SOM’u kullanarak bu dosyayı düzenleyebiliriz.

Oluşturulan bir XSD dosyasını doğrulamak için XmlSchema sınıfının Compile metodunu kullanabiliriz. Compile metodunu Schema’nın söz diziminin doğru olup olmadığını denetlemek için kullanırız. Örneğin Compile metodu XML Schema yapısının geçerli olup olmadığını, sabitlerin doğru olarak uygulanıp uygulanmadığını denetler. Doğrulama işlemini gerçekleştirirken, parser’ın bir hata veya uyarı vermesi durumunda bir validation callback kullanılır. Bir sözdizimi hatası durumunda Compile metodunun ValidationEventHandler olayı oluşturulur. Schema’ların oluşturulmasına ek olarak, XmlSchema.Read metodunu kullanarak Schemaları yükleyebiliriz de. Read olayı esnasında parser’ın bir hata veya uyarı vermesi durumunda bir validation callback kullanılır. XSD dil schema’larını dosyalardan okumak ve yazmak için SOM kullanabiliriz. Farklı kaynaklar içinse XmlTextReader, XmlTextWriter ve XmlSchema sınıflarını kullanabiliriz. Aşağıdaki kod örneği XML Schema’nın bir dosyadan okunmasını, konsolda görüntülenmesini ve farklı bir isim ile kaydedilmesini örneklemektedir;

Imports System.IO

Imports System

Imports System.Xml

Imports System.Xml.Schema

Imports System.Text

 

Class ReadWriteSample

Public Shared Sub Main()

Try

Dim reader As New XmlTextReader("Personel.xsd")

Dim myschema As XmlSchema = XmlSchema.Read(reader, Nothing)

myschema.Write(Console.Out)

Console.WriteLine("Çıkmak için <Enter> tuşuna basınız.")

Console.Read()

Dim file As New FileStream("Yeni.xsd", FileMode.Create, _

FileAccess.ReadWrite)

Dim xwriter As New XmlTextWriter(file, New UTF8Encoding)

xwriter.Formatting = Formatting.Indented

myschema.Write(xwriter)

Catch e As Exception

Console.WriteLine(e)

End Try

End Sub

End Class

XML Dokumanının Doğrulanması
Şu ana kadar SOM’u ve in-memory schema’lar oluşturmak için sunduğu özellikleri ele aldık. Bu bölümde ise XML doğrulamasını ve bir XML dokumanını doğrulamak için XmlValidatingReader sınıfının kullanımını ele alıyor olacağız.

XML Doğrulama
XML-parser’ların sorunsuz olarak okuyabilmesi ve kullanabilmemiz, görüntüleyebilmemiz için oluşturduğumuz XML dokumanının well-formed olduğundan emin olmamız gerekir. Aynı zamanda XML dokumanlarımızın schma’sına ve DTD’si ile tanımlanmış kurallara uygun olduğundan emin olmamız gerekmektedir. Örneğin schema’da bir çalışanın yaşını 18 ile 60 arasında bir değer olarak belirtirsek, XML dokumanınızdaki verilerde bu koşullara uymak zorunda olacaktır, aksi taktirde değer geçersiz kabul edilecektir.

XML dokumanlarının doğruluğunu XmlValidatingReader sınıfını kullanarak denetleyebiliriz. XmlValidatingReader sınıfı, XmlReader sınıfından türetilmiştir ve XmlTextReader sınıfına doğrulama desteğini eklemektedir. XmlValidatingReader sınıfı, XmlTextReader sınıfını girdi olarak alır ve XmlTextReader sınıfında belirttiğimiz özellikleri uygular.

Bir not olarak; ilişkisel verilerin XML görünümlerini oluşturmak için XDR schema kullanılabilir. Örneğin Microsoft SQL Server 2000, bir sorgunun sonuçlarını bir XDR schema tarafından doğrulanabilen bir XML dokumanı formatında almamıza olanak sağlar.

Aşağıdaki kod XmlTextReader sınıfına doğrulama desteğini vermek için XmlNavigatingReader sınıfının kullanımını örneklemektedir;

Dim Reader As XmlTextReader = New XmlTextReader("personel.xml")

Dim Validater As XmlValidatingReader = New XmlValidatingReader(Reader)

XML Dokumanlarının XmlValidatingReader kullanarak doğrulanması
Bir XML dokumanını doğrulamak için önce Load metodunu kullanarak bir XmlValidatingReader yüklemeniz gerekir. Aşağıdaki kod bir XML dokumanını doğrulamak için XmlValidatingReader’ın nasıl yüklenebileceğini örneklemektedir.

Dim XMLDoc As XmlDocument = New XmlDocument

Dim Reader As XmlTextReader = New XmlTextReader("personel.xml")

Dim Validater As XmlValidatingReader = New XmlValidatingReader(Reader)

XMLDoc.Load(Validater)

XmlValidatingReader Doğrulama Türleri
XML dosyası için XmlValidatingReader’ı yükledikten sonra ValidationType özelliğini kullanarak dokuman üzerinde yapmak istediğimiz doğrulamaların türlerini belirtebiliriz. ValidationType özelliğinin varsayılan değeri Auto’dur. Bu özellik için kullanılabilecek diğer değerler DTD, Schema, XDR veya None olabilir. Aşağıdaki tablo XmlValidatingReader’ın ValidationType özelliğini Auto yaptığımız durumda yaptığı doğrulamaları listelemektedir.

Doğrulama Türü Doğrulama
No DTD veya No Schema XML verisini doğrulama yapmadan parse eder.
DTD Dokuman üzerinde DTD doğrulaması yapar, varsayılan attribute ve entitiy’leri expand eder ve expand edilmiş olması halinde genel entity’leri parse eder.
XML Schema XSD doğrulaması yapar, schema’yı doğrular, varsayılan attribute’ları expand eder ve tür bilgisini sağlar.
XDR Schema XDR doğrulaması yapar, schema’yı doğrular, varsayılan attribute’ları expand eder ve tür bilgisini sağlar.
DTD, XML Schema veya XDR Schema İlk doğrulama türüne göre DTD/XML Schema/XDR doğrulaması yapar. DTD doğrılaması her zaman önce gerçekleşir.

Eğer ValidationType özelliğini XDR olarak belirlersek XmlValidatingReader dokumanı XDR schema’ları doğrultusunda incline schema’ları da içererek doğrular. Aşağıdaki tablo ValidationType özelliğini XDR olarak belirlediğimizde gerçekleşen doğrulamaları listelemektedir. 

Doğrulama Türü Doğrulama
No DTD veya Schema Hiç bir doğrulamalanın olmadığına dair bir final uyarı döner.
DTD Karışmış doğrulama türlerini gösteren XmlException oluşturur.
XML Schema Karışmış doğrulama türlerini gösteren XmlException oluşturur.
XDR Schema XDR doğrulaması yapar, schema’yı doğrular, varsayılan attribute’ları expand eder ve tür bilgisini sağlar.
DTD, XML Schema veya XDR Schema XDR doğrulaması yapar, varsayılan attribute’ları expand eder ve tür bilgisini sağlar. Eğer XmlValidatingReader bir DTD veya XML Schema bulursa karışmış doğrulama türlerini gösteren XmlException oluşturulur.

Eğer ValidationType özelliğini Schema olarak tanımlarsak, XmlValidatingReader dokumanı XML Schema doğrultusunda incline schema’ları da içererek doğrular. Aşağıdaki tablo ValidationType özelliğini Schema olarak belirlediğimizde gerçekleşen doğrulamaları listelemektedir.

Doğrulama Türü Doğrulama
No DTD veya Schema Her element için bir “No Schema Found” uyarısı döner.
DTD Karışmış doğrulama türlerini gösteren XmlException oluşturur.
XML Schema Xml Schema doğrulaması yapar, varsayılan attribute’ları expand eder ve Tür bilgisini sağlar.
XDR Schema Karışmış doğrulama türlerini gösteren XmlException oluşturur.
DTD, XML Schema veya XDR Schema XML Schema doğrulaması yapar, varsayılan attribute’ları expand eder ve tür bilgisi sağlar. Eğer XmlValidatingReader bir DTD veya XML Schema bulursa, karışmış doğrulama türlerini gösteren bir XmlException oluşturlur.

ValidationType özelliğini None olarak ta belirtebiliriz. None değeri bir nonvalidating W3C 1.0 recommendation doğrultusunda compile eden bir parser oluştuturur. Bu bize varsayılan attribute’ları raporlama ve genel entity’leri özümleme imkanı verir. None değeri herhangi bir doğrulama hatası (exception) oluşturmaz. Aşağıdaki tablo ValidationType özelliğine None değerini verdiğimizde gerçekleştirilen doğrulamaları görüntülemektedir.

Doğrulama Türü Doğrulama
No DTD veya Schema XML dokumanını perhangi bir doğrulama yapmadan, herhangi bir exception oluşturmadan veya herhangi bir tür bilgisi sağlamadan parse eder.
DTD XML 1.0 uyumlu, nonvalidating parser oluşturur, herhangi bir DTD doğrulaması yapmaz ve DTD’deki varsayılan attribute’ları ve entity’leri expand eder.
XML Schema herhangi bir DTD doğrulaması yapmaz ve DTD’deki varsayılan attribute’ları ve entity’leri expand eder.
XDR Schema herhangi bir DTD doğrulaması yapmaz ve DTD’deki varsayılan attribute’ları ve entity’leri expand eder.
DTD, XML Schema veya XDR Schema XML 1.0 uyumlu, nonvalidating parser oluşturur, herhangi bir DTD doğrulaması yapmaz ve DTD’deki varsayılan attribute’ları ve entity’leri expand eder.

XmlValidatingReader Kullanarak DTD’ye Bağlı Olarak Doğrulama Yapmak

DTD bir XML dokumanının yapısını ve sözdizimini tanımlamak için formal bir dil kullanır. Ek olarak DTD XML dokumanındaki içerik ve değerleri belirtir. Oluşturduğunuz XML dokumanı inline DTD içerebileceği gibi harici bir DTD dosyasına referans ta içerebilir. XmlValidatingReader’ı bir XML dokumanını DTD’ye bağlı olarak doğrulamak için yüklediğinizde, XmlValidatingReader XML dokumanının ?DOCTYPE bölümünde tanımlanmış DTD’yi kullanır.

Aşağıdaki kod bir XML dokumanını input olarak alarak harici bir DTD dosyası olan Personel.dtd’ye bağlı olarak XmlValidatingReader sınıfının kullanımını örneklemektedir;

Imports System

Imports System.IO

Imports System.Xml

Imports System.Xml.Schema

 

Public Class DTDValidation

Public Shared Sub Main()

Dim Reader As XmlTextReader = New XmlTextReader("personel.xml")

Dim Validater As XmlValidatingReader

Validater = New XmlValidatingReader(Reader)

Validater.ValidationType = ValidationType.DTD

AddHandler Validater.ValidationEventHandler, AddressOf _

ValidationCallback

While (Reader.Read())

End While

Console.WriteLine("Doğrulama Tamamlandı")

End Sub

 

Public Shared Sub ValidationCallBack(ByVal sender As Object, ByVal args As _

ValidationEventArgs)

Console.WriteLine("~ Doğrulama Hatası ~")

Console.WriteLine("Önem:{0}", args.Severity)

Console.WriteLine("Mesaj:{0}", args.Message)

End Sub

End Class

DTD’ye bağlı olarak doğrulama yapabilmek için Personel.Xml dosyamıza aşağıdaki satırı ekliyoruz.

<?xml version="1.0" encoding="utf-8" ?>

<!DOCTYPE personel SYSTEM "personel.dtd">

<personel>

<calisan>

<Ad>John</Ad>

Kullanacağımız DTD dosyası (personel.dtd) ise şu şekildedir;

<!ELEMENT personel (calisan)*>

<!ELEMENT calisan (Ad, Soyad, DogumTarihi, DateOfJoining, Adres,

Unvan, Derece)>

<!ELEMENT Ad (#PCDATA)>

<!ELEMENT Soyad (#PCDATA)>

<!ELEMENT DogumTarihi (#PCDATA)>

<!ELEMENT DateOfJoining (#PCDATA)>

<!ELEMENT Adres (#PCDATA)>

<!ELEMENT Unvan (#PCDATA)>

<!ELEMENT Derece (#PCDATA)>

Uygulamamızı çalıştırdığımızda doğrulamanın hatasız olarak tamamlandığını görüyoruz;

XmlValidatingReader Kullanarak XML Parçalarını Okumak

XmlValidatingReader’ı XML parçalarını okumak için kullanabiliriz. XmlValidatingReader string bir ifadeyi XML olarak yorumlar. Bu sayede XML dokumanının root-level kurallarını bypass edebiliriz. XmlValidatingReader’ın XmlNodeType parametresine gönderdiğimiz değer, XML string’i nasıl parse edeceğimizi belirler. Aşağıdaki tablo XmlValidatingReader, XML parçasını okuduğunda XML parçasının nasıl yorumlandığını listelemektedir;

Tür Nasıl Parse Edilir
Element Elementlerin, commentlerin, processing instruction’ların, CDATA’nın ve text’in kombinasyonlarını da içeren her türlü element içeriği.
Attribute Bir attribute’ın değeri
Document Tüm XML dokumanı. Bu tür root-level kuralları mecburi kılar.

Aşağıdaki kod örneği XmlValidatingReader’ı kullanarak bir XML parçasının okunmasını ve değerlerini görüntülemeyi gösterir.

Imports System

Imports System.Xml

Module Module1

Public Class XMLFragment

Public Overloads Shared Sub Main(ByVal args() As [String])

Dim Reader As New XmlValidatingReader( _

"<Ad>John</Ad>" & _

"<Soyad>Doe</Soyad>" & _

"<DogumTarihi>08/09/1968</DogumTarihi>" & _

"<Adres>2010 Stanley Dr., Charlotte, NC 28273</Adres>" & _

"<Unvan>Associate Consultant</Unvan>", _

XmlNodeType.Element, Nothing)

While Reader.Read()

Console.WriteLine("Node Türü: {0} Node Adı: {1} Node Değeri: " & _

"{2}", Reader.NodeType, Reader.Name, Reader.Value)

End While

Console.WriteLine("Çıkmak için <Enter> tuşuna basınız.")

Console.Read()

End Sub

End Class

End Module

Uygulamayı çalıştığımızda oluşan çıktı aşağıdaki gibidir;

Kaynak: Bu dokuman MCSD Self Paced Training Kit’in “Accessing and Manipulating XML Data” bölümü kaynak alınarak hazırlanmıştır.

Kadir Sümerkent
kadir@sumerkent.com