2

Delphi 2007 を使用して、クライアント側で使用する wsdl をインポートしようとしています。

に WSDL をhttps://services.rdc.nl/voertuigscan/2.0/wsdlインポートしました。これは、xsd をインポートしてその型を定義します。インポートされた xsd には、いくつかの追加のインポートおよびインクルードされた xsd があり、その中で次のタイプが定義されています。

<xs:complexType name="BedragExtended">
  <xs:simpleContent>
    <xs:extension base="ct:Bedrag">
      <xs:attribute name="Bron" type="Bron"/>
    </xs:extension>
  </xs:simpleContent>
</xs:complexType>

タイプ ct:Bedrag は、含まれている XSD で次のように定義されています。

<xs:simpleType name="Bedrag">
  <xs:restriction base="xs:decimal">
    <xs:totalDigits value="9"/>
    <xs:fractionDigits value="2"/>
  </xs:restriction>
</xs:simpleType>

ただし、BedragExtended 型は次のようにインポートされます。

// ************************************************************************ //
// XML       : BedragExtended, global, <complexType>
// Namespace : http://nsp.rdc.nl/RDC/voertuigscan
// ************************************************************************ //
BedragExtended = class(TRemotable)
private
  FBron: Bron;
  FBron_Specified: boolean;
  procedure SetBron(Index: Integer; const ABron: Bron);
  function  Bron_Specified(Index: Integer): boolean;
published
  property Bron: Bron  Index (IS_ATTR or IS_OPTN) read FBron write SetBron stored Bron_Specified;
end;

ご覧のとおり、Bedrag 型の基になる値については言及されていませんが、wsdl インポートによって生成された .pas ファイルの上部にあるヘッダーは、正しい xsd が解析されたことを示しています。Delphi で BedragExtended 型を正しく生成するにはどうすればよいですか?

4

1 に答える 1

0

すべての言語でこの動作が見られるのはかなり一般的です (少なくとも私が知っている言語については)。通常、単純型はクラスにマップされません。唯一の注目すべき例外は、列挙ファセットを使用する単純な型の場合です。この場合、タイプ セーフな列挙 (Java と .NET の両方) を取得できます。

BedragExtended属性を持つ文字列であることを意図しているため、これはある程度予想されます。残念ながら、XSD 1.0 では拡張 (属性を設定するため) と制限 (字句スペースを制限するため) の両方を同時に行うことはできないため、(属性を取得するための) 複合型であるこの実装を目にすることは非常に一般的です。ただし、単純なコンテンツ (基本的にはある種のテキスト) を使用します。

于 2012-08-14T15:59:28.730 に答える