XSD-クイックガイド

一般にXSDとして知られているXMLスキーマ定義は、XML言語を正確に記述する方法です。XSDは、XMLドキュメントの構造と語彙の有効性を、適切なXML言語の文法規則と照合してチェックします。

XMLドキュメントは次のように定義できます-

  • Well-formed− XMLドキュメントが、タグを適切にネストし、開始タグと終了タグのバランスを取り、空のタグを「/>」で終了するなど、すべての一般的なXMLルールに準拠している場合、整形式と呼ばれます

    OR

  • Valid−整形式であるだけでなく、使用するタグ、それらのタグに含めることができる属性、他のタグ内で発生する可能性のあるタグなどを指定する利用可能なXSDにも準拠している場合に有効と言われるXMLドキュメント。

次の図は、XSDを使用してXMLドキュメントを構造化する方法を示しています-

これが単純なXSDコードです。それを見てください。

<?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>

特徴

XSDの人気のある機能のいくつかのリストは次のとおりです-

  • XSDは、将来の追加のために拡張可能にすることができます。
  • XSDは、DTDよりも豊富で強力です。
  • XSDはXMLで記述されています。
  • XSDはデータ型をサポートします。
  • XSDは名前空間をサポートします。
  • XSDはW3C勧告です。

XML XSDは別のドキュメントに保持され、ドキュメントをXMLドキュメントにリンクして使用できます。

構文

XSDの基本的な構文は次のとおりです-

<?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>

<スキーマ>要素

スキーマはXSDのルート要素であり、常に必要です。

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

上記のフラグメントは、スキーマで使用される要素とデータ型がで定義されていることを指定しています http://www.w3.org/2001/XMLSchema 名前空間とこれらの要素/データ型にはプレフィックスを付ける必要があります xs。常に必要です。

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

上記のフラグメントは、このスキーマで使用される要素がで定義されていることを指定します http://www.tutorialspoint.com名前空間。オプションです。

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

上記のフラグメントは、デフォルトの名前空間が http://www.tutorialspoint.com。

elementFormDefault = "qualified"

上記のフラグメントは、このスキーマで宣言された要素は、XMLドキュメントで使用する前に名前空間で修飾する必要があることを示しています。これはオプションです。

スキーマの参照

次の参照スキーマを見てください-

<?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"

上記のフラグメントは、デフォルトの名前空間宣言を指定しています。この名前空間は、すべての要素がこの名前空間の一部であることを確認するスキーマバリデーターによって使用されます。オプションです。

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

XMLSchema-instance xsiを定義した後、 schemaLocation属性。この属性には、スペースで区切って使用するXMLスキーマの名前空間と場所の2つの値があります。オプションです。

JavaベースのXSDバリデーターを使用して検証します students.xml に対して students.xsd

student.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>

student.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;
   }
}

XSDに対してXMLを検証する手順

  • をコピーします XSDValidator.java 任意の場所にファイル、たとえば E: > java

  • をコピーします students.xml 同じ場所に E: >> java

  • をコピーします students.xsd 同じ場所に E: >> java

  • コンパイル XSDValidator.javaコンソールを使用します。マシンにJDK1.5以降がインストールされており、クラスパスが構成されていることを確認してください。JAVAの使用方法の詳細については、JAVAチュートリアルを参照してください。

E:\java\javac XSDValidator.java
  • 実行する XSDValidatorstudents.xsd そして students.xml 引数として渡されます。

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

出力を確認します

次の結果が表示されます-

students.xml is valid against students.xsd

この章では、XSDが定義する単純型について説明します。

S.No. シンプルなタイプと説明
1

素子

Simple Elementには、テキストのみを含めることができます。他の要素を含めることはできません。

2

属性

属性はそれ自体がタイプであり、ComplexElementで使用されます。

3

制限

制限は、XML要素の許容値を定義します。

Complex Elementは、他の要素や属性を含めることができるXML要素です。複雑な要素は2つの方法で作成できます-

  • 複合型を定義してから、を使用して要素を作成します type 属性

  • 名前を付けて複合型を直接定義する

複合型を定義してから、type属性を使用して要素を作成します。

<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' />

