XSD - Hızlı Kılavuz

Yaygın olarak XSD olarak bilinen XML Şema Tanımı, XML dilini tam olarak tanımlamanın bir yoludur. XSD, bir XML belgesinin yapısının ve sözlüğünün geçerliliğini, uygun XML dilinin gramer kurallarına göre kontrol eder.

Bir XML belgesi şu şekilde tanımlanabilir -

  • Well-formed- XML ​​belgesi, etiketler gibi tüm genel XML kurallarına uygunsa, düzgün şekilde iç içe geçmeli, açılış ve kapanış etiketlerinin dengeli olması ve boş etiketlerin '/>' ile bitmesi gerekir, o zaman iyi biçimlendirilmiş olarak adlandırılır .

    OR

  • Valid- Bir XML belgesinin yalnızca iyi biçimlendirilmiş değil , aynı zamanda hangi etiketleri kullandığını, bu etiketlerin hangi nitelikleri içerebileceğini ve diğer özelliklerin yanı sıra diğer etiketlerin içinde hangi etiketlerin bulunabileceğini belirten mevcut XSD'ye de uygun olduğu söylenir. .

Aşağıdaki şema, XSD'nin XML belgelerini yapılandırmak için nasıl kullanıldığını gösterir -

İşte basit bir XSD kodu. Ona bir göz atın.

<?xml version = "1.0"?>

<xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema">
   targetNamespace = "http://www.tutorialspoint.com" 
   xmlns = "http://www.tutorialspoint.com"
   elementFormDefault = "qualified">

   <xs:element name = 'class'>
      <xs:complexType>
         <xs:sequence>
            <xs:element name = 'student' type = 'StudentType' minOccurs = '0' 
               maxOccurs = 'unbounded' />
         </xs:sequence>
      </xs:complexType>
   </xs:element>

   <xs:complexType name = "StudentType">
      <xs:sequence>
         <xs:element name = "firstname" type = "xs:string"/>
         <xs:element name = "lastname" type = "xs:string"/>
         <xs:element name = "nickname" type = "xs:string"/>
         <xs:element name = "marks" type = "xs:positiveInteger"/>
      </xs:sequence>
      <xs:attribute name = 'rollno' type = 'xs:positiveInteger'/>
   </xs:complexType>
   
</xs:schema>

Özellikleri

İşte XSD'nin bazı popüler özelliklerinin bir listesi -

  • XSD'ler gelecekteki eklemeler için genişletilebilir.
  • XSD, DTD'den daha zengin ve daha güçlüdür.
  • XSD, XML ile yazılmıştır.
  • XSD, veri türlerini destekler.
  • XSD ad alanlarını destekler.
  • XSD, W3C tavsiyesidir.

Bir XML XSD ayrı bir belgede tutulur ve ardından belge kullanmak için bir XML belgesine bağlanabilir.

Sözdizimi

Bir XSD'nin temel sözdizimi aşağıdaki gibidir -

<?xml version = "1.0"?>

<xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema">
   targetNamespace = "http://www.tutorialspoint.com"
   xmlns = "http://www.tutorialspoint.com" elementFormDefault = "qualified">
   
   <xs:element name = 'class'>
      <xs:complexType>
         <xs:sequence>
            <xs:element name = 'student' type = 'StudentType' minOccurs = '0' 
               maxOccurs = 'unbounded' />
         </xs:sequence>
      </xs:complexType>
   </xs:element>

   <xs:complexType name = "StudentType">
      <xs:sequence>
         <xs:element name = "firstname" type = "xs:string"/>
         <xs:element name = "lastname" type = "xs:string"/>
         <xs:element name = "nickname" type = "xs:string"/>
         <xs:element name = "marks" type = "xs:positiveInteger"/>
      </xs:sequence>
      <xs:attribute name = 'rollno' type = 'xs:positiveInteger'/>
   </xs:complexType>
   
</xs:schema>

<Schema> Öğesi

Şema, XSD'nin temel öğesidir ve her zaman gereklidir.

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

