Örnek bir xml dosyası
<?xml version="1.0" encoding="UTF-8"?>
<araclar>
<arac>
<marka>Hyundai</marka>
<model yil="2011">Ix20 1.4 CRDI - 77 PS</model>
<motor>
<hacim>1396</hacim>
<vites tip="Manual">6</vites>
<yakit>Dizel</yakit>
</motor>
</arac>
</araclar>
ve bu xml dosyasının hangi kurallar çerçevesinde tasarlandığını gösteren xsd dosyası
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="araclar">
<xs:complexType>
<xs:sequence>
<xs:element name="arac" type="aracModel"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="aracModel">
<xs:sequence>
<xs:element name="marka" type="xs:string"/>
<xs:element name="model" type="modelType"/>
<xs:element name="motor" type="motorType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="modelType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="yil" type="xs:string" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="motorType">
<xs:sequence>
<xs:element name="hacim" type="xs:integer"/>
<xs:element name="vites" type="vitesType"/>
<xs:element name="yakıt" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="vitesSimpleType">
<xs:restriction base="xs:int">
<xs:enumeration value="5"/>
<xs:enumeration value="6"/>
<xs:enumeration value="7"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="vitesType">
<xs:simpleContent>
<xs:extension base="vitesSimpleType">
<xs:attribute name="tip" type="xs:string" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:schema>
<?xml version="1.0" encoding="UTF-8"?>
UTF-8 karakter kodlaması türünde kodlandığını gösterir.İlk iki satır her xsd dosyasında sabittir fakat karakter kodlaması kimi dosyada değişebilir.
Tasarıma en tepedeki düğümden içeriye doğru kodlamaya başlıyoruz.Yani hiyerarşik bir düzende ilerleyeceğiz.
araclar içinde tanımlanan etiket arac etiketidir.
<xs:element name="araclar">
<xs:complexType>
<xs:sequence>
<xs:element name="arac" type="aracModel"/>
</xs:sequence>
</xs:complexType>
</xs:element>
yukarıdaki blok araclar etiketinin hangi kuralda kodlandığını göstermektedir.
xs:complexType : bir etikette hem attribute hem de value veya etiketin içinde etiketler(motor etiketinin altındakiler gibi) tasarlanıyorsa bu kullanılır.
xs:sequence : kodlama sırasına göre dosyaya yazılacağını ve hangi durumda olursa olsun bu sıranın bozulamayacağını gösterir.
xs:element : etiket tanımlamada kullanılır."name" alanı ile isim veririz."type" alanı ile kendi belirlediğimiz ya da dışarıdan hangi veri tipinin kullanılacağını belirtir.
Burada aracModel tipinde kendi tasarladığımız veri tipinde arac etiketi tasarlanmıştır.
<xs:complexType name="aracModel">
<xs:sequence>
<xs:element name="marka" type="xs:string"/>
<xs:element name="model" type="modelType"/>
<xs:element name="motor" type="motorType"/>
</xs:sequence>
</xs:complexType>
İşte yukarıda bahsettiğimiz aracModel kendi tanımladığımız veri tipi bu elementlerden oluşmaktadır.Gördüğümüz gibi xsd, düğümleri tasarlamakta kullanıcıya esnek bir yapı sunmaktadır.
Dikkatinizi çeken şey marka elementinin type alanı "xs:string" olacaktır.Burada marka etiketi bir string türünde olduğunu gösterir.Yukarıdaki tanımlama
arac etiketinin marka,model,motor etiketlerinden oluşacağını belirtmektedir.
Neden kendi veri tipimizi oluşturuyoruz?
Çünkü tasarlayacağımız yapıyı veritabanı tasarımı gibi düşünün.Zaten çoğu mobil uygulamalarda xml dosyaları veritabanı olarak kullanılmaktadır.Burada yaptığımız iş sadece veri tipi tanımlamak değil,bu veri tipiye çeşitli kısıtlamalar(ennumeration),özellikler(maxLength,minLength,required gibi) ekleyebiliyoruz.
<xs:complexType name="modelType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="yil" type="xs:string" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
Şimdi yukarıdaki modelType ın kodlamasına bakalım.xs:simpleContent etiketinin içine yazılmıştır.
xs:simpleContent : value yanında bir attribute tanımlarsa ve bunlara restriction(kısıtlama),extension(genişletme) özellikleri eklenirse xs:simpleContent tagi kullanılır.Bu tagin içine element yazılmaz.
yukarıdaki simpleContent extension özelliğiyle yazılmıştır.extension u kalıtım alma gibi düşünün bir sonraki örnekte daha rahat anlayacaksınız.Siz simpleContent te bir kısıtlama getirmeyecekseniz extension özelliğiyle kullanın.
xs:attribute : etikete bir özellik eklemek için kullanılır."use" özelliği,etiketin bu özelliği asla boş bırakılamayacağını söylemektedir.
<xs:complexType name="vitesType">
<xs:simpleContent>
<xs:extension base="vitesSimpleType">
<xs:attribute name="tip" type="xs:string" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
burada gördüğümüz gibi simpleContent "vitesSimpleType" tipinden kalıtım alarak "vitesType" tipini oluşturmuştur.
<xs:simpleType name="vitesSimpleType">
<xs:restriction base="xs:int">
<xs:enumeration value="5"/>
<xs:enumeration value="6"/>
<xs:enumeration value="7"/>
</xs:restriction>
</xs:simpleType>
Yukarıda kalıtımı alınan vitesSimpleType ın tasarımı bu şekildedir.
xs:simpleType etiketi altında yazılmıştır çünkü sadece etiketin alacağı value tanımlanmış ve restriction kullanılmıştır.Yukarıdakini özetleyecek olursak, <vites> </vites>etiketinin sadece 5,6,7 değerlerini alabileceğini göstermektedir
<xs:sequence>
<xs:element name="marka" type="xs:string"/>
<xs:element name="model" type="modelType"/>
<xs:element name="motor" type="motorType"/>
</xs:sequence>
</xs:complexType>
İşte yukarıda bahsettiğimiz aracModel kendi tanımladığımız veri tipi bu elementlerden oluşmaktadır.Gördüğümüz gibi xsd, düğümleri tasarlamakta kullanıcıya esnek bir yapı sunmaktadır.
Dikkatinizi çeken şey marka elementinin type alanı "xs:string" olacaktır.Burada marka etiketi bir string türünde olduğunu gösterir.Yukarıdaki tanımlama
arac etiketinin marka,model,motor etiketlerinden oluşacağını belirtmektedir.
Neden kendi veri tipimizi oluşturuyoruz?
Çünkü tasarlayacağımız yapıyı veritabanı tasarımı gibi düşünün.Zaten çoğu mobil uygulamalarda xml dosyaları veritabanı olarak kullanılmaktadır.Burada yaptığımız iş sadece veri tipi tanımlamak değil,bu veri tipiye çeşitli kısıtlamalar(ennumeration),özellikler(maxLength,minLength,required gibi) ekleyebiliyoruz.
<xs:complexType name="modelType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="yil" type="xs:string" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
Şimdi yukarıdaki modelType ın kodlamasına bakalım.xs:simpleContent etiketinin içine yazılmıştır.
xs:simpleContent : value yanında bir attribute tanımlarsa ve bunlara restriction(kısıtlama),extension(genişletme) özellikleri eklenirse xs:simpleContent tagi kullanılır.Bu tagin içine element yazılmaz.
yukarıdaki simpleContent extension özelliğiyle yazılmıştır.extension u kalıtım alma gibi düşünün bir sonraki örnekte daha rahat anlayacaksınız.Siz simpleContent te bir kısıtlama getirmeyecekseniz extension özelliğiyle kullanın.
xs:attribute : etikete bir özellik eklemek için kullanılır."use" özelliği,etiketin bu özelliği asla boş bırakılamayacağını söylemektedir.
<xs:complexType name="vitesType">
<xs:simpleContent>
<xs:extension base="vitesSimpleType">
<xs:attribute name="tip" type="xs:string" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
burada gördüğümüz gibi simpleContent "vitesSimpleType" tipinden kalıtım alarak "vitesType" tipini oluşturmuştur.
<xs:simpleType name="vitesSimpleType">
<xs:restriction base="xs:int">
<xs:enumeration value="5"/>
<xs:enumeration value="6"/>
<xs:enumeration value="7"/>
</xs:restriction>
</xs:simpleType>
Yukarıda kalıtımı alınan vitesSimpleType ın tasarımı bu şekildedir.
xs:simpleType etiketi altında yazılmıştır çünkü sadece etiketin alacağı value tanımlanmış ve restriction kullanılmıştır.Yukarıdakini özetleyecek olursak, <vites> </vites>etiketinin sadece 5,6,7 değerlerini alabileceğini göstermektedir
Hiç yorum yok:
Yorum Gönder