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