Yukarıdaki parça, şemada kullanılan öğelerin ve veri türlerinin şurada tanımlandığını belirtir: http://www.w3.org/2001/XMLSchema ad alanı ve bu öğeler / veri türleri önek olarak gelmelidir xs. Her zaman gereklidir.

targetNamespace = "http://www.tutorialspoint.com"

Yukarıdaki parça, bu şemada kullanılan öğelerin içinde tanımlandığını belirtir. http://www.tutorialspoint.comad alanı. İsteğe bağlıdır.

xmlns = "http://www.tutorialspoint.com"

Yukarıdaki parça, varsayılan ad alanının olduğunu belirtir http://www.tutorialspoint.com.

elementFormDefault = "qualified"

Yukarıdaki parça, bu şemada bildirilen herhangi bir öğenin herhangi bir XML Belgesinde kullanılmadan önce ad alanı nitelikli olması gerektiğini belirtir.

Şema Başvurusu

Aşağıdaki Referans Şemasına bir göz atın -

<?xml version = "1.0"?>

<class xmlns = "http://www.tutorialspoint.com"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://www.tutorialspoint.com student.xsd">  
   
   <student rollno = "393">    
      <firstname>Dinkar</firstname>
      <lastname>Kad</lastname>
      <nickname>Dinkar</nickname>
      <marks>85</marks>
   </student>
   
   <student rollno = "493">	 
      <firstname>Vaneet</firstname>
      <lastname>Gupta</lastname>
      <nickname>Vinni</nickname>
      <marks>95</marks>
   </student>
   
   <student rollno = "593">    
      <firstname>Jasvir</firstname>
      <lastname>Singh</lastname>
      <nickname>Jazz</nickname>
      <marks>90</marks>
   </student>
</class>
xmlns = "http://www.tutorialspoint.com"

Yukarıdaki parça, varsayılan ad alanı bildirimini belirtir. Bu ad alanı, şema doğrulayıcı tarafından kullanılır, tüm öğelerin bu ad alanının parçası olduğunu kontrol edin. İsteğe bağlıdır.

xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://www.tutorialspoint.com student.xsd">

XMLSchema örneği xsi'yi tanımladıktan sonra şunu kullanın: schemaLocationöznitelik. Bu özniteliğin, bir boşlukla ayrılmış olarak kullanılacak XML Şemasının ad alanı ve konumu olmak üzere iki değeri vardır. İsteğe bağlıdır.

Doğrulamak için Java tabanlı XSD doğrulayıcı kullanacağız students.xml karşı students.xsd.

öğrenciler.xml

<?xml version = "1.0"?>

<class>  
   <student rollno = "393">
      <firstname>Dinkar</firstname>    
      <lastname>Kad</lastname>
      <nickname>Dinkar</nickname>
      <marks>85</marks>	 
   </student>
   
   <student rollno = "493">	 
      <firstname>Vaneet</firstname>
      <lastname>Gupta</lastname>
      <nickname>Vinni</nickname>
      <marks>95</marks>
   </student>
   
   <student rollno = "593">    
      <firstname>Jasvir</firstname>
      <lastname>Singh</lastname>
      <nickname>Jazz</nickname>
      <marks>90</marks>
   </student>
</class>

öğrenciler.xsd

<?xml version = "1.0"?>

<xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema">
   <xs:element name = 'class'>
      <xs:complexType>
         <xs:sequence>
             <xs:element name = 'student' type = 'StudentType' minOccurs = '0' 
                maxOccurs = 'unbounded' />
         </xs:sequence>
      </xs:complexType>
   </xs:element>

   <xs:complexType name = "StudentType">
      <xs:sequence>
         <xs:element name = "firstname" type = "xs:string"/>
         <xs:element name = "lastname" type = "xs:string"/>
         <xs:element name = "nickname" type = "xs:string"/>
         <xs:element name = "marks" type = "xs:positiveInteger"/>
      </xs:sequence>
      <xs:attribute name = 'rollno' type = 'xs:positiveInteger'/>
   </xs:complexType>			 
</xs:schema>

XSDValidator.java

import java.io.File;
import java.io.IOException;