名前を付けて、複合型を直接定義します。

<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がサポートする複合型のリストです。

S.No. シンプルなタイプと説明
1

空の

Complex空の複合型要素は、属性のみを持つことができ、コンテンツを持つことはできません。

2

要素のみ

要素-複合型要素のみが要素のみを含むことができます

3

テキストのみ

テキストのみの複合型要素には、属性とテキストのみを含めることができます。

4

混合

混合複合型要素には、要素、属性、およびテキストを含めることができます。

5

指標

インジケーターは、XMLドキュメントで要素を編成する方法を制御します。

6

<任意>

<any>要素は、スキーマで定義されていない要素に使用されます

7

<anyAttribute>属性は、スキーマで定義されていない属性に使用されます。

文字列データ型は、XMLドキュメントの文字を表すために使用されます。

<xs:string>データ型

<xs:string>データ型は、文字、改行、キャリッジリターン、およびタブ文字を使用できます。XMLプロセッサは、コンテンツ内の改行、改行、およびタブ文字をスペースに置き換えず、そのまま保持します。たとえば、表示中は複数のスペースまたはタブが保持されます。

<xs:string>の例

xsdでの要素宣言−

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

xmlでの要素の使用-

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

<xs:token>データ型

<xs:token>データ型は<string>データ型から派生し、文字、改行、キャリッジリターン、およびタブ文字を使用できます。XMLプロセッサは、改行、タブ、キャリッジリターン、先頭と末尾のスペース、および複数のスペースを削除します。

<xs:token>例

xsdでの要素宣言−

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

xmlでの要素の使用-

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

文字列データ型

以下は、<string>データ型から派生した一般的に使用されるデータ型のリストです。

S.No. 名前と説明
1

ID

XMLでID属性を表し、スキーマ属性で使用されます。

2

IDREF

XMLでIDREF属性を表し、スキーマ属性で使用されます。

3

language

有効な言語IDを表します

4

Name

有効なXML名を表します

5

NMTOKEN

XMLでNMTOKEN属性を表し、スキーマ属性で使用されます。

6

normalizedString

改行、キャリッジリターン、またはタブを含まない文字列を表します。

7

string

改行、キャリッジリターン、またはタブを含めることができる文字列を表します。

8

token

改行、キャリッジリターン、タブ、先頭または末尾のスペース、または複数のスペースを含まない文字列を表します

制限

文字列データ型では、次の種類の制限を使用できます-

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

日付と時刻のデータ型は、XMLドキュメントの日付と時刻を表すために使用されます。

<xs:date>データ型

<xs:date>データ型は、YYYY-MM-DD形式で日付を表すために使用されます。

  • YYYY −年を表す

  • MM −月を表します

  • DD −日を表す

<xs:date>の例

XSDでの要素宣言-

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

XMLでの要素の使用-

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

<xs:time>データ型

<xs:time>データ型は、hh:mm:ss形式で時間を表すために使用されます。

  • hh −時間を表します

  • mm −分を表します

  • ss −秒を表します

<xs:time>の例

XSDでの要素宣言-

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

XMLでの要素の使用-

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

<xs:datetime>データ型

<xs:datetime>データ型は、YYYY-MM-DDThh:mm:ss形式で日付と時刻を表すために使用されます。

  • YYYY −年を表す

  • MM −月を表します

  • DD −日を表す

  • T −時間セクションの開始を表します

  • hh −時間を表します

  • mm −分を表します

  • ss −秒を表します

<xs:datetime>例

XSDでの要素宣言-

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

XMLでの要素の使用-

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

<xs:duration>データ型

<xs:duration>データ型は、PnYnMnDTnHnMnS形式で時間間隔を表すために使用されます。Pを除く各コンポーネントはオプションです。

  • P −開始日セクションを表します

  • nY −年を表す

  • nM −月を表します

  • nD −日を表す

  • T −時間セクションの開始を表します

  • nH −時間を表します

  • nM −分を表します

  • nS −秒を表します

<xs:duration>の例

XSDでの要素宣言-

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

6年、3か月、10日、15時間の期間を表すxmlでの要素の使用。

<period>P6Y3M10DT15H</period>

日付データ型

