XMLスキーマを使用するチュートリアル()方法を詳細に説明しました

XMLスキーマとは何ですか?

スキーマは、すなわちXMLスキーマ、XSD(XMLスキーマ定義)要素がXML文書の形式で記述方法を指摘し、2001年5月の勧告にリリースW3Cあります。多くのXMLスキーマXSDは言語です。XSDは、最初のXMLスキーマ言語自体に隔離され、W3Cのステータスを取得することをお勧めします。

XMLスキーマは、DTDのXMLベースの代替手段です。
XMLスキーマは、DTDに似たXMLドキュメントのビルディングブロックを定義するの合法的な役割です。
XMLスキーマ言語も、XMLスキーマ定義(XMLスキーマ定義、XSD)と呼ばれています。
:XSDスキーマは、単に多くの仕様の1つだけでなく、XDR、DCD、SOX、DDMLです。

XML Schemanの特徴:

  • 定義は、文書要素に表示されます
  • 定義は、ドキュメントのプロパティに表示されます
  • 要素が子で定義
  • 子要素の定義された順序
  • サブエレメントの数を定義します
  • 要素が空であるかどうかのテキストが含まれているかどうかを定義します
  • データ型定義と要素属性
  • デフォルト属性と固定値の要素を定義し、

使い方

この章では、スキーマファイルを定義する方法について説明し、xmlファイルのスキーマの制約に導入する方法

名前空間なし1

次の例は、スキーマファイル「するBooks.xsd」と呼ばれています

<?xml version='1.0' encoding='UTF-8'?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="books">
        <xsd:complexType>
            <xsd:choice minOccurs="0" maxOccurs="unbounded">
                <xsd:element name="book" >
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="name" type="xsd:string"></xsd:element>
                            <xsd:element name="price" type="xsd:decimal"></xsd:element>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
            </xsd:choice>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

コードの説明

xmlns:XSD =「http://www.w3.org/2001/XMLSchema」

  「http://www.w3.org/2001/XMLSchema」からスキ​​ーマの名前空間で使用される表示要素とデータ型。また、使用する必要があります「http://www.w3.org/2001/XMLSchema」の要素とデータ型から名前空間を定義する接頭辞XSD、当然のことながら、この接頭辞をカスタマイズすることができ、XSDは、XMLスキーマ定義、非常に多くのフレームワークを表現することです我々は、この接頭辞を使用します。

  任意のXMLスキーマのスキーマ・ドキュメント(XSD)に加えて、トップレベルのスキーマの要素を有します。ます。http://www.w3.org/2001/XMLSchema、そのスキーマ要素の定義は、この名前空間を含める必要があります。この名前空間仕様はXML名前空間モードで定義された標準であること - すべてのXMLスキーマ要素は、名前空間に属している必要があります。

  ここでは、(XML Schemal自体はベースのXMLで記述されている)、つまり強調するために、このプロパティは、XML属性であるのxmlnsをしたいと思い、主に(、のxmlnsを理解して名前の競合を避けるために、こちらをクリックしてください)、インポート機能を持っていません。あなたは、追加のxsd XSDをインポートする必要がある場合は、タグを使用する必要があります。<xsd:インポート名前空間=「XXX 」のschemaLocation =「xxx.xsdを」/>、 後で話す、しかし、使用スキーマ制約XMLにも必要XSI好む:のnoNamespaceSchemaLocationをまたはXSI:インポートが使用するのxmlns接頭辞またはデフォルトの名前空間で指定することができた後schemaLocation属性は、文書の位置モードを示します。

  schemaLocation属性:XSIを無視してschemaLocation属性を、特定のパターンは、他の手段による位置モードプロセッサ文書を入手することができます:XSIを使用する必要があり、スキーマプロセッサを必要としないXML Schemaの勧告は、注意してください。W3Cのスキーマ定義は、通常は、スキーマファイルの場所なしで、導入された場合。


次のXMLドキュメントは、上記の「するBooks.xsd」スキーマ制約を紹介します。