import javax.xml.XMLConstants;
import javax.xml.transform.stream.StreamSource;

import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;

import org.xml.sax.SAXException;

public class XSDValidator {
   public static void main(String[] args) {
      if(args.length !=2){
         System.out.println("Usage : XSDValidator <file-name.xsd> <file-name.xml>" );
      } else {
         boolean isValid = validateXMLSchema(args[0],args[1]);
         
         if(isValid){
            System.out.println(args[1] + " is valid against " + args[0]);
         } else {
            System.out.println(args[1] + " is not valid against " + args[0]);
         }
      }
   }
   
   public static boolean validateXMLSchema(String xsdPath, String xmlPath){
      try {
         SchemaFactory factory =
            SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
            Schema schema = factory.newSchema(new File(xsdPath));
            Validator validator = schema.newValidator();
            validator.validate(new StreamSource(new File(xmlPath)));
      } catch (IOException e){
         System.out.println("Exception: "+e.getMessage());
         return false;
      } catch(SAXException e1){
         System.out.println("SAX Exception: "+e1.getMessage());
         return false;
      }
		
      return true;
   }
}

XML'i XSD'ye göre doğrulama adımları

  • Kopyala XSDValidator.java herhangi bir konuma dosya, diyelim E: > java

  • Kopyala students.xml aynı yere E: > java

  • Kopyala students.xsd aynı yere E: > java

  • Derleme XSDValidator.javakonsol kullanarak. Makinenizde JDK 1.5 sonrası kurulu olduğundan ve sınıf yollarının yapılandırıldığından emin olun. JAVA'nın nasıl kullanılacağına ilişkin ayrıntılar için bkz. JAVA Eğitimi

E:\java\javac XSDValidator.java
  • Yürüt XSDValidator ile students.xsd ve students.xml argüman olarak geçti.

E:\java\java XSDValidator students.xsd students.xml

Çıkışı doğrulayın

Şu sonucu göreceksiniz -

students.xml is valid against students.xsd

Bu bölümde, XSD'nin tanımladığı Basit Türleri göreceğiz.

S.No. Basit Tip ve Açıklama
1

Eleman

Basit Öğe yalnızca metin içerebilir. Başka herhangi bir unsur içeremez.

2

Öznitelik

Öznitelik kendisi bir türdür ve Karmaşık Eleman'da kullanılır.

3

Kısıtlama

Kısıtlama, bir XML öğesinin kabul edilebilir değerlerini tanımlar.

Karmaşık Öğe, diğer öğeleri ve / veya nitelikleri içerebilen bir XML öğesidir. Karmaşık bir unsuru iki şekilde oluşturabiliriz -

  • Karmaşık bir tür tanımlayın ve ardından type nitelik

  • Karmaşık bir türü doğrudan adlandırarak tanımlayın

Karmaşık bir Tür tanımlayın ve ardından tür özniteliğini kullanarak bir öğe oluşturun.

<xs:complexType name = "StudentType">
   <xs:sequence>
      <xs:element name = "firstname" type = "xs:string"/>
      <xs:element name = "lastname" type = "xs:string"/>
      <xs:element name = "nickname" type = "xs:string"/>
      <xs:element name = "marks" type = "xs:positiveInteger"/>
   </xs:sequence>
   <xs:attribute name = 'rollno' type = 'xs:positiveInteger'/>
</xs:complexType>

<xs:element name = 'student' type = 'StudentType' />

Doğrudan adlandırarak bir Karmaşık Tür tanımlayın.

<xs:element name = "student">
   <xs:complexType>   
      <xs:sequence>
         <xs:element name = "firstname" type = "xs:string"/>
         <xs:element name = "lastname" type = "xs:string"/>
         <xs:element name = "nickname" type = "xs:string"/>
         <xs:element name = "marks" type = "xs:positiveInteger"/>
      </xs:sequence>
   <xs:attribute name = 'rollno' type = 'xs:positiveInteger'/>
   </xs:complexType>
<xs:element>

XSD'nin desteklediği Karmaşık Türlerin listesi aşağıdadır.

