「file:///c:\test.jpg」と「file://c:\test.jpg」はURL的にはどっちが正しいんですか?


どちらもMS-Word 2003ではURLとして認識されます。

どちらも正しいのでしょうか。
ご存知の方教えてください。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/10/25 02:24:18
  • 終了:2006/10/25 10:27:03

回答(3件)

id:takahiro_kihara No.1

狂人日記回答回数833ベストアンサー獲得回数112006/10/25 03:20:52

僕的には、間違いなく後者だが?

少なくとも僕が言えるのは、URLは[Uniform Resource Locator ]の略語に過ぎない、という事実。

Sorry, it's dummy.

http://www.imb.me-h.ne.jp/~kihara/

id:sawakimasahito

僕的には?

2006/10/25 10:22:50
id:daichan330 No.2

ʕ •ᴥ•ʔ<だ 回答回数565ベストアンサー獲得回数1062006/10/25 03:07:48

ポイント49pt

どちらも正しいです。以下に簡単に説明します。


URLは基本的に下記の形式で成り立っています。

[プロトコル]:[マシン名][アドレス]



例えばこの質問のアドレス「http://q.hatena.ne.jp/1161710654」を分けると、

  • プロトコル:http
  • マシン名://q.hatena.ne.jp
  • パス:/1161710654

になります。


で、質問の file プロトコルに関してですが、

ローカルファイルの為、マシン名の部分が省略可能です。


  • 「file:///c:\test.jpg」の場合は、

プロトコル → file

マシン名 → //(後はローカルなので省略)

パス → /c:\test.jpg


  • 「file://c:\test.jpg」の場合は、

プロトコル → file

マシン名 → //(後はローカルなので省略)

パス → c:\test.jpg


という形になります。

「file:/c:\test.jpg」とかもやってみると実行できるのではないかと思いますので試してみてください。


文献は以下を参考にしました。

http://www.kanzaki.com/docs/html/htminfo-uri.html

詳しい事はW3CのURL/URI辺りを読めば出てくるのではないかと思います。

id:sawakimasahito

ありがとうございます!

2006/10/25 10:24:56
id:KuroNeko666 No.3

黒猫回答回数144ベストアンサー獲得回数22006/10/25 03:38:10

ポイント50pt

URLはRFCという事実上の標準規格によって決められています。

http://www5d.biglobe.ne.jp/~stssk/nro/rfc1738_j.txt

(RFC1738が日本語化されているもの)


3.10 FILES」の項目で、//と2個続けているだけであり、三つ/があるほうが間違っているといえます。


それ以前に「3.1. 共通インターネット体系構文」に定義されているURLに \ は一切使われていないので、正しいURLという観点でいえば、どちらも誤っています。


Windows上でのみ利用できるので、マイクロソフト社の独自拡張という見方でいいのではないでしょうか。

id:sawakimasahito

ありがとうございます!

2006/10/25 10:26:26
  • id:roserup
    KuroNeko666さんの、

    >「3.10 FILES」の項目で、//と2個続けているだけであり、三つ/があるほうが間違っているといえます。

    は、ホスト名の前のに//が2個あるということで、ローカルホスト名の省略時は///と三つ並ぶのが正しいと思われます。また逆に3つ目の/は省略できないのではないかと思います。

    (以下http://www5d.biglobe.ne.jp/~stssk/nro/rfc1738_j.txtから引用)
    >3.10 FILES
    >
    > ファイルのURLは次のような形式をとる:
    >
    > file://<host>/<path>
    >
    > <host>は<path>にアクセス可能なシステムの完全なドメイン名であり、<path>は
    > <directory>/<directory>/.../<name>の書式をした階層的なディレクトリパスで
    > ある。
    >
    > 例えば VMSファイルならば、
    >
    > DISK$USER:[MY.NOTES]NOTE123456.TXT
    >
    > は次のようになる。
    >
    > <URL:file://vms.host.edu/disk$user/my/notes/note12345.txt>
    >
    >特例として<host>は文字列"localhost"または空の文字列が可能である。これは
    > 'URLを現在解析しているマシン'と解釈される。
    >
    >5. URL体系を指定するBNF
    >
    >fileurl = "file://" [ host | "localhost" ] "/" fpath

    VMSの例からも、ディレクトリ階層の区切り文字は"/"で示すようですので、
    Windowsの"\"文字もパス区切り文字として使われていることから、

    C:\test.jpg は、C:/test.jpg と表記してもよさそうです。

    ただ、C:のあとの"\"だけはパス区切り文字では無いという可能性もあります。
    その場合は、"\"文字は「安全ではない」文字として定義されているため、
    「全ての安全でない文字はURL内において常に符号化されるべきである」ことから、

    c:\test.jpg は、c:%5Ctest.jpg と表記することになるでしょう。

    Windowsのローカルパス表記としては、ドライブ名から始まるのが正しいので、
    ("/c:\test"が許容されるとしても、本来"c:\test"が正式であろう)

    結果、RFCに*より*準拠するのは、"c:\test.jpg"をパスとした場合は、
    file:///c:/test.jpg
    あるいは
    file:///c:%5Ctest.jpg
    になるではないかと思われます。(実際にエクスプローラでは両方とも動く)

    ただシステムが解釈する許容範囲は個々のシステムに依存するので、
    使えるかどうかという点からすると、質問の例も間違いとも言えないのかなと思います。
  • id:roserup
    このあと追加で調べたら、現在はRFC 1738は、RFC 2396で更新されていて、

    (http://www.ietf.org/rfc/rfc2396.txtから抜粋. xfyコミュニティの話題から)
    URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ]
    absoluteURI = scheme ":" ( hier_part | opaque_part )
    hier_part = ( net_path | abs_path ) [ "?" query ]
    net_path = "//" authority [ abs_path ]
    abs_path = "/" path_segments

    と、今では"file:/c:"でも"file:///c:"でもよいみたいです

    ただ続きがあって、
    RFC 3986 (RFC 1738 を更新し、 RFC 2396 を廃案にする)
    (http://www.ietf.org/rfc/rfc3986.txt)
    では、元に?戻して、file:///c:のみが正しいとなってるみたいです。

    ややこしいー

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません