エックスエムエル‐スキーマ【XMLスキーマ】
XML スキーマ (XSD) [XML Schema (XSD)]
XML Schema
XML Schemaとは、構造化文書を記述するためのマークアップ言語について、その概容(スキーマ)を定義する言語であるスキーマ言語の中でも、XML文書の構造を定義する言語のことである。XML Schemaは2001年5月にW3Cによって勧告された。
XMLはマークアップ言語を作成するための言語(メタ言語)であり、それ自身では個々のタグの意味や関連性などが定義されていない。XMLを用いて実際に文書を作成するには、文書中で用いられるタグや属性がどのようなものであるのかを、具体的な構造として定義しなければならない。
XML Schema以前にXMLで用いられてきたスキーマ言語は、DTDと呼ばれる、XMLの母体となったSGML言語で用いられてきたスキーマ言語であった。しかし、DTDではデータ型が定義できなかったり、あるいはDTDの文法がXMLとは特に関係ないものであったりと、様々な点で困難が指摘されていた。その点、XML Schemaは、XMLと同じ文法を持っており(スキーマ自体がXMLで記述されているから)、またデータ型の定義や名前空間(XML名前空間)が扱えるなど、XMLの機能を最大限に引き出せるものになっている。
なお、XML Schemaと同様の技術にRELAXと呼ばれる仕様がある。RELAXは日本で開発されたもので、XML Schemaに劣らない記述性と構造のシンプルさをかね備えているといわれ、国際標準化機構(ISO)の標準となることを目指して普及活動が推進されている。
XmlSchema クラス
アセンブリ: System.Xml (system.xml.dll 内)


![]() |
---|
XmlSchema クラスを使用した結果として発生した例外 (XmlSchemaException クラスなど) には、信頼関係のないシナリオで公開されてはならないような機密情報が含まれている場合があります。たとえば、XmlSchemaException の SourceUri プロパティは、例外が発生する原因となったスキーマ ファイルへの URI パスを返します。信頼関係のないシナリオでは、SourceUri プロパティを公開しないでください。こういった機密情報が信頼関係のないシナリオで公開されてしまわないよう、例外は適切に処理する必要があります。 |

Option Explicit On Option Strict On Imports System Imports System.Xml Imports System.Xml.Schema Class XMLSchemaExamples Public Shared Sub Main() Dim schema As New XmlSchema() ' <xs:element name="cat" type="xs:string"/> Dim elementCat As New XmlSchemaElement() schema.Items.Add(elementCat) elementCat.Name = "cat" elementCat.SchemaTypeName = New XmlQualifiedName("string", "http://www.w3.org/2001/XMLSchema") ' <xs:element name="dog" type="xs:string"/> Dim elementDog As New XmlSchemaElement() schema.Items.Add(elementDog) elementDog.Name = "dog" elementDog.SchemaTypeName = New XmlQualifiedName("string", "http://www.w3.org/2001/XMLSchema") ' <xs:element name="redDog" substitutionGroup="dog" /> Dim elementRedDog As New XmlSchemaElement() schema.Items.Add(elementRedDog) elementRedDog.Name = "redDog" elementRedDog.SubstitutionGroup = New XmlQualifiedName("dog") ' <xs:element name="brownDog" substitutionGroup ="dog" /> Dim elementBrownDog As New XmlSchemaElement() schema.Items.Add(elementBrownDog) elementBrownDog.Name = "brownDog" elementBrownDog.SubstitutionGroup = New XmlQualifiedName("dog") ' <xs:element name="pets"> Dim elementPets As New XmlSchemaElement() schema.Items.Add(elementPets) elementPets.Name = "pets" ' <xs:complexType> Dim complexType As New XmlSchemaComplexType() elementPets.SchemaType = complexType ' <xs:choice minOccurs="0" maxOccurs="unbounded"> Dim choice As New XmlSchemaChoice() complexType.Particle = choice choice.MinOccurs = 0 choice.MaxOccursString = "unbounded" ' <xs:element ref="cat"/> Dim catRef As New XmlSchemaElement() choice.Items.Add(catRef) catRef.RefName = New XmlQualifiedName("cat") ' <xs:element ref="dog"/> Dim dogRef As New XmlSchemaElement() choice.Items.Add(dogRef) dogRef.RefName = New XmlQualifiedName("dog") Dim schemaSet As New XmlSchemaSet() AddHandler schemaSet.ValidationEventHandler, AddressOf ValidationCallbackOne schemaSet.Add(schema) schemaSet.Compile() Dim compiledSchema As XmlSchema = Nothing For Each schema1 As XmlSchema In schemaSet.Schemas() compiledSchema = schema1 Next Dim nsmgr As New XmlNamespaceManager(New NameTable()) nsmgr.AddNamespace("xs", "http://www.w3.org/2001/XMLSchema") compiledSchema.Write(Console.Out, nsmgr) End Sub 'Main Public Shared Sub ValidationCallbackOne(ByVal sender As Object, ByVal args As ValidationEventArgs) Console.WriteLine(args.Message) End Sub 'ValidationCallbackOne End Class 'XMLSchemaExamples
using System; using System.Xml; using System.Xml.Schema; class XMLSchemaExamples { public static void Main() { XmlSchema schema = new XmlSchema(); // <xs:element name="cat" type="xs:string"/> XmlSchemaElement elementCat = new XmlSchemaElement(); schema.Items.Add(elementCat); elementCat.Name = "cat"; elementCat.SchemaTypeName = new XmlQualifiedName("string", "http://www.w3.org/2001/XMLSchema"); // <xs:element name="dog" type="xs:string"/> XmlSchemaElement elementDog = new XmlSchemaElement(); schema.Items.Add(elementDog); elementDog.Name = "dog"; elementDog.SchemaTypeName = new XmlQualifiedName("string", "http://www.w3.org/2001/XMLSchema"); // <xs:element name="redDog" substitutionGroup="dog" /> XmlSchemaElement elementRedDog = new XmlSchemaElement(); schema.Items.Add(elementRedDog); elementRedDog.Name = "redDog"; elementRedDog.SubstitutionGroup = new XmlQualifiedName("dog"); // <xs:element name="brownDog" substitutionGroup ="dog" /> XmlSchemaElement elementBrownDog = new XmlSchemaElement(); schema.Items.Add(elementBrownDog); elementBrownDog.Name = "brownDog"; elementBrownDog.SubstitutionGroup = new XmlQualifiedName("dog"); // <xs:element name="pets"> XmlSchemaElement elementPets = new XmlSchemaElement(); schema.Items.Add(elementPets); elementPets.Name = "pets"; // <xs:complexType> XmlSchemaComplexType complexType = new XmlSchemaComplexType(); elementPets.SchemaType = complexType; // <xs:choice minOccurs="0" maxOccurs="unbounded"> XmlSchemaChoice choice = new XmlSchemaChoice(); complexType.Particle = choice; choice.MinOccurs = 0; choice.MaxOccursString = "unbounded"; // <xs:element ref="cat"/> XmlSchemaElement catRef = new XmlSchemaElement(); choice.Items.Add(catRef); catRef.RefName = new XmlQualifiedName("cat"); // <xs:element ref="dog"/> XmlSchemaElement dogRef = new XmlSchemaElement(); choice.Items.Add(dogRef); dogRef.RefName = new XmlQualifiedName("dog"); XmlSchemaSet schemaSet = new XmlSchemaSet(); schemaSet.ValidationEventHandler += new ValidationEventHandler(ValidationCallbackOne); schemaSet.Add(schema); schemaSet.Compile(); XmlSchema compiledSchema = null; foreach (XmlSchema schema1 in schemaSet.Schemas()) { compiledSchema = schema1; } XmlNamespaceManager nsmgr = new XmlNamespaceManager(new NameTable()); nsmgr.AddNamespace("xs", "http://www.w3.org/2001/XMLSchema"); compiledSchema.Write(Console.Out, nsmgr); } public static void ValidationCallbackOne(object sender, ValidationEventArgs args) { Console.WriteLine(args.Message); } }
前述のコード例に対して生成される XML ファイルを次に示します。
<?xml version="1.0" encoding="IBM437"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="cat" type="xs:string"/> <xs:element name="dog" type="xs:string"/> <xs:element name="redDog" type="xs:string" substitutionGroup="dog"/> <xs:element name="brownDog" type="xs:string" substitutionGroup ="dog" /> <xs:element name="pets"> <xs:complexType> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element ref="cat"/> <xs:element ref="dog"/> </xs:choice> </xs:complexType> </xs:element> </xs:schema>

System.Xml.Schema.XmlSchemaObject
System.Xml.Schema.XmlSchema


Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


XmlSchema コンストラクタ
アセンブリ: System.Xml (system.xml.dll 内)


Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


XmlSchema フィールド
XmlSchema プロパティ

名前 | 説明 | |
---|---|---|
![]() | LineNumber | schema 要素が参照するファイルの行番号を取得または設定します。 ( XmlSchemaObject から継承されます。) |
![]() | LinePosition | schema 要素が参照するファイルの行番号を取得または設定します。 ( XmlSchemaObject から継承されます。) |
![]() | Namespaces | このスキーマ オブジェクトと一緒に使用する XmlSerializerNamespaces を取得または設定します。 ( XmlSchemaObject から継承されます。) |
![]() | Parent | この XmlSchemaObject の親を取得または設定します。 ( XmlSchemaObject から継承されます。) |
![]() | SourceUri | スキーマを読み込んだファイルのソース位置を取得または設定します。 ( XmlSchemaObject から継承されます。) |
![]() | Version | スキーマのバージョンを取得または設定します。 |

XmlSchema メソッド

名前 | 説明 | |
---|---|---|
![]() | Compile | オーバーロードされます。 XML SOM (Schema Object Model) を検証用のスキーマ情報にコンパイルします。プログラムによって構築された SOM の構文および意味構造をチェックするために使用します。意味検証チェックは、コンパイル時に実行されます。 |
![]() | Equals | オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 ( Object から継承されます。) |
![]() | GetHashCode | 特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 ( Object から継承されます。) |
![]() | GetType | 現在のインスタンスの Type を取得します。 ( Object から継承されます。) |
![]() | Read | オーバーロードされます。 XML スキーマを読み込みます。 |
![]() | ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 ( Object から継承されます。) |
![]() | ToString | 現在の Object を表す String を返します。 ( Object から継承されます。) |
![]() | Write | オーバーロードされます。 XML スキーマを書き込みます。 |

名前 | 説明 | |
---|---|---|
![]() | Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 ( Object から継承されます。) |
![]() | MemberwiseClone | 現在の Object の簡易コピーを作成します。 ( Object から継承されます。) |

XmlSchema メンバ
W3C (World Wide Web Consortium) の『XML Schema Part 1: Structures』および『XML Schema Part 2: Datatypes』の仕様で指定されている XML スキーマのインメモリ表現です。
XmlSchema データ型で公開されるメンバを以下の表に示します。



名前 | 説明 | |
---|---|---|
![]() | LineNumber | schema 要素が参照するファイルの行番号を取得または設定します。(XmlSchemaObject から継承されます。) |
![]() | LinePosition | schema 要素が参照するファイルの行番号を取得または設定します。(XmlSchemaObject から継承されます。) |
![]() | Namespaces | このスキーマ オブジェクトと一緒に使用する XmlSerializerNamespaces を取得または設定します。(XmlSchemaObject から継承されます。) |
![]() | Parent | この XmlSchemaObject の親を取得または設定します。(XmlSchemaObject から継承されます。) |
![]() | SourceUri | スキーマを読み込んだファイルのソース位置を取得または設定します。(XmlSchemaObject から継承されます。) |
![]() | Version | スキーマのバージョンを取得または設定します。 |

名前 | 説明 | |
---|---|---|
![]() | Compile | オーバーロードされます。 XML SOM (Schema Object Model) を検証用のスキーマ情報にコンパイルします。プログラムによって構築された SOM の構文および意味構造をチェックするために使用します。意味検証チェックは、コンパイル時に実行されます。 |
![]() | Equals | オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 (Object から継承されます。) |
![]() | GetHashCode | 特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 (Object から継承されます。) |
![]() | GetType | 現在のインスタンスの Type を取得します。 (Object から継承されます。) |
![]() | Read | オーバーロードされます。 XML スキーマを読み込みます。 |
![]() | ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 (Object から継承されます。) |
![]() | ToString | 現在の Object を表す String を返します。 (Object から継承されます。) |
![]() | Write | オーバーロードされます。 XML スキーマを書き込みます。 |

名前 | 説明 | |
---|---|---|
![]() | Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 (Object から継承されます。) |
![]() | MemberwiseClone | 現在の Object の簡易コピーを作成します。 (Object から継承されます。) |

XML Schema
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/08/05 19:25 UTC 版)
![]() | この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。(2018年4月) |
![]() | この記事は英語版の対応するページを翻訳することにより充実させることができます。(2024年8月) 翻訳前に重要な指示を読むには右にある[表示]をクリックしてください。
|
XML Schema(XMLスキーマ)は、XML文書の論理的構造を定義する為に開発されたスキーマ言語の一つ。現在、W3Cが開発・標準化にあたっている。
元々XMLのスキーマ言語としてはSGML用のスキーマ言語であるDTDが使われていたが、要素のデータ型が定義できない、文法がXMLと全く異なっている等、XMLでは使いづらい面があった。そこでマイクロソフトの「XML Data」やCommerceOne社の「SOX」等の提案を受けたW3Cが、1998年11月にXML Schemaの仕様策定を始めた。
XML Schema自体がXMLにより記述される仕様となっていること、データ型やXML名前空間の定義が扱えることからDTDよりもXMLに適したスキーマ言語となっている。しかし、複数の業界有力企業が仕様の策定に参加して、各社の思惑が絡み合い、あまりに多くの機能を取り込んだ為に、標準化は難航し、複雑な仕様となってしまっている。[誰?]
脚注
関連項目
外部リンク
スキーマ言語
スキーマ言語(スキーマげんご)はスキーマ記述を目的とするドメイン固有言語の総称である。すなわちXMLやSGMLの文書構造を定義することに特化した言語の総称である。スキーマ記述言語(英: schema description language, SDL)とも呼ばれる。
概要
スキーマは任意の言語で記述しうる。しかし汎用言語を流用する場合、その言語仕様によってスキーマの自由度が下がる場合がある。例えばC言語の構造体定義を用いてスキーマを定義した場合、属性の型がC言語のデータ型に制約されてしまう。これを避けるためには既存言語から中立なスキーマ記述に特化した言語を用いればよい[1]。これがスキーマ定義言語である。
「スキーマ」とは本来データベースの構造定義であり、関係データベースの場合はテーブルの各項目のデータ型、他のテーブルとの関連性などを定義したものを指す。XML文書等では、同様にXMLで作成された各要素の互いの関連性や個々の文書全体での位置付け等の定義を指す。
本来、文書は構成要素の集合体であるが、一定の構造を持たなければ単なる要素の寄せ集めでしかなく、規則性や体裁といった構造を得て初めて意味のある有用な文書となる。XMLやSGMLは文書の各要素を作成するメタ言語であり、文書構造自体を定義する事はできない為、このままでは扱いにくい。そこで構造を定義する言語が必要となり、開発されたのがスキーマ言語である。 例えば、SGMLではDTDがスキーマ言語として使用されていた。XMLがSGMLから派生した関係からXMLでもDTDが使用されていたが、DTDは文法がXMLと全く異なっている事や、要素のデータ型を定義する事ができない事等から、新たに XML Schema や、RELAX、RELAX NG が開発されている。
主なスキーマ言語
- DSDL — ISO/IECによるXML文書のスキーマ・フレームワーク
- RELAX — 村田真などによるXML文書のスキーマ言語
- TREX — ジェームズ・クラークによるXML文書のスキーマ言語
- XML Schema — W3CによるXML文書のスキーマ言語
- JSON Schema — JSONデータの構造をJSONそのもので定義するためのフォーマット仕様
- RDF Schema — Resource Description Frameworkのスキーマ言語
脚注
- ^ "allows us to talk about ... schemas in a language-agnostic way." GraphQL. Schemas and Types. 2023-01-01閲覧.
関連項目
- コンピュータ言語
- データ記述言語
- 仕様記述言語
- スキーマ言語
- 仕様記述言語
- インタフェース記述言語
- データ記述言語
- XML schemaのページへのリンク