S.No. Basit Tip ve Açıklama
1

Boş

Karmaşık Boş karmaşık tür öğe yalnızca özniteliklere sahip olabilir, ancak içeriği olamaz.

2

Yalnızca Öğeler

Öğeler - Yalnızca karmaşık türdeki öğe yalnızca öğe içerebilir

3

Sadece yazı

Yalnızca Metin karmaşık tür öğesi yalnızca öznitelik ve metin içerebilir.

4

Karışık

Karışık karmaşık türdeki öğe, öğe, nitelik ve metin içerebilir.

5

Göstergeler

Göstergeler, bir XML belgesindeki öğelerin nasıl düzenleneceğini kontrol eder.

6

<any> öğesi, şema tarafından tanımlanmayan öğeler için kullanılır

7

<anyAttribute> özniteliği, şema tarafından tanımlanmayan öznitelik için kullanılır.

Dize veri türleri, XML belgelerindeki karakterleri temsil etmek için kullanılır.

<xs: string> veri türü

<Xs: string> veri türü karakterler, satır beslemeleri, satır başları ve sekme karakterleri alabilir. XML işlemci içerikteki satır beslemelerini, satır başlarını ve sekme karakterlerini boşlukla değiştirmez ve bozulmadan korur. Örneğin, görüntüleme sırasında birden çok boşluk veya sekme korunur.

<xs: string> Örnek

Xsd'de öğe bildirimi -

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

Xml'de öğe kullanımı -

<name>Dinkar</name>
<name>Dinkar    Kad</name>

<xs: token> veri türü

<Xs: token> veri türü, <string> veri türünden türetilir ve karakterler, satır beslemeleri, satır başları ve sekme karakterleri alabilir. XML işlemci satır beslemelerini, sekmeleri, satır başlarını, baştaki ve sondaki boşlukları ve çoklu boşlukları kaldıracaktır.

<xs: token> Örnek

Xsd'de öğe bildirimi -

<xs:element name = "name" type = "xs:token"/>

Xml'de öğe kullanımı -

<name>Dinkar</name>
<name>Dinkar    Kad</name>

Dize Veri Türleri

Aşağıda, <string> veri türünden türetilen yaygın olarak kullanılan veri türlerinin listesi verilmiştir.

S.No. İsim & Açıklama
1

ID

XML'deki ID özniteliğini temsil eder ve şema özniteliklerinde kullanılır.

2

IDREF

XML'deki IDREF özniteliğini temsil eder ve şema özniteliklerinde kullanılır.

3

language

Geçerli bir dil kimliğini temsil eder

4

Name

Geçerli bir XML adını temsil eder

5

NMTOKEN

XML'de bir NMTOKEN özniteliğini temsil eder ve şema özniteliklerinde kullanılır.

6

normalizedString

Satır beslemeleri, satır başları veya sekmeler içermeyen bir dizeyi temsil eder.

7

string

Satır beslemeleri, satır başları veya sekmeler içerebilen bir dizeyi temsil eder.

8

token

Satır beslemeleri, satır başları, sekmeler, baştaki veya sondaki boşluklar veya birden çok boşluk içermeyen bir dizeyi temsil eder

Kısıtlamalar

String veri türleri ile aşağıdaki kısıtlama türleri kullanılabilir -

  • enumeration
  • length
  • maxLength
  • minLength
  • pattern
  • whiteSpace

Tarih ve Saat veri türleri, XML belgelerinde tarih ve saati temsil etmek için kullanılır.

<xs: tarih> veri türü

<Xs: date> veri türü, tarihi YYYY-AA-GG formatında temsil etmek için kullanılır.

  • YYYY - yılı temsil eder

  • MM - ayı temsil eder

  • DD - günü temsil eder

<xs: tarih> Örnek

XSD'de öğe bildirimi -

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

XML'de öğe kullanımı -

<birthdate>1980-03-23</birthdate>

<xs: time> veri türü

<Xs: time> veri türü, saati ss: dd: ss biçiminde temsil etmek için kullanılır.

  • hh - saatleri temsil eder

  • mm - dakikaları temsil eder

  • ss - saniyeleri temsil eder