以下は、一般的に使用される日付データ型のリストです。

S.No. 名前と説明
1.1。

date

日付値を表します

2.2。

dateTime

日付と時刻の値を表します

3.3。

duration

時間間隔を表します

4.4。

gDay

日付の一部を日(DD)として表します

5.5。

gMonth

日付の一部を月(MM)として表します

6.6。

gMonthDay

日付の一部を月と日として表します(MM-DD)

7。

gYear

日付の一部を年(YYYY)として表します

8.8。

gYearMonth

日付の一部を年と月として表します(YYYY-MM)

9.9。

time

時間値を表します

制限

次のタイプの制限は、日付データタイプで使用できます-

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

数値データ型は、XMLドキュメントの数値を表すために使用されます。

<xs:decimal>データ型

<xs:decimal>データ型は、数値を表すために使用されます。18桁までの10進数をサポートします。

<xs:decimal>例

XSDでの要素宣言-

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

XMLでの要素の使用-

<score>9.12</score>

<xs:integer>データ型

<xs:integer>データ型は、整数値を表すために使用されます。

<xs:integer>例

XSDでの要素宣言-

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

XMLでの要素の使用-

<score>9</score>

数値データ型

以下は、一般的に使用される数値データ型のリストです。

S.No. 名前と説明
1.1。

byte

符号付き8ビット整数

2.2。

decimal

10進値

3.3。

int

符号付き32ビット整数

4.4。

integer

整数値

5.5。

long

符号付き64ビット整数

6.6。

negativeInteger

負の値(..、-2、-1)のみを持つ整数

7。

nonNegativeInteger

非負の値(0、1、2、..)のみを持つ整数

8.8。

nonPositiveInteger

正でない値のみを持つ整数(..、-2、-1,0)

9.9。

positiveInteger

正の値(1,2、..)のみを持つ整数

10.10。

short

符号付き16ビット整数

11.11。

unsignedLong

符号なし64ビット整数

12.12。

unsignedInt

符号なし32ビット整数

13.13。

unsignedShort

符号なし16ビット整数

14.14。

unsignedByte

符号なし8ビット整数

制限

次のタイプの制限は、日付データタイプで使用できます-

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

XSDには、他にもいくつかの重要なデータ型があります。 Boolean, binary, そして anyURI.

<xs:boolean>データ型

<xs:boolean>データ型は、true、false、1(trueの場合)、または0(falseの場合)の値を表すために使用されます。

<xs:boolean>の例

XSDでの要素宣言-

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

XMLでの要素の使用-

<pass>false</pass>

バイナリデータ型

バイナリデータ型は、バイナリ値を表すために使用されます。2つのバイナリタイプが一般的に使用されています。

  • base64Binary −base64でエンコードされたバイナリデータを表します

  • hexBinary −16進数でエンコードされたバイナリデータを表します

<xs:hexbinary>例

XSDでの要素宣言-

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

XMLでの要素の使用-

<blob>9FEEF</blob>

<xs:anyURI>データ型

<xs:anyURI>データ型は、URIを表すために使用されます。

<xs:anyURI>の例

XSDでの要素宣言-

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

XMLでの要素の使用-

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

数値データ型

以下は、一般的に使用される数値データ型のリストです。

S.No. 名前と説明
1.1。

byte

符号付き8ビット整数

2.2。

decimal

10進値

3.3。

int

符号付き32ビット整数

4.4。

integer

整数値

5.5。

long

符号付き64ビット整数

6.6。

negativeInteger

負の値(..、-2、-1)のみを持つ整数

7。

nonNegativeInteger

非負の値(0、1、2、..)のみを持つ整数

8.8。

nonPositiveInteger

正でない値のみを持つ整数(..、-2、-1,0)

9.9。

positiveInteger

正の値(1,2、..)のみを持つ整数

10.10。

short

符号付き16ビット整数

11.11。

unsignedLong

符号なし64ビット整数

12.12。

unsignedInt

符号なし32ビット整数

13.13。

unsignedShort

符号なし16ビット整数

14.14。

unsignedByte

符号なし8ビット整数

制限

ブールデータ型を除くその他のデータ型では、次の種類の制限を使用できます。

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