Bize Bir Tanım Lazım: XSD

Talha Uysal
Apinizer
Published in
5 min readSep 17, 2021

Herkese selamlar, XML yazı serimize devam ediyoruz. Bu yazıda XML dokümanları için bir tanım dosyası görevi gören XSD’ yi anlatacağım.

XSD’ nin açılımı (XML Schema Definition) Türkçe karşılığıyla “XML Şema Tanımıdır”.

Bu görsel“https://www.geeksforgeeks.org/xsd-full-form/” sitesinden alınmıştır.

XSD, belge içeriğini tanımlar, XML belgesinde kullanılacak olan verinin doğru olup olmadığını teyit eder. Eğer kullanılacak veride kısıtlamalar gerçekleştirilecekse de bunlara olanak sağlar. Farklı veri türleri arasında da veri dönüştürmeyi kolaylaştırır.

Aşağıdaki görsel örnek bir XSD dokümanına aittir. Bu görsel üzerinden XSD dokümanı içerisinde yer alan ifadeleri sırasıyla inceleyelim.

· elementFormDefault= “qualified” : Şema içerisinde kullanılan bütün elementlerin eksiksiz bir şekilde tanımlandığını belirtir, elementFormDefault ifadesinin varsayılan değeri “unqualified” ifadesidir. Bu değeri kullandığımızda doküman içerisinde yer alan elementlerin tanımlanmasında eksiklikler olduğu ifade edilir.

· Xmlns:xs = “http://www.w3.org/2001/XMLSchema” : Burada ise hazırlanan şemanın W3C tarafından tanınan XML Schema’sındaki tanımlamalar xs prefix’i ile kullanacağını göstermektedir.

· xs:complexType: Bu etiket, bu elementin kapsadığı tanımlamaların kompleks bir yapıda olduğu belirtir. Bir XML elementi kompleks bir yapıda ise bu elementin attribute sahip olduğunu göstermektedir.

· xs:sequence: Elementlerimizin bir sıra içerisinde olduğunu belirtir.

·maxOccurs=”unbounded” : Burada ise car elementinden sınırsız bir şekilde oluşturulabileceği belirtilmiştir, “maxOccurs” ifadesine numerik değerlerle de kullanabilirsiniz. Örneğin, “maxOccurs=10” ifadesi “car” elementinin en fazla 10 defa oluşturulabileceği anlamına gelir. “maxOccurs” ifadesinin minimum değerde kullanılması için “minOccurs” kavramı vardır.

·minOccurs: Root elementi içerisinde yer alacak olan diğer elementlerin en az kaç tane oluşturulması gerektiğini ifade eder.

Nillable ifadesi ile element içerisinde oluşturulacak olan elementin boş geçilip geçilmeyeceği kontrol edilebilir. Nillable ifadesi true ya da false değerleri ile kullanılır. Varsayılan değeri false ifadesidir.

· Type=”xs:string” : Bu ifade elementin veri tipini belirtmektedir. Bu veri tipi haricinde veri girişi kabul edilemez.

· use:”required” : Buranın required olmasının sebebi ise tanımladığımız XML dokümanı içerisinde yer alan bütün car elementlerine attribute atamış olmamızdan kaynaklıdır.

Bir XSD dokümanı içerisinde yer alan ifadeleri sırasıyla inceledik. XSD ile alakalı diğer ifadeler için buradaki linkte yer alan siteyi inceleyebilirsiniz. Şimdi ise bu ifadelere eklemeler yaparak XSD’ nin neler yapabildiğini görelim.

Cars.xsd dosyamızın içerisinde “daily_price” isimli bir element bulunmaktadır. Bu elementin adından da anlaşılacağı üzere araçların günlük fiyatını ifade etmektedir. Bir aracında fiyatı negatif sayılar içeremeyeceği için buraya bir kısıtlama getirmeliyiz. XSD’ de buna “restriction” denmektedir. Örnek kullanım aşağıdaki görsel de yer almaktadır.

Görselde de görüldüğü üzere yeni bir ifade ile karşılamaktayız. “minInclusive”, sayısal değerlerin alt sınırlarını belirtmektedir. MinInclusive ifadesine göre “daily_price” ifadesinin alacağı değer belirlenen değere ya eşit ya da ondan büyük olmalıdır.

Son örneğimizde de “description” isimli elementimize bir veri kısıtı uygulayalım. Description elementi araçlarımız ile alakalı açıklamaların tutulduğu bir değişkendir. Bu elemente içerisinde sadece alfabetik değerlerin kullanılabileceğini ve bu değerlerinde sadece küçük harflerden oluşabileceğini belirten bir kısıtlama getirelim. Aşağıdaki görsel de bu kısıtlamanın uygulanmış hali bulunmaktadır.

İstenilen kısıtı XSD’ de uygulamak için “pattern” ifadesi kullanılır. Pattern uygulanacak elemanın sadece kabul edilebilir karakter dizisinin tanımlanmasını sağlar. Diğer “restriction” ifadeleri ise aşağıda yer almaktadır.

· enumeration : Bir elementin kabul edebileceği değerlere ilişkin kısıtlama uygular.

· fractionDigits : Kesirli sayılar için virgülden sonra kaç basamak daha konulabiliri kontrol eder.

· length: Element içerisinde yer alan ifadenin kaç karakterden oluşabileceğine dair olan kısıtlamadır.

· maxLength: Element içerisinde yer alan ifadenin en fazla kaç karakterden oluşabileceğine dair olan kısıtlamadır.

· minLength: Element içerisinde yer alan ifadenin en az kaç karakterden oluşabileceğine dair olan kısıtlamadır.

· maxExclusive: Kullanılacak olan sayısal verinin üst sınırını belirler. Element içerisinde yer alacak olan verinin, kısıtta belirtilen değerden küçük olması gereklidir.

· maxInclusive: Kullanılacak olan sayısal verinin üst sınırını belirler ancak element içerisinde yer alacak olan veri, kısıtta belirtilen değere eşitte olabilir.

· minExclusive: Kullanılacak olan sayısal verinin alt sınırını belirler. Element içerisinde yer alacak olan veri, kısıtta yer alan değerden büyük olmalıdır.

· totalDigits: Sayısal türde tutulacak olan verinin kaç basamaktan oluşması gerektiği ile alakalı olan kısıtlamadır.

· whiteSpace: Element içerisinde yer alan veride ki boşlukların nasıl yönetileceği ile alakalı olan kısıtlamadır.

Yukarıda yer verdiğim kavramlar kadar önemli olan bir kavram daha var. XSD dokümanları “namespace” üzerine kurulmuş dokümanlardır. Aşağıda yer alan görsel üzerinden “namespace” kavramına açıklık getirelim.

Görselde de görüldüğü üzere XML tanımı yapıldıktan sonra bir de şema tanımı yapılmaktadır. Bu tanımda “xs” ifadesi yer alır, “xs” ifadesi aslında bizim XSD dokümanı oluştururken kendimizce ortaya koyduğumuz bir kullanımdır. “XS” ifadesi içerisinde birde URL yer almaktadır. İşte burada “namespace” tanımı yapılmaktadır. XSD dokümanı içerisinde “XS” ile başlayan bütün ifadeler aslında yukardaki satırda verilen URL’ye bağlıdır ve o url içerisinde yer alan bütün özellikler “XS” ifadesi ile elementler içerisine uygulanmaktadır.

Kısaca özetlemek gerekirse, XSD bir XML dokümanı için kullanılması önem arz eden bir kavramdır. XSD sayesinde XML dokümanının içerisinde yer alan 0element’ lerin, attribute’ lerin nasıl kullanılacağı, bu kullanım esnasında nelere dikkat edileceği ile alakalı bilgiler içermekte olup, XML türünde oluşturulacak olan diğer dokümanlara da yol gösterici olabilir.

Apinizer’da XSD

Apinizer üzerinde tanımlanan SOAP web servisler XML yapısını kullanarak haberleşmektedirler. Apinizer sahip olduğu politikalar sayesinde XML formatında gelen verilerin tanımlanmış XSD’ ye uygun olup olmadığını kontrol ederek hatalı bir durum olması durumda bunun servise erişiminden önce müdahale edilmesini sağlar.

Apinizer XSD validasyonu için bilgi almak için tıklayınız. Apinizer — API Yönetim Platformumuz hakkında bilgi almak için tıklayınız.

XML ile alakalı ilk yazımı okumadıysanız buradaki linkten okuyabilirsiniz. Serimin üçüncü yazısı “XPath” konusu ile devam edecektir. Bir sonraki yazımda buluşmak dileğiyle.

--

--