<xs: time> Örnek

XSD'de öğe bildirimi -

<xs:element name = "startTime" type = "xs:time"/>

XML'de öğe kullanımı -

<startTime>10:20:15</startTime>

<xs: datetime> veri türü

<Xs: datetime> veri türü, tarihi ve saati YYYY-AA-GGTss: dd: ss biçiminde temsil etmek için kullanılır.

  • YYYY - yılı temsil eder

  • MM - ayı temsil eder

  • DD - günü temsil eder

  • T - zamanın başlangıcı bölümünü temsil eder

  • hh - saatleri temsil eder

  • mm - dakikaları temsil eder

  • ss - saniyeleri temsil eder

<xs: datetime> Örnek

XSD'de öğe bildirimi -

<xs:element name = "startTime" type = "xs:datetime"/>

XML'de öğe kullanımı -

<startTime>1980-03-23T10:20:15</startTime>

<xs: süre> veri türü

<Xs: duration> veri türü, PnYnMnDTnHnMnS biçiminde zaman aralığını temsil etmek için kullanılır. P hariç her bileşen isteğe bağlıdır.

  • P - tarihin başlangıcı bölümünü temsil eder

  • nY - yılı temsil eder

  • nM - ayı temsil eder

  • nD - günü temsil eder

  • T - zamanın başlangıcı bölümünü temsil eder

  • nH - saatleri temsil eder

  • nM - dakikaları temsil eder

  • nS - saniyeleri temsil eder

<xs: süre> Örnek

XSD'de öğe bildirimi -

<xs:element name = "period" type = "xs:duration"/>

Xml'de 6 yıl, 3 ay, 10 gün ve 15 saatlik süreyi temsil eden öğe kullanımı.

<period>P6Y3M10DT15H</period>

Tarih Veri Türleri

Yaygın olarak kullanılan tarih veri türlerinin listesi aşağıdadır.

S.No. İsim & Açıklama
1.

date

Bir tarih değerini temsil eder

2.

dateTime

Bir tarih ve saat değerini temsil eder

3.

duration

Bir zaman aralığını temsil eder

4.

gDay

Tarihin bir bölümünü gün (DD) olarak temsil eder

5.

gMonth

Tarihin bir bölümünü ay (MM) olarak temsil eder

6.

gMonthDay

Tarihin bir bölümünü ay ve gün olarak temsil eder (AA-GG)

7.

gYear

Tarihin bir bölümünü yıl olarak temsil eder (YYYY)

8.

gYearMonth

Tarihin bir bölümünü yıl ve ay olarak temsil eder (YYYY-AA)

9.

time

Bir zaman değerini temsil eder

Kısıtlamalar

Tarih veri türleri ile aşağıdaki kısıtlama türleri kullanılabilir -

  • enumeration
  • maxExclusive
  • maxInclusive
  • minExclusive
  • minInclusive
  • pattern
  • whiteSpace

XML belgelerindeki sayıları temsil etmek için sayısal veri türleri kullanılır.

<xs: decimal> veri türü

<Xs: decimal> veri türü, sayısal değerleri temsil etmek için kullanılır. 18 basamağa kadar ondalık sayıları destekler.

<xs: decimal> Örnek

XSD'de öğe bildirimi -

<xs:element name = "score" type = "xs:decimal"/>

XML'de öğe kullanımı -

<score>9.12</score>

<xs: tamsayı> veri türü

<Xs: integer> veri türü, tam sayı değerlerini temsil etmek için kullanılır.

<xs: integer> Örnek

XSD'de öğe bildirimi -

<xs:element name = "score" type = "xs:integer"/>

XML'de öğe kullanımı -

<score>9</score>

Sayısal Veri Türleri

Yaygın olarak kullanılan sayısal veri türlerinin listesi aşağıdadır.

S.No. İsim & Açıklama
1.

byte

İşaretli bir 8 bit tam sayı

2.

decimal

Ondalık bir değer

3.

int

İmzalı 32 bit tam sayı

4.

integer

