XML学習ノート4??XSD簡易データ型_html/css_WEB-ITnose

WBOY
リリース: 2016-06-24 12:33:52
オリジナル
1017 人が閲覧しました

XSD はデータ型を提供し、カスタム データ型をサポートしますが、これはすべて、「XSD のデータ型を見てください」の組み込みデータ型に基づいています。

1. :

(1) 単純タイプ: 組み込みタイプに加えて、単純タイプをカスタマイズするためにも使用できます。制限 、リスト、結合。

(2) 複合タイプ: 要素にのみ使用でき、すべて を使用してカスタマイズする必要があります。内容に応じて、単純な内容の複合タイプと複雑な内容の複合タイプにさらに分類できます。 を使用してそのコンテンツを定義します。さらに、複合型は制限 と拡張 を使用して新しい型を派生することもできます。

複合型は要素にのみ使用できるため、単純型と複合型を区別する必要があると考えられます。

2. 組み込み型

組み込み型は基本的に重要な位置を持ち、他の型を派生するための基礎となります。 まず、公式ドキュメントから組み込み型の継承図を切り出しましょう。凡例にいくつかのメモがあります: 組み込みプリミティブ型、組み込み派生型、複合型、制限による派生、リストによる派生)、拡張または制限による派生。

この写真を見た第一印象は、2本の柱(文字列とその派生、十進とその派生)の上に2階建ての店が建っている、柱が背骨で店が飾り、ちょっと遠い? -fetched ですが、より具体的な組み込み型を確認してください。

(1) 文字列型

なお、QNAMEは文字列型のデータですが、導出機構の問題により文字列から導出されたものではありません。

Type

Description

QNAME

は改行、復帰、タブを置き換えます文字列内 改行、復帰、タブ文字をスペースに置き換え、先頭と末尾のスペースを自動的に削除し、途中にある複数の連続するスペースを 1 つのスペースに圧縮します en-GB、en-US、fr、zh-CN などの有効な言語コード。 名前空間のない正当な XML タグ名、つまりコロンを含めることはできません 同じ DTD、これは XML ドキュメント内で一意である必要があり、要素ではなく属性にのみ使用できます。 DTD と同じ、既存の ID または複数の ID を参照する必要がありますスペースで区切られた属性値は属性にのみ使用でき、要素には使用できません DTD と同じ、1 つ以上の外部エンティティ、複数はスペースで区切られ、要素ではなく属性にのみ使用できます DTD と同様、スペースで区切られた 1 つ以上の NMTOKEN は属性にのみ使用でき、要素には使用できません
QNAME XML タグ名と名前空間プレフィックス。名前空間は省略できますが、省略時にコロンで始めることはできません。また、使用時にコロンで終わることはできません。名前空間
string 文字列には文字、改行、復帰、タブなどを含めることができ、すべての文字はそのまま保持されます
normalizedString
token
language
Name 文字、数字、アンダースコア、アンダースコア、コロンで構成される有効な XML タグ名。ドットで構成されており、数字、ダッシュ、ドットで始めることはできません
NCName
ID
IDREF DTD と同じ、既存の ID 属性値を参照する必要があります。要素ではなく属性にのみ使用できます
IDREFS
ENTITY DTD と同様、外部エンティティは属性にのみ使用でき、要素には使用できません
ENTITIES
NMTOKEN DTD と同じ、正当な XML タグ名であり、次のもので構成されているものでのみ使用できます文字、数字、アンダースコア、ダッシュ、ピリオド、コロン
NMTOKENS

(2) 数値型

float 型および double 型でも受け入れられる特殊な値: -INF (負の無限大)、INF (正の無限大)、NaN (非数値)、+0 (正のゼロ)、および - 0 (負のゼロ)。正のゼロが負のゼロより大きい場合、NaN はすべての数値 (INF を含む) より大きく、INF はすべての浮動小数点数よりも大きくなります。

Float 32 ビット単精度浮動小数点数は科学カウント方式を使用するために使用できますが、全体の部分が 0 の場合は省略できます。 負の整数 64 ビット符号付き整数int 32 ビット符号付き整数short 16 ビット符号付き整数 バイト 8 ビット符号付き整数 nonNegativeInteger 非負の整数 positvieInteger 正の整数 unsignedLong 64 ビット符号なし整数unsignedInt 32- bit 符号なし整数 符号付き整数 unsignedShort 16 ビット符号なし整数unsignedByte 8 ビット符号なし整数(3) ブール型 ブール型は true とfalse 、1 (true を表す)、0 (false を表す) の 4 つの値。 4 時間dateTime
double 64ビット倍精度浮動小数点数、科学表記法が使用可能、0の場合整数部は省略可能、ただし小数点は省略不可
10進数 正確な10進数、科学表記法使用できません、受け入れられません - INF、INF、NAN などの特殊な値
hh:mm:ss.sss 時間、sss はミリ秒数を表します

