Ahmet Demirelli Sabancı Üniversitesi 2007

advertisement
XML
Ahmet Demirelli
Sabancı Üniversitesi
2007
Konular
XML
XSL
DTD
XML
Schema ( XSD )
İşaretleme Dili (Markup Language)
Nedir ?
Ne amaçla kullanılabilir ?
Etiket (Tag) nedir ?
Bildiğimiz işaretleme dilleri neler ?
HTML
Hyper Text Markup Language
En çok bilinen işaretleme dili
Düz yazıyı, etiketler yardımıyla daha güzel
görüntülenmesini sağlar
Önceden tanımlamış etiketler kullanır
Browserlar tarafından yorumlanır
Neden XML ihtiyacı
Veritabanlarındaki verilerin paylaşılması
Veri tabanındaki bilgilerin dosyalarda
saklanması
Özellikle B2B uygulamalarda verilerin
paylaşımı
Genel veri formatlama sorunu
Çözüm – XML
Neden XML e ihtiyacımız var bir örnekle
görelim
Örnek (Veri paylaşımı - B2B)
B şirketi
Dublin
A şirketi
İstanbul
Application
Application
(WepApp,Web
(WepApp,Web
Service
Service veya
veya
Network
Network app)
app)
•Veriyi çek
•Formatla *çok önemli
Application
Application
•Veriyi oku
•Parse et*
•Veri tabanına yaz
•Gönder
Veriyi neden formatlıyoruz
Veriyi neden parse ediyoruz
Örnek (Veri paylaşımı - B2B)
B şirketi
Dublin
A şirketi
İstanbul
110 : Ahmet : Demirelli \n 111 : Hakan : Inan \n
110 : Ahmet : Demirelli \n
111 : Hakan : Inan \n
...
Fromatla
....
ve
Gönder
Parse et
ve
Veritabanına yaz
No
Ad
Soyad
ID
Lastname
Name
110
Ahmet
Demirelli
110
Demirelli
Ahmet
111
Hakan
Inan
111
Inan
Hakan
Örnek Yorumları
Bu iki şirket başka şirketlerle veri paylaşıyorsa
“:” ve “\n” yerine başka ayıraçlar kullanılıyorsa
Veriler tüm dünyaya açılacaksa
Çözüm
Tüm dünya tarafından kabul edilmiş ve herkesin
kolayca anlayabileceği bir veri formatlama standardı
kullanmamız gerekecek
XML
XML
eXtensible Markup Language
Bir işaretleme dili
Genişletilebilir *
Verilerin taşınması veya dosyalarda saklanması için
kullanılır
Bütün programlama dillerinin XML desteği var
Tüm veritabanlarının XML desteği var
*Önceden tanımlanmış etiketler kullanmak yerine
kendi etiketlerimizi kullanırız
Örnek XML dökümanı
calisanlar tablosu
No
Ad
Soyad
110
Ahmet
Demirelli
111
Hakan
Inan
<?xml version="1.0">
<calisanlar>
<kisi>
<no>110</no>
<ad>Ahmet</ad>
<soyad>Demirelli</soyad>
</kisi>
<kisi>
<no>111</no>
<ad>Hakan</ad>
<soyad>Inan</soyad>
</kisi>
</calisanlar>
HTML vs XML
HTML verinin nasıl görüneceğini belirler
XML verinin ne verisi olduğunu belirler
HTML
<i>Bill</i>
<u>Lawrence</u>
XML
<aktor>
<isim>Zach</isim>
<soyisim>Braff</soyisim>
</aktor>
“Element” ler ve “Attribute” lar
Element
–
–
<firmaismi>Sun</firmaismi>
<firmaismi/> (boş element)
Attribute
–
<calisan id=“9786”>Ahmet</calisan>
XML yazım kuralları
Bir XML dökümanında;
Sadece bir tane root “element” olmalıdır
Etiket ve atribute isimleri “case sensitive” dir
Bütün elementlerin mutlaka kapanış etiketi olmalıdır
Elementler kesişmemelidir
“Attribute” lar mutlaka tırnak işareti içinde olmalıdır
Bu kurallara uygun yazılmış XML
dökümanlarına “well formed” denir.
eXtensible Stylesheet
Language
XSL
XSL
XSL(eXtensible Stlysheet Language)
XML dökümanının görünümünün nasıl
olması gerektiğini tanımlayan bir dildir.
Üç bileşenden oluşur;
–
–
–
XSLT – XML dökümanını dönüştürme dili
XPath – XML dökümanı içerisinde arama dili
XSL-FO – XML dökümanı formatlama dili
XSL
XSLT ( XSL Transformations )
–
Xpath i kullanarak XML dökümanını başka bir
dökümana dönüştürmek için kullanılır (Ör: html)
XPath
–
XML dökümanı içerisinde istediğimiz özellikteki
element veya attribute ulaşmamızı sağlayan dildir.
(SQL e benzer )
XSLT Örnekleri
Basit bir XSL yazmak
XML ve XSL birleşiminden HTML çıktı almak.
XML dökümanına aşağıdaki satırı ekliyoruz
<?xml-stylesheet type="text/xsl" href=“siparis.xsl"?>
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>Order List</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th align="left">Count</th>
<th align="left">Brand</th>
<th align="left">Model</th>
</tr>
XSLT
XPath
<xsl:for-each select=“siparisler/siparis">
<tr>
<td> <xsl:value-of select=“adet"/> </td>
<td> <xsl:value-of select=“marka"/> </td>
<td> <xsl:value-of select=“model"/> </td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Document Type Definition
DTD
Problem
XML dökümanında hangi element etiketleri
olacak ?
Bu bilgiyi diğer şirketlerlere nasıl bildireceğiz
paylaşacağız ?
ÇÖZÜM
DTD (Document Type Definition)
veya
XSD (XML Schema Definition)
DTD
XML dökümanındaki “element” lerin ve
“attribute” ların hangi özelliklerde* olması
gerektiği belirtilen dosya.
*(Element isimleri neler olmalı, kaç defa tekrar etmeli, bir elementin alt
elementleri neler olmalı, attribute ları neler olmalı ...vs )
DTD de belirtilen kurallara uygun yazılmış
XMLdökümanlarına Valid (onaylanmış)
döküman denilir.
XML (Well-Formed -- Valid)
-Well Formed–
yazım kurallarına uygun
-Valid–
–
Yazım kurallarına uygun
DTD de belirtilmiş kurallara uygun
Örnek DTD
<!ELEMENT siparisler (siparis)+>
<!ELEMENT siparis (adet, marka,model)>
<!ELEMENT adet (#PCDATA)>
<!ELEMENT marka (#PCDATA)>
<!ELEMENT model (#PCDATA)>
DTD bildirimleri (Declarations)
<! ELEMENT
<! ATTLIST
Bir element tipinin alabileceği attribute larının
bildirimidir.
<! ENTITY
Bir XML elementi bildirimidir
Belli bir içeriğin bir isme bağlanarak o isimle
ilişkilendirilmesini sağlar.
<! NOTATION
XML dökümanı haricinde bir veri tipi tanımlamak için kullanılır
<! ELEMENT
<! ELEMENT elementadı içerikTipi>
(diğer element isimleri) -- ismi yazılan elementleri içerir
EMPTY – Boş element
ANY – Herhengi bir element veya veri içerir
(#PCDATA) – Karakter veri içerir
Semboller
( ElementAdı ) – Element sadece bir kere tekrar etmeli
ElementAdı ? – Element bir kere veya hiç tekrar etmeyebilir
ElementAdı + -- Element 1 veya daha fazla tekrar etmeli
ElementAdı * -- Element 0 veya daha fazla tekrar etmeli
Element1, Element2 – Element2 , Element1 den sonra gelmeli
( Element1 | Element2 ) – Element1 veya Element2 den bir tanesi olmalı
<! ATTLIST
<! ATTLIST elementAdı attributeAdı attributeTipi
defaultDeğeri>
#REQUIRED – attribute her zaman olmalıdır
#IMPLIED – attribute zorunlu değildir
#FIXED değer– attribute değeri sabit değeri
alabilir (eğer element içerisinde attribute
kullanılmazsa bu değer alınır)
değer – attribute, element içerisinde kullanılmamış
ise orada yazılı değeri tanımlanmamış ise default
değeri alır
<! ATTLSIT urun urunKodu CDATA #REQUIRED >
Örnekler
DTD ve ona uygun yazılmış DTD örneği.
Basit bir DTD yazmak
DTD amaç ve eksiklikleri
DTD nin kullanım amaçları ;
XML dökümanın yazılım kurallarını belirlemek ve bunu diğer
kişilerle/kurumlarla paylaşmak
XML dosyasını kullanmadan önce onaylamak(Validation)
Bazı element veya attribute lar için default değerler atamak
DTD nin eksiklikleri;
Çok sınırlı veritipi (datatype) desteği
Veri tabanlarında kullanılan veri tiplerini desteklememesi
XML yazım kurallarına uygun olmaması (non-XML Format)
XML Schema Definitions
XSD
XML Schema (XSD)
DTD nin eksikliklerini gidermek için geliştrildi
Dosya uzantısı .xsd dir
Root element <schema>
XML yazım kurallarına uygun yazılmalıdır
Simple ve Complex elementler
“Simple” element bir değer dışında hiçbir şey
içermeyen elementdir.
–
–
–
Attribute içermez
Başka elementler içermez
Boş olamaz
Eğer bir element “simple” değil is “complex” tir.
–
–
–
Attribute ları olabilir
Boş olabilir
Başka elementler veya text içerebilir ya da her ikisini aynı
anda da içereblir
Simple ve complex elementler
<musteri>
complex element
<adres>
<sokak>5. Sokak</sokak>
<şehir>İstanbul</şehir>
<ülke>Türkiye</ülke>
</adres>
</musteri>
simple element
Simple element tanımı
Simple element tanımı ;
<xs:element name=“elementAdı" type=“tip" />
Burada:
–
–
name elementin ismi
Ençok kullandığımız element tipleri (type)
xs:boolean
xs:integer
xs:date
xs:string
xs:decimal
xs:time
Simple elementin alabileceği attribute ler:
–
–
default="default value“ değer verilmezse alacağı değer
fixed="value“ başka bir değer almasını istemiyorsak
Attribute tanımı
Attribute lar simple elementler gibi tanımlanır
Bir attribute tanımı;
<xs:attribute name="name" type="type" />
–
name ve type element tanımındaki gibidir
Attibute tanımıda bulunabilecek diğer attribute lar:
–
–
–
–
default="default value" değer verilmezse alacağı değer
fixed="value"
başka bir değer almasını istemiyorsak
use="optional" attribute kullanmak zorunlu değil ise
(default)
use="required" attribute kullanmak zorunlu ise
Kısıtlamalar
Eğer element veya attribute ların alacağı değerleri
kısıtlamak istersek:
–
<xs:element name=“ad">
<xs:restriction base=“tip">
... kısıtlamalar ...
</xs:restriction>
</xs:element>
(veya xs:attribute)
For example:
–
<xs:element name=“yaş">
<xs:restriction base="xs:integer">
<xs:minInclusive value="0">
<xs:maxInclusive value="140">
</xs:restriction>
</xs:element>
Sayısal kısıtlamalar
minInclusive – alabileceği değer ≥ value
minExclusive – alabileceği değer > value
maxInclusive -- alabileceği değer ≤ value
maxExclusive -- alabileceği değer < value
totalDigits -- değer value basamaklı olmalı
fractionDigits -- alabileceği değerdeki ondalık bölüm value
basamaklı olmalı
String (kelime) kısıtlamaları
length -- kelime value harfli olmalı
minLength -- kelime en az value harfli olmalı
maxLength -- kelime en fazla value harfli olmalı
pattern -- value regular expression
whiteSpace – whitespace karakterlerini ne yapması gerektiği
–
value="preserve"
kalsın
–
value="replace"
whitespace leri boşluk ile değiştir
–
value="collapse"
Tekrar eden whitespace karakterleri tek
bir boşluk haline getir
Enumeration (Liste kısıtlaması)
Elementin alabileceği değişkenleri liste halinde
belirler
Example:
–
<xs:element name=“mevsim">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value=“Yaz"/>
<xs:enumeration value=“Kış"/>
<xs:enumeration value=“Sonbahar"/>
<xs:enumeration value=“İlkbahar"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Complex element ler
Bir complex (karmaşık) tip tanımlanırken
<xs:element name=“adı">
<xs:complexType>
... Complex tip ile ilgili bilgiler...
</xs:complexType>
</xs:element>
Örnek:
<xs:element name=“kişi">
<xs:complexType>
<xs:sequence>
<xs:element name=“adı" type="xs:string" />
<xs:element name=“soyadı" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:sequence> elementler bu sırayla yazılmalı
Global ve local tanımlar
<xs:schema> etiketinin hemen altına tanımlanan “top level”
elementler şemanın heryerinde geçerlidir (global)
<xs:complexType> aetiketinin içerisinde tanımlanan elementler
sadece o kompleks tip için geçerlidirler (local)
Örnek:
<xs:element name=“kişi">
<xs:complexType>
<xs:sequence>
<xs:element name=“ad" type="xs:string" />
Local elements
<xs:element name=“soyad" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:schema> altında “top level” tanımlanan elementlerin sırası
önemli değildir
Complex element kullanımı
Tanımlamış olduğumuz bir complex element
i artık normal bir tip gibi type="...“ attribute
ları içerisinde kullanabiliriz
–
örnek:
–
<xs:element name=“öğrenci" type=“kisi"/>
<xs:element name=“öğretmen" type=“kisi"/>
Bir elemente ait local tipleri başka bir element
içerisinde kullanamayız
<xs:sequence
Bir complex tip içerisindeki elementlerin
sırasını ve isimlerini belirtmek için kullanırız:
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="firstName" type="xs:string" />
<xs:element name="lastName" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:all
<xs:all elementleri herhangi bir sıralanması
kısıtlamaz
<xs:element name="person">
<xs:complexType>
<xs:all>
<xs:element name="firstName" type="xs:string" />
<xs:element name="lastName" type="xs:string" />
</xs:all>
</xs:complexType>
</xs:element>
<xs:all grup elementleri 1 veya hiç tekrar etmeyebilir
Eğer tekrar kısıtlaması yapmak istersek minOccurs="n"
ve maxOccurs="n" kullanabiliriz(default değer 1 dir)
–
Yukarıdaki örnekte <xs:all elementleri 0 veya 1 defa tekrar
edebilir
Attribute`u olan Elementler
Eğer bir elementin attributeları varsa artık o element
simple type değildir.
–
–
<xs:element name="population">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:integer">
<xs:attribute name="year" type="xs:integer">
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
Boş element ler
Boş elementler “complex” tir. ☺
<xs:complexType name="counter">
<xs:complexContent>
<xs:extension base="xs:anyType"/>
<xs:attribute name="count" type="xs:integer"/>
</xs:complexContent>
</xs:complexType>
Extensions
BiR complex tip tanımlarken başka bir
complex tip baz alınabilir.(inheritance ?)
<xs:complexType name="newType">
<xs:complexContent>
<xs:extension base="otherType">
...new stuff...
</xs:extension>
</xs:complexContent>
</xs:complexType>
string tipleri
Bir string tipi olarak aşğıdakileri kullanabiliriz:
–
–
–
xs:string – herhangi bir string
xs:normalizedString – “tab”, yeni satır ve satır başı
karakterleri içermeyen string
xs:token – tek boşluk karakteri haric hiç bir whitespace
karakteri içermeyen string
Stringlere uygulanabilecek kısıtlamalar:
–
enumeration, length, maxLength, minLength, pattern,
whiteSpace
date ve time tipleri
xs:date -- CCYY-MM-DD, şeklindeki tarih formatı,
örnek: 2002-11-05
xs:time -- hh:mm:ss şeklindeki zaman formatı (saat,
dakika, saniye)
xs:dateTime -- CCYY-MM-DDThh:mm:ss birleştirilmiş
tarih ve zaman formatı
date ve time tiplerinde kullanılabilecek kısıtlamalar:
–
enumeration, minInclusive, maxExclusive, maxInclusive,
maxExclusive, pattern, whiteSpace
Sayısal (numeric) tipler
Sayısal ifadelerde aşağıdaki tipler kullanılabilir:
xs:decimal
xs:positiveInteger
xs:byte
xs:negativeInteger
xs:short
xs:nonPositiveInteger
xs:int
xs:nonNegativeInteger
xs:long
Sayısal ifadelerdeki kısıtlamalar:
–
enumeration, minInclusive, maxExclusive, maxInclusive,
maxExclusive, fractionDigits, totalDigits, pattern,
whiteSpace
Örnekler
XSD ve ona uygun yazılmış XML örneği
Eclipse te XSD yazmak.
XML e uygun şema üretmek.
Validate etmek.
....vs
ahmetdemirelli@sabanciuniv.edu
Download