ホームページ  >  記事  >  バックエンド開発  >  スキーマ検証 XML の概念のコード例の詳細な説明

スキーマ検証 XML の概念のコード例の詳細な説明

黄舟
黄舟オリジナル
2018-05-28 10:47:392158ブラウズ

1.スキーマファイルの構造
スキーマファイルは他のXMLファイルと非常によく似ており、一連の要素で構成されており、そのルート要素は「Schema」です。 「Schema」要素は XML スキーマに現れる最初の要素であり、XML 文書がスキーマ文書であることを示すために使用されます。これに対応して、「Schema」の終了タグは通常文書の最後にあります。このように、スキーマの構造は次のようになります。

<Schema name="schema-name" xmlns="namespace" >

</Schema>

Schema には 2 つの属性があります。name はスキーマの名前を指定し、xmlns はスキーマに含まれる namespace を指定します。 XML スキーマ ドキュメントには複数の名前空間を含めることができることに注意してください。たとえば、次のステートメントは 3 つの名前空間を指定します。

<Schema name="mySchema" 
        xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes" xmlns:myNS=http://www.xml_step_by_step.edu\ns.xml
>

最初の名前空間は xmlns="urn:schemas-microsoft-com:xml-data" であり、このドキュメントはXML スキーマ ドキュメント。2 番目は xmlns:dt="urn:schemas-microsoft-com:datatypes" で、このドキュメントで使用できる データ型 を定義します。3 番目は xmlns:myNS ="http: //www.xml_step_by_step.eduns.xml"。これは、myNS で定義された要素または属性が以下で使用できることを示します。
2.スキーマを使用して要素とその内容を定義する
ETD 定義に対応するスキーマのさまざまな定義メソッドを説明する前に、まず、関係する 3 つのスキーマ要素 (ElementType、element、group) を見てみましょう。
1.ElementType 要素
XML ファイルに表示される要素を宣言するには、Schema ドキュメントで ElementType を使用します。 ElementType の構文は次のように表されます。

<ElementType 
    name="元素名" 
    content="{ empty | textOnly | eltOnly | mixed }" 
    dt:type="元素类型" 
    order="{ one | seq | many }" 
    model="{ open | closed }" 
>

ElementType のいくつかの属性のうち、 name は一目瞭然です。メタファーは宣言された要素の名前であり、これは必須です。 content は、ElementType の重要な属性です。ElementType で宣言された要素が空であるか、テキストが含まれているか、サブ要素が含まれているか、またはテキストとサブ要素の両方が含まれているかを示します。 dt:type この要素のデータ型を指定します。 order この要素の子要素の順序規則を指定します。最後に、model は、このスキーマで定義されていない要素と属性を要素に含めることができるかどうかを指定します。これは主に他のスキーマの導入、つまり他の「名前空間」の導入に使用されます。 「名前空間」の概念はまだ馴染みがないかもしれませんが、ここでは、複数の異なる DTD またはスキーマ定義を XML ファイルで同時に使用できることを理解するだけで済みます。
次の表は、model の可能な値のリストです:

説明 意味

open は、要素に XML スキーマで定義されていない他の要素を含めることができることを示します要素と属性
closed は、要素にこの XML スキーマで定義された要素と属性のみを含めることができることを示します

缺省状态下,XML Schema的model取值"open",也就是说,该元素可以包含其它未在XML Schema中定义的元素和属性。但是,这并不意味着任何元素和属性都可在Schema中出现,允许出现的前提是这些"异类"元素和属性必须在单独的XML Schema中加以定义,并且必须在引用的它们的元素中以命名空间形式指定其出处。
      2. element元素 
       ElementType只是起到声明元素的作用,至于元素的内容究竟是什么,则要靠它的子元素element来说明。element的语法表达如下:  

<element 
    type="元素类型" 
    [minOccurs="{ 0 | 1 }"] 
    [maxOccurs="{ 1 | * }"] 
>

element实际上是对该Schema中ElementType声明的引用,而具体引用什么元素类型,就要靠type属性指定了。type属性不可缺少,并且为了保证type指定的是已经声明过的元素,要求它的取值必须同某个ElementType中的name属性严格一致。至于其它两个属性倒是可有可无。minOccurs指定该元素在其父元素中出现的最小次数,缺省值为1,表明该元素至少出现一次;也可以取值为0,表明该元素是可选的,可以不出现。maxOccurs则指定了该元素出现的最大次数,缺省值同样为1,表明该元素至多出现一次;也可取值为“*”,表明该元素在XML实例文档中出现次数不受限制。

    3.group元素 
   DTD中有成组的概念,相应的,Schema中也有“group”元素。它的语法表达类似element元素:

<group
    order="{one | seq | many}" 
    [minOccurs="{ 0 | 1 }"] 
    [maxOccurs="{ 1 | * }"] 
>

スキーマ検証 XML の概念のコード例の詳細な説明<AttributeType 和DTD的规定相同,组里的内容可以是元素,也可以是另一个子组。属性order指定该组中的元素或子组的顺序,minOccursmaxOccurs分别指定了该组在其父元素中出现的最小次数和最大次数。

4.用Schema定义元素属性   
    
Schema中用来定义属性的元素有两个,AttributeType元素是声明属性的,attribute元素则是说明一个元素中究竟包含那些属性。 
    AttributeType元素 
   AttributeType元素也是Schema中的重要元素之一,用于定义该Schema文档中出现的属性类型。AttributeType的语法表达如下:

  name="属性名" 
  dt:type="属性类型" 
  dt:values="枚举值列表" 
  default="缺省值" 
  required="{yes | no}" 
>
  1. name
    name不言而喻,自然是所声明的属性类型的名称。注意,该属性是必须的。

  2. dt:type
    dt:type指定所声明属性的数据类型,它除了支持DTD中包含的全部十大数据类型外,还支持一些扩展属性。Schema中的十个基本属性与DTD中属性的对应关系请见下表:

Schema中基本类型 DTD中数据类型
string #PCDATA
enumeration ENUMERATED
id ID
idref IDREF
idrefs IDREFS
nmtoken NMTOKEN
nmtokens NMTOKENS
entity ENTITY
entities EMTITIES
notation NOTATION

3.dt:value
dt:value は、dt:type が値 "enumeration" を取る場合にのみ有効です。 現時点では、dt:value はすべての可能な値をリストする必要があります。

4.default
default は、この属性タイプのデフォルト値を指定します。たとえば、dt:type が値「enumeration」を取る場合、デフォルト値は dt:value にリストされている値から取得する必要があります。

5.required
required は、この属性を参照する要素にこの属性が必須かどうかを指定します。値が「yes」の場合は必須であることを示し、値が「no」の場合は不要であることを示します。

6. Attribute 要素
AttributeType とattribute の関係は、ElementType と element の間の関係と同じです。AttributeType は属性を宣言するだけであり、要素がどの属性を持っているかを正確に指定するには、attribute 要素に依存する必要があります。 。

以上がスキーマ検証 XML の概念のコード例の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。