YYYY-MM-DDThh:mm:ss.sss

日付時刻、真ん中の Tは必須であり、日付と時刻の区切り文字です

g Yearg YearMonthg月gMonthDaygDayduration

注: 上記の最初の 8 種類の後に Z を追加して UTC 時間を表すことができます。Y、M、D、h、m、s はそれぞれ年、月、日、時、分、秒を表し、それらはすべて次のようになります。有効な整数に置き換えられます。年 4 桁が足りない場合は、先頭にマイナス記号を追加して、月、日、時、分、BC を示します。次に、ミリ秒sss には 1 ~ 3 桁の整数を左に追加します。

(5) バイナリデータ型

XSDには次の2つのバイナリデータ型があります:

A: hexBinary、16進数で保存されたバイナリデータなので、0~9、a~f、A~のみで構成できますF とその他の文字で構成され、文字長は偶数でなければなりません。

B: Base64Binary、Base64 エンコードで保存されたバイナリ データ。そのため、0 ~ 9、a ~ f、A ~ F、正符号 + などの文字でのみ構成でき、文字の長さは 4 の倍数である必要があります。 。

(6) anyURI タイプ: 正当な URI。

(7) NOTATION タイプ: DTD と同じで、法的記号を示します。

3. 単純なデータ型をカスタマイズする

(1) 要素を使用して単純なデータ型をカスタマイズするための構文は次のとおりです:

<simpleType id=ID name=NCName final=... any-attributes>    (annotation?,(restriction|list|union))    <!--     1.id属性是可选的,用于唯一标识<simpleType>元素本身     2.name属性表示自定义数据类型的名称,值是NCName类型,并且必须在所有<simpleType>和<complexType>之间唯一,<simpleType>是<schema>的子元素时必须指定,这个时候新定义的数据类型为全局的数据类型    --></simpleType>
ログイン後にコピー

(2) schema 要素でグローバル データ型を定義できます。または、ローカル データ型を他の要素で定義することもできます。

(3) Final 属性は、新しいタイプの派生を制限するために使用されます。デフォルト値は、ルート要素 の FinalDefault 属性の値です。

A、#all : 任意の形式で派生する型を制限します。 新しい型

B、制限、リスト、共用体の自由な組み合わせ: 新しい型を派生するための指定されたメソッドの使用を制限します

C、"": 制限なし

4。制限によるデータ型

From 構文の観点から見ると、 要素を使用して単純型をカスタマイズするには、restriction、list、union の 3 つの方法があります。このセクションでは、まず最初のタイプ、restriction について説明します。

(1) 構文形式は次のとおりです。

<simpleType ...>    <restriction id=ID base=QNAME any-attributes>    <!--1.处于<simpleType>元素下的语法-->        (annotation?,(simpleType?,(12种数据类型约束)*))    </restriction></simpleType><simpleContent ...>    <restriction id=ID base=QNAME any-attributes>    <!--2.处于<simpleContent>元素下的语法-->        (annotation?,(simpleType?,(12种数据类型约束)*)?,((attribute|attributeGroup)*,anyAttribute?))    </restriction></simpleContent><complextContent ...>    <restriction id=ID base=QNAME any-attributes>    <!--3.处于<complextContent>元素下的语法-->         (annotation?,(group|all|choice|sequence)?,((attribute|attributeGroup)*,anyAttribute?))    </restriction></complextContent>
ログイン後にコピー

ここで、id 属性は 要素自体を一意に識別します。base 属性は、このスキーマ (または によって示される他のスキーマ) で定義されていることを示します。組み込みデータ型の名前、simpleType 要素または complexType 要素は、基本属性を指定せずに、 サブ要素を直接使用して、制限された基本型を定義することもできます。

(2) 制約: XSD では、基本型に制約を追加することで制約が実現されます。これらの制約はどの基本タイプに適用できますか? ...

YYYY year
YYYY-MM 年と月
--MM 月、最初の 2 つのダッシュは必須です
--MM-DD 月日、最初の 2 つのダッシュは必須です
---DDD 日、最初の 3 つのダッシュは必須です
PnYnMnDTnHnMnS 時間間隔を定義します。P は固定で期間を表します。S の前の n には小数部を含めることができ、その他は整数である必要があります
精度制約totalDigits文字列、QName 、anyURI、バイナリデータ制約にも使用可能 リストタイプ リスト項目数maxLengthminLengthさまざまなデータ型 正規表現を使用して、出現できる文字を制限します空白処理制約whiteSpacereplace: 置換しますすべての空白文字とスペース
10進数 fractionDigits 許容される小数点以下の最大桁数
許容される最大桁数(小数点を除く) 長さの制約s
length 文字長またはリスト項目数
文字長またはリスト項目の最大数
文字長またはリストの項目数の最小値