Bir tamsayı değeri

5.

long

İmzalı 64 bit tam sayı

6.

negativeInteger

Yalnızca negatif değerleri olan bir tam sayı (.., - 2, -1)

7.

nonNegativeInteger

Yalnızca negatif olmayan değerlere (0,1,2, ..) sahip bir tam sayı

8.

nonPositiveInteger

Yalnızca pozitif olmayan değerlere sahip bir tam sayı (.., - 2, -1,0)

9.

positiveInteger

Yalnızca pozitif değerlere sahip bir tam sayı (1,2, ..)

10.

short

İşaretli 16 bit tam sayı

11.

unsignedLong

İmzasız 64 bit tam sayı

12.

unsignedInt

İşaretsiz 32 bit tam sayı

13.

unsignedShort

İşaretsiz 16 bitlik bir tam sayı

14.

unsignedByte

İşaretsiz 8 bitlik bir tam sayı

Kısıtlamalar

Tarih veri türleri ile aşağıdaki kısıtlama türleri kullanılabilir -

  • enumeration
  • fractionDigits
  • maxExclusive
  • maxInclusive
  • minExclusive
  • minInclusive
  • pattern
  • totalDigits
  • whiteSpace

XSD'de birkaç önemli veri türü daha vardır, örneğin Boolean, binary, ve anyURI.

<xs: boolean> veri türü

<Xs: boolean> veri türü, doğru, yanlış, 1 (doğru için) veya 0 (yanlış için) değerini temsil etmek için kullanılır.

<xs: boolean> Örnek

XSD'de öğe bildirimi -

<xs:element name = "pass" type = "xs:boolean"/>

XML'de öğe kullanımı -

<pass>false</pass>

İkili veri türleri

İkili veri türleri, ikili değerleri temsil etmek için kullanılır. İki ikili tür kullanımda yaygındır.

  • base64Binary - base64 kodlu ikili verileri temsil eder

  • hexBinary - onaltılık olarak kodlanmış ikili verileri temsil eder

<xs: hexbinary> Örnek

XSD'de öğe bildirimi -

<xs:element name = "blob" type = "xs:hexBinary"/>

XML'de öğe kullanımı -

<blob>9FEEF</blob>

<xs: anyURI> veri türü

<Xs: anyURI> veri türü, URI'yi temsil etmek için kullanılır.

<xs: anyURI> Örnek

XSD'de öğe bildirimi -

<xs:attribute name = "resource" type = "xs:anyURI"/>

XML'de öğe kullanımı -

<image resource = "http://www.tutorialspoint.com/images/smiley.jpg" />

Sayısal Veri Türleri

Yaygın olarak kullanılan sayısal veri türlerinin listesi aşağıdadır.

S.No. İsim & Açıklama
1.

byte

İşaretli bir 8 bit tam sayı

2.

decimal

Ondalık bir değer

3.

int

İmzalı 32 bit tam sayı

4.

integer

Bir tamsayı değeri

5.

long

İmzalı 64 bit tam sayı

6.

negativeInteger

Yalnızca negatif değerleri olan bir tam sayı (.., - 2, -1)

7.

nonNegativeInteger

Yalnızca negatif olmayan değerlere (0,1,2, ..) sahip bir tam sayı

8.

nonPositiveInteger

Yalnızca pozitif olmayan değerlere sahip bir tam sayı (.., - 2, -1,0)

9.

positiveInteger

Yalnızca pozitif değerlere sahip bir tam sayı (1,2, ..)

10.

short

İşaretli 16 bit tam sayı

11.

unsignedLong

İmzasız 64 bit tam sayı

12.

unsignedInt

İşaretsiz 32 bit tam sayı

13.

unsignedShort

İşaretsiz 16 bitlik bir tam sayı

14.

unsignedByte

İşaretsiz 8 bitlik bir tam sayı

Kısıtlamalar

Boolean veri türü haricinde Çeşitli veri türleri ile aşağıdaki kısıtlama türleri kullanılabilir -

  • enumeration
  • length
  • maxLength
  • minLength
  • pattern
  • whiteSpace