リソースは、ファイル、Web ページ、またはアプリケーションがデータをやりとりできるものを表す抽象的な用語です。Curl® 実行環境 (RTE) を使用すると、可能な限り同じ方法で異なるリソースにアクセスできるため、データの取得と保存よりもプログラムでデータを処理する方法に重点を置くことができます。
ランタイムによりリソースとの間でデータの読み取りおよび書き込みができます。さらに、データ リソースを操作して、ファイル システム内にあるファイルの削除またはファイル名の変更を行うことができます。
リソースとの間で読み込み、書き込み、または操作を行う前に、そのリソースを識別する必要があります。次のセクションでは、リソースの識別方法について説明します。続くセクションでは、識別したリソースとの対話方法について説明します。
Curl API では、データ ファイルおよびデータベースのような、外部のデータソースを取り扱うことも可能です。
「
外部ソースのデータの管理 」を参照してください。
要約: | - Universal Resource Identifier (URI) を使用してリソースを識別します。
- Curl RTE は、URI の特有タイプの1つである URL を使用します。
- URL を使用することにより、リモート データへのアクセスが容易になります。
|
Universal Resource Identifiers (URI) を使用して、ファイル システム内または Web サーバー上のファイルのようなリソースに名前を付けることができます。Curl RTE は URI の特有タイプの1つの Universal Resource Locator (URL) を使用します。Web ブラウザで表示する Web ページを識別するために URL が使用されているので、おそらく URL はすでにご存知でしょう。
URL の例を次に示します。
- http://www.example.com/scripts/example.cgi?searchstring=pandas#results は Web サーバー上にあるファイルを識別します。さらに、ファイルに渡されるクエリ、およびファイル内での特定の場所を識別するアンカーを指定します。
- file:///c:/applets/tutorial/start.curl は、クライアントのファイル システム内のファイルを指定します。
ランタイムは URL を使用してリソースにアクセスするため、ローカルのファイル システムにあるファイルにアクセスするのと同じくらい簡単にリモート サーバーにあるデータにアクセスできます。
URL は次の最大 4 つの部分で構成されます (左から右へ向かう順で表示)。
- スキーム宣言は、後ろにコロンが続く文字列です。これは、リソースのアクセスに使用されるプロトコルを指定するトップレベルの識別です。たとえば、http: は Hypertext Transfer Protocol (HTTP) を介してアクセスできるリソースのスキーム識別子です。このリソースは Web サーバー上にあるファイルです。
パスはスキーム内の特定のリソースを指定します。このパスは、ディレクトリ階層のルートを示すためにダブル スラッシュ (//) で始まることがよくあります。ただし、mailto: のようにスラッシュを使用しないスキームもあります。
パスの要素はパス セパレータ文字で区切られます。ランタイム内では、この文字には通常フォワード スラッシュ (/) が使用され、元のファイル システムで使用されている文字とは関係ありません。
クエリ文字列はオプションで、疑問符 (?) で始まります。この文字列には、通常、アンド記号 (&) で区分された識別子 = 値のペアによるパラメータが含まれます。たとえば次のようになります。
?keyword=pandas&case-sensitive=false
特定のアプリケーションでは、異なるクエリ文字列の形式を使用する場合があります。また、クエリ文字列の解釈はサーバー次第です。サーバーは文字列全体を無視することもできます。
これらのパラメータは、サーバー側スクリプトのようにリソースが取るアクションの種類を指定することができます。
すべてのスキームがクエリ文字列を識別するわけではありません。スキームがクエリ文字列を識別しない場合、その文字列はパスの一部として処理されます。次に示す識別されたスキームのリストでは、どのスキームがクエリ文字列を識別するのかを説明します。
アンカー はオプションで、リソース内の場所を識別します。アンカーはシャープ記号 (#) で始まり、文字列が続きます。これらは表示されるリソース内での位置を示します。
クエリ文字列と同じく、すべてのスキームがアンカーを識別するわけではありません。スキームがアンカーを識別しない場合、通常 URL 内のアンカーはパスの一部として処理されます。
ランタイムでサポートされる標準スキームについて説明します。
file:ファイル システム内のファイルを指名します。URL file: のパス部分の構成を次に示します。
システム名がない場合 (たとえば、file:///file.txt)、URL はローカル ファイル システム内のファイルを指します。
file: スキームはアンカーとクエリをサポートします。このスキームではクエリ文字列は無視されます。
Windows システムでは、ファイル システム内のパスの最初の部分は通常ドライブ文字で、後にパス セパレータが続きます (例:c:/)。たとえば次のようになります。
file:///c:/windows/system32/somelib.dll
Windows ネットワーク上の共有ディレクトリは、次のようなダブル スラッシュで始まりその後にサーバー名、共有ディレクトリ名が続く URL でアクセスすることができます。
file:////ServerName/ShareName/somefile.txt
- http:Web サーバー上のファイルを指定します。Curl RTE は、クエリ文字列やアンカーを含む http: URL の標準コンポーネントをサポートしています。http: スキームを介して利用できるリソースは読み取り専用です。
- https:Web サーバーからのデータ転送にセキュア ソケット レイヤ (SSL) 接続を使用していることを除けば、http: と同じです。SSL 接続はそれらを介して送られるデータを暗号化し、傍受を防止して識別を確認します。
ランタイムで識別されないスキームは
Url クラスに格納することができます (次を参照)。ただし、サポートされていないスキームを使用する URL を操作すると、ほとんどの場合例外がスローされます。
上記の標準スキームの他に、ランタイムでは
curl: スキームを介して Curl 言語特有のリソースにアクセスすることができます。
curl: スキーム内で、トップレベル ディレクトリはアクセス中のリソースのタイプを判別します。ディレクトリである
curl://string を使用すると、ファイルから読み取っているかのように文字列をストリームに変換できる
文字列ファイル
を作成できます。詳細については、「
文字列ファイル」セクションを参照してください。
curl://offline/、
curl://root/、
curl://http-root/、そして
curl://local-data のディレクトリは
すべて随時接続コンピューティングで使用されます。詳細については
「随時接続コンピューティング」 を参照してください。
curl://edit/ スキームで、ソース エディタをプログラムによって呼び出すことができます。
curl://source/ や curl://install/ のような他のディレクトリは Curl の社内限定使用のために留保されています。
ユーザーは特別な指示がない限り使用しないでください。
要約: | - Url クラスは URL を表示します。
- ローカル ファイルにアクセスするため、標準のファイル ダイアログから取得した PrivilegedUrl を使用します。
- Url を使用すると、それらが表示している URL を操作することができます。
|
Url クラスは Curl 言語で URL を表します。ファイルへのアクセスが必要な Curl RTE 内のほとんどのメソッドは、
Url オブジェクトを使用してファイルを識別できる必要があります。このクラスは、
Url オブジェクトが表示する URL の特定部分を抽出することもできます。
これらのクラスのインスタンス作成については次のセクションで説明します。
ユーザーを保護するため、Curl RTE は (特別な
特権
モードで実行されている場合を除き) アプレットの機能に制限を設けています。Curl RTE のセキュリティ機能の概要については、「
セキュリティ」の章を参照してください。
Web サイト上のファイルへのアクセスと、ローカルでのファイルへのアクセスの重要な違いの 1 つは、ランタイムがアクセスの各タイプに設定するセキュリティ制限の違いです。
- ランタイムは、Web サイトがアクセスを許可した場合に http: または https: の付いた URL を使用してアプレットが Web サイトからファイルにアクセスできるようにするだけです。Web サイトでそのサイトのファイルにアプレットがアクセスできるようにする方法については、「Web サーバーの構成」を参照してください。ユーザーがアプレットに Web サーバー上のファイルにアクセスできることを通知する場合、例外があります。「Web アクセスの制限とchoose-location」を参照してください。
- ランタイムは、ユーザーがアクセスに同意した場合にアプレットがローカル ファイルにアクセスできるようにするだけです。アプレットは標準のファイル ダイアログ ボックスの 1 つを呼び出してこの同意を取得します。詳細は以下を参照してください。
アプレットは Web サイトにアクセスしてデータ ファイル、イメージ、またはその他のリソースを取得することがよくあります。そうしたリソースを表す
Url オブジェクトを作成する最も簡単な方法は、
url プリミティブを使用することです。このプリミティブはリソースの URL を含む文字列を取り、
Url オブジェクトを返します。以下は、Web ページ を表示する
Url オブジェクトを作成する例です。
{let myurl:Url = {url "http://www.example.com/index.html"}}
Web サイト上のファイルを表す Url オブジェクトを持つことは、ファイルが存在すること、またはアプレットがそのファイルにアクセスできることを意味するものではありません。ランタイムは、アプレットがリソースとの間でデータ ストリームを開くなどの方法でリソースにアクセスしようとすると、アプレットがファイルにアクセスできるかどうかを判断します。アプレットがファイルにアクセスできない場合の原因として、URL で指定された Web サイトが存在しないか利用できない、ファイルが存在しない、またはファイルにアクセスする権限がアプレットに無いとランタイムが判断した、などが挙げられます。
ファイルの識別が必要なメソッドおよびプロシージャの多くは Url を引数として受け入れます。そのため、リソースに直接アクセスしたくない場合でも、Url オブジェクトをインスタンス化してこれらのメソッドまたはプロシージャの 1 つに渡す必要があります。
たとえば、
image テキスト フォーマットの
source パラメータは、
Url を取得して表示するイメージ ファイルを指定します。オブジェクトを個別にインスタンス化して
Url に渡す必要はありません。
image の代わりに、通常は
url 式を次の
imageコールに組み込むだけです。
{image source={url "http://www.example.com/imgs/logo.gif"}}
スキームを含むパス全体を詳細に記述した URL (http://www.example.com/imgs/logo.gif など) は絶対です。リソースの場所を特定するのに必要な情報のすべてを提供します。リソースの完全な URL を常に渡すのは入力の必要量を増加させるだけでなく、ドキュメントやプログラムの移植性を低下させることにもなります。Web サイト上でのリソースの場所を変更する場合 (いくつかのファイルを新しいディレクトリに移動する場合など)、ソース ファイル全体を調べてすべての URL を変更する必要があります。
代わりに、url 式を相対パスに指定することができます。リソースの場所は Web サイト上でアプレットのソース ファイルとの相対関係で指定されます。相対 URL は次に示す相対パスの標準表記を使用します。
表記 | 説明 |
.. | 現在のディレクトリの親ディレクトリを参照します。たとえば、相対パス ../somedir/somefile.txt は親ディレクトリへ順に移動し、somedir サブディレクトリへ移動してファイル somefile.txt の場所を特定しするようランタイムに指示します。 |
. | 現在のディレクトリを参照します。相対パスの ./somefile.txt と somefile.txt は同じものです。 |
/ | 相対パスの先頭にあるパス セパレータは、相対パスがファイル システムのルートから開始していることを意味します。 |
相対パスの一般的な使い方の 1 つは、記述されているソース ファイルと同じディレクトリ内でファイルを指定することです。ファイルは同じディレクトリ内にあるので、相対パスはファイルの名前だけで構成されます。
例:
相対パスの使用 |
|
{image source={url "../../default/images/generic.gif"}}
| |
URL を含む
String が絶対であることを確認したい場合、
abs-url? プロシージャを使用してテストできます。URL が絶対のように見える場合、このプロシージャは
true を返します。
セキュリティ上の理由から、相対 URL ではなく絶対 URL を強制的に使用する場合があります。この場合、
url の代わりに
abs-url を使用して
String を
Url に変換します。絶対 URL が与えられているときは、
abs-url は
url と全く同じ働きをします。ただし、
String が相対 URL を含む場合、
abs-url は
Error をスローします。
String が絶対 URL を含んでいることが明らかな場合 (たとえば、URL がページにハードコーディングされている場合)、url ではなく abs-url を使用して Url に変換します。この方がより能率的だからです。
ユーザーはアプレットがローカル ファイル システムのファイルにアクセスできるようにするためアプレットにアクセス権を与える必要があります。そのため、ローカル ファイルの
Url のインスタンス化は Web サイト上のファイルの場合とは異なります。アプレットは
choose-file ,
choose-multiple-files または
choose-locationを呼び出して、アクセスするファイルを選択するようユーザーに要求する必要があります。これらのプロシージャは、ユーザーにファイル (
choose-multiple-files の場合は複数ファイル) を選択させるダイアログを開きます。これらのプロシージャを呼び出すときは、アプレットはファイルへのアクセスの種類 (読み取り専用、読み取りおよび書き込み、または新規ファイル作成) を宣言します。標準ファイル ダイアログの使い方の説明については、「
ファイル ダイアログの作成」を参照してください。
例:
choose-file を呼び出してローカル ファイルUrlオブジェクトを取得 |
|
{let output-area:TextDisplay = {TextDisplay width=3in}}
{VBox
halign="right",
output-area,
{CommandButton
label="Choose File",
{on Action do
{let file-url:#Url =
{choose-file
style=FileDialogStyle.edit,
title="Select a File to Edit"
}
}
{if-non-null file-url then
|| User selected a file Use it somehow.
set output-area.value = file-url.name
}
}
}
}
| |
標準のファイル選択ダイアログは、ユーザーがファイルを選択すると
PrivilegedUrl と呼ばれる
Url のサブクラスを返します
(ユーザーがファイル ダイアログをキャンセルした場合は
null を
返します)。アプレットは標準のファイル選択ダイアログを介して行う以外に
PrivilegedUrl を取得する方法がないので、Curl ランタイムは
アプレットにファイルへのアクセスを許可することができます。
ファイル選択ダイアログが
PrivilegedUrl オブジェクトを返した
場合でも、それを
Url として処理する必要があります。
choose-location ファイル ダイアログ ボックスでは、ユーザーはファイルを参照するだけでなく URL を直接入力することができます。これはユーザーが Web サイト上にあるファイルの URL を入力できることを意味します。ユーザーが Web サイトファイルの URL を入力すると、Curl ランタイムは Web サイトがアプレットにアクセスを許可する
curl-access.txt を持っているかどうかに関わりなく、アプレットがそのファイルにアクセスできるようにします。
そのため、アプレットが Web サイト上のファイルにアクセスする必要があり、そのファイルに curl-access.txt ファイルが含まれていない場合、アプレットはユーザーにファイルの URL を手動で入力するよう要求することができます。
一部の文字、特に
'%'、
'?'、
'#' は URL において特別な意味を持ちます。
その特別な意味をバイパスさせるには、その特殊文字をエンコードする必要があります。
parse-url を例とするいくつかのプロシージャは、必要な時に自動的に特殊文字をエンコードするようになっています。
しかし、
url、
abs-url、または
Url に属する様々なメソッドにパスする文字列は、特殊文字に関して
url-encode-filename を使用するか、手記で既にエンコードされている必要があります。
url-encode-string プロシージャは、正確性を保つためにエンコードする文字の他、危険性の少ないその他の文字もエンコードするのに使用されます。
エンドユーザーからのインプットのような、URLを構成するのに使われ危険性のある文字を含む文字列に対して(時にクエリ文字列を作成する時に)使用することができます。
要約: | - Url クラスには URL の部分を分離するアクセッサがあります。
- Url クラスには、一部を変更した自分のクローンを返すメソッドも含まれています。
|
Url クラスには、Url の表示する URl の一部を抽出することができるアクセッサが含まれています。次の図は、URL のどの部分をアクセッサが返すのかを示しています。
アクセッサを次に示します。
アクセッサ | 説明 |
anchor | String リソース内の場所を識別するUrl のアンカー部を含む String を返します。URL にアンカーがない場合、このアクセッサは空の文字列を返します。 |
basename | Url のファイル名で、右端のピリオドの前にあるすべてを含む String を返します。URL にアンカーがない場合、ファイル名全体が返されます。 |
extension | Url で指定されたファイルの拡張子部分を含む String を返します。通常、extension はファイル名の最も右側にあるピリオド (.) とその右側にあるすべてです。ファイル名にピリオドが含まれていない場合、空の文字列が返されます。 |
filename | Url 内のファイル名 (拡張子を含む) を含むString を返します。Url でファイル名が指定されていない場合 (たとえば Url のパスがディレクトリで終わっているか、最後にスラッシュ (/) が付いている)、filename は空の文字列を返します。 |
full-filename | Url のパスが続くスキームを含む String を返します。言い換えると、これは完全な URL から query と anchor を除いたものです。 |
leaf | リソースのファイル システム内のパスを含む String を返します。スキーム、リソースのあるシステムの名前、アンカー、およびクエリ文字列が削除されます。 |
local-filename | ローカル ファイル システム内の Url で識別されるファイルまたはディレクトリへのパスを含む String を返します。パスのフォーマットはローカル ファイル システムのネイティブ構文です。たとえば、Windows システムでは、local-filename は標準の / ではなく \ で区切られたパスを返します。Url がローカル ファイル システムにないファイルを表している場合 (たとえばスキームが http: の場合)、local-filename は nullを返します。 |
name | UrlがString として表す完全な URL を返します。 |
parent-dir | Url で指定されたファイルを含むディレクトリの Directory オブジェクトを返します。詳細については、「ディレクトリ オブジェクト」のセクションを参照してください。 |
parent-dir-name | parent-dir と同様ですが、その結果は Directory ではなく String に返されます。 |
pathname | anchor を除いた Url で表される URL を含む String を返します。 |
pathname-tail | 完全なファイル名と Url のクエリ文字列 (ある場合) を含む String を返します。 |
query | Url のクエリ文字列を含む String を返します。Url にクエリ文字列が含まれていない場合、query は空の文字列を返します。 |
separator | Url のセパレータ文字を含む String を返します。これは通常スラッシュ (/) です。 |
stem | Url 内のスキームとシステム名を表す Directory オブジェクトを返します。詳細については、「ディレクトリ オブジェクト」セクションを参照してください。 |
次の例では、これらのアクセッサが URL を解釈する方法を示します。有効な URL を「URL To Analyze」 ボックスに入力し、Analyze URLをクリックしてアクセッサの返す内容を表示することができます。入力した URL は実際には何も解決する必要はありません。それは、この例では URL で指定されたリソースにアクセスしようとしないからです。エラー チェックは実行されません。そのため無効な URL の解析の結果、エラーになることがあります。相対 URL を「URL To Analyze」に入力できることにも注意してください。
例:
URL の解析 |
|
{value
let uribox:TextField =
{TextField width=4in,
value="http://www.example.com/scripts/example.cgi?search=yes#myanchor"}
let results:Graphic = {Fill}
let analyze:CommandButton =
{CommandButton
label = "Analyze URL",
{on Action do
|| resolve the URL.
let theurl:Url = {url uribox.value}
set results =
{results.replace-with
{spaced-vbox
{text name is: {value theurl.name}},
{text anchor is: {value theurl.anchor}},
{text basename is: {value theurl.basename}},
{text extension is: {value theurl.extension}},
{text filename is: {value theurl.filename}},
{text full-filename is: {value theurl.full-filename}},
{text leaf is: {value theurl.leaf}},
{text local-filename is: {value theurl.local-filename}},
{text parent-dir-name is: {value theurl.parent-dir-name}},
{text pathname is: {value theurl.pathname}},
{text pathname-tail is: {value theurl.pathname-tail}},
{text query is: {value theurl.query}},
{text separator is: {value theurl.separator}}}}}}
{spaced-vbox
{spaced-hbox {text URL To Analyze: }, uribox, analyze},
results}
}
| |
Copyright © 1998-2019 SCSK Corporation.
All rights reserved.
Curl, the Curl logo, Surge, and the Surge logo are trademarks of SCSK Corporation.
that are registered in the United States. Surge
Lab, the Surge Lab logo, and the Surge Lab Visual Layout Editor (VLE)
logo are trademarks of SCSK Corporation.