範囲制約

数値、日付などの大小の型を比較可能
maxExclusive 上限許容値は上限と等しくすることはできません
minExclusive 許容値の下限は下限と等しくすることはできません
maxInclusive 許容値の上限は、上限
minInclusive 許容値の下限は下限と同じにすることができます 正規表現の制約
パターン
空白文字 (改行、復帰、ス​​ペース、タブなど) の処理方法を定義します preserve: すべての空白をそのまま保持します
折りたたみ: 最初に置換し、次に先頭と末尾のスペースを削除し、中央の連続するスペースを 1 つに圧縮します

在派生新的类型时,如果原来类型有一个约束,新派生类型使用相同的约束,且新约束范围在原约束范围之内,则新类型的约束将会覆盖原类型的约束。但有时候,想阻止派生类型覆盖已有的约束,这个时候可以在原类型的约束上添加fixed属性(true|false)。

5、通过列表派生自定义数据类型

(1)列表元素的语法:

<list id=ID itemType=QName any-attributes>   (annotatin?,(simpleType?))</list>
ログイン後にコピー

(2)指定列表成员类型的方法
A、使用itemType属性

B、使用子元素,这个时候不能指定itemType属性

(3)实际上,内置的IDREFS、ENTITIES、NMTOKENS分别是IDREF、ENTITY、NMTOKEN类型的列表类型。

(4)使用空格作为列表类型值的分隔符。

(5)可以对列表类型使用长度约束(约束列表项的个数)、枚举约束、正则表达式约束和空白处理约束(但值只能是collapse),需要注意的是,枚举约束和正则表达式约束的是整个列表类型的值,而不仅仅只是其中一个列表项值。

6、通过联合派生自定义数据类型

(1)联合元素的语法:

<union id=ID memberTypes="QName列表" any-attributes>   (annotatin?,(simpleType*))</union>
ログイン後にコピー

(2)指定联合成员类型的方法

A、使用属性memberTypes,多个类型使用空格分隔

B、使用一个或多个子元素

(3)可以对联合类型使用枚举约束和正则表达式约束,同样,约束的也是整个联合类型的值。

(4)列表类型和联合类型都是在现有类型的基础上派生新类型,在XSD中还可以使用元素由联合类型派生出相应的列表类型,也可以使用元素将一个或多个已有的列表类型派生出新的联合类型,不过需要注意的是,不能使用列表类型派生新的列表类型,也不能使用含有列表类型的联合类型派生新的列表类型。

7、最后看一个使用三种方式自定义简单类型的实例:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">  <!--从int派生的ageType-->  <xs:simpleType name="ageType">     <xs:restriction base="xs:int">         <xs:maxInclusive value="100"/>         <xs:minInclusive value="0"/>     </xs:restriction>  </xs:simpleType>  <!--由ageType派生出对应的列表类型-->  <xs:simpleType name="ageListType">      <xs:list itemType="ageType"/>  </xs:simpleType>  <!--从string派生的nameType-->  <xs:simpleType name="nameType">     <xs:restriction base="xs:string">         <xs:maxLength value="20"/>         <xs:minLength value="4"/>     </xs:restriction>  </xs:simpleType>  <!--由nameType派生出对应的列表类型-->  <xs:simpleType name="nameListType">      <xs:list itemType="nameType"/>  </xs:simpleType>    <!--由ageType和nameType派生出联合类型-->  <xs:simpleType name="ageType_nameType">      <xs:union memberTypes="ageType nameType"/>  </xs:simpleType>  <!--使用两个列表类型派生联合类型-->  <xs:simpleType name="ageListType_nameListType">      <xs:union memberTypes="ageListType nameListType"/>  </xs:simpleType>  <!--使用两个联合类型派生联合类型-->  <xs:simpleType name="furtherType">      <xs:union memberTypes="ageType_nameType ageListType_nameListType"/>  </xs:simpleType>  <!--一个列表类型,一个联合类型派生联合类型-->  <xs:simpleType name="furtherMixType">      <xs:union memberTypes="nameListType ageListType_nameListType"/>  </xs:simpleType>    <!--由联合类型派生出对应的列表类型-->  <xs:simpleType name="ageType_nameType_ListType">      <xs:list itemType="ageType_nameType"/>  </xs:simpleType></xs:schema>
ログイン後にコピー

 

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート