1

組み込みデータ型の xsd 定義はどこにありますか? それとも xsd を使用して定義されていませんか?

たとえば、 xs:boolean データ型は次のように定義されると思います。

<xs:simpleType name="boolean">
    <xs:restriction>
      <xs:pattern value="true|false|0|1"/>
    </xs:restriction>
</xs:simpleType>

(仕様http://www.w3.org/TR/xmlschema-2/#booleanによると、boolean は「true」、「false」、「0」、または「1」のいずれかの値を持つことができます。)

しかし、組み込みデータ型のスキーマ仕様が見つかりません。

繰り返しますが、http://www.w3.org/TR/xmlschema-2には「A Schema for Datatype Definitions」がありますが、私にとってこのスキーマはあまり定義していません。繰り返しますが、ブール型はそのスキーマで次のように定義されています。

<xs:simpleType name="boolean" id="boolean">
    <xs:annotation>
      <xs:appinfo>
        <hfp:hasFacet name="pattern"/>
        <hfp:hasFacet name="whiteSpace"/>
        <hfp:hasProperty name="ordered" value="false"/>
        <hfp:hasProperty name="bounded" value="false"/>
        <hfp:hasProperty name="cardinality" value="finite"/>
        <hfp:hasProperty name="numeric" value="false"/>
      </xs:appinfo>
      <xs:documentation source="http://www.w3.org/TR/xmlschema-2/#boolean"/>
    </xs:annotation>
    <xs:restriction base="xs:anySimpleType">
      <xs:whiteSpace fixed="true" value="collapse" id="boolean.whiteSpace"/>
    </xs:restriction>
  </xs:simpleType>

しかし、これは空白の制限を与えるだけです。同じことが他のすべてのデータ型にも当てはまるため、このスキーマがデータ型を適切に定義する方法がわかりません。

繰り返しになりますが、組み込みデータ型を定義するスキーマがある場合、どこで見つけることができますか? ...または、ここで何か誤解していますか?

私の質問が十分に明確であることを願っています:)

助けてくれてありがとう!

4

1 に答える 1

1

短い答え: いくつかの近似値を見つけることができますが、XSD の組み込み型の規範的な定義を見つけることができません。(ご想像のとおり) XSD を使用して規範的に定義されていないためです。

より長い答え: xsd:boolean を含むプリミティブ データ型は、型システムの基礎を形成します。原則として、プリミティブ型の XSD 宣言が存在することはありません。(「プリミティブ」という用語は、システム内ではなく、システムの外部で、通常は散文で定義する必要がある、システム内のものに付ける名前にすぎません。)

一般的に言えば、その理由は単純です。XSD 単純型宣言は、既存のプリミティブに基づいて新しい型を定義するため、XSD 型定義を処理する前に、XSD プロセッサがプリミティブを認識している必要があります。XSD を使用してプリミティブを定義しようとすると、(a) そのように定義された型が、定義により、プリミティブではなく派生型になり、(b) 無限回帰につながります。より具体的に言えば、あなたが示すように、語彙形式「true」、「false」、「1」、および「0」を列挙できますが、 xsd:enumeration は、いくつかのベースの値空間を制限する方法としてのみ定義されていますその基本タイプの値スペースで選択した値を列挙することにより、タイプ(あなたの例では欠落しています)。しかし、プリミティブをそのように定義することはできません。正式な目的のために、基本型 (xsd: XSD 1.0 では anySimpleType、XSD 1.1 では xsd:anyAtomicType)、anyAtomicType の値空間は、現在および将来のすべてのプリミティブ型の値空間の結合として (散文で) 定義されます。プリミティブ型の値空間の性質、および字句空間から値空間へのマッピングの性質は、XSD では定義できません。それらは散文で与えられなければなりません。(たとえば、あなたの列挙はブール値のリストです。xsd:anyURI の語彙空間を定義するにはどうすればよいでしょうか?「1」と「true」の両方が同じ値を表し、「0」と「true」が同じ値であることをどのように指定しますか? 「false」は他の値を示しますか? 値空間と字句空間から値空間へのマッピングの性質は、XSD では定義できません。それらは散文で与えられなければなりません。(たとえば、あなたの列挙はブール値のリストです。xsd:anyURI の語彙空間を定義するにはどうすればよいでしょうか?「1」と「true」の両方が同じ値を表し、「0」と「true」が同じ値であることをどのように指定しますか? 「false」は他の値を示しますか? 値空間と字句空間から値空間へのマッピングの性質は、XSD では定義できません。それらは散文で与えられなければなりません。(たとえば、あなたの列挙はブール値のリストです。xsd:anyURI の語彙空間を定義するにはどうすればよいでしょうか?「1」と「true」の両方が同じ値を表し、「0」と「true」が同じ値であることをどのように指定しますか? 「false」は他の値を示しますか?

組み込み型の一部 (具体的には、すべての通常の (非プリミティブ) 組み込み型) は、原則として XSD 構文で宣言できます。しかし、プロセッサーは組み込み型の組み込み知識を持っている必要があるため、それらに実際の XSD 宣言を提供しても有用な結果にはなりません。プロセッサは、既に宣言されている型に対して 2 番目の宣言を提供しようとしていると見なされる場合に、エラーを発生させることを選択する場合もあります。(カーネルと標準ライブラリに関するよりクリーンなストーリーがあれば、この問題は回避できたかもしれませんが、XSD wg は 1.0 でクリーンなストーリーを提供しませんでした。下位互換性の問題により、wg は 1.1 で生じた混乱をクリーンアップできませんでした。)

スキーマ ドキュメントの XSD 1.0スキーマでは、すべてのビルトインの XSD 宣言の概算を見つけることができます。非プリミティブの宣言は、プリミティブの宣言よりも不十分であることに気付くかもしれません。前述の理由により、これらすべての宣言は、XSD 1.1 のスキーマ ドキュメントのスキーマから、プリミティブ データ型用と通常の組み込みデータ型用の 2 つの別個の疑似スキーマ ドキュメントに移動されました。

于 2013-07-26T23:31:42.710 に答える