Xsd-quick-guide

提供:Dev Guides
移動先:案内検索

XSD-概要

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

XML文書は次のように定義することができます-

  • Well-formed -タグなどの一般的なXMLルールをすべてXMLドキュメントが正しくネストし、開始タグと終了タグのバランスをとる必要があり、空タグが「/>」で終わる必要がある場合、wellとして呼び出されます-formed。 + OR
  • 有効-XML文書は_well-formed_であるだけでなく、使用するタグ、それらのタグに含めることができる属性、他のタグ内で使用できるタグを指定する使用可能なXSDにも準拠している場合に有効であると言われ、他のプロパティの中で。

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

XSD Technology

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

<?xml version = "1.0"?>

<xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema">
   targetNamespace = "http://www.finddevguides.com"
   xmlns = "http://www.finddevguides.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推奨です。

XSD-構文

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

構文

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

<?xml version = "1.0"?>

<xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema">
   targetNamespace = "http://www.finddevguides.com"
   xmlns = "http://www.finddevguides.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>要素

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

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

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

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

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

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

上記のフラグメントは、デフォルトの名前空間がhttp://www.finddevguides.comであることを指定しています。

elementFormDefault = "qualified"

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

スキーマの参照

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

<?xml version = "1.0"?>

<class xmlns = "http://www.finddevguides.com"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://www.finddevguides.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.finddevguides.com"

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

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

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

XSD-検証

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

Students.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 をコンパイルします。 マシンにJDK 1.5以降がインストールされ、クラスパスが設定されていることを確認してください。 JAVAの使用方法の詳細については、JAVAチュートリアルを参照してください。
E:\java\javac XSDValidator.java
  • 引数として渡された students.xsd および students.xmlXSDValidator を実行します。
E:\java\java XSDValidator students.xsd students.xml

出力を確認する

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

students.xml is valid against students.xsd

XSD-単純型

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

S.No. Simple Type & Description
1

Element

シンプルエレメントにはテキストのみを含めることができます。 他の要素を含めることはできません。

2

Attribute

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

3

Restriction

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

XSD-複合型

複合要素は、他の要素や属性を含むことができる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. Simple Type & Description
1

Empty

複合空の複合型要素は属性のみを持つことができ、内容は持つことができません。

2

Elements Only

要素のみの複合型要素には要素のみを含めることができます

3

Text Only

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

4

Mixed

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

5

Indicators

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

6

<any>

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

7

<anyAttribute>

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

XSD-ストリング

文字列データ型は、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. Name & Description
1

ID

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

2

IDREF

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

3

language

有効な言語IDを表します

4

Name

有効なXML名を表します

5

NMTOKEN

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

6

normalizedString

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

7

string

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

8

token

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

制限事項

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

  • 列挙
  • 長さ
  • maxLength
  • minLength
  • パターン
  • ホワイトスペース

XSD-日時

日付と時刻のデータ型は、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. Name & Description
1.

date

日付値を表します

2.

dateTime

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

3.

duration

時間間隔を表します

4.

gDay

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

5.

gMonth

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

6.

gMonthDay

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

7.

gYear

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

8.

gYearMonth

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

9.

time

時間値を表します

制限事項

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

  • 列挙
  • maxExclusive
  • maxInclusive
  • minExclusive
  • minInclusive
  • パターン
  • ホワイトスペース

XSD-数値データ型

数値データ型は、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. Name & Description
1.

byte

符号付き8ビット整数

2.

decimal

10進値

3.

int

符号付き32ビット整数

4.

integer

整数値

5.

long

符号付き64ビット整数

6.

negativeInteger

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

7.

nonNegativeInteger

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

8.

nonPositiveInteger

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

9.

positiveInteger

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

10.

short

符号付き16ビット整数

11.

unsignedLong

符号なし64ビット整数

12.

unsignedInt

符号なし32ビット整数

13.

unsignedShort

符号なし16ビット整数

14.

unsignedByte

符号なし8ビット整数

制限事項

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

  • 列挙
  • fractionDigits
  • maxExclusive
  • maxInclusive
  • minExclusive
  • minInclusive
  • パターン
  • totalDigits
  • ホワイトスペース

XSD-その他のデータ型

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.finddevguides.com/images/smiley.jpg"/>

数値データ型

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

S.No. Name & Description
1.

byte

符号付き8ビット整数

2.

decimal

10進値

3.

int

符号付き32ビット整数

4.

integer

整数値

5.

long

符号付き64ビット整数

6.

negativeInteger

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

7.

nonNegativeInteger

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

8.

nonPositiveInteger

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

9.

positiveInteger

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

10.

short

符号付き16ビット整数

11.

unsignedLong

符号なし64ビット整数

12.

unsignedInt

符号なし32ビット整数

13.

unsignedShort

符号なし16ビット整数

14.

unsignedByte

符号なし8ビット整数

制限事項

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

  • 列挙
  • 長さ
  • maxLength
  • minLength
  • パターン
  • ホワイトスペース