<?xml version="1.0" encoding="UTF-8" ?>
<books xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:noNamespaceSchemaLocation="books.xsd">
    <book>
        <name>java编程思想</name>
        <price>11.22</price>
    </book>
    <book>
        <name>head first设计模式</name>
        <price>22.44</price>
    </book>
</books>

コードの説明

xmlns:XSI =「http://www.w3.org/2001/XMLSchema-instance」

  xmlns:XSI =「http://www.w3.org/2001/XMLSchema-instanceは、」XMLスキーマ仕様で定義された任意のXMLインスタンス文書のXMLスキーマインスタンスの名前空間、に固有のものです。
  schemalチェックを導入するxmlファイルは、「http://www.w3.org/2001/XMLSchema-instance」schemaLocation属性またはのnoNamespaceSchemaLocation名前空間を使用しなければならないスキーマ文書の位置を示す、元のモードは、ターゲット名前空間を宣言するために使用されます文書をモデル化するために使用される文書は、名前空間を対象としません。

XSI:のnoNamespaceSchemaLocation =「books2.xsd」

  スキーマ文書のないターゲット名前空間の導入のために、プロパティの値が単一の値であり、ちょうどこの位置原稿読取モードから原稿モードの位置、プロセッサモードを指定


2.名前空間の場合

それともするBooks.xsdファイル、スキーマファイルの名前空間を宣言します。

<?xml version='1.0' encoding='UTF-8'?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="yth" elementFormDefault="qualified">
    <xsd:element name="books">
        <xsd:complexType>
            <xsd:choice minOccurs="0" maxOccurs="unbounded">
                <xsd:element name="book" >
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="name" type="xsd:string"></xsd:element>
                            <xsd:element name="price" type="xsd:decimal"></xsd:element>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
            </xsd:choice>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

targetNamespaceをは、スキーマファイルで定義された要素タイプとデータ用のelementFormDefaultプロパティの名前空間宣言が属します。
コードの説明

targetNamespace =「y番目」

  targetNamespace属性は、スキーマの名前空間の対応するURIを宣言しています。他の文書は、(自分の文書を含む)のスキーマを参照してください、そのURIを使用するのxmlns名前空間を導入する必要があるのtargetNamespaceプロパティの値です。
注意:受信スキーマW3Cが定義されていない場合は、スキーマファイルの場所を指定する必要があります

elementFormDefault =「資格」

  この属性は入れXMLスキーマの名前空間または型の中で定義されたXMLスキーマのプロセッサエレメントを示すために使用されます。一部の人々は、それは非常に奇妙見つける、のtargetNamespaceはそれを宣言した空間に属しているべきではないのですか?
  実際には、スキーマ文で、この要素またはタイプは、二つの名前空間、外出先のいずれかに起因することができ、これらの二つは、無名の名前空間とターゲットがtargetSchemaプロパティの名前空間で示されています。

  • elementFormDefault =「資格」は、グローバルな要素またはターゲット名前空間の種類に起因することになる場合には、ローカル要素は、デフォルトモードはターゲット名前空間に起因しているだろう。
  • elementFormDefault要素が=「修飾されていない」、グローバル要素や型がターゲット名前空間に帰することになる場合には、部分的に未知の名前空間の要素に起因します。

PS:グローバル要素は、直接の子要素「スキーマ」要素を参照!ローカル要素(ローカル要素)は、他の要素内にネストされるエレメントを指します。

例:
「修飾」のelementFormDefault =上記修飾されていないが、変更、または、対応する参照必要XMLを削除した場合。

<?xml version="1.0" encoding="UTF-8" ?>
<yth:books xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="yth books.xsd" xmlns:yth="yth">
    <!-- xmlns:yth yth命名空间需要定义前缀,不能用默认名称空间
    	因为一旦用默认名称空间,无命名空间的元素将没有方式引用 -->
    <book>
        <name></name>
        <price>22.2</price>
    </book>
     <!-- 看到除了全局元素books在yth命名空间里,book、name、price等元
    素归于无命名空间,不需要前缀引用 -->
</yth:books>

xmlファイルを対応する上で参照されるスキーマの名前空間を持っています:

<?xml version="1.0" encoding="UTF-8" ?>
<books xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="yth books.xsd" xmlns="yth">
    <book>
        <name>java编程思想</name>
        <price>11.22</price>
    </book>
    <book>
        <name>head first设计模式</name>
        <price>22.44</price>
    </book>
</books>

コードの説明

XSI:のschemaLocation =「YTHするBooks.xsd」

  schemaLoationプロパティは、「http://www.w3.org/2001/XMLSchema-instance」スキーマ文書の位置を示すために使用されるプロパティの名前空間は、ターゲット名前空間を宣言され
  、URIで参照されるschemaLocation属性値:XSIを組成二URIとの間の空白で区切られました。最初は、名前空間URIの名前であり、この位置・モード・プロセッサ文書から、位置を与えられた文書のURI第2のモードは、スキーマ文書のターゲット名前空間は、第URIと一致する必要があり、モードを読み取ります。
  XSI:schemaLocation属性値ペアのURIの複数によって参照されてもよく、各ペアは、空白の間のURI参照を使用して分離しました。

xmlns = "こんにちは"

  デフォルトの名前空間、接頭辞なしを宣言し、デフォルトのラベルはy番目の要素の名前空間で使用します。
PS:状況での使用を見て、確認したデフォルトの名前空間と、その後の要素無名の名前空間が使用されることはありませんので。


3.XMLスキーマのインポート

  通常、複雑な名前空間を必要としない小規模なXML文書スコープ。文書の複雑化は、名前空間のルールのすべてが複雑されているときは、XMLスキーマで定義されたXMLのコンテンツを作成し、修正したい場合はしかし、その後、多くの人々は、ファイル内のスキーマのすべての習慣を格納します。しかし、実際には良い標準仕様文書は、多くのサブスキーマに分けるべきである、このプロセスは、XMLスキーマのバインディングを呼び出すことができます。名前空間がスキーマを分割するための機構であり、サブスキーマは、スキーマパッケージは、多くのプロジェクトで使用することができなって、あなたは再利用性を高めるようにすることを、親スキーマに含まれています。そして、これは定義の読みやすさを改善するだけでなく、管理が文書を容易にすることができます。

ます。<xsd:インポート名前空間=「XXX」のschemaLocation =「xxx.xsd」/>

  この構文を使用することは、他のスキーマにschemalにインポートすることができます。導入後、xmlns宣言を使用します。

例えば:

Author.xsd定義ファイル、本の著者に代わって:

<?xml version="1.0" encoding="UTF-8" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="author" elementFormDefault="qualified">
    <xsd:element name="author">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="name" type="xsd:string"/>
                <xsd:element name="age" type="xsd:integer"/>
                <xsd:element name="gender" type="xsd:string"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

断言スペース名の著者は、元Books.xmlを見て:

<?xml version='1.0' encoding='UTF-8'?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="yth" xmlns:a="author"
            elementFormDefault="qualified">
    <!-- 1.导入author名称空间,指定该空间模式文档的位置 -->
    <!-- 2.在schema根标签中申明名称空间ahthor指定别名a -->
    <xsd:import
            namespace="author"
            schemaLocation="author.xsd"/>

    <xsd:element name="books">
        <xsd:complexType>
            <xsd:choice minOccurs="0" maxOccurs="unbounded">
                <xsd:element name="book">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="name" type="xsd:string"></xsd:element>
                            <xsd:element name="price" type="xsd:decimal"></xsd:element>
                            <xsd:element ref="a:author"/>
                            <!-- 3. 使用author空间的author元素 -->
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
            </xsd:choice>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

対応するxmlファイル:

<?xml version="1.0" encoding="UTF-8" ?>
<yth:books xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="yth books.xsd" xmlns:yth="yth" xmlns:a="author">
    <yth:book>
        <yth:name></yth:name>
        <yth:price>22.2</yth:price>
        <a:author>
            <a:name></a:name>
            <a:age>11</a:age>
            <a:gender></a:gender>
        </a:author>
    </yth:book>
</yth:books>
リリース元の2件の記事 ウォンの賞賛0 ビュー28

おすすめ

転載: blog.csdn.net/weixin_41947378/article/details/104105408