デフォルトでは、パラメータ入力の XML エンコードは String 型であり、SOAP サービスフォーマットの結果セット出力には、結果セット内のカラムのデータ型について具体的に記述する情報がまったく含まれていません。すべてのフォーマットで、パラメータのデータ型は String です。DNET フォーマットの場合、応答のスキーマセクション内ですべてのカラムは String として型指定されています。CONCRETE フォーマットと XML フォーマットの場合は、応答にデータ型情報が含まれません。このデフォルトの動作は、DATATYPE 句を使用して操作できます。
SQL Anywhere では、DATATYPE 句を使用してデータ型指定を有効にします。データ型情報は、すべての SOAP サービスフォーマットでパラメータ入力と結果セット出力 (応答) の XML エンコードに含めることができます。これにより、パラメータを String に明示的に変換するクライアントコードが不要になるため、SOAP ツールキットからのパラメータ受け渡しが簡単になります。たとえば整数は int として渡すことができます。XML コード化されたデータ型では SOAP ツールキットを使用してデータを解析し、適切な型にキャストします。
String データ型を排他的に使用する場合、アプリケーションでは結果セット内の各カラムのデータ型を暗黙的にわかっている必要があります。データ型指定が Web サーバで要求される場合は、必要ありません。データ型情報が含まれるかどうかを制御するために、Web サービスの定義時に DATATYPE 句を使用できます。
結果セット応答にデータ型指定を含めるようにする Web サービス定義の例を次に示します。
CREATE SERVICE "SASoapTest/EmployeeList" TYPE 'SOAP' AUTHORIZATION OFF SECURE OFF USER DBA DATATYPE OUT AS SELECT * FROM Employees; |
この例では、サービスにはパラメータがないため、データ型情報は結果セット応答のみに対して要求されます。
型指定は、「SOAP」型として定義されているすべての SQL Anywhere Web サービスに適用できます。
入力パラメータの型指定は、パラメータのデータ型を実際のデータ型として DISH サービスで生成される WSDL で公開するだけでサポートされます。
一般的な String パラメータ定義 (または型指定されていないパラメータ) は次のようになります。
<s:element minOccurs="0" maxOccurs="1" name="a_varchar" nillable="true" type="s:string" /> |
String パラメータは nil 可能な場合があります。つまり、出現することもしないこともあります。
整数などの型指定されたパラメータの場合、そのパラメータは出現する必要があり、nil 可能ではありません。次はその例です。
<s:element minOccurs="1" maxOccurs="1" name="an_int" nillable="false" type="s:int" /> |
「SOAP」型であるすべての SQL Anywhere Web サービスでは、応答データ内のデータ型情報を公開できます。データ型は、ローセットカラム要素内の属性として公開されます。
SOAP FORMAT 'CONCRETE' Web サービスからの型指定された SimpleDataSet 応答の例を次に示します。
<SOAP-ENV:Body> <tns:test_types_concrete_onResponse> <tns:test_types_concrete_onResult xsi:type='tns:SimpleDataset'> <tns:rowset> <tns:row> <tns:lvc xsi:type="xsd:string">Hello World</tns:lvc> <tns:i xsi:type="xsd:int">99</tns:i> <tns:ii xsi:type="xsd:long">99999999</tns:ii> <tns:f xsi:type="xsd:float">3.25</tns:f> <tns:d xsi:type="xsd:double">.555555555555555582</tns:d> <tns:bin xsi:type="xsd:base64Binary">AAAAZg==</tns:bin> <tns:date xsi:type="xsd:date">2006-05-29-04:00</tns:date> </tns:row> </tns:rowset> </tns:test_types_concrete_onResult> <tns:sqlcode>0</tns:sqlcode> </tns:test_types_concrete_onResponse> </SOAP-ENV:Body> |
XML データを String として返す SOAP FORMAT 'XML' Web サービスからの応答の例を次に示します。内部ローセットは、コード化された XML で構成されます。ここでは、わかりやすいようにデコードされた形式で示されています。
<SOAP-ENV:Body> <tns:test_types_XML_onResponse> <tns:test_types_XML_onResult xsi:type='xsd:string'> <tns:rowset xmlns:tns="http://localhost/satest/dish" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <tns:row> <tns:lvc xsi:type="xsd:string">Hello World</tns:lvc> <tns:i xsi:type="xsd:int">99</tns:i> <tns:ii xsi:type="xsd:long">99999999</tns:ii> <tns:f xsi:type="xsd:float">3.25</tns:f> <tns:d xsi:type="xsd:double">.555555555555555582</tns:d> <tns:bin xsi:type="xsd:base64Binary">AAAAZg==</tns:bin> <tns:date xsi:type="xsd:date">2006-05-29-04:00</tns:date> </tns:row> </tns:rowset> </tns:test_types_XML_onResult> <tns:sqlcode>0</tns:sqlcode> </tns:test_types_XML_onResponse> </SOAP-ENV:Body> |
要素のネームスペースと XML スキーマでは、データ型情報だけでなく、XML パーサによる後処理に必要なすべての情報を提供します。データ型情報が結果セットに存在しない場合 (DATATYPE OFF または IN)、xsi:type と XML スキーマのネームスペース宣言は省略されます。
型指定された SimpleDataSet を返す SOAP FORMAT 'DNET' Web サービスの例を次に示します。
<SOAP-ENV:Body> <tns:test_types_dnet_outResponse> <tns:test_types_dnet_outResult xsi:type='sqlresultstream:SqlRowSet'> <xsd:schema id='Schema2' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:msdata='urn:schemas-microsoft.com:xml-msdata'> <xsd:element name='rowset' msdata:IsDataSet='true'> <xsd:complexType> <xsd:sequence> <xsd:element name='row' minOccurs='0' maxOccurs='unbounded'> <xsd:complexType> <xsd:sequence> <xsd:element name='lvc' minOccurs='0' type='xsd:string' /> <xsd:element name='ub' minOccurs='0' type='xsd:unsignedByte' /> <xsd:element name='s' minOccurs='0' type='xsd:short' /> <xsd:element name='us' minOccurs='0' type='xsd:unsignedShort' /> <xsd:element name='i' minOccurs='0' type='xsd:int' /> <xsd:element name='ui' minOccurs='0' type='xsd:unsignedInt' /> <xsd:element name='l' minOccurs='0' type='xsd:long' /> <xsd:element name='ul' minOccurs='0' type='xsd:unsignedLong' /> <xsd:element name='f' minOccurs='0' type='xsd:float' /> <xsd:element name='d' minOccurs='0' type='xsd:double' /> <xsd:element name='bin' minOccurs='0' type='xsd:base64Binary' /> <xsd:element name='bool' minOccurs='0' type='xsd:boolean' /> <xsd:element name='num' minOccurs='0' type='xsd:decimal' /> <xsd:element name='dc' minOccurs='0' type='xsd:decimal' /> <xsd:element name='date' minOccurs='0' type='xsd:date' /> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> <diffgr:diffgram xmlns:msdata='urn:schemas-microsoft-com:xml-msdata' xmlns:diffgr='urn:schemas-microsoft-com:xml-diffgram-v1'> <rowset> <row> <lvc>Hello World</lvc> <ub>128</ub> <s>-99</s> <us>33000</us> <i>-2147483640</i> <ui>4294967295</ui> <l>-9223372036854775807</l> <ul>18446744073709551615</ul> <f>3.25</f> <d>.555555555555555582</d> <bin>QUJD</bin> <bool>1</bool> <num>123456.123457</num> <dc>-1.756000</dc> <date>2006-05-29-04:00</date> </row> </rowset> </diffgr:diffgram> </tns:test_types_dnet_outResult> <tns:sqlcode>0</tns:sqlcode> </tns:test_types_dnet_outResponse> </SOAP-ENV:Body> |
SQL Anywhere の型 | XML スキーマの型 | XML の例 |
---|---|---|
CHAR | string | Hello World |
VARCHAR | string | Hello World |
LONG VARCHAR | string | Hello World |
TEXT | string | Hello World |
NCHAR | string | Hello World |
NVARCHAR | string | Hello World |
LONG NVARCHAR | string | Hello World |
NTEXT | string | Hello World |
UNIQUEIDENTIFIER | string | 12345678-1234-5678-9012-123456789012 |
UNIQUEIDENTIFIERSTR | string | 12345678-1234-5678-9012-123456789012 |
XML | これはユーザ定義の型です。パラメータは、複合型 (base64Binary、SOAP 配列、struct など) を表す有効な XML であることが想定されます。 |
<inputHexBinary xsi:type="xsd:hexBinary"> 414243 </inputHexBinary> (「ABC」と解釈される) |
BIGINT | long | -9223372036854775807 |
UNSIGNED BIGINT | unsignedLong | 18446744073709551615 |
BIT | boolean | 1 |
VARBIT | string | 11111111 |
LONG VARBIT | string | 00000000000000001000000000000000 |
DECIMAL | decimal | -1.756000 |
DOUBLE | double | .555555555555555582 |
FLOAT | float | 12.3456792831420898 |
INTEGER | int | -2147483640 |
UNSIGNED INTEGER | unsignedInt | 4294967295 |
NUMERIC | decimal | 123456.123457 |
REAL | float | 3.25 |
SMALLINT | short | -99 |
UNSIGNED SMALLINT | unsignedShort | 33000 |
TINYINT | unsignedByte | 128 |
MONEY | decimal | 12345678.9900 |
SMALLMONEY | decimal | 12.3400 |
DATE | date | 2006-11-21-05:00 |
DATETIME | dateTime | 2006-05-21T09:00:00.000-08:00 |
SMALLDATETIME | dateTime | 2007-01-15T09:00:00.000-08:00 |
TIME | time | 14:14:48.980-05:00 |
TIMESTAMP | dateTime | 2007-01-12T21:02:14.420-06:00 |
TIMESTAMP WITH TIME ZONE | dateTime | 2007-01-12T21:02:14.420-06:00 |
BINARY | base64Binary | AAAAZg== |
IMAGE | base64Binary | AAAAZg== |
LONG BINARY | base64Binary | AAAAZg== |
VARBINARY | base64Binary | AAAAZg== |
1 つまたは複数のパラメータが NCHAR、NVARCHAR、LONG NVARCHAR、NTEXT のいずれかの型の場合、応答は UTF8 で出力されます。クライアントデータベースが UTF-8 文字コードを使用している場合は動作に変更はありません (NCHAR と CHAR のデータ型は同一であるため)。ただし、データベースが UTF-8 文字コードを使用していない場合は、NCHAR 以外のデータ型のパラメータはすべて UTF8 に変換されます。XML 宣言エンコードおよび HTTP ヘッダ Content-Type の値は、使用される文字コードに対応します。
XML スキーマの型 | Java データ型 |
---|---|
xsd:string | java.lang.String |
xsd:integer | java.math.BigInteger |
xsd:int | int |
xsd:long | long |
xsd:short | short |
xsd:decimal | java.math.BigDecimal |
xsd:float | float |
xsd:double | double |
xsd:boolean | boolean |
xsd:byte | byte |
xsd:QName | javax.xml.namespace.QName |
xsd:dateTime | javax.xml.datatype.XMLGregorianCalendar |
xsd:base64Binary | byte[] |
xsd:hexBinary | byte[] |
xsd:unsignedInt | long |
xsd:unsignedShort | int |
xsd:unsignedByte | short |
xsd:time | javax.xml.datatype.XMLGregorianCalendar |
xsd:date | javax.xml.datatype.XMLGregorianCalendar |
xsd:g | javax.xml.datatype.XMLGregorianCalendar |
xsd:anySimpleType | java.lang.Object |
xsd:anySimpleType | java.lang.String |
xsd:duration | javax.xml.datatype.Duration |
xsd:NOTATION | javax.xml.namespace.QName |
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2013, SAP AG or an SAP affiliate company. - SAP Sybase SQL Anywhere 16.0 |