7 スキーマ制約 (理解できる程度)
dtd 制約と同様に、スキーマは XML ファイルを制約するためにも使用されます。スキーマ制約を記述するときは、XML の文法規則に従います。スキーマを記述するときは、xml ファイルの文書構造を記述するのと同じです。
注: スキーマ ファイルを書き込む場合、そのファイル拡張子は xsd です。
1 書き込みスキーマ制約
1. まず、xml ファイルを作成します。次に、xml ファイルに従って仕様に準拠したスキーマ制約を記述します。
Books.xml ファイルを作成します。
コードは次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book>
<name>面试宝典</name>
<author>锁哥</author>
<price>78.8</price>
</book>
<book>
<name>java从入门到精通</name>
<author>黑旋风</author>
<price>88.8</price>
</book>
</books>
2. 次に、スキーマ ファイルを作成する必要があります。
ステップ:
ステップ 1: まずファイル作成ウィンドウに入り、プロジェクトを選択してマウスで右クリックし、「新規」->「ファイル」を選択して、次のページに入ります。
ステップ 2: 作成したファイルの名前とスキーマ ファイルのサフィックス xsd を入力します。
ステップ 3: スキーマ制約ファイル自体は xml であるため、xml ファイルのヘッダーがスキーマ制約ファイルに適用されることを宣言します。
ステップ 4: 次の内容を上記で作成した Books.xsd にコピーします。次に、スキーマ制約を記述します。
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/books"
elementFormDefault="qualified">
</schema>
例証します:
1) スキーマ制約の構造は XML ファイルの記述仕様と同じです。<?xml version="1.0"coding="UTF-8"?> はルート タグである xml の宣言を表します。
2) xmlns="http://www.w3.org/2001/XMLSchema" は、このスキーマ ファイルが w3 組織の指定された制約に従うことを示します。
3) targetNamespace="http://www.example.org/books"。名前空間と呼ばれます。これは Java のパッケージの機能に相当し、さまざまな制約でさまざまなラベルを区別します。現在のスキーマ ファイルによって制約された xml ファイルが必要な場合、現在のスキーマ ファイルを現在の名前でインポートする必要があります。
4) elementFormDefault="qualified"、値が修飾されている場合、現在のスキーマ内のすべてのタグがデフォルトで名前空間に配置されます。値が修飾されていない場合、名前空間、つまりhttp://www.example.org/booksパッケージにあるスキーマのルート タグを除き、他のタグはこのパッケージには含まれません。開発では、私たちは皆、デフォルト値を修飾して書きます。
上記の理解を完了したら、完全なスキーマ制約を読んでみましょう。
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/books"
elementFormDefault="qualified">
<!-- 在此处书写schema约束语法 -->
<element name="books">
<complexType><!-- 声明books是复杂标签 -->
<sequence><!-- 通过sequence标签指定子标签的顺序 -->
<element name="book" maxOccurs="unbounded">
<complexType>
<sequence>
<element name="name" type="string"></element>
<element name="author" type="string"></element>
<element name="price" type="double"></element>
</sequence>
<attribute name="address"></attribute>
</complexType>
</element>
</sequence>
</complexType>
</element>
</schema>
例証します:
1. XML に含まれるタグは、このような構文を使用して定義する必要があります。つまり、XML に必要なタグの数と、スキーマ ファイルに記述される要素タグの数を最初に把握します。
したがって、XML に現れる最初の Books タグは で宣言する必要があります。
elementタグのname属性は、xmlに記述できるタグの名前です。
2. スキーマ制約の記述を容易にするために、XML 内のタグを次の 2 つのカテゴリに単純に分割します。
a) 単純なラベル: ラベル内のテキスト データのみ。
b) 複合タグ: タグ内にはサブタグまたは属性とテキスト データが含まれます。
要素タグでは
単純なタグの場合は
3. 上記のbooks.xml ファイルでは、books タグが複合タグであることがわかりました。複合タグの場合は、現在の複合タグ内の他のコンテンツを制限するために、現在のタグ内にサブタグを記述する必要があります。
したがって、タグを使用して、books タグが複雑なタグであることを宣言する必要があります。また、複雑なタグ内にサブタグが出現する場合は、タグを使用してサブタグが出現する順序を宣言する必要があります。
A) Books タグに表示されるサブタグは book ですが、book もタグであるため、タグを使用して xml で book を宣言する必要もあります。
B) また、book タグも複雑なタグであるため、タグを使用して宣言する必要があります。
C) book タグにはサブタグもあるため、サブタグの順序を宣言するために使用する必要があります。
D) 最後に、book タグがbooks.xml 内に複数回出現することが判明したため、maxOccurs="unbounded" 属性を追加する必要がありました。書籍タグが何度も出現する可能性があることを示します。(回数制限なし)
1 回以上
5. 最後に、図書タグに表示される 3 つの名前、著者、および価格のサブタグのステートメントを書き込みます。そして、書籍タグに表示される属性についても同様です。私たちは使う必要があります
このような構文を宣言します。ラベルの位置に注意してください。
Books.xml ファイルに address 属性を追加します。
そこで、books.xsd スキーマ制約に属性を追加します。ラベルの位置に注意してください。
2 XML ファイルにスキーマ制約を導入する
Books.xml ファイルにスキーマ制約を導入する手順は次のとおりです。
ステップ 1: まず、ルート ラベルの本の後ろにマウスを置き、スペースを作り、次のコンテンツを本の後ろにコピーします。
コードは以下のように表示されます:
<books xmlns="default namespace"
xsi:schemaLocation="{namespace} {location}"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
次に、スキーマ制約の図を紹介します。
最終的な完全なコード:
<?xml version="1.0" encoding="UTF-8"?>
<books xmlns="http://www.example.org/books"
xsi:schemaLocation="http://www.example.org/books books.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>
<book address="藏经阁">
<name>面试宝典</name>
<author>锁哥</author>
<price>78.8</price>
</book>
<book>
<name>java从入门到精通</name>
<author>黑旋风</author>
<price>88.8</price>
</book>
</books>
例証します:
1) xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"。現在の XML ファイルがスキーマ制約の対象となるインスタンスであり、ここを変更する必要がないことを示します。
2) xmlns="http://www.example.org/books" (スキーマ制約ファイルの targetNamespace の値) は、名前空間がbooks.xml ファイルに導入されることを意味します。
3)xsi:schemaLocation=“http://www.example.org/booksbooks.xsd”、
スキーマ制約ファイルのスキーマ制約ファイル パス内の targetNamespace の値