XML Scheme Kompleks Elemanlar ve Veri Tipleri
XSD ile Kompleks Elemanlar ve Veri Tipleri nasıl tanımlanır.
Nasıl kompleks eleman tanımlarız?
<kitap>
<adi>Yunus Emre Divanı</adi>
<dil>Türkçe</dil>
</kitap>
Kompleks eleman tanımlamanın iki yolu var.
<xs:element name="kitap">
<xs:complextype>
<xs:sequence>
<xs:element name="adi" type="xs:string"/>
<xs:element name="dil" type="xs:string"/>
</xs:sequence>
</xs:complextype>
</xs:element>
İlk yöntemimizde elemanın içinde tanımlayabiliriz.
Elemanın yapısı kendisine özgü ve başka yerde kullanılmayacağını düşünüyorsanız böyle tanımlayabilirisiniz.
Eğer oluşturulan yapının bir çok elemanda kullanılacağını düşünüyorsanız ikinci yöntemi tavsiye ediyorum;
<xs:element name="kitap" type="kitapGiris"/>
<xs:element name="kitapHakkinda" type="kitapGiris"/>
<!-- Bir veya birden çok eleman için tanımlayabilirsiniz. -->
<xs:complextype name="kitapGiris">
<xs:sequence>
<xs:element name="adi" type="xs:string"/>
<xs:element name="dil" type="xs:string"/>
</xs:sequence>
</xs:complextype>
Oluşturulan Kompleks Tipe harici olarak başka bir tipin özelliklerini dahil edebilirsiniz. Bundan sonraki örneklerde genellikle ikinci yöntemi kullanacağım.
<xs:element name="kitap" type="kitapGiris"/>
<xs:element name="kitapHakkinda" type="kitapHakkinda"/>
<!-- Bir veya birden çok eleman için tanımlayabilirsiniz. -->
<xs:complextype name="kitapGiris">
<xs:sequence>
<xs:element name="adi" type="xs:string"/>
<xs:element name="dil" type="xs:string"/>
</xs:sequence>
</xs:complextype>
<xs:complextype name="kitapHakkinda">
<xs:complexcontent>
<xs:extension base="kitapGiris">
<xs:sequence>
<xs:element name="yazar" type="xs:string"/>
<xs:element name="isbn" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexcontent>
</xs:complextype>
Boş Elemanlar
<kitap isbn="9759954949"/>
Elemanı kompleks şekilde tanımlamak için;
<xs:element name="kitap" type="kitapGiris"/>
<xs:complextype name="kitapGiris">
<xs:attribute name="isbn" type="xs:positiveInteger"/>
</xs:complextype>
"kitap" elemanına sadece isbn tanımlayabilirsiniz.
Sadece Eleman
<kitap>
<adi>Yunus Emre Divanı</adi>
<dil>Türkçe</dil>
</kitap>
Xml örnek alırsak ve Kompleks bir şekilde tanımlarsak.
<xs:element name="kitap" type="kitapYapi"/>
<xs:complextype name="kitapYapi">
<xs:sequence>
<xs:element name="adi" type="xs:string"/>
<xs:element name="dil" type="xs:string"/>
</xs:sequence>
</xs:complextype>
Sadece Metin İçerik
<kitap isbn="9759954949">Yunus Emre Divanı</kitap>
Tanımlanan kitap elemanın içeriğinin sadece metin olarak tanımlamak için.
<xs:element name="kitap" type="kitapYapi"/>
<xs:complextype name="kitapYapi">
<xs:simplecontent>
<xs:extension base="xs:string">
<xs:attribute name="isbn" type="xs:positiveInteger" />
</xs:extension>
</xs:simplecontent>
</xs:complextype>
Karışık İçerik
<kitap>
Kitap Adı : <adi>Yunus Emre Divanı</adi>
Dil : <dil>Türkçe</dil>
ISBN : <isbn>9759954949</isbn>
</kitap>
İçeriği karışık elemanlar için aşağıdaki şekilde tanımlarız.
<xs:element name="kitap" type="kitapYapi"/>
<xs:complextype mixed="true" name="kitapYapi">
<xs:sequence>
<xs:element name="adi" type="xs:string"/>
<xs:element name="dil" type="xs:string"/>
<xs:element name="isbn" type="xs:positiveInteger"/>
</xs:sequence>
</xs:complextype>
Göstergeler
<all>
içinde her düzen içinde kullanılır, bir adet çocuk eleman olması gerekir.
<xs:complextype mixed="true" name="kitapYapi">
<xs:all>
<xs:element name="adi" type="xs:string"/>
<xs:element name="dil" type="xs:string"/>
<xs:element name="isbn" type="xs:positiveInteger"/>
</xs:all>
</xs:complextype>
<choice>
bir ve birden fazla çocuk eleman kullanılabilir.
<xs:complextype mixed="true" name="kitapYapi">
<xs:choice>
<xs:element name="adi" type="xs:string"/>
<xs:element name="dil" type="xs:string"/>
<xs:element name="isbn" type="xs:positiveInteger"/>
</xs:choice>
</xs:complextype>
<sequence>
düzen içerisinde kullanılması zorunludur.
<xs:complextype mixed="true" name="kitapYapi">
<xs:sequence>
<xs:element name="adi" type="xs:string"/>
<xs:element name="dil" type="xs:string"/>
<xs:element name="isbn" type="xs:positiveInteger"/>
</xs:sequence>
</xs:complextype>
<maxOccurs>
: çocuk olan elemanın maksimum kaç defa kullanılabileceğini belirliyorsun <minOccurs>
: çocuk olan elemanın minimum kaç defa kullanılabileceğini belirliyorsun.
<xs:complextype mixed="true" name="kitapYapi">
<xs:sequence>
<xs:element name="adi" type="xs:string"/>
<xs:element name="dil" type="xs:string" maxOccurs="10" minOccurs="1"/>
</xs:sequence>
</xs:complextype>
Yukarıda dil elemanından minimum 1 tane olması gerektiğini ve maksimumda 10 tane olabileceğini belirledim <group>
grup oluşturarak bunu bir çok elemenda kullanabilirsiniz. Aynı zamanda yukarıdaki göstergelerin hepsini grup içerisinde kullanabilirsiniz.
<xs:group name="kitapGrup">
<xs:sequence>
<xs:element name="adi" type="xs:string"/>
<xs:element name="dil" type="xs:string"/>
</xs:sequence>
</xs:group>
<xs:element name="kitap" type="kitapGiris"/>
<xs:complextype name="kitapGiris">
<xs:sequence>
<xs:group ref="kitapGrup"/>
<xs:element name="isbn" type="xs:positiveInteger"/>
</xs:sequence>
</xs:complextype>
Aynı olay <attributeGroup>
içinde geçerlidir.
<xs:attributegroup name="kitapEtiket">
<xs:attribute name="isbn" type="xs:positiveInteger"/>
</xs:attributegroup>
<xs:element name="kitap" type="kitapGiris"/>
<xs:complextype name="kitapGiris">
<xs:sequence>
<xs:attributeGroup ref="kitapEtiket"/>
<xs:element name="isbn" type="xs:positiveInteger"/>
</xs:sequence>
</xs:complextype>
<any>
elemanı genişletmek için kullanırız. Aşağıdaki örnekte bir sonraki elemanı istediğimiz gibi tanımlayabiliriz.
<xs:complextype name="kitapYapi">
<xs:sequence>
<xs:element name="adi" type="xs:string"/>
<xs:element name="dil" type="xs:string"/>
<xs:any minOccurs="0"/>
</xs:sequence>
</xs:complextype>
<anyAttribute>
ise etiketleri genişletmek için kullanırız.
<xs:complextype name="kitapYapi">
<xs:sequence>
<xs:element name="adi" type="xs:string"/>
<xs:element name="dil" type="xs:string"/>
<xs:anyAttribute/>
</xs:sequence>
</xs:complextype>
"\substitutionGroup" başka bir elemanın yerine geçmesi için yazarız.
<xs:element name="kitap" type="xs:string"/>
<xs:element name="adi" substitutionGroup="kitap"/>
<!-- XML Tanımlarken -->
<kitap>Yunus Emre Divanı</kitap>
<!-- yada -->
<adi>Yunus Emre Divanı</adi>
Şeklinde tanımlayabiliyoruz. Eğer block="substitution" etiket şeklinde kullanırsak yukarıdaki gibi <adi></adi>
tanımlaması yapamayız.
Veri Tipleri
Veri tiplerini inceleyeceğiz.
Metin Veri Tipleri
Veri Tipi | Açıklama |
---|---|
ENTITIES | |
ENTITY | |
ID | Elemana etiket şeklinde atanmış bir id. |
IDREF | Elemana etiket şeklinde atanmış bir id. |
IDREFS | |
language | Doğrulanmış dil id’si |
Name | Doğrulanmış isim. |
NCName | |
NMTOKEN | Elemana etiket şeklinde atanmış bir id. |
NMTOKENS | |
normalizedString | Boşluk, Tab içermeyen metin. |
QName | |
string | Metin |
token | Boşluk, Tab vs içermeyen. |
Tarih Veri Tipleri
Veri Tipi | Açıklama |
---|---|
date | Tarih verisi |
dateTime | Tarih ve saat verisi |
duration | İnterval cinsinden veri |
gDay | Gün (DD) |
gMonth | Ay (MM) |
gMonthDay | Ay - Gün (MM-DD) |
gYear | Yıl (YYYY) |
gYearMonth | Yıl - Ay (YYYY-MM) |
time | Saat |
Sayısal Veri Tipleri
Veri Tipi | Açıklama |
---|---|
byte | işaretli 8-bit integer |
decimal | decimal değer |
int | işaretli 32-bit integer |
integer | integer değer |
long | işaretli 64-bit integer |
negativeInteger | Negatif değerler (..,-2,-1) |
nonNegativeInteger | Negatif olmayan değerler (0,1,2,..) |
nonPositiveInteger | Pozitif olmayan değerler (..,-2,-1,0) |
positiveInteger | Pozitif değerler (1,2,..) |
short | işaretli 16-bit integer |
unsignedLong | işaretsiz 64-bit integer |
unsignedInt | işaretsiz 32-bit integer |
unsignedShort | işaretsiz 16-bit integer |
unsignedByte | işaretsiz 8-bit integer |
Karışık Veri Tipleri
Veri Tipi | Açıklama |
---|---|
anyURI | |
base64Binary | |
boolean | |
double | |
float | |
hexBinary | |
NOTATION | |
QName |