(57)【要約】  静的および動的リストの使用を伴う仮想フォルダおよび項目共有のためのシステムおよび方法。静的および動的リストは、仮想フォルダタイプとして作成されることができる。仮想フォルダは、正規のファイルおよびフォルダを、ディスク上の実際の物理的な基底ファイルシステム構造でなく、そうしたファイルおよびフォルダのメタデータに基づく様々なビューを用いてユーザに見せる。静的リストとは、特定の順序で並べられた項目からなるフォルダからなり、動的リストとは、スコープおよび１組の基準に基づく１組の項目を集める。リストが共有されると、実際のリストは、共有者のマシンまたはサーバ上の元の位置に残され、リストおよび参照項目にリモートアクセスするための許可が被共有者に与えられる。項目を追加または削除することによってリストが変更された場合、こうした項目も、被共有者が項目にアクセスするのを許可しまたは禁止するように、自動的にアクセス許可がやり直される。共有者は、ドキュメント、連絡先、およびｅメールなど、個々の項目を共有することも選ぶことができる。共有処理を開始するために、ユーザは、共有される項目を選択する。ユーザは次いで、項目が共有されるべき被共有者、およびこの被共有者に割り当てられるべきアクセス許可を選択する。項目が共有されると、そうした項目は共有者のマシン上の元の場所に残され、システムは、アクセス許可が設定され、被共有者が項目にアクセスすることができるようにどのセキュリティ問題も処理されるようにする。さらに、共有トランザクションの詳細が追跡され、後で見直すために記録されることができる。共有者は、システムに、共有者のマシンにある共有項目に直接アクセスするためのリンクを被共有者へ送らせることもできる。被共有者は、共有者が被共有者に何を共有させているか調べるために、共有者のマシンに問合せを行うこともできる。
2007509435.tif 000002
【特許請求の範囲】
【請求項１】
共有者と被共有者の間で、コンピュータシステム内の項目を共有する方法であって、
前記共有者のコンピュータ上に、複数の参照項目を有するリストを作成すること、および
被共有者が、前記共有者のコンピュータにある前記参照項目へのリモートアクセス権を与えられるように、前記リストを前記被共有者と共有することを含むことを特徴とする方法。
【請求項２】
前記リストは静的リストであることを特徴とする請求項１に記載の方法。
【請求項３】
前記共有者が前記リストから項目を削除すると、前記被共有者は、前記項目へのリモートアクセス権を与えられなくなることを特徴とする請求項２に記載の方法。
【請求項４】
項目が前記リストに追加されると、前記被共有者は、前記追加項目へのリモートアクセス権を与えられることを特徴とする請求項２に記載の方法。
【請求項５】
前記リストは、前記参照項目に対するスコープおよび基準の組を有する動的リストであることを特徴とする請求項１に記載の方法。
【請求項６】
前記動的リストにある項目が、前記動的リストの前記基準を満たさなくなるようにプロパティを変更すると、前記被共有者は、前記項目へのリモートアクセス権を与えられなくなることを特徴とする請求項５に記載の方法。
【請求項７】
前記動的リストになかった項目が、前記動的リストの前記基準を満たすようにプロパティを変更すると、前記被共有者は、前記項目へのリモートアクセス権を与えられることを特徴とする請求項５に記載の方法。
【請求項８】
前記共有者が、項目に関して前記被共有者にアクセス権を認めることができない場合、前記共有者に通知が行われることを特徴とする請求項１に記載の方法。
【請求項９】
前記共有者は、前記被共有者が前記項目に対してもっているアクセス権のタイプを限定することができることを特徴とする請求項１に記載の方法。
【請求項１０】
コンピュータシステム上の項目を共有する方法であって、
参照項目を有するリストにアクセスするためのアクセス許可を受け取ること、ならびに
前記リストにアクセスするための前記アクセス許可の受取りに応答して、前記リストおよび前記参照項目にリモートアクセスすることを含むことを特徴とする方法。
【請求項１１】
前記リストは、仮想フォルダとして形成される静的リストであることを特徴とする請求項１０に記載の方法。
【請求項１２】
前記リストに項目が追加されまたは削除されると、前記項目にアクセスするための前記アクセス許可がそれに応じて追加されまたははずされることを特徴とする請求項１１に記載の方法。
【請求項１３】
前記リストは、前記参照項目に対する１組の基準を有する仮想フォルダとして形成される動的リストであることを特徴とする請求項１０に記載の方法。
【請求項１４】
項目が、前記動的リストの前記基準を満たしまたは満たさなくなるようにプロパティを変更すると、前記項目にアクセスするための前記アクセス許可がそれに応じて追加されまたははずされることを特徴とする請求項１３に記載の方法。
【請求項１５】
項目へのアクセス権が入手不可能な場合、通知が行われることを特徴とする請求項１０に記載の方法。
【請求項１６】
前記リストにアクセスするための前記アクセス許可は、前記項目に関して入手可能なアクセス権のタイプを指定することを特徴とする請求項１０に記載の方法。
【請求項１７】
コンピュータプログラムセグメントが、１つまたは複数の他のコンピュータプログラムセグメントと通信することを可能にする１つまたは複数のコンピュータ可読媒体であって、
要求を実行することができる１つまたは複数の他のコンピュータプログラムセグメントに伝達される、仮想フォルダ中で参照される１組の項目へのリモートアクセス権をもたらすための前記要求を引き起こす１組のコンピュータ使用可能命令を備えることを特徴とする媒体。
【請求項１８】
前記仮想フォルダは、静的リストを備えることを特徴とする請求項１７に記載の媒体。
【請求項１９】
前記リストに項目が追加されまたは削除されると、前記項目のリモートアクセスのためのアクセス許可がそれに応じて追加されまたははずされることを特徴とする請求項１８に記載の媒体。
【請求項２０】
前記仮想フォルダは、前記参照項目に対する１組の基準を有する動的リストを備えることを特徴とする請求項１７に記載の媒体。
【請求項２１】
項目が、前記リストの前記基準を満たしまたは満たさなくなるようにプロパティを変更すると、前記項目にアクセスするための前記アクセス許可がそれに応じて追加されまたははずされることを特徴とする請求項２０に記載の媒体。
【請求項２２】
項目へのアクセス権が入手不可能な場合、通知が行われることを特徴とする請求項１７に記載の媒体。
【請求項２３】
前記項目への前記アクセス権は、読取り／書込みまたは読取り専用の一方に限定され得ることを特徴とする請求項１７に記載の媒体。
【請求項２４】
リストの共有者と被共有者の間で通信を行う方法であって、
前記被共有者が、前記リストにおいて参照される前記項目に前記共有者のコンピュータでリモートアクセスするための呼出しを発行すること、
前記共有者が、前記呼出しを受け取り、前記項目へのリモートアクセス権を与えることを特徴とする方法。
【請求項２５】
前記リストは静的リストであることを特徴とする請求項２４に記載の方法。
【請求項２６】
前記リストに項目が追加されまたは削除されると、前記項目への前記アクセス権がそれに応じて許可されまたは拒絶されることを特徴とする請求項２５に記載の方法。
【請求項２７】
前記リストは、前記項目に対する１組の基準を有する動的リストであることを特徴とする請求項２４に記載の方法。
【請求項２８】
前記項目が前記リストの前記基準を満たしまたは満たさなくなるように項目のプロパティが変化すると、前記項目がそれに応じて前記リストに追加されまたは削除されることを特徴とする請求項２７に記載の方法。
【請求項２９】
前記リストが共有されるときに前記リストにある項目に対してアクセス権が入手不可能であり得る場合、前記共有者に通知が行われることを特徴とする請求項２４に記載の方法。
【請求項３０】
前記共有者は、前記項目へのアクセス権のタイプを限定することができることを特徴とする請求項２４に記載の方法。
【請求項３１】
リストにおいて参照される１組の項目を共有者が被共有者と共有することを可能にする１つまたは複数のコンピュータ可読媒体であって、
前記被共有者に、前記共有者のコンピュータを経由して前記項目にリモートアクセスさせる１組のコンピュータ使用可能命令を備えることを特徴とする媒体。
【請求項３２】
前記リストは、静的リストまたは動的リストの一方であることを特徴とする請求項３１に記載の媒体。
【請求項３３】
前記リストに項目が追加されまたは削除されると、前記項目にアクセスするための前記被共有者のアクセス許可がそれに応じて追加されまたははずされることを特徴とする請求項３１に記載の媒体。
【請求項３４】
前記共有者が、アクセス権が入手不可能であり得る項目へのアクセス権を与えようと試みると、前記被共有者が前記項目にアクセスすることができない可能性があるという通知が前記共有者に行われることを特徴とする請求項３１に記載の媒体。
【請求項３５】
前記項目に対して与えられるアクセス権のタイプは、読取りまたは読取り／書込みの一方であり得ることを特徴とする請求項３１に記載の媒体。
【請求項３６】
共有者と被共有者の間で、コンピュータシステム内の項目を共有する方法であって、
前記共有者のコンピュータ上に、複数の参照項目を有する仮想フォルダを作成すること、および
被共有者が、前記共有者のコンピュータにある前記参照項目へのリモートアクセス権を与えられるように、前記仮想フォルダを前記被共有者と共有することを含むことを特徴とする方法。
【請求項３７】
前記仮想フォルダは静的仮想フォルダであることを特徴とする請求項３６に記載の方法。
【請求項３８】
前記共有者が前記仮想フォルダから項目を削除すると、前記被共有者は、前記項目へのリモートアクセス権を与えられなくなることを特徴とする請求項３７に記載の方法。
【請求項３９】
項目が前記仮想フォルダに追加されると、前記被共有者は、前記追加項目へのリモートアクセス権を与えられることを特徴とする請求項３７に記載の方法。
【請求項４０】
前記仮想フォルダは、前記参照項目に対するスコープおよび基準の組を有する動的仮想フォルダであることを特徴とする請求項３６に記載の方法。
【請求項４１】
前記動的仮想フォルダにある項目が、前記動的仮想フォルダの前記基準を満たさなくなるようにプロパティを変更すると、前記被共有者は、前記項目へのリモートアクセス権を与えられなくなることを特徴とする請求項４０に記載の方法。
【請求項４２】
前記動的仮想フォルダになかった項目が、前記動的仮想フォルダの前記基準を満たすようにプロパティを変更すると、前記被共有者は、前記項目へのリモートアクセス権を与えられることを特徴とする請求項４０に記載の方法。
【請求項４３】
共有者と被共有者の間で、コンピュータシステム内の少なくとも１つの項目を共有する方法であって、
前記共有者が、共有される少なくとも１つの項目を選択すること、
前記共有者が、前記項目が共有される相手となる少なくとも１人の被共有者を選択すること、および
前記共有者のコンピュータ上の前記項目へのリモートアクセス権を前記被共有者に与えることを含むことを特徴とする方法。
【請求項４４】
前記共有者は、前記被共有者に割り当てられるアクセス許可のレベルも指定することを特徴とする請求項４３に記載の方法。
【請求項４５】
共有される前記項目がリモートアクセスされ得るようにするためのファイル共有が存在することを検証することをさらに含むことを特徴とする請求項４３に記載の方法。
【請求項４６】
ファイル共有が既に存在する場合、前記ファイル共有における前記アクセス許可は、共有される前記項目に前記被共有者をアクセスさせるように設定されることを特徴とする請求項４５に記載の方法。
【請求項４７】
共有される前記項目に関連づけられたどのアクセス許可も、前記被共有者が前記項目にアクセスすることができるように設定されることを検証することをさらに含むことを特徴とする請求項４３に記載の方法。
【請求項４８】
前記項目が保護されるかどうか判定し、保護される場合は、前記項目が前記被共有者と共有され得ることを検証し、前記項目が共有されることができない場合は、前記共有者に通知を行うことをさらに含むことを特徴とする請求項４３に記載の方法。
【請求項４９】
前記共有者のファイアウォールが、前記被共有者を前記共有項目にアクセスさせることを検証することをさらに含むことを特徴とする請求項４３に記載の方法。
【請求項５０】
何が共有され、誰と共有され、またはいつ共有されたかの少なくとも１つを含む、共有トランザクションの１つまたは複数の詳細を記録することをさらに含むことを特徴とする請求項４３に記載の方法。
【請求項５１】
前記共有者のコンピュータから前記共有項目に前記被共有者が直接アクセスすることを可能にするリンクを前記被共有者に送ることをさらに含むことを特徴とする請求項４３に記載の方法。
【請求項５２】
前記共有者が前記被共有者と何を共有しているかを調べるために、前記被共有者が前記共有者のコンピュータに問合せを行うことを可能にすることをさらに含むことを特徴とする請求項４３に記載の方法。
【請求項５３】
前記項目は直接共有される別個の項目であり、その結果、前記項目は、フォルダが共有される前に前記フォルダ中で最初に保存される必要がなくなることを特徴とする請求項４３に記載の方法。
【請求項５４】
コンピュータシステム上の少なくとも１つの項目を共有する方法であって、
共有される前記項目にアクセスするためのアクセス許可を受け取ること、および
前記項目にアクセスするための前記アクセス許可の受取りに応答して、前記項目にリモートアクセスすることを含むことを特徴とする方法。
【請求項５５】
共有される前記項目がリモートアクセスされ得るようにするためのファイル共有が存在することを検証することをさらに含むことを特徴とする請求項５４に記載の方法。
【請求項５６】
ファイル共有が既に存在する場合、前記ファイル共有における前記アクセス許可は、前記項目に前記被共有者をアクセスさせるように設定されることを特徴とする請求項５５に記載の方法。
【請求項５７】
前記項目に関連づけられたどのアクセス許可も、前記被共有者が前記項目にアクセスすることができるように設定されることを検証することをさらに含むことを特徴とする請求項５４に記載の方法。
【請求項５８】
前記項目が保護されるかどうか判定し、保護される場合は、前記項目が前記被共有者と共有され得ることを検証し、前記項目が共有されることができない場合は、前記共有者に通知を行うことをさらに含むことを特徴とする請求項５４に記載の方法。
【請求項５９】
前記共有者のコンピュータから前記項目に前記被共有者が直接アクセスすることを可能にするリンクを前記被共有者に送ることをさらに含むことを特徴とする請求項５４に記載の方法。
【請求項６０】
前記項目は直接共有される別個の項目であり、その結果、前記項目は、フォルダが共有される前に前記フォルダ中で最初に保存される必要がなくなることを特徴とする請求項５４に記載の方法。
【請求項６１】
コンピュータプログラムセグメントが、少なくとも１つの項目を共有するために１つまたは複数の他のコンピュータプログラムセグメントと通信することを可能にする１つまたは複数のコンピュータ可読媒体であって、
要求を実行することができる１つまたは複数の他のコンピュータプログラムセグメントに伝達される、共有される少なくとも１つの項目へのリモートアクセス権を提供するための前記要求を引き起こす１組のコンピュータ使用可能命令を備えることを特徴とする媒体。
【請求項６２】
前記項目に関連づけられたどのアクセス許可も、前記項目がリモートアクセスされ得るように設定されることを検証するコンピュータ使用可能命令をさらに備えることを特徴とする請求項６１に記載の媒体。
【請求項６３】
前記項目が保護されるかどうか判定し、保護される場合は、前記項目が共有され得ることを検証し、前記項目が共有されることができない場合は、通知を行うコンピュータ使用可能命令をさらに備えることを特徴とする請求項６１に記載の媒体。
【請求項６４】
何が共有され、誰と共有され、またはいつ共有されたかの少なくとも１つを含む、共有トランザクションの１つまたは複数の詳細を記録するコンピュータ使用可能命令をさらに備えることを特徴とする請求項６１に記載の媒体。
【請求項６５】
前記項目への直接アクセスをもたらすリンクを送るコンピュータ使用可能命令をさらに備えることを特徴とする請求項６１に記載の媒体。
【請求項６６】
共有者と被共有者の間で項目を共有する方法であって、
前記共有者が、前記共有者のコンピュータにある前記項目に前記被共有者をリモートアクセスさせる少なくとも１つのアクセス許可を設定する呼出しを発行すること、および
前記呼出しに応答して、前記項目に対して前記アクセス許可が設定されることを含むことを特徴とする方法。
【請求項６７】
前記項目に関連づけられたどのアクセス許可も、前記被共有者が前記項目にアクセスすることができるように設定されることを検証することをさらに含むことを特徴とする請求項６６に記載の方法。
【請求項６８】
前記項目が保護されるかどうか判定し、保護される場合は、前記項目が前記被共有者と共有され得ることを検証することをさらに含むことを特徴とする請求項６６に記載の方法。
【請求項６９】
項目に対してアクセス権が入手不可能であり得る場合、前記共有者に通知が行われることを特徴とする請求項６６に記載の方法。
【請求項７０】
前記共有者は、前記項目に対して与えられるアクセス権のタイプを限定することができることを特徴とする請求項６６に記載の方法。
【請求項７１】
共有トランザクションの１つまたは複数の詳細を記録することをさらに含むことを特徴とする請求項６６に記載の方法。
【請求項７２】
前記共有者のコンピュータから前記項目に前記被共有者が直接アクセスすることを可能にするリンクを前記被共有者に送ることをさらに含むことを特徴とする請求項６６に記載の方法。
【請求項７３】
前記共有者が前記被共有者と何を共有しているかを調べるために、前記被共有者が前記共有者のコンピュータに問合せを行うことを可能にすることをさらに含むことを特徴とする請求項６６に記載の方法。
【請求項７４】
共有される前記項目は直接共有される別個の項目であり、その結果、前記項目は、フォルダが共有される前に前記フォルダ中で最初に保存される必要がなくなることを特徴とする請求項６６に記載の方法。
【請求項７５】
少なくとも１つの項目を共有者が被共有者と共有することを可能にする１つまたは複数のコンピュータ可読媒体であって、
前記被共有者に、前記共有者のコンピュータを経由して前記項目にリモートアクセスさせる１組のコンピュータ使用可能命令を備えることを特徴とする媒体。
【請求項７６】
前記共有者は、前記被共有者に割り当てられるアクセス許可のレベルを指定し、追加の被共有者は、異なるアクセス許可を受け得ることを特徴とする請求項７５に記載の媒体。
【請求項７７】
前記共有者は、前記項目に関するアクセス許可を指定し、追加項目は、異なるアクセス許可を割り当てられ得ることを特徴とする請求項７５に記載の媒体。
【請求項７８】
前記項目が保護されるかどうか判定し、保護される場合は、前記項目が前記被共有者と共有され得ることを検証し、前記項目が共有されることができない場合は、前記被共有者に通知を行うコンピュータ使用可能命令をさらに備えることを特徴とする請求項７５に記載の媒体。
【請求項７９】
項目に対してアクセス権が入手不可能であり得る場合、前記共有者に通知が行われることを特徴とする請求項７５に記載の媒体。
【請求項８０】
共有トランザクションの１つまたは複数の詳細を記録するコンピュータ使用可能命令をさらに備えることを特徴とする請求項７５に記載の媒体。
【請求項８１】
前記共有者のコンピュータから前記共有項目に前記被共有者が直接アクセスすることを可能にするリンクを前記被共有者に送るコンピュータ使用可能命令をさらに備えることを特徴とする請求項７５に記載の媒体。
【請求項８２】
前記共有者が前記被共有者と何を共有しているか判定するために、前記被共有者が前記共有者のコンピュータに問合せを行うことを可能にするコンピュータ使用可能命令をさらに備えることを特徴とする請求項７５に記載の媒体。
【請求項８３】
前記項目は直接共有される別個の項目であり、その結果、前記項目は、フォルダが共有される前に前記フォルダ中で最初に保存される必要がなくなることを特徴とする請求項７５に記載の媒体。
【請求項８４】
共有者と被共有者の間で、コンピュータシステム内の個々の項目を共有する方法であって、
共有されることになる、共有者のコンピュータ上の個々の項目を指定するが、前記項目が、フォルダが共有される前に前記フォルダ中で最初に保存されることを要求しないこと、および
被共有者が、前記共有者のコンピュータにある前記個々の項目へのリモートアクセス権を与えられるように、前記個々の項目を前記被共有者と共有することを含むことを特徴とする方法。
【請求項８５】
前記共有者は、前記被共有者向けのアクセス許可のレベルを指定し、追加の被共有者は、異なるレベルのアクセス許可を受け得ることを特徴とする請求項８４に記載の方法。
【請求項８６】
前記項目に関連づけられたどのアクセス許可も、前記被共有者が前記項目にアクセスすることができるように設定されることを検証することをさらに含むことを特徴とする請求項８４に記載の方法。
【請求項８７】
前記項目が保護されるかどうか判定し、保護される場合は、前記項目が共有され得ることを検証することをさらに含むことを特徴とする請求項８４に記載の方法。
【請求項８８】
項目に対してアクセス権が入手不可能であり得る場合、前記共有者に通知が行われることを特徴とする請求項８４に記載の方法。
【請求項８９】
共有トランザクションの１つまたは複数の詳細を記録することをさらに含むことを特徴とする請求項８４に記載の方法。
【請求項９０】
前記共有者のコンピュータから前記項目に前記被共有者が直接アクセスすることを可能にするリンクを前記被共有者に送ることをさらに含むことを特徴とする請求項８４に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、コンピュータファイルシステムに関し、より詳細には、仮想フォルダおよび項目を共有するシステムおよび方法に関する。
【背景技術】
【０００２】
ファイルおよびフォルダの共有は、常に難しいタスクである。公知のシステムでは、ユーザはしばしば、単にフォルダ全体を共有することに制限されている。ユーザは通常、個々のファイルを共有する能力をもたない。ファイルを共有するためには、ユーザは通常、フォルダを作成し、そのフォルダ中に所望のファイルを編成し、次いで、そのフォルダを共有しなければならなかった。
【０００３】
ファイルの共有は、ユーザが、様々な装置上、他のＰＣ上、またはオンラインなど、様々な場所にあるファイルも扱わなければならないことによってさらに複雑にされている。異なる場所から生じたファイルはしばしば、違う方法で編成され、同じやり方で保持されることも同じ場所に保持されることもない。別の例として、企業ネットワークに格納されているファイルは、ユーザが現在のマシン上にもっているファイルからは本質的に隔てられることができる。ユーザは、どのようなファイルデータが格納されているかだけでなく、そのファイルデータがどこに格納されているかも追跡しなければならない。例えば、音楽ファイルの場合、ユーザは、様々なシステム上でコピーを保持し、どの音楽ファイルがどこに置かれているかという追跡を試みることを余儀なくされる。このことは、ファイルがローカルに格納されている場合であっても、ファイルを見つけることを困難にさせ得る。
【０００４】
ファイルの共有は、ユーザがもっているファイルを見つけ、そのファイルに戻ることが困難な場合もあることによっても複雑にされる。ユーザは、特定のファイルをどこにどのようにして格納したかを思い出すことが難しいと思う場合もあり得る。１組のフォルダ、さらに同様のファイルのグループも与えられると、ユーザはしばしば、自分が探しているファイルを素早く見つけることが難しいと感じる。見つけるのが難しい場所に格納されているファイルの場合、突き止めるのはより一層複雑である。ユーザが、ネットワーク上のファイルを見つけ、そのファイルに戻ることが難しい場合もある。ユーザは通常、ネットワーク上でファイルを見つけ、共有するのに必要とする様々なサイトおよび名称を記憶し、または書き写さなければならない。
【０００５】
ファイルの編成および共有は、名前空間が可変であり、このことが、どれが「正しい」かに関して、ユーザを混乱させ得ることによっても複雑にされる。このことは、様々な命名規則、制限などがあるネットワークにおいては特に当てはまる。例えば、あるオペレーティングシステムは、認識可能にするために、スペースのない短い名称を要求し得る。プログラムもしばしば、ファイルをそれ自体のディレクトリまたは他の名前空間に保存し、こうした保存は、ユーザがファイルへ戻る経路を見つけることを困難にさせ得る。プログラムはしばしば、ドキュメントを保存するデフォルトのディレクトリおよび場所を有している。ユーザはしばしば、ハードディスクの中を検索し、ファイルが格納されている場所について推測しなければならない。関連する項目はしばしば、別々の場所にも格納される。ユーザが所有する関連ファイルは、ハードディスクなどの別々の部分に格納されることができる。この問題は、多数の内容タイプ（例えば、画像、音楽、映像）を有するデジタルメディアサービスの開発ではより一般的となる。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
本発明の実施形態は、上述および他の欠点を克服するシステムおよび方法に関する。より詳細には、本発明の実施形態は、項目を共有するシステムおよび方法に関する。
【課題を解決するための手段】
【０００７】
静的および動的リストの使用を伴う仮想フォルダおよび項目共有のためのシステムおよび方法が提供される。静的および動的リストは、仮想フォルダタイプとして作成されることができる。本発明の一態様によると、ユーザは、クエリを構築し、項目を見つけ、次いで、その項目を他のユーザと共有することができる。ユーザは、クエリによって発見された項目（静的リスト）のみを共有するための、あるいは、発見された項目、および今後基準を満たす他の項目（動的リスト）を共有するための選択肢を与えられる。こうしたタイプのリストは、ディスク上の実際の物理的な基底ファイルシステム構造でなく、項目のメタデータに基づく様々なビューを用いてユーザに項目を見せるという、仮想フォルダのプロパティを利用する。
【０００８】
本発明の別の態様によると、静的リストとは、特定の順序で並べられ、任意選択的に各項目ごとに注釈をつけることができる項目からなるフォルダを含む。こうした注釈は、項目の一部ではなく、実際のリストに属す。静的リストのいくつかの例は、買物リスト、音楽再生リスト、および画像のスライドショーである。本発明によると、ユーザは、静的リストを他のユーザと共有することができる。静的リストが共有されると、実際の静的リストは、共有者のマシンまたはサーバ上の元の位置に残され、リストおよび参照項目にアクセスするための許可が被共有者（ｓｈａｒｅｅ）に与えられる。与えられるアクセス許可は、共有者が共有時に何を指定するかによって決定される。例えば、共有者は、被共有者に、読取りアクセスのみをもたせるか、または読取り／書込みアクセスをもたせてリストを共有させるかなどを決定することができる。共有者が、項目へのアクセス許可を与えることができない（共有者自身が、この操作を行うためのアクセス許可をもっていないため）場合、共有者は、共有時に、被共有者がその項目にアクセスすることができない可能性があると通知される。処理が終了すると、被共有者は、共有者のコンピュータにあるリストおよびその参照項目にリモートアクセスすることができる。共有者が、後になって、項目を追加または削除することによってリストを変更した場合、こうした項目も、被共有者による項目へのアクセスを許可しまたは禁止するように、自動的にアクセス許可がやり直される。一実施形態では、項目が静的リストに出入りするときに、動的に項目へのアクセス許可をやり直すこともできる。というのは、静的リストの実際の定義は、変化するときを監視され得るデータベース中に存在するからである。
【０００９】
本発明の別の態様によると、動的リストとは、スコープおよび１組の基準に基づく１組の項目を含む。例えば、ユーザは、ローカルマシン上のデータストレージすべてとして定義されたスコープ、および作成者＝Ｘという基準を有するクエリを作成することができる。ユーザが動的リストをもっている場合、その動的リストは、共有されることができる。ユーザが動的リストを共有すると、次の動作が実施される。ユーザが、その時点で動的リスト中に現在ある項目のみを共有したいのか、あるいは、今後動的リストに出入りするどの項目も共有したいのかに関して、初期判定が行われる。ユーザが、動的リスト中に現時点で存在する項目のみを共有したい場合、動的リスト中にあるものを表す静的リストが生成され、この静的リストが共有される。そうではなく、ユーザが、真の動的リストを共有させたい場合、動的リストの基準を満たす項目すべてが共有される。このことは、項目は、共有が起こっているマシン上の元の場所に残され、被共有者に項目へのアクセス権をもたせるように項目がアクセス許可されることを意味する。共有者が、項目へのアクセス許可を与えることができない（共有者自身が、この操作を行うためのアクセス許可をもっていないため）場合、共有者は、共有時に、被共有者がその項目にアクセスすることができない可能性があると通知される。処理が終了すると、被共有者は、共有者のコンピュータにあるリストおよびその参照項目にリモートアクセスすることができる。動的リスト中のいずれかの項目が、動的リストの基準を満たさないように項目のプロパティを変更させた場合、こうした項目は、適切にアクセス許可をやり直される。同様にして、動的リストに属さないいずれかの項目が、スコープに該当し、動的リストの基準を満たすように変化した場合、そうした項目も、動的リストが共有されるためのアクセス権をユーザに与えるようにアクセス許可をやり直される。
【００１０】
本発明の別の態様によると、ユーザは、個々の項目を共有することも選ぶことができる。共有処理は、ユーザ（別名共有者）が、共有されるべき項目を選択することで始まる。ユーザは、項目が共有される相手となる被共有者、およびこの被共有者に割り当てられるべきアクセス許可も選択する。アクセス許可の１つのタイプの例は、項目に対して読取りアクセスのみを提供することであろう。
【００１１】
本発明の別の態様によると、共有される項目は、共有者のマシン上の元の場所に残される。言い換えると、共有される項目は移動されず、その代わり被共有者は、共有者のマシン上の項目へのアクセス権を与えられる。処理の一部として、システムは、被共有者が、共有される項目にアクセスできることを検証する。
【００１２】
本発明の別の態様によると、本システムは、共有されている項目を、被共有者によってリモートにアクセス可能なようにする。例えば、ファイル共有が用いられる一実施形態では、システムは、共有される項目がそれによってアクセスされることができるファイル共有が存在することを検証する。システムは最初に、共有される項目に対してファイル共有が既に存在するかどうか調べる。ファイル共有が既にある場合、システムは、そのファイル共有を用いて、項目をリモートアクセス可能にし、ファイル共有におけるアクセス許可が、被共有者がそうした項目にアクセスすることを可能にするように、確実に正しいものにする。
【００１３】
本発明の別の態様によると、本システムは、アクセス制御リスト（ＡＣＬ）および他のいずれかのアクセス許可が設定されることを検証する。この処理の一部として、ユーザが項目を共有させると、ユーザは、こうした項目を誰と共有したいか尋ねられる。このとき、ユーザは、どのようなアクセス許可を被共有者に与えたいかも尋ねられる。例えば、被共有者は、項目を読み取るだけのアクセス許可を与えられる場合もあり、あるいは、項目を変更するためのアクセス許可を与えられる場合もある。ユーザが被共有者向けに要求したアクセス許可に基づき、それに従って項目に対するセキュリティＡＣＬが設定され、ユーザによって要求されたアクセス許可が認められる。
【００１４】
本発明の別の態様によると、本システムは、暗号化ファイルシステム（ＥＦＳ）およびデジタル著作権管理（ＤＲＭ）などの保護システムに伴うどの問題も解決する。言い換えると、いくつかの例では、ユーザは、ＥＦＳのようなものによって保護される項目を共有している場合がある。この場合、システムは、マシン上のポリシーまたは項目に対するＤＲＭによって共有が許可されると、項目が確実に共有され得るように試みる。
【００１５】
本発明の別の態様によると、本システムは、被共有者が、システムにリモートに接続し、存在するどのセキュリティ層を介しても共有資源に安全にアクセスすることを可能にする。例えば、セキュリティ層の１つがファイアウォールである一実施形態では、システムはファイアウォールを構成する。言い換えると、デフォルトで、ほとんどのコンピュータにおいてファイアウォールが有効にされる。ファイアウォールまたは他のセキュリティ層が有効にされても、ユーザが依然として項目を安全に共有できるようにすることが望ましい。
【００１６】
本発明の別の態様によると、共有トランザクションの詳細が記録される。言い換えると、共有操作が完了すると、システムは、トランザクションについての情報を記録する。追跡される情報は、何が共有されたか、誰と共有されたか、およびいつ共有されたかなどを含み得る。この情報を追跡し記録することによって、共有者は、共有者のマシンから共有されている項目すべてが何であるか、こうした項目を誰と共有しているか、およびこうした被共有者がどのようなアクセス権をもっているかを後で判定することができる。
【００１７】
本発明の別の態様によると、項目を見つけやすくするために、共有者は、システムに、共有者のマシンから共有項目に直接アクセスするためのリンクを被共有者へ送らせることもできる。被共有者は、共有者が被共有者に何を共有させているか調べるために、共有者のマシンに問合せを行うこともできる。
【００１８】
上述された本発明の実施形態は、ユーザが、ドキュメント、連絡先、およびｅメールのような個々の項目を共有することを可能にすることが理解されよう。このことは、ユーザがフォルダを共有させることのみを可能にし、個々のファイル、項目、またはリストの共有という概念をもたない公知のシステムとは対照的である。本発明を用いることにより、ユーザは、データを共有するためにフォルダ中にデータを編成する必要がない。ユーザは、項目を選択し、項目を共有すると決定するだけでよい。このことは、ユーザに、セキュリティに関してさらに詳細なレベルを提供する。従来、ユーザは、フォルダを共有することしかできなかった。ユーザは、フォルダを共有するとき、共有しているユーザに対するアクセス許可を、フォルダレベルで設定した。ユーザは、フォルダレベルでアクセス許可を与えられ、フォルダ内に置かれている全項目が、同じアクセス許可をもつようになった。個別の項目共有を用いると、ユーザは、フォルダ内の個々の項目を様々な被共有者に容易に共有させることができ、被共有者それぞれに異なるアクセス許可を与えることができる。さらに、被共有者は、共有者のマシン上のどこに共有項目があるかを心配しなくてよい。共有者は、自分のマシン上の異なる１０箇所の場所にある１０個の項目を共有させることができるが、被共有者は、この操作に関与させられない。また、被共有者は、共有者のマシンに接続し、被共有者に使用可能な項目すべてのリストを返されることができる。
【００１９】
本発明の態様および利点は、添付の図面と併せ読みながら以下の詳細な説明を参照することによってよりよく理解されるので、本発明の上記の態様およびそれに伴う利点の多くが、より容易に理解されよう。
【発明を実施するための最良の形態】
【００２０】
項目を共有するためのシステムおよび方法が提供される。項目は、個別に共有されることもでき、リストの部分として含められることもできる。静的および動的リストは、仮想フォルダタイプとして作成されることができる。仮想フォルダは、ファイルシステム用に現在使われているのと同じまたは類似したユーザインターフェースを使用する。仮想フォルダは、正規のファイルおよびフォルダ（ディレクトリとしても知られる）を、ディスク上の実際の物理的な基底ファイルシステム構造でなく、ファイルおよびフォルダのメタデータに基づく様々なビューを用いてユーザに見せる。ファイルシステムを管理するのに現在用いられているのと同様の制御を利用してファイルおよびフォルダをユーザが操作することを可能にする場所非依存ビューが作成される。概して、このことは、ユーザが、システムの別個の部分として行われる管理および編成ではなく、ファイル自体の中の固有のプロパティに基づいて自分のファイルを編成し配置し直すことができることを意味する。仮想フォルダは、ファイルまたは項目の１つのビューが、異なる物理的な位置にあるファイルまたは項目を見せることができるように、同じコンピュータ内部、複数のコンピュータ間、または異なるネットワーク上の場所など、複数のディスクドライブにある異なる物理的な位置にあるファイルまたは項目を表すことができる。一実施形態では、異なる項目またはファイルは、含められるために、ＩＰネットワークを介して接続されればよい。
【００２１】
仮想フォルダの構築は、従来通り、非ファイルエンティティ用に用いられることもできる。このようなアプリケーションは、従来の非ファイルエンティティを表示するための、ファイルおよびフォルダ（つまり、オブジェクトおよびコンテナ）に類似した１組のユーザインターフェースを有することになる。このような非ファイルエンティティの一例は、ｅメールであり、別の例は、連絡先データベースにある連絡先情報であろう。このようにして、仮想フォルダは、表示されているデータがファイルのものであるか、非ファイルエンティティのものであるかにかかわらず作用する、場所非依存の、メタデータに基づくビューシステムを提供する。概して、こうした態様は、ユーザに、共通ユーザインターフェース技術（ドラッグアンドドロップ、ダブルクリックなど）ならびに様々なデータタイプの十分な統合強化両方を用いて、自分のファイルおよびデータを操作させるという点で、一層の柔軟性を可能にする。
【００２２】
図１および以下の説明は、本発明の実施形態を実装することができる適切な計算機環境の、簡潔で一般的な説明を提供することを意図している。そうすることが必要なわけではないが、パーソナルコンピュータによって実行される、プログラムモジュールなどのコンピュータ実行可能命令という一般的なコンテキストにおいて、本発明が説明される。概して、プログラムモジュールは、特定のタスクを実施しまたは特定の抽象データ型を実装するルーチン、プログラム、キャラクタ、コンポーネント、データ構造などを含む。当業者であれば理解するであろうが、本発明は、可搬型装置、マルチプロセッサシステム、マイクロプロセッサベースのまたはプログラム可能な家電製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータなどを含む他のコンピュータシステム構成を用いて実施されることができる。本発明は、通信ネットワークを介してリンクされるリモート処理装置によってタスクが実施される分散型計算機環境でも実施されることができる。分散型計算機環境では、プログラムモジュールは、ローカルおよびリモートメモリ記憶装置両方に配置されることができる。
【００２３】
図１を参照すると、本発明を実装する例示的なシステムは、汎用計算装置を、従来のパーソナルコンピュータ２０の形で含み、このコンピュータは、処理ユニット２１、システムメモリ２２、およびシステムバス２３を含む。システムバス２３は、システムメモリ２２を含む様々なシステムコンポーネントを処理ユニット２１に結合する。システムバス２３は、様々なバスアーキテクチャのいずれかを使用するメモリバスまたはメモリコントローラ、周辺バス、およびローカルバスなどいくつかの種類のバス構造のいずれでもよい。システムメモリは、ＲＯＭ（読出し専用メモリ）２４およびＲＡＭ（ランダムアクセスメモリ）２５を含む。ＢＩＯＳ（基本入出力システム）２６は、例えば起動中にパーソナルコンピュータ２０内部の要素の間で情報を転送するのを助ける基本ルーチンを含み、ＲＯＭ２４に格納される。パーソナルコンピュータ２０は、ハードディスク３９からの読出しまたはそこへの書込みを行うハードディスクドライブ２７、着脱式磁気ディスク２９からの読出しまたはそこへの書込みを行う磁気ディスクドライブ２８、および、ＣＤ−ＲＯＭや他の光学媒体などの着脱式光ディスク３１からの読出しまたはそこへの書込みを行う光ディスクドライブ３０をさらに含む。ハードディスクドライブ２７、磁気ディスクドライブ２８、および光ディスクドライブ３０は、それぞれハードディスクドライブインターフェース３２、磁気ディスクドライブインターフェース３３、および光ドライブインターフェース３４によって、システムバス２３に接続される。ドライブおよびそれに関連するコンピュータ可読媒体は、パーソナルコンピュータ２０用に、コンピュータ可読命令、データ構造、プログラムモジュール、および他のデータの不揮発な格納を実現する。本明細書で説明される例示的な環境では、ハードディスク３９、着脱式磁気ディスク２９、および着脱式光ディスク３１を利用しているが、コンピュータによるアクセスが可能なデータを格納することができる他の種類のコンピュータ可読媒体、例えば磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌーイカートリッジ、ＲＡＭ（ランダムアクセスメモリ）、ＲＯＭ（読出し専用メモリ）なども例示的な動作環境において使用され得ることが、当業者には理解されよう。
【００２４】
オペレーティングシステム３５、１つまたは複数のアプリケーションプログラム３６、他のプログラムモジュール３７、およびプログラムデータ３８など、いくつかのプログラムモジュールが、ハードディスク３９、磁気ディスク２９、光ディスク３１、ＲＯＭ２４、またはＲＡＭ２５に格納されることができる。ユーザは、キーボード４０および指示装置４２などの入力装置を介して、コマンドおよび情報をパーソナルコンピュータ２０に入力することができる。他の入力装置（図示せず）は、マイクロホン、ジョイスティック、ゲーム用パッド、衛星パラボラアンテナ、スキャナなどを含み得る。こうしたおよび他の入力装置はしばしば、システムバス２３に結合されたシリアルポートインターフェース４６を介して処理ユニット２１に接続されるが、他のインターフェース、例えばパラレルポート、ゲームポート、またはＵＳＢ（ユニバーサルシリアルバス）によって接続されることもできる。モニタ４７の形のディスプレイも、ビデオカードまたはアダプタ４８などのインターフェースを介してシステムバス２３に接続される。１つまたは複数のスピーカ５７も、オーディオアダプタ５６などのインターフェースを介してシステムバス２３に接続されることができる。ディスプレイおよびスピーカに加えて、パーソナルコンピュータは通常、プリンタなど、他の周辺出力装置（図示せず）を含む。
【００２５】
パーソナルコンピュータ２０は、リモートコンピュータ４９など、１つまたは複数のパーソナルコンピュータへの論理接続を使用してネットワーク接続された環境において動作することができる。リモートコンピュータ４９は、それぞれ別のパーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピア装置、または他の共通ネットワークノードでよく、通常、パーソナルコンピュータ２０に関連して上述された要素の多くまたはすべてを含む。図１に示した論理接続は、ＬＡＮ（ローカルエリアネットワーク）５１およびＷＡＮ（ワイドエリアネットワーク）５２を含む。ＬＡＮ５１およびＷＡＮ５２は、有線でも、無線でも、有線および無線の組合せでもよい。このようなネットワーク環境は、会社、企業規模のコンピュータネットワーク、イントラネット、およびインターネットにおいてよく見られる。
【００２６】
ＬＡＮネットワーク環境において使われる場合、パーソナルコンピュータ２０は、ネットワークインターフェースまたはアダプタ５３を介してローカルエリアネットワーク５１に接続される。ＷＡＮネットワーク環境において使われる場合、パーソナルコンピュータ２０は通常、モデム５４、またはインターネットなどのワイドエリアネットワーク５２を介した通信を確立する他の手段を含む。モデム５４は、内部にあっても外部にあってもよく、シリアルポートインターフェース４６を介してシステムバス２３に接続される。ネットワーク接続された環境では、パーソナルコンピュータ２０に関連して図示したプログラムモジュールまたはその一部は、リモートメモリ記憶装置に格納されることができる。図示したネットワーク接続は例示的なものであり、コンピュータ間の通信リンクを確立する他の手段も使われ得ることが理解されよう。
【００２７】
後でより詳しく説明されるように、仮想フォルダは、ユーザが、ファイルを共有し、ファイル処理およびフォルダナビゲーション（ブラウジング）に関わる基本タスクを実施し、新規の特徴として利用され得るより高レベルの記憶性能を提供することをより容易にする。仮想フォルダは、ディスク上の実際の物理的な基底ファイルシステム構造でなく、ファイルおよび項目のメタデータに基づく様々なビューを用いて、ユーザにファイルおよび項目を見せる。
【００２８】
図２は、仮想フォルダシステム２００のブロック図である。後でより詳しく説明されるように、仮想フォルダは、データが表示される方法を制御する「ピボット」をユーザが変更することを可能にする。一例として、ユーザは、音楽を、歌すべてからなるフラットリストとして見ることができ、こうした歌は、アルバムでグループ化されることができる。あるいは、ユーザは、ジャンル、アーティスト、または年などのみを表示するようにビューを切り換えることもできよう。ユーザは、タスクに適合したオブジェクトのみをすぐに見るようにビューを調整することができる。このことは、フォルダ内をさらにナビゲーションする必要（ダウンおよびバックアップ両方）をなくす、改善されたブラウジング経験を可能にする。同じ教訓および機能が、ファイルとして格納されない他のデータタイプの構築に当てはまる。例えば連絡先が、このようにしてユーザに公開され、使い慣れたインターフェース機能、ならびにそうした機能を操作する、フラットなアドレス帳によって提供されるよりも高品位のインフラストラクチャをユーザに与える。
【００２９】
図２に示されるように、仮想フォルダシステム２００は、フォルダプロセッサ２１０、リレーショナルデータベース２３０、仮想フォルダ記述データベース２３２、他のシェルフォルダコンポーネント２３４、フォルダハンドラコンポーネント２３６、ならびにシェルブラウザおよびビューコンポーネント２４０を含む。フォルダプロセッサ２１０は、固有処理コードコンポーネント２１２、ハンドラファクトリコンポーネント２１４、プロパティライタコンポーネント２１６、行セットパーサコンポーネント２１８、クエリビルダコンポーネント２２０、列挙コンポーネント２２２、およびプロパティファクトリコンポーネント２２４を含む。
【００３０】
リレーショナルデータベース２３０は、システム内のすべてのファイルについてのプロパティを格納する。リレーショナルデータベース２３０は、連絡先（すなわち、非ファイル項目）のようないくつかの項目も、完全に格納する。概して、リレーショナルデータベース２３０は、それが含むファイルおよび項目のタイプについてのメタデータを格納する。リレーショナルデータベース２３０は、クエリビルダ２２０からＳＱＬクエリを受け取る。リレーショナルデータベース２３０はまた、項目のプロパティである項目列ごとに１行ずつ、ＳＱＬ行セットを行セットパーサコンポーネント２１８に送る。
【００３１】
仮想フォルダ記述データベース２３２は、仮想フォルダの記述を含む。仮想フォルダ記述データベース２３２は、フォルダ中に表示するタイプのリスト、初期フィルタ、および結果を示すための物理的な場所（スコープ）などのデータを、クエリビルダコンポーネント２２０に送る。
【００３２】
他のシェルフォルダコンポーネント２３４に関して、フォルダプロセッサ２１０は、すべてのファイルを含む多くのタイプの項目から既存のシェルフォルダに、ハンドラまたはプロパティに対する権限を委譲する。他のシェルフォルダコンポーネント２３４は、他のフォルダからプロパティファクトリ２２４にプロパティを送る。他のシェルフォルダコンポーネントはまた、ハンドラファクトリ２１４にハンドラを送る。
【００３３】
フォルダハンドラコンポーネント２３６は、連絡先のように、データベース中にのみ存在する項目のためのコード動作を提供する。この提供が、非ファイル項目がファイルと同様に動作することを可能にする。フォルダハンドラコンポーネント２３６は、ハンドラファクトリ２１４にハンドラを送る。
【００３４】
固有処理コードコンポーネント２１２のために、フォルダプロセッサ２１０は、項目のプロパティに基づいて特定のハンドラを直接実装する。固有処理コードコンポーネント２１２は、ハンドラファクトリ２１４にハンドラを送る。固有処理コードコンポーネント２１２およびフォルダハンドラコンポーネント２３６に対して、すべての名前空間のように、仮想フォルダは、その項目用の１組のハンドラ（コンテキストメニュー、アイコン、サムネイル、インフォチップ、．．．）を提供しなければならない。こうしたハンドラ（インフォチップ、データオブジェクト、ドラッグ−ドロップハンドラ、バックグラウンドコンテキストメニュー．．．）のほとんどに対して、仮想フォルダは、それが保有するすべてのタイプのための共通（固有）ハンドラを提供する。ただし、そのタイプの作成者が提供しなければならない他のハンドラ（項目自体に対するコンテキストメニュー、書込み可能プロパティストア、．．．）がある。デフォルトのハンドラも、オーバーライドされ得る。仮想フォルダは、ファイルに対してデフォルトハンドラを再度使用し、非ファイル項目に同じことを行わせる。
【００３５】
ハンドラファクトリ２１４は、ＩＤリストを受け取り、コンテキストメニュー、アイコンなどを提供するコード動作を作成する。概して、フォルダプロセッサ２１０は、固有ハンドラ、外部ハンドラを使用することも、固有処理コードコンポーネント２１２、他のシェルフォルダコンポーネント２３４、およびフォルダハンドラコンポーネント２３６に関連して上述したように、ハンドラの入手を他のシェルフォルダに委任することもできる。ハンドラファクトリコンポーネント２１４は、ビューによって要求された通り、ビュー内シェルブラウザ２４０にハンドラを送る。ハンドラファクトリコンポーネント２１４は、プロパティライタ２１６にプロパティハンドラを送る。
【００３６】
プロパティライタ２１６は、カット、コピー、およびペーストなどのユーザの意図を、ファイルまたは項目に対するプロパティ権限に変換する。シェルブラウザおよびビューコンポーネント２４０は、直接処理（カット／コピー／ペースト）またはメタデータの編集などのデータをプロパティライタ２１６に送る。概して、仮想フォルダは、項目のプロパティに基づいた編成を提示するので、移動およびコピー（ドラッグ−ドロップ）などの操作は、そうしたプロパティに対する編集となる。例えば、作成者によってスタックされるビューにおいて、作成者１から作成者２へのドキュメントの移動は、作成者の変更を意味する。プロパティライタコンポーネント２１６は、この機能を実装する。
【００３７】
行セットパーサ２１８は、データベース行セットを受け取り、すべての項目プロパティをシェルＩＤリスト構造に格納する。行セットは、仮想フォルダの断片ごとの定義を受け取り、ＳＱＬ文字列を構築し、このＳＱＬ文字列は次いで、データベースに対して発行されることができる。行セットパーサコンポーネント２１８は、列挙コンポーネント２２２にＩＤリストを送る。上述したように、行セットパーサコンポーネント２１８はまた、ＳＱＬ行セットなどのデータを項目列ごとに１行ずつ、リレーショナルデータベース２３０から受け取り、列は項目のプロパティである。
【００３８】
クエリビルダコンポーネント２２０は、ＳＱＬクエリを構築する。クエリビルダコンポーネント２２０は、ナビゲーションからの新規フィルタなどのデータを、列挙コンポーネント２２２から受け取る。クエリビルダコンポーネント２２０はまた、フォルダ中で表示するタイプのリスト、初期フィルタ、および結果を示す物理的な場所（スコープ）などのデータを、仮想フォルダ記述データベース２３２から受け取る。クエリビルダコンポーネント２２０は、リレーショナルデータベース２３０にＳＱＬクエリを送る。
【００３９】
概して、クエリビルダコンポーネント２２０は、１組の行（言い換えるとテーブル）を含む。これが、クエリの作成を実行する。行セットパーサコンポーネント２１８は、各行を受け取り、列名を用いて、行をＩＤリストに変形する。ＩＤリストとは、名前空間において項目を参照するのに用いられる公知のシェル構造である。この変形が、仮想フォルダを、シェルのそれ以外の部分に関して他のどの名前空間とも同じようなものにさせる。このデータをキャッシュすることも、コストのかかり得るデータベースアクセスを最低限に抑えるのを助ける。
【００４０】
列挙コンポーネント２２２は、仮想フォルダへのナビゲーションに応答して動作する。上述したように、列挙コンポーネント２２２は、行セットパーサコンポーネント２１８からＩＤリストを受け取り、ナビゲーションからの新規フィルタをクエリビルダコンポーネント２２０に送る。列挙子２２２はまた、ナビゲーションの後でビューに挿入されるために返されるＩＤリストなどのデータを、シェルブラウザおよびビューコンポーネント２４０に送る。
【００４１】
プロパティファクトリコンポーネント２２４は、ＩＤリストおよびプロパティ識別子を受け取り、そうしたプロパティ用の値を返す。プロパティファクトリコンポーネント２２４は、プロパティハンドラなどのデータを、ハンドラファクトリコンポーネント２１４から受け取る。上述したように、プロパティファクトリコンポーネント２２４はまた、他のフォルダのプロパティなどのデータを、他のシェルフォルダコンポーネント２３４から受け取る。プロパティファクトリコンポーネント２２４はまた、ビューによって要求された通り、項目のプロパティなどのデータを、シェルブラウザおよびビューコンポーネント２４０に送る。
【００４２】
シェルブラウザおよびビューコンポーネント２４０は、フォルダの内容をウィンドウに表示し、クリック、ドラッグ、およびナビゲーションなど、表示されたファイルまたは項目に伴うユーザ対話すべてを処理する。したがって、シェルブラウザおよびビューコンポーネント２４０は、ユーザ操作を受け取る。シェルブラウザおよびビューコンポーネント２４０は、フォルダに対して必要とするコード動作、この場合フォルダプロセッサ２１０に関するデータも入手する。
【００４３】
上述したように、仮想フォルダは、正規のファイルおよびフォルダ（ディレクトリとしても知られる）を、ディスク上の実際の物理的な基底ファイルシステム構造でなく、ファイルおよびフォルダのメタデータに基づく様々なビューを用いてユーザに公開する。したがって、本システムは、データベースに格納されているプロパティを受け取り、そのプロパティを、フォルダのようなコンテナとして表すことができる。ユーザは、フォルダを用いて作業することに既に慣れているので、同様に仮想フォルダを提示することによって、ユーザは、この新しいシステムにより速く適応することができる。
【００４４】
図３は、ユーザが、選択された項目を引き出すクエリを提供するルーチン３００を示すフロー図である。ブロック３０２で、フォルダプロセッサは、ユーザからクエリを入手する。ブロック３０４で、フォルダプロセッサは、リレーショナルデータベースにクエリを渡す。ブロック３０６で、リレーショナルデータベースは、フォルダプロセッサに結果を戻す。ブロック３０８で、フォルダプロセッサは、仮想フォルダおよび項目の形でユーザに結果を提供する。
【００４５】
図４は、デフォルトのクエリまたはユーザからのクエリのどちらかに従って、仮想フォルダが構成され画面上に表示されるルーチン３２０を示すフロー図である。ブロック３２２で、ユーザが初めて仮想フォルダを開くとき、デフォルトのクエリが用いられる。このデフォルトクエリは、レジストリから取り出される。例えば、音楽ライブラリ用のデフォルトクエリは、アルバムでグループ化された歌すべてを示すことができよう。ブロック３２４で、フォルダプロセッサは、このクエリ用のクエリオブジェクトを構築し、次いで、このクエリをリレーショナルデータベースに渡す。ブロック３２６で、リレーショナルデータベースは、クエリの結果を生成し、この結果をデータベースの行および列としてフォルダプロセッサに返す。
【００４６】
ブロック３２８で、フォルダプロセッサは、こうした結果を受け取り、データの行および列から列挙構造に変換し、この構造は、ユーザが相互作用を行うために、フォルダビューによって、結果である仮想フォルダおよび項目を画面に投入するのに用いられる。判断ブロック３３０で、ユーザは、（異なるクエリまたは「ピボット」を発行することによって）ビューを変更するかどうか決定する。例えば、ユーザは、「すべてのアーティストを表示する」というピボットを発行することができよう。ユーザが、実際にビューの変更を望む場合、ルーチンは、ブロック３２４に戻り、ここで、フォルダプロセッサは、この新しいクエリをリレーショナルデータベースに渡し、新しい結果行および列を再度受け取り、新しい列挙構造を構築する。処理は次いで、上述したように継続し、フォルダビューがクリアしアップデートし、列挙子を用いて画面に「アーティスト」オブジェクトを描画する。
【００４７】
一例では、ユーザがその中をナビゲートすることができるコンテナを表すアルバムオブジェクトが提供される。例えば、「ビートルズ」というアルバムのダブルクリックは、ビートルズの歌すべてを見るためのビューをナビゲートする。フォルダプロセッサは、「ビートルズのすべての歌を表示する」というクエリをリレーショナルデータベースに発行し、リレーショナルデータベースは、そうした歌に関するデータ行および列を返す。フォルダプロセッサは、こうしたすべての歌の列挙子を作成し、次いで、列挙子が画面に描画される。
【００４８】
ユーザはまた、仮想フォルダをブラウズしているどの時点でも、ビューを選ぶことができる。上記の例から、ビートルズの歌のみを表示するように絞り込んだ後、ユーザは、歌をアルバムとしてのみ表示するようにビューを変更することができる。項目のビューを別の表現に変更する処理は、「スタッキング」と呼ばれる。これは、項目が、その表現に基づく「スタック」に概念的に配列されるからである。この場合、歌は、様々なアルバムそれぞれ向けのスタックに配列し直される。ユーザは次いで、こうしたスタックの１つをナビゲートし、その特定のアルバムにある歌のみを見る。再度、ユーザは、プロパティ（例えば格付け）に基づいて、こうした残りの歌のビューをスタックに配列し直すことができる。格付けプロパティが選択された場合、そのビートルズのアルバムにある歌は、１つ星、２つ星、または３つ星の格付けのスタックに表示されることになる。
【００４９】
各クエリの結果は、どの物理的な場所がスコープに含まれるかに依存する。例えば、スコープは、ユーザの「マイドキュメント」フォルダ中のフォルダのみを含むように作成されることができる。あるいは、スコープは、コンピュータ上のすべてのフォルダ、またはネットワーク接続された複数のコンピュータ上のすべてのフォルダさえも含むことができよう。ユーザは、スコーププロパティシートを介して、スコープを閲覧し変更することができる。一例では、スコーププロパティシートは、仮想フォルダ上で右クリックし、「プロパティ」を選ぶことによって表示されることができる。ユーザは、スコープに新規フォルダを追加することも、以前追加されたフォルダを削除することもできる。
【００５０】
仮想フォルダが特に有用性をもたらすユーザグループは、知識労働者である。仮想フォルダは、知識労働者が、ファイルタイプ、プロジェクト、ケース番号、作成者などによって、ドキュメントの閲覧を容易に切り換えることを可能にする。知識労働者はそれぞれ、ドキュメントを編成する異なる方法をもつ傾向にあるので、こうした異なる嗜好に適合させるのに仮想フォルダが使用されることができる。
【００５１】
図５は、ハードドライブ上の物理的なフォルダ配置によるフォルダ構造のツリー図である。この物理的なフォルダ配置は、ＮＴＦＳまたは他の既存のファイルシステムに基づき得る、従来のフォルダ実装形態に基づく。このようなフォルダは、その構造が、ディスク上での実際の物理的な基底ファイルシステム構造に基づくので、物理フォルダと呼ばれる。後でより詳しく説明されるように、物理フォルダは、ユーザに、物理フォルダを操作するのに現在用いられているのと同様のやり方でファイルおよびフォルダを操作させる、場所非依存ビューを作成する仮想フォルダとは対照的である。
【００５２】
図５に示されるように、フォルダ４００は、「マイドキュメント」フォルダである。第１レベルにおいて、フォルダ４００は、それぞれクライアント１、２、および３に対応する、フォルダ４１０、４２０、および４３０を含む。第２レベルにおいて、フォルダ４１０、４２０、および４３０はそれぞれ、選択されたクライアント用のコントラクトにそれぞれ対応するフォルダ４１１、４２１、および４３１をそれぞれ含む。第３レベルにおいて、フォルダ４１１、４２１、および４３１はそれぞれ、２００１年にそれぞれ対応するフォルダ４１２、４２２、および４３２をそれぞれ含む。第３レベルにおいて、フォルダ４１１、４２１、および４３１はそれぞれ、２００２年にそれぞれ対応するフォルダ４１３、４２３、および４３３もそれぞれ含む。
【００５３】
図５に示されるような物理的なフォルダファイル構造のナビゲートを望むユーザに対して、いくつかの障害が提示されることが理解されよう。例えば、ユーザは、自分が作成したコントラクトすべてを用いて作業したい場合、最初に、クライアント１向けのコントラクトを用いて作業するためにフォルダ４１１をナビゲートする必要があり、次いで、クライアント２向けのコントラクトに到達するためにフォルダ４２１をナビゲートし直さなければならず、再度、クライアント３向けのコントラクトを求めてフォルダ４３１をナビゲートし直さなければならない。この配置は、ユーザが、コントラクトすべてにアクセスすることを困難にし、概して、コントラクトをすべて同時に閲覧し処理することを妨げる。同様に、ユーザは、２００１年に作成されたコントラクトをすべて閲覧したい場合、フォルダ４１２、４２２、および４３２をそれぞれナビゲートし、かつナビゲートし直さなければならない。後でより詳しく説明されるように、本発明の実施形態の仮想フォルダは、改良型ファイルシステム構造を提供する。
【００５４】
図６は、仮想フォルダ構造のツリー図である。後でより詳しく説明されるように、仮想フォルダは、ユーザに、自分のファイルおよびフォルダを便利なやり方で操作させる場所非依存ビューを作成する。図６に示すように、仮想フォルダは、スタックとして表される。仮想フォルダ５００は、「すべての項目」フォルダである。第１レベルにおいて、仮想フォルダ５００は、クライアント、コントラクト、および年にそれぞれ対応する、仮想フォルダ５１０、５２０、および５３０を含む。後でより詳しく説明されるように、この構造は、ユーザが、所望のパラメータに従ってファイルにアクセスすることを可能にする。
【００５５】
図７は、図６の仮想フォルダ構造のツリー図であり、第２レベルにおいて、仮想フォルダ５１０は、コントラクトおよび年にそれぞれ対応する仮想フォルダ５１１および５１２をさらに含む。言い換えると、仮想フォルダ５１０のクライアントスタックは、コントラクトおよび年によってさらにフィルタリングされる。どのファイルおよび項目が仮想フォルダそれぞれに含まれるか判定する処理は、後でより詳しく説明される。
【００５６】
図８は、図７の仮想フォルダ構造のツリー図であり、第３レベルにおいて、仮想フォルダ５１１は、年に対応する仮想フォルダ５１３を含む。言い換えると、仮想フォルダ５１１のコントラクトスタックは、年によってさらにフィルタリングされる。仮想フォルダ５１０、５１１、および５１３に対する仮想フォルダ構造は、クライアント、コントラクト、および年によって構造化されているが、図９を参照して後でより詳しく説明されるように、仮想フォルダは、他の構造化シーケンスが起こることを可能にすることが理解されよう。
【００５７】
図９は、図６の仮想フォルダ構造のツリー図であり、第２レベルにおいて、仮想フォルダ５２０は、クライアントおよび年に対応する仮想フォルダ５２１および５２２にさらにフィルタリングされている。第３レベルにおいて、仮想フォルダ５２１は、年に対応する仮想フォルダ５２３にさらにフィルタリングされている。図８および９の編成構造の間の対比は、仮想フォルダシステムの柔軟性を示すのに役立つ。言い換えると、仮想フォルダシステムにおいて、ユーザは、図５に示されるような物理的ファイル構造の場所依存ビューに依存するのとは反対に、所望のパラメータによって仮想フォルダをナビゲートすることができる。
【００５８】
図１０は、ドキュメントライブラリのスタックを表示するスクリーン表示６００を示す図である。上述したように、スタックは、仮想フォルダタイプを表すのに使用されることができる。後でより詳しく説明されるように、スクリーン表示６００は、クイックリンク要素６１０〜６１３、フィルタ要素６２０〜６２６、アクティビティ要素６３０〜６３３、情報および制御要素６４０〜６４５、ならびに仮想フォルダスタック６５１〜６５５を含む。
【００５９】
クイックリンク要素は、「すべてのカテゴリ」クイックリンク６１０を、「すべての作成者」クイックリンク６１１、「１月の作業」クイックリンク６１２、および追加クイックリンク６１３の表示の選択の上に含む。後でより詳しく説明されるように、クイックリンクは、ユーザによって、仮想フォルダの所望のナビゲーションを実施するために選択されることができる。クイックリンクは、システムによって提供されることができ、一部のクイックリンクは、ユーザによって作成され保存されることができる。
【００６０】
フィルタ要素は、「フィルタリング」インジケータ６２０、入力欄６２１、「日付でフィルタリング」インジケータ６２２、「年」セレクタ６２３、「作成者を選択」セレクタ６２４、「カテゴリを選択」セレクタ６２５、および「その他のフィルタ」セレクタ６２６を含む。「フィルタリング」インジケータ６２０は、その下の項目が、仮想フォルダまたは項目をフィルタリングするのに使われ得ることをユーザに伝える。入力欄６２１は、ユーザが、所望の新規フィルタ項をタイプ入力することができる領域を提供する。「日付でフィルタリング」インジケータ６２２は、「年」セレクタ６２３から日付を選択することによって、仮想フォルダまたは項目が、選択された年でフィルタリングされることができることをユーザに伝える。「作成者を選択」セレクタ６２４は、ユーザが、ある特定の作成者によってフィルタリングすることを可能にする。「カテゴリを選択」セレクタ６２５は、ユーザが、選択されたカテゴリによってフィルタリングすることを可能にする。「その他のフィルタ」セレクタ６２６は、ユーザが、追加フィルタを表示させることを可能にする。
【００６１】
アクティビティセレクタは、「新規カテゴリの作成」セレクタ６３０、「アクティビティ」セレクタ６３１および６３２、ならびに「その他のアクティビティ」セレクタ６３３を含む。後でより詳しく説明されるように、提示されるアクティビティは、一般に望ましい機能に関するものでよく、あるいはより具体的には、現在表示されている仮想フォルダタイプに有用なアクティビティを対象としてもよい。例えば、「新規カテゴリの作成」セレクタ６３０は、新規スタックによって表される新規カテゴリを作成するために、ユーザによって選択されることができる。
【００６２】
上述したように、アクティビティセレクタ６３１および６３２は、より具体的には、表示されているフォルダまたは項目のタイプを対象とすることができる。例えば、この表示は、「アクティビティ」セレクタ６３１および６３２が、添付書類の編集や作成など、ドキュメント用に特に調整されたアクティビティを対象とし得る、ドキュメントライブラリ向けとなり得る。このライブラリが、写真ライブラリである場合、「アクティビティ」セレクタ６３１および６３２は、写真アルバムの形成や他のユーザとの写真の共有など、写真を特に対象としたアクティビティとなることができよう。
【００６３】
情報および制御要素は、情報行６４０および６４１、制御行６４２、後退制御６４３、ならびに情報行６４４および６４５を含む。情報行６４０および６４１は、仮想フォルダまたは項目の現在のナビゲーションについての情報を提供する。本例では、情報行６４０は、現在のナビゲーションがドキュメントライブラリに対するものであることを示し、情報行６４１は、ドキュメントライブラリが記憶領域内にあることを示す、より完全なナビゲーションを示す。制御行６４２は、いくつかの標準制御を提供し、後退ボタン６４３は、ユーザがナビゲーションにおいて後退することを可能にする。情報行６４４は、現在のナビゲーションの内容についての数値情報を提供する。本例では、情報行６４４は、ドキュメントライブラリのスタック中に１００ＭＢを占める４１個の項目があることを示す。情報行６４５は、付加情報、例えば選択されているファイルについての付加情報を提供するのに利用可能である。
【００６４】
ドキュメントライブラリのスタックは、「ＡＢＣ  Ｃｏｒｐ．」スタック６５１、「バックアップスタック」６５２、「事業計画」スタック６５３、「ＸＹＺ  Ｃｏｒｐ．」スタック６５４、および「マーケティングリポート」スタック６５５を含む。スタックそれぞれの上の数字は、何個の項目が各スタック中にあるかを示す。例えば、「ＡＢＣ  Ｃｏｒｐ．」スタック６５１は、８個の項目を含むことが示されている。スタックの項目総数は、情報行６４４に示される項目の数になり、本例では、上述したように４１個である。ユーザによって所望の項目を選択するのに使用され得る選択ボックスＳＢが提供される。「ＡＢＣ  Ｃｏｒｐ．」スタック６５１の選択は、図１１に関連して後で説明されるように、そのスタックの項目のビューをもたらす。
【００６５】
図１１は、図１０の「ＡＢＣ  Ｃｏｒｐ．」スタック６５１中の項目を表示するスクリーン表示を示す図である。情報行６４０および６４１は、今度は、現在のナビゲーションが「ＡＢＣ  Ｃｏｒｐ．」スタックを表示していることを示すことが留意されるべきである。「ＡＢＣ  Ｃｏｒｐ．」スタック６５１は、ドキュメント１〜８にそれぞれ対応する８個のドキュメント７５１〜７５８を含むことが示されている。情報行６４４は、それに応じて、２０ＭＢのメモリを占める８個の項目があることを示す。図１１のドキュメントは、ＡＢＣ  Ｃｏｒｐ．スタック中のスタックにさらに配列されることができる。言い換えると、図１２〜１６に関連して後で説明されるように、ＡＢＣ  Ｃｏｒｐ．スタック６５１によって表される仮想フォルダにおいて、ドキュメントを保持するように、追加の仮想フォルダが編成されることができる。
【００６６】
図１２は、図１１のドキュメントに対してスタック機能が選択されているスクリーン表示を示す図である。図１２に示すように、ユーザは、機能ボックス７６０を引き出すことができる。機能ボックス７６０は、「ビュー」選択７６１、「アイコンを配置」選択７６２、「スタッキング」選択７６３、「リフレッシュ」選択７６４、「内容をもつフォルダを開く」選択７６５、「カット」選択７６６、「コピー」選択７６７、「取消し」選択７６８、「新規」選択７６９、および「プロパティ」選択７７０を含む。選択ボックスＳＢは、「スタッキング」選択７６３を囲むように表示される。
【００６７】
図１３は、図１２のスタック機能に対して、「作成者でスタックする」パラメータが選択されているスクリーン表示を示す図である。図１３に示すように、様々なスタッキング選択肢を提示するボックス７８０が表示される。スタッキング選択肢は、「アンスタッキング」選択肢７８１、「カテゴリでスタックする」選択肢７８２、「作成者でスタックする」選択肢７８３、および「ユーザでスタックする」選択肢７８４を含む。選択ボックスＳＢは、「作成者でスタックする」選択肢７８３を囲むように表示される。
【００６８】
図１４は、図１３のファイルが、作成者によってスタックされているスクリーン表示を示す図である。図１４に示すように、スタック７９１および７９２は、それぞれ作成者ボブおよびリサに対応する。スタックそれぞれの上の数字によって示されるように、ボブのスタック７９１は、２つの項目を含み、リサのスタック７９２は、５つの項目を含む。項目７５８（ドキュメント８に対応する）は、作成者をもたないので、「作成者」スタックに含まれない。スタック７９１および７９２は、スタックが「ＡＢＣ  Ｃｏｒｐ．」スタック６５１中などの様々なレベルで編成され得ることを示す。したがって、仮想フォルダは、「リサ」スタック７９２が、ドキュメントライブラリ中の「ＡＢＣ  Ｃｏｒｐ．」スタック６５１中にあるように、複数のレベルで形成され得る。
【００６９】
図１５は、図１４のファイルをスタックし直すために、「カテゴリでスタックする」選択肢がさらに選択されているスクリーン表示を示す図である。図１５に示すように、選択ボックスＳＢは、「カテゴリでスタックする」選択肢７８２を囲んでいる。項目のいくつかは既にスタック７９１および７９２にスタックされているので、「カテゴリでスタックする」選択肢７８２の選択は、図１６を参照して後でより詳しく説明されるように、項目をスタックし直す。
【００７０】
図１６は、図１４のファイルが、カテゴリによってスタックし直されたスクリーン表示を示す図である。図１６に示すように、スタック７９３および７９４は、「ＸＹＺ  Ｃｏｒｐ．」および「マーケティングリポート」カテゴリにそれぞれ対応する。ドキュメント１および２に対応する項目７５１および７５２は、どの追加カテゴリにも指定されていないので、他のカテゴリのスタックのどれにも入らない。
【００７１】
図１７は、物理フォルダに対するクイックリンクが選択されているスクリーン表示を示す図である。選択ボックスＳＢは、「すべてのフォルダ」クイックリンク６１６を囲むように表示される。図１８に関連して後でより詳しく説明されるように、「すべてのフォルダ」クイックリンク６１６は、物理フォルダのビューの切換えを可能にする。
【００７２】
図１８は、物理フォルダを表示するスクリーン表示を示す図である。図示されている物理フォルダは、図１７の仮想フォルダスタックのファイルを含む。言い換えると、図１７のスタック６５１〜６５５に含まれる項目は、システム内の特定の物理フォルダにも含まれる。こうした物理フォルダは、図１８では、このコンピュータに置かれている「マイドキュメント」フォルダ８５１、このコンピュータに置かれている「デスクトップ」フォルダ８５２、ハードドライブＣ：に置かれている「Ｆｏｏ」フォルダ８５３、サーバに置かれている「マイファイル」フォルダ８５４、外部ドライブに置かれている「外部ドライブ」フォルダ８５５、別のコンピュータに置かれている「マイドキュメント」フォルダ８５６、および別のコンピュータに置かれている「デスクトップ」フォルダ８５７として示されている。
【００７３】
図１８に示すように、ユーザは、図１７の仮想ファイル表現から、図１８の物理ファイル表現に切り換えることができる。この切換えは、ユーザが、現在のタスク用にどちらが望まれるかに応じて、仮想ファイル表現と物理ファイル表現の間をトグルすることを可能にする。物理フォルダ８５１〜８５７のそれぞれ異なる場所は、後でより詳しく説明されるように、仮想ファイルシステムのスコープが比較的広いものであり得ることも示す。
【００７４】
図１９は、ユーザが、仮想フォルダを直接操作することができるルーチン８８０を示すフロー図である。後でより詳しく説明されるように、仮想フォルダの操作のために提供される仕組みは、通常のフォルダを操作するために現在用いられている仕組み（例えば、クリックアンドドラッグ、コピー、ペーストなど）と似ている。図１９に示すように、ブロック８８２で、システムは、表示オブジェクトとして表される仮想フォルダを直接処理するためにユーザが実施することができる規定動作を提供する。ブロック８８４で、ユーザは、規定動作を実施する。上述したように、規定動作の一例は、内容を別の仮想フォルダにコピーするために、ユーザが仮想フォルダをクリックしドラッグすることであろう。ブロック８８６で、仮想フォルダおよび／または内容は、ユーザによって実施される動作で指示されたように操作される。
【００７５】
図２０は、新規のＷｅｓｔ  Ｃｏａｓｔスタック６５６が図１０のスタックに追加されたスクリーン表示を示す図である。Ｗｅｓｔ  Ｃｏａｓｔスタック６５６は、ユーザが「Ｗｅｓｔ  Ｃｏａｓｔ」という新規カテゴリを作成することによって形成された。最初に作成されたとき、新規Ｗｅｓｔ  Ｃｏａｓｔスタック６５６は空であり、項目をもたない。図２０の実施形態では、２つの項目が、Ｗｅｓｔ  Ｃｏａｓｔスタック６５６に追加されている。スタックに項目を追加する１つの方法は、ある特定の項目を選択し、追加カテゴリを変更するか、またはその項目用のカテゴリメタデータに追加カテゴリを追加することであり、例えば図２０の実施形態で行われているように、２つの項目にカテゴリ「Ｗｅｓｔ  Ｃｏａｓｔ」を追加する。この処理は、カテゴリデータは、アドホックプロパティタイプである項目用のメタデータプロパティであることを示す。言い換えると、このタイプのプロパティは、暗示的な意味を何ももたず、ユーザによって任意の値を割り当てられることができる。例えば、「プロパティ」というカテゴリは、どの値ももつことができるが、「作成者」プロパティは、人名であるべきである。図２１を参照して後でより詳しく説明されるように、項目は、他のスタックからＷｅｓｔ  Ｃｏａｓｔスタック６５６にコピーされるために、クリックされドラッグされることもできる（この場合、項目のカテゴリは、「Ｗｅｓｔ  Ｃｏａｓｔ」を含むように自動的にアップデートされる）。これに関して、図２０は、内容がコピーされるのに備えて、選択ボックスＳＢがＡＢＣ  Ｃｏｒｐ．スタック６５１を囲んでいることを示す。
【００７６】
図２１は、ＡＢＣ  Ｃｏｒｐ．スタック６５１からＷｅｓｔ  Ｃｏａｓｔスタック６５６にファイルをコピーするのに、直接処理が用いられるスクリーン表示を示す図である。言い換えると、図２０に示したように、ユーザは、ＡＢＣ  Ｃｏｒｐ．スタック６５１を選択し、次いで、図２１に示すように、ユーザは、Ｗｅｓｔ  Ｃｏａｓｔスタック６５６に、コピーされるスタックをクリックしドラッグしている。したがって、図２０で２つの項目を有していたＷｅｓｔ  Ｃｏａｓｔスタック６５６は、ここでは、ＡＢＣ  Ｃｏｒｐ．スタック６５ｌからの８個の追加項目を含む合計１０個の項目を含むことが示される。ＡＢＣ  Ｃｏｒｐ．スタック６５１からの項目がＷｅｓｔ  Ｃｏａｓｔスタック６５６にコピーされたとき、このコピーは、８個の項目のカテゴリ記述を、元の「ＡＢＣ  Ｃｏｒｐ．」カテゴリを含んだ上に「Ｗｅｓｔ  Ｃｏａｓｔ」カテゴリも含むように修正することによって遂行された。このことは、実施され得る直接処理の１つのタイプを示している。
【００７７】
直接処理の別の例は、項目を右クリックし、消去を選択することである。一実施形態では、ユーザによって消去機能が選択されると、ユーザは、項目が完全に消去されるべきか、または単に現在の仮想フォルダから削除されるべきか、問合せを受ける。項目が、上述したように単に現在の仮想フォルダのカテゴリスタックから削除されることになった場合、項目についてのメタデータから所望のカテゴリを削除することによって遂行されることができる。言い換えると、ＡＢＣ  Ｃｏｒｐ．スタック６５１からＷｅｓｔ  Ｃｏａｓｔスタック６５６にコピーされた項目の１つが、次いで、Ｗｅｓｔ  Ｃｏａｓｔスタック６５６から削除されることになった場合、そのファイルのカテゴリデータを、「Ｗｅｓｔ  Ｃｏａｓｔ」カテゴリを含まないように修正することによって遂行される。
【００７８】
図２２は、システムが、新規フィルタ項を動的に生成するルーチン９００を示すフロー図である。フィルタ項は、仮想フォルダを操作するのに使用される。フィルタ項は本質的に、１組の項目を絞り込む１組のツールとして使用される。一実施形態では、フィルタは、（ユーザインターフェースにおいて、クリック可能なリンクまたはドロップダウンメニューとしてユーザに提示される）メタデータカテゴリおよびその値からなる。ユーザは、ディスプレイ上の、現在の結果を示す項目の組をフィルタリングするために、フィルタ項をクリックする。
【００７９】
図２２は、どのようにしてフィルタが動的に生成され得るかを示す。図２２に示すように、ブロック９０２で、このディスプレイ上のコレクションにある項目の（メタデータの）プロパティが吟味される。ブロック９０４で、項目の共通プロパティに基づいて、フィルタ項候補が動的に生成される。ブロック９０６で、フィルタ項候補は、項目をフィルタリングするための可能な選択対象として、ユーザに提示される。この処理の例として、システムは、１組の項目のプロパティを吟味することができ、項目が概して、「作成者」をプロパティとしてもっている場合、フィルタは、フィルタリングを行うための作成者リストを提供することができる。次いで、ある特定の作成者をクリックすることによって、その作成者をもたない項目が、ディスプレイ上の組から削除される。このフィルタリング処理は、ディスプレイ上の項目の組を絞り込む仕組みをユーザに提供する。
【００８０】
図２３は、システムが、フィルタ項の選択に基づいて項目をフィルタリングするルーチン９２０を示すフロー図である。ブロック９２２で、ユーザは、新たなフィルタ項を入力するか、あるいは、システムによって提示されているフィルタ項の１つを選択する。上述したように、フィルタ項は、システムによって動的に生成されることもでき、予め設定されることもできる。ブロック９２４で、ディスプレイ上のコレクションにある項目は、選択されたプロパティがフィルタ項と合致するかどうかに関して評価される。例えば、フィルタ項が、「ボブ」によって作成された項目向けである場合、そうした項目は、作成者プロパティが「ボブ」を含むかどうかに従って評価される。ブロック９２６で、選択されたプロパティがフィルタ項に合致しない項目は、ディスプレイ上のコレクションから削除される。
【００８１】
図２４は、図１０のスタックが、項「ＡＢ」によってフィルタリングされたスクリーン表示を示す図である。図に示すように、フィルタ領域６２１に、ユーザによって項「ＡＢ」がタイプ入力されている。情報行６４０および６４１は、ディスプレイ中の項目は現在、項「ＡＢ」によってフィルタリングされた項目であることを示す。図に示すように、ＡＢＣ  Ｃｏｒｐ．スタック６５１は依然として、８個の項目を含み、バックアップスタック６５２は現在、３個の項目を含み、ＸＹＺ  Ｃｏｒｐ．スタック６５４も、３個の項目を含む。情報行６４４はしたがって、合計で１４個の項目があり、合計で３５ＭＢのメモリを占めることを示す。
【００８２】
図２５は、図１０のスタックが、項「ＡＢＣ」によってフィルタリングされたスクリーン表示を示す図である。図２４のフィルタ項「ＡＢ」に対して、ユーザは、完全なフィルタ項「ＡＢＣ」を作るために追加文字「Ｃ」をタイプ入力しただけである。図２５に示すように、情報行６４０および６４１はここでは、ディスプレイ上の項目が、項「ＡＢＣ」を含む項目であることを示す。ＡＢＣ  Ｃｏｒｐ．スタック６５１は依然として、８個の項目を含むことが示されるが、バックアップスタック６５２はここでは、２つの項目のみを含む。情報行６４４はここでは、ディスプレイ上のスタックに合計で１０個の項目があり、合計で２５ＭＢのメモリを占めることを示す。このように、図２４および２５は、どのようにしてユーザが新たなフィルタ項を入力することができ、次いで、どのようにしてそうしたフィルタ項が、ディスプレイ上に表示されている項目をフィルタリングするのに使われるかという例を提供する。
【００８３】
図２６は、システムが提供したフィルタ項「２００２年」が選択されているスクリーン表示を示す図である。上述したように、日付でフィルタリングするためのインジケータ６２２の下に、年の選択６２３は、２０００年、２００１年、または２００２年を含む。選択ボックスＳＢは、２００２年を囲むように表示され、ユーザが、希望するフィルタ項を選択していることを示す。
【００８４】
図２７は、フィルタ項「２００２年」が適用されたスクリーン表示を示す図である。「月を選択」セレクタ６２３Ａという選択対象もさらに表示される。図２７に示すように、フィルタ項「２００２年」を適用した後、スタック中の項目の数が削減されている。より具体的には、ＡＢＣ  Ｃｏｒｐ．スタック６５１は現在、６個の項目を含み、バックアップスタック６５２は現在、８個の項目を含み、事業計画スタック６５３は現在、３個の項目を含み、ＸＹＺ  Ｃｏｒｐ．スタック６５４は現在、５個の項目を含む。情報行６４４は現在、合計で２２個の項目、合計で５０ＭＢのメモリを占めることを示す。情報行６４０および６４１はここでは、ディスプレイ上の項目がフィルタ項「２００２年」を含むようにフィルタリングされている項目であることを示す。
【００８５】
図２８は、フィルタリングのための月を選択するリストが提示されるスクリーン表示を示す図である。月のリストを含むボックス９５０が提供される。ボックス９５０は、ユーザが「月を選択」セレクタ６２３Ａを選択していることによって、ディスプレイ上に提供されている。選択ボックスＳＢは、１月を囲むように表示される。
【００８６】
図２９は、図２８のスタックが、１月という月によってさらにフィルタリングされ、「日付」というフィルタ項をさらに示すスクリーン表示を示す図である。図２９に示すように、情報行６４０および６４１は現在、ディスプレイ上の項目が、項「１月」でフィルタリングされた項目であることを示す。バックアップスタック６５２はここでは、２つの項目を含むことが示され、事業計画スタック６５３も２つの項目を含むことが示される。情報行６４４は、合計で４つの項目ディスプレイ上にあり、合計で１０ＭＢのメモリを占めることを示す。ユーザが、結果をある特定の日付にさらにフィルタリングしたい場合、「日付を選択」セレクタ６２３Ｂが提供される。
【００８７】
図３０は、新規クイックリンクを作成するルーチン９４０を示すフロー図である。後でより詳しく説明されるように、クイックリンクは、ユーザが選択した、項目の組のビューを作成するためにユーザによってクリックされ得る、予め定義されたリンクである。一実施形態では、クイックリンクは、一種のピボットとして考えられ得る。クイックリンクは、仮想フォルダを取得する仕組みを提供する。クイックリンクのクリックは、（「お気に入り」のクリックが、ユーザにウェブサイトを見せるのと同じやり方で）ユーザに所望のフォルダを見せることができる。クイックリンクは、システムによって予め定義されることもでき、ユーザによって設定されることもできる。例えば、「すべての作成者」のクリックは、作成者でスタックされたビューを返すことができよう。「すべてのドキュメント」のクリックは、記憶領域すべてに渡るドキュメントすべてのためのフラットビューを返すことができる。ユーザは、独自のクイックリンクを作成することもできる。
【００８８】
図３０に示すように、ブロック９４２で、ユーザは、現在のフィルタ項またはナビゲーションから、新規クイックリンクが形成されるべきであることを示すために、ディスプレイ上で選択を行う。ブロック９４４で、ユーザは、新規クイックリンク用の新しい名称を与える。ブロック９４６で、新規クイックリンクが保存され、ディスプレイ上のクイックリンクセクションにおいて新規クイックリンク名が提供される。
【００８９】
図３１は、図２９のフィルタリングに基づいて、「１月の作業」と呼ばれる新規クイックリンクを作成するスクリーン表示を示す図である。上述したように、図２９において、スタックは、１月でフィルタリングされていた。図３１において、ユーザは、図２９のフィルタリングが新規クイックリンクとして保存されるべきであることを示し、新規クイックリンクに「１月の作業」という名前をつけている。したがって、１月の作業という新しいクイックリンク６１２が、ディスプレイのクイックリンクセクションに表示される。新規クイックリンクの形成に関して、ユーザは通常、「このコレクションをクイックリンクとして保存」などの選択肢を与えられる。
【００９０】
図３２は、「すべての作成者」というクイックリンクが選択されているスクリーン表示を示す図である。図３２に示すように、選択ボックスＳＢは、すべての作成者という選択６１１を囲んで表示される。クイックリンクによってアクセス可能であろうコレクションの他の例は、「すべての作成者」、「最近使ったドキュメント」、「すべての共有ドキュメント」、「作成したすべてのドキュメント」、「他ユーザによって作成されたすべてのドキュメント」、「デスクトップ」、および「すべてのタイプ」を含む。
【００９１】
図３３は、図３２の項目すべてからなるリストが提示されるスクリーン表示を示す図である。図３３に示すように、項目名、作成者、更新日、タイプ、サイズ、および項目の場所を表示する列を示す情報行９５０が提供される。作成者１〜４にそれぞれ対応する作成者９５１〜９５４のリストが示される。
【００９２】
図３４は、図３３のリストから、「作成者１」が選択されているスクリーン表示を示す図である。作成者１のドキュメントは、ドキュメント１および２にそれぞれ対応するドキュメント９５１Ａおよび９５１Ｂを含む。ドキュメント９５１Ａは、作成者１によって作成され、２００１年７月１１日に更新され、マイクロソフトエクセルのファイルであり、２８２Ｋｂのメモリを占め、＼＼サーバ１＼フォルダ２という場所から取得されたことが示される。ドキュメント９５１Ｂは、作成者１によって作成され、２００２年１２月２２日に変更され、マイクロソフトワードのファイルであり、２０６キロバイトのメモリを占め、マイドキュメント＼フォルダ１という場所に物理的に格納されていることが示される。ドキュメント９５１Ａおよび９５１Ｂの場所は、後でより詳しく説明されるように、本発明の実施形態の仮想フォルダが、異なる物理的な位置にある項目を含み得ることも示す。
【００９３】
図３５は、新規ライブラリを作成するルーチン９６０を示すフロー図である。ライブラリの一例は、図１０を参照して上述したドキュメントライブラリである。概して、ライブラリは、互いに関連づけられ得る、使用可能なタイプのファイルの大集団からなる。例えば、写真が１つのライブラリとなり、音楽が別のライブラリとなり、ドキュメントが別のライブラリとなることができる。ライブラリは、特定のタイプの項目に関係するツールおよびアクティビティを提供することができる。例えば、写真ライブラリには、スライドショーの作成や画像の共有など、写真の操作に関するツールおよびフィルタが存在し得る。図３５に示すように、ブロック９６２で、選択された特性を有する項目を含むような新規ライブラリが作成される。ブロック９６４で、選択された項目が、ライブラリにグループ化される。ブロック９６６で、項目の、選択された特性に関する、または他の所望の機能に関するツールおよび／またはアクティビティが提供される。
【００９４】
図３６は、様々な使用可能ライブラリからなるコレクションが示されるスクリーン表示を示す図である。図３６に示すように、ライブラリは、ドキュメントライブラリ９７１、写真および映像ライブラリ９７２、音楽ライブラリ９７３、メッセージライブラリ９７４、連絡先ライブラリ９７５、ＴＶおよび映画ライブラリ９７６、ならびにすべての項目ライブラリ９７７を含む。すべての項目ライブラリ９７７は、２７５項目を含むことが示され、これは、他のライブラリすべてを合わせた項目の総数である。情報行６４４は、合計で２７５項目、合計で７００ＭＢのメモリを占めることを示す。ドキュメントライブラリ９７１は、図１０に関連して上述されたライブラリであることが留意されるべきである。
【００９５】
図３７は、仮想フォルダコレクションのスコープを定義するルーチン９９０を示すフロー図である。後でより詳しく説明されるように、仮想フォルダシステムは、多数の物理的位置（例えば、様々なハードドライブ、様々なコンピュータ、様々なネットワーク上の場所など）にある項目を表すことができ、そうすることによって、ユーザにとって、項目すべてが容易にアクセス可能になる。例えば、ユーザは、複数の物理的場所にある音楽ファイルをただ一度の表示で提示され、そうしたファイルを一度に操作することができる。
【００９６】
図３７に示すように、ブロック９９２で、項目が引き出されることになる物理的な場所に対するスコープが定められる。ブロック９９４で、クエリに応答して、項目が、スコープ内に定義された物理的な場所から引き出される。ブロック９９６で、クエリによって引き出された項目すべてが、ただ一度の表示で提示される。
【００９７】
図３８は、仮想フォルダコレクションのスコープを形成することができる様々なソースを示すブロック図である。図３８に示すように、システム１０００は、このコンピュータ１０１０、追加コンピュータ１０２０、外部にあるリムーバブルストレージ１０３０、およびネットワーク上の場所１０４０を含み得る。スコープ１００１全体は、コレクションを作成するためにユーザの項目が引き出される物理的な場所すべてを含むものとして記述される。スコープは、ユーザによって設定され修正されることができる。上述したように、他の図面は、項目が様々な物理的場所から起こり得ることを示しており、例えば図３４は、サーバおよびマイドキュメントフォルダにあった様々なドキュメントをこのコンピュータ上に示し、図１８では、複数の場所に物理的に格納されている物理フォルダを示している。
【００９８】
図３９は、仮想フォルダコレクションに非ファイル項目を含めるルーチン１０８０を示すフロー図である。非ファイル項目は、一般に物理的なファイルストレージに配置されるファイル項目と対比される。非ファイル項目の例は、ｅメールや連絡先のようなものであろう。図３９に示すように、ブロック１０８２で、データベースを使って、クエリによって検索され得るファイル項目とともに非ファイル項目も含める。ブロック１０８４で、クエリに応答して、クエリに合致する非ファイル項目およびファイル項目両方が引き出される。ブロック１０８６で、クエリに合致した非ファイル項目およびファイル項目両方が、ディスプレイに提示される。
【００９９】
図４０は、様々な非ファイル項目を表示するスクリーン表示を示す図である。図４０に示すように、項目は、「ジョン」を含む項目にフィルタリングされている。項目は、連絡先項目１１０１、ｅメール項目１１０２、ならびにドキュメント項目１１０３および１１０４を含むことが示される。連絡先項目１１０１およびｅメール項目１１０２は非ファイル項目である。本システムは、このような非ファイル項目が、ユーザの要望通りに編成され操作され得るように、正規のファイル項目に含められることを可能にする。図２に関連して上述されたように、このような非ファイル項目は、リレーショナルデータベース２３０に完全に含められることができ、含めることができない場合、データベース２３０は、ファイルのプロパティについての情報を含む。
【０１００】
後でより詳しく説明されるように、静的でも動的でもよい仮想フォルダは、共有されることができる。静的および動的リストの共有は、ユーザが、選択された項目を共有することを可能にする。被共有者は、リスト中の項目へのアクセス許可が与えられ、リストが変更されると、被共有者がリストの現在の項目へのアクセス権をもち続けることができるように、アクセス許可がアップデートされる。
【０１０１】
図４１は、静的リストおよび１組の参照項目を含むメモリシステム４１００を示すブロック図である。メモリシステム４１００は、静的リストを保持するメモリロケーション４１１０、項目Ａを保持するメモリロケーション４１２０、および項目Ｂを保持するメモリロケーション４１３０を含む。メモリロケーション４１１０にある静的リストは、項目Ａへの参照、および項目Ａに関する注釈、ならびに項目Ｂへの参照、および項目Ｂに関する注釈を含む。こうした注釈は、実際の項目の一部ではなく、リストに属す。静的リストのタイプのいくつかの例は、買物リスト、音楽再生リスト、および画像のスライドショーである。
【０１０２】
図４２は、静的リストを共有するルーチン４２００を示すフロー図である。ブロック４２１０で、共有者は、静的リストが共有されるべきであることを示す。判断ブロック４２２０で、共有者が、各項目を共有するためのアクセス許可をもっているかどうかに関して、判定が行われる。項目のいくつかが共有されることができない場合、ルーチンは、ブロック４２３０へ続き、ここで、共有者は、被共有者が、指定された項目にアクセスできない可能性があることを、共有時に通知される。項目それぞれが共有され得る場合、ルーチンは、判断ブロック４２５０へ続く。
【０１０３】
共有者が、各項目を共有するためのアクセス許可をもっているかどうか判定する処理において、一実施形態では、リスト自体が、アクセス許可が判定される最初の項目である。言い換えると、第１のステップは、共有者が、リスト自体を共有するためのアクセス許可をもっているかどうか判定することである。共有者が、リストを共有するためのアクセス許可をもっていない場合、共有者は、リストを共有するためのアクセス許可をもっていないと通知され、ルーチンが終わる。共有者が、リストを共有するためのアクセス許可をもっている場合、リストによって参照される項目それぞれに対して、共有者が、項目それぞれを共有するためのアクセス許可もっているかどうかに関して、判定が行われる。共有者が、ある特定の項目を共有するためのアクセス許可もっていない場合、共有者は、その項目が共有されることができないと通知される。処理が終了すると、共有者が共有のためのアクセス許可を実際にもっている項目の組に関して、ルーチンは、ブロック４２５０へ続く。
【０１０４】
判断ブロック４２５０で、共有者が、被共有者は読取りアクセスだけでなく、読取り／書込みアクセスを与えられるべきであると示しているかどうかに関して、判定が行われる。共有者が、読取り／書込みアクセスは与えられるべきでないと示した場合、ルーチンは、ブロック４２６０へ続き、ここで、被共有者は、読取り許可のみを与えられる。共有者が、被共有者は読取り／書込みアクセスをもつべきであると示した場合、ルーチンは、ブロック４２７０へ続き、ここで、被共有者は、読取り／書込み許可を与えられる。ブロック４２８０で、静的リスト自体ならびに静的リスト中で参照されるあらゆる項目への、指定されたアクセス権が、被共有者に認められる。被共有者は次いで、共有者のコンピュータにある静的リストおよびその参照項目にリモートアクセスすることができる。
【０１０５】
図４３は、静的リストから追加／削除された項目にアクセス許可をし直すルーチン４３００を示すフロー図である。ブロック４３１０で、共有者は、静的リストに項目を追加しまたは削除する。ブロック４３２０で、項目は、静的リストの被共有者向けのアクセス権を認め又ははずすように、アクセス許可をし直される。一例として、共有者が、リストから画像を削除した場合、被共有者は、この画像へのアクセス許可も失う。あるいは、共有者が、再生リストに歌を追加した場合、被共有者は、この歌へのアクセス権を認められる。代替実装形態では、項目は、静的リストに出入りするときも動的にアクセス許可され得る。というのは、静的リストの実際の定義は、データベース中にあり、変化するときを監視され得るからである。
【０１０６】
図４４は、動的リストを作成するルーチン４４００を示すフロー図である。ブロック４４１０で、ユーザは、動的リストを作成するスコープおよび１組の基準を提供する。ブロック４４２０で、プロセッサは、スコープおよび基準の組をリレーショナルデータベースに渡す。ブロック４４３０で、リレーショナルデータベースは、プロセッサに結果を戻す。ブロック４４４０で、プロセッサは、動的リスト中の項目として結果を戻す。
【０１０７】
図１０に関連して上でより詳しく説明したように、ライブラリなど特定の仮想フォルダは、作成のために動的リストに依拠する。例えば、ユーザは通常、仮想フォルダのドキュメントライブラリへ行って、仮想フォルダのドキュメントを見つける。ドキュメントライブラリは、動的リストタイプである。動的リストに対するスコープは、ローカルマシン上で使用可能なデータストレージとなるように設定されることもでき、別の例として、ネットワーク上のマシンすべてに格納されたデータを含むこともできる。
【０１０８】
図４５は、動的リストおよび１組の参照項目を含むメモリシステム４５００を示すブロック図である。メモリシステム４５００は、動的リストを保持するメモリロケーション４５１０と、項目Ａを保持するメモリロケーション４５２０と、項目Ｂを保持するメモリロケーション４５３０と、項目Ｃを保持するメモリロケーション４５４０とを含む。メモリロケーション４５１０に格納されている動的リストは、メモリシステム４５００すべてを含むスコープをもち、ケース＝Ｘおよびクライアント＝１００を含む基準をもつ。この基準を満たす参照項目は、項目Ａへの参照および項目Ｂへの参照を含む。メモリロケーション４５２０に格納されている項目Ａは、ケース＝Ｘおよびクライアント＝１００というプロパティをもち、メモリロケーション４５３０に格納されている項目Ｂは、ケース＝Ｘおよびクライアント＝１００というプロパティをもつ。メモリロケーション４５４０に格納されている項目Ｃは、ケース＝Ｘおよびクライアント＝９９というプロパティをもつ。項目Ｃの、クライアント＝９９というプロパティが、メモリロケーション４５１０に格納されている動的リストの基準に合致しないので、項目Ｃは、リスト中で参照されない。
【０１０９】
図４６は、動的リストを共有するルーチン４６００を示すフロー図である。ブロック４６１０で、共有者は、動的リストが共有されるべきであると示す。判断ブロック４６２０で、共有者が、リストにある項目それぞれを共有するためのアクセス許可をもっているかどうかに関して、判定が行われる。項目のいくつかが共有されることができない場合、ルーチンは、ブロック４６３０へ続き、ここで、共有者は、被共有者が、指定された項目にアクセスできない可能性があることを、共有時に通知される。項目それぞれが共有され得る場合、ルーチンは、判断ブロック４６４０へ続く。
【０１１０】
共有者が、各項目を共有するためのアクセス許可をもっているかどうか判定する処理において、一実施形態では、リスト自体が、アクセス許可が判定される最初の項目である。言い換えると、第１のステップは、共有者が、リスト自体を共有するためのアクセス許可をもっているかどうか判定することである。共有者が、リストを共有するためのアクセス許可をもっていない場合、共有者は、リストを共有するためのアクセス許可をもっていないと通知され、ルーチンが終わる。共有者が、リストを共有するためのアクセス許可をもっている場合、リストによって参照される項目それぞれに対して、共有者が、項目それぞれを共有するためのアクセス許可をもっているかどうかに関して、判定が行われる。共有者が、ある特定の項目を共有するためのアクセス許可をもっていない場合、共有者は、その項目が共有されることができないと通知される。処理が終了すると、共有者が共有のためのアクセス許可を実際にもっている項目の組に関して、ルーチンは、ブロック４６４０へ続く。
【０１１１】
判断ブロック４６４０で、共有者が、静的リスト形式の項目のみを共有したいのかどうかに関して、判定が行われる。言い換えると、共有者が、動的リストではなく静的リストの形の現在の項目を共有したいのかどうかに関して、判定が行われる。静的リストが共有されることになった場合、ルーチンは、ブロック４６５０へ続き、ここで、現時点で動的リストにあるものを表す静的リストが生成され、この静的リストが、図４２に関連して上述したように共有される。共有者が、静的リストの形のみを共有したいわけではない場合、ルーチンは、ブロック４６６０へ続く。
【０１１２】
ブロック４６６０で、動的リストの基準を満たす項目がすべて共有される。このことは、項目は、共有が起こっているマシン上のそれぞれの格納場所に残され、被共有者に項目へのアクセス権をもたせるように項目がアクセス許可されることを意味する。この処理が完了すると、被共有者は、共有者のコンピュータにあるリストおよびその参照項目にリモートアクセスすることができる。
【０１１３】
図４７は、動的リストから削除され追加される項目をアクセス許可し直すルーチン４７００を示すフロー図である。ブロック４７１０で、項目は、動的リストの基準を満たすようにまたは満たさないようにプロパティ変更を行う。ブロック４７２０で、項目は、動的リストの被共有者向けのアクセス権を適切に認めまたははずすように、アクセス許可し直される。言い換えると、現時点で動的リストにある項目が、動的リストの基準を満たさないようにプロパティを変更した場合、この項目は、動的リストの被共有者向けのアクセス権をはずすようにアクセス許可し直される。同様にして、以前は動的リストになかったいずれかの項目が、スコープの範囲に入り、動的リストの基準を満たすようにプロパティを変更した場合、こうした項目は、動的リストの被共有者向けのアクセス権を認めるようにアクセス許可し直される。
【０１１４】
図４８は、項目が削除された動的リストを含むメモリシステム４８００を示すブロック図である。メモリシステム４８００は、動的リストを保持するメモリロケーション４８１０と、項目Ａを保持するメモリロケーション４８２０と、項目Ｂを保持するメモリロケーション４８３０と、項目Ｃを保持するメモリロケーション４８４０とを含む。メモリシステム４８００は、図４５のメモリシステム４５００に類似している。図４８の例では、メモリロケーション４８３０にある項目Ｂは、クライアントプロパティを、クライアント＝９９となるように変更している。この変更のせいで、項目Ｂは、クライアント＝１００であることを要求する動的リストの基準を満たさない。したがって、項目Ｂは、メモリロケーション４８１０に格納されている動的リストから削除されている。動的リストの被共有者は、したがって、項目Ｂへのアクセス許可をもたなくなる。
【０１１５】
図４９は、項目が追加された動的リストを含むメモリシステム４９００を示すブロック図である。メモリシステム４９００は、動的リストを保持するメモリロケーション４９１０と、項目Ａを保持するメモリロケーション４９２０と、項目Ｂを保持するメモリロケーション４９３０と、項目Ｃを保持するメモリロケーション４９４０と、新規項目Ｄを保持するメモリロケーション４９５０とを含む。図４８のメモリロケーション４８１０にある動的リストと比較して、図４９のメモリロケーション４９１０にある動的リストは、項目ＣおよびＤへの追加参照を有することが示されている。このことは、メモリロケーション４９４０にある項目Ｃ、およびメモリロケーション４９５０にある新規項目Ｄが、クライアントプロパティを、クライアント＝１００となるように変更させまたは設定させたために起こっている。この変更は、項目ＣおよびＤが現在、メモリロケーション４９１０に格納されている動的リストの基準を満たすようにしており、したがって、動的リストは現在、こうした項目への参照を含む。このことは、動的リストの被共有者が現在、項目ＣおよびＤへのアクセス権を許可されているという結果をもたらす。
【０１１６】
図５０は、共有ＡＰＩを呼び出すルーチン５０００を示すフロー図である。後でより詳しく説明されるように、リストに加え、個々の項目も共有されることができる。ブロック５０１０で、リストまたは個々の項目の共有に関して、共有ＡＰＩが呼び出される。ブロック５０２０で、呼出しに応答して、個々の項目、またはリストおよびリストの参照項目へのアクセス許可が与えられる。
【０１１７】
上述されたようなプログラミングインターフェースは、リストまたは個々の項目の共有処理の一部として使用され得る。図５１Ａ〜５１Ｌに関連して後でより詳しく説明されるように、共有処理において使われるようなプログラミングインターフェース（またはより簡単には、インターフェース）は、コードの１つまたは複数のセグメント（群）が、コードの１つまたは複数の他のセグメント（群）によって提供される機能と通信しまたは機能にアクセスすることを可能にする、どの仕組み、処理、プロトコルとしても見なされ得る。あるいは、プログラミングインターフェースは、他のコンポーネント（群）の、１つまたは複数の仕組み（群）、方法（群）、関数呼出し（群）、モジュール（群）などと通信結合することができる、システムのあるコンポーネントの、１つまたは複数の仕組み（群）、方法（群）、関数呼出し（群）、モジュール（群）、オブジェクト（群）などとして見なされ得る。上記の文における「コードのセグメント」という用語は、適用される専門範囲にかかわらず、かつコードセグメントが個別にコンパイルされるかどうか、コードセグメントがソースコード、中間コード、またはオブジェクトコードとして提供されるのか、コードセグメントがランタイムシステムまたは処理において使用されるのか、コードセグメントが同じマシンもしくは異なるマシンに置かれるか、それとも複数のマシンに分散されるか、あるいはコードのセグメントによって表される機能が、完全にソフトウェアとして、完全にハードウェアとして、またはハードウェアおよびソフトウェアの組合せとして実装されるのかにかかわらず、１つまたは複数の命令またはコードの行を含み、例えば、コードモジュール、オブジェクト、サブルーチン、関数などを含むことを意図している。
【０１１８】
概念的に、プログラミングインターフェースは、図５１Ａまたは図５１Ｂに示すように、包括的に見られ得る。図５１Ａは、第１および第２のコードセグメントが通信するためのルート（ｃｏｎｄｕｉｔ）としてのインターフェース１というインターフェースを示す。図５１Ｂは、インターフェースを、インターフェースオブジェクトＩ１およびＩ２（第１および第２のコードセグメントの一部であってもなくてもよい）を備えるものとして示し、こうしたインターフェースオブジェクトは、システムの第１および第２のコードセグメントが、媒体Ｍを介して通信することを可能にする。図５１Ｂを見て、インターフェースオブジェクトＩ１およびＩ２を、同一のシステムの別個のインターフェースと見なす人、オブジェクトＩ１およびＩ２と媒体Ｍとがインターフェースを構成すると見なす人がいるかもしれない。図５１Ａおよび５１Ｂは、双方向の流れ、およびその流れの両端でのインターフェースを示すが、特定の実装形態は、一方向での情報の流れしかもたない（または後で説明されるように情報の流れをもたない）場合もあり、一端でのインターフェースオブジェクトしかもたない場合もある。限定ではなく例として、アプリケーションプログラミングインターフェース（ＡＰＩ）、エントリポイント、方法、関数、サブルーチン、リモートプロシージャコール、およびコンポーネントオブジェクトモデル（ＣＯＭ）インターフェースなどの用語は、プログラミングインターフェースの定義範囲に包含される。
【０１１９】
このようなプログラミングインターフェースの特徴は、第１のコードセグメントが、第２のコードセグメントに情報（この場合、「情報」は、広い意味で使われており、データ、コマンド、要求などを含む）を送る方法と、第２のコードセグメントが、その情報を受け取る方法と、その情報の構造、シーケンス、シンタクス、編成、スキーマ、計時、および内容とを含み得る。これに関して、情報が、インターフェースによって定義されたやり方で移送される限り、基底の移送媒体自体は、有線でも無線でも、あるいは有線および無線の組合せであっても、インターフェースの動作にとって重要でなくてよい。特定の状況では、情報は、従来の意味での一方向または両方向で渡されることができない。というのは、情報の転送は、あるコードセグメントが、第２のコードセグメントによって実施される機能に単にアクセスするときのように、別の仕組み（例えば、コードセグメントの間の情報の流れとは別に、情報が、バッファ、ファイルなどに置かれる）を介するか、または存在しなくてもよいからである。こうした特徴のいずれかまたは全部は、所与の状況、例えば、コードセグメントが、疎結合構成または密結合構成のシステムの一部であるかに応じて重要となる場合があり、したがって、このリストは、例示であって限定のためではないと見なされるべきである。
【０１２０】
このプログラミングインターフェース概念は、当業者に知られており、本発明の上記の詳細な説明から明らかである。しかし、プログラミングインターフェースを実装する他の方法もあり、明示的に除外されない限り、こうした方法も、本明細書に添付され定義される特許請求の範囲に包含されることを意図している。このような他の方法は、図５１Ａおよび５１Ｂの単純化された概観より高度または複雑に見え得るが、それにもかかわらず、全体として同じ結果を達成する類似した機能を実施する。ここで、プログラミングインターフェースのいくつかの例示的な代替実装形態を簡潔に説明する。
【０１２１】
図５１Ｃおよび５１Ｄは、因数分解（ｆａｃｔｏｒｉｎｇ）実装形態を示す。因数分解実装形態によると、あるコードセグメントから別のコードセグメントへの通信は、その通信を、複数の別々の通信に分けることによって、間接的に達成されることができる。このことは、図５１Ｃおよび５１Ｄで概略的に示される。図に示すように、いくつかのインターフェースは、機能の分割可能な組として説明されることができる。したがって、図５１Ａおよび５１Ｂのインターフェース機能は、２４または２×２×３×２を数学的にもたらすことができるように、同じ結果を達成するように因数分解されることができる。したがって、図５１Ｃに示されるように、インターフェース１というインターフェースによって提供される機能は、インターフェースの通信をインターフェース１Ａ、インターフェース１Ｂ、インターフェース１Ｃなどの複数のインターフェースに変換するように下位分割され、同じ結果を達成することができる。図５１Ｄに示されるように、インターフェースＩ１によって提供される機能は、複数のインターフェースＩ１ａ、Ｉ１ｂ、Ｉ１ｃなどに下位分割され、同じ結果を達成することができる。同様に、第１のコードセグメントから情報を受け取る、第２のコードセグメントのインターフェースＩ２は、複数のインターフェースＩ２ａ、Ｉ２ｂ、Ｉ２ｃなどに因数分解されることができる。因数分解するとき、第１のコードセグメントに含まれるインターフェースの数は、第２のコードセグメントに含まれるインターフェースの数と一致しなくてもよい。図５１Ｃおよび５１Ｄのいずれの場合でも、インターフェース１およびＩ１というインターフェースの機能上の意図は、それぞれ図５１Ａおよび５１Ｂの場合と同じままである。インターフェースの因数分解は、因数分解が認識困難になり得るように、結合的な、可換な、および他の数学的なプロパティの後に起こることもできる。例えば、動作の順序は重要でなくてよく、したがって、インターフェースによって実現される機能は、インターフェースの遂行に先立って、別のコード部分またはインターフェースによって実現されても、システムの別のコンポーネントによって実施されてもよい。さらに、プログラミング分野の当業者であれば、同じ結果を達成する異なる関数呼出しを行う様々な方法があることを理解できよう。
【０１２２】
図５１Ｅおよび５１Ｆは、再定義実装形態を示す。再定義実装形態によると、いくつかの場合において、プログラミングインターフェースの特定の特徴（例えばパラメータ）を無視し、追加し、または再定義し、意図した結果を依然として達成することが可能であり得る。このことは、図５１Ｅおよび５１Ｆに示される。例えば、図５１Ａのインターフェース１というインターフェースが、Ｓｑｕａｒｅ（ｉｎｐｕｔ，ｐｒｅｃｉｓｉｏｎ，ｏｕｔｐｕｔ）の関数呼出しを含み、この呼出しは、３つのパラメータ、すなわちｉｎｐｕｔ、ｐｒｅｃｉｓｉｏｎ、およびｏｕｔｐｕｔを含み、第１のコードセグメントから第２のコードセグメントに発行されると仮定する。中央のパラメータｐｒｅｃｉｓｉｏｎは、図５１Ｅに示すように、所与のシナリオに関係しない場合、適切に無視されることも、（この状況において）ｍｅａｎｉｎｇｌｅｓｓパラメータで置き換えられることもできよう。無関係なａｄｄｉｔｉｏｎａｌパラメータを追加することもできる。いずれの場合でも、第２のコードセグメントによって入力が二乗された後で出力が返される限り、二乗機能は達成されることができる。ｐｒｅｃｉｓｉｏｎは、計算機システムの何らかの下流部分または他の部分にとって有意なパラメータでもよい。ただし、ｐｒｅｃｉｓｉｏｎは、二乗計算という狭い目的にとって必要ないと認識されると、置き換えられまたは無視されることができる。例えば、有効なｐｒｅｃｉｓｉｏｎ値を渡すのではなく、誕生日などの無意味な値が、結果に悪影響を与えることなく渡されることができよう。同様に、図５１Ｆに示すように、インターフェースＩ１は、インターフェースＩ１’で置き換えられ、インターフェースへのパラメータを無視しまたは追加するように再定義される。インターフェースＩ２は、同様にインターフェースＩ２’として再定義されることができ、不必要なパラメータまたは他の所で処理されることができるパラメータを無視するように再定義される。ここでのポイントは、いくつかの場合において、プログラミングインターフェースは、何らかの目的には必要とされないパラメータなどの特徴を含む場合があるので、こうした特徴は、無視されまたは再定義され、あるいは他の目的のために他の所で処理されることができることである。
【０１２３】
図５１Ｇおよび５１Ｈは、インラインコーディング実装形態を示す。インラインコーディング実装形態によると、２つの別々のコードモジュールの機能の間の「インターフェース」が形を変えるように、そうした機能の一部または全部をマージすることも可能であり得る。例えば、図５１Ａおよび５１Ｂの機能は、それぞれ図５１Ｇおよび５１Ｈの機能に変換されることができる。図５１Ｇにおいて、図５１Ａの以前の第１および第２のコードセグメントは、その両方を含むモジュールにマージされる。この場合、コードセグメントは、依然として相互に通信していてもよいが、インターフェースは、単一モジュールにより適した形に適合されることができる。したがって、例えば、正式な呼出しおよび戻りステートメントは不必要になり得るが、インターフェース１というインターフェースに順じた同様の処理または応答（群）は依然として有効であり得る。同様に、図５１Ｈに示してあるが、図５１ＢのインターフェースＩ２の一部（または全部）は、インターフェースＩ１にインラインに書き込まれて、インターフェースＩ１”を形成することができる。図に示すように、インターフェースＩ２は、Ｉ２ａおよびＩ２ｂに分割され、インターフェース部分Ｉ２ａは、インターフェースＩ１とインラインにコーディングされて、インターフェースＩ１”を形成している。具体的な例として、図５１ＢのインターフェースＩ１が、関数呼出しｓｑｕａｒｅ（ｉｎｐｕｔ，ｏｕｔｐｕｔ）を実施し、この呼出しが、インターフェースＩ２によって受け取られ、インターフェースＩ２は、第２のコードセグメントによる、ｉｎｐｕｔとともに渡された値の（ｉｎｐｕｔを二乗するための）処理の後、二乗された結果をｏｕｔｐｕｔとともに返す場合を考える。このような場合、第２のコードセグメントによって実施される（ｉｎｐｕｔを二乗する）処理は、インターフェースへの呼出しなしで、第１のコードセグメントによって実施されることができる。
【０１２４】
図５１Ｉおよび５１Ｊは、分離（ｄｉｖｏｒｃｅ）実装形態を示す。分離実装形態によると、一方のコードセグメントから別のコードセグメントへの通信は、その通信を複数の別々の通信に分けることによって間接的に遂行することができる。このことは、図５１Ｉおよび５１Ｊに概略的に示される。図５１Ｉに示すように、ミドルウェアの１つまたは複数の断片（群）（元のインターフェースから全機能および／またはインターフェース機能を分離するので、分離インターフェース（群））が、第１のインターフェース、すなわちインターフェース１上での通信を変換して、異なるインターフェース、この場合インターフェース２Ａ、インターフェース２Ｂ、およびインターフェース２Ｃというインターフェースに通信を準拠させるように提供される。これは、例えば、インターフェース１のプロトコルに従ってオペレーティングシステムと通信するように設計されたアプリケーションのベースがインストールされているが、次いで、オペレーティングシステムが、異なるインターフェース、この場合インターフェース２Ａ、インターフェース２Ｂ、およびインターフェース２Ｃというインターフェースを用いるように変更される場合に行われ得るであろう。重要なのは、第２のコードセグメントに使われていた元のインターフェースは、第１のコードセグメントによって使われるインターフェースとの互換性がなくなるように変更され、したがって、古いおよび新しいインターフェースを互換可能にするのに媒介が用いられる点である。同様に、図５１Ｊに示すように、ＤＩ２と共同で作用するように設計し直されているが同じ機能的結果をもたらす、インターフェースＩ１からの通信を受けるための分離インターフェースＤＩ１、および例えばインターフェースＩ２ａおよび１２ｂにインターフェース機能を送るための分離インターフェースＤＩ２を有する、第３のコードセグメントが導入されることができる。同様に、ＤＩ１およびＤＩ２は、図５１ＢのインターフェースＩ１およびＩ２の機能を、新しいオペレーティングシステムに翻訳するように共同作用し、同じまたは類似した機能的結果をもたらすことができる。
【０１２５】
図５１Ｋおよび５１Ｌは、書換え実装形態を示す。書換え実装形態によると、インターフェース機能を他のもので置き換えるが全体的に同じ結果を達成するようにコードを動的に書き換えることになるさらに別の可変要素が可能である。例えば、実行環境（．Ｎｅｔフレームワーク、Ｊａｖａ（登録商標）ランタイム環境、または他の同様のランタイムタイプの環境によって提供されるような）実行環境において、中間言語（例えば、マイクロソフトＩＬ、Ｊａｖａ（登録商標）バイトコードなど）の形で示されるコードセグメントが、ジャストインタイム（ＪＩＴ）コンパイラまたはインタープリタに与えられるシステムがあり得る。ＪＩＴコンパイラは、第１のコードセグメントから第２のコードセグメントへの通信を動的に変換するように、すなわち、第２のコードセグメント（元のまたは異なる第２のコードセグメントのどちらか）によって要求され得る異なるインターフェースに通信を準拠させるように書かれることができる。このことは、図５１Ｋおよび５１Ｌに示される。図５１Ｋに見られ得るように、この手法は、上述された分離構成と似ている。これは、例えば、インターフェース１のプロトコルに従ってオペレーティングシステムと通信するように設計されたインストール済のアプリケーションのベースが、次いで、オペレーティングシステムが、異なるインターフェースを用いるように変更される場合に行われ得るであろう。ＪＩＴコンパイラは、インストールベースのアプリケーションからのオンザフライでの通信を、オペレーティングシステムの新しいインターフェースに準拠させるのに用いられることができよう。図５１Ｌに示されるように、インターフェース（群）を動的に書き換えるこの手法は、インターフェース（群）を動的に因数分解し、あるいは作り変えるのにも適用されることができる。
【０１２６】
代替実施形態によって、インターフェースと同じまたは類似の結果を達成する上述したシナリオは、様々な方法、すなわち直列および／または並列で、あるいは他の介在コードと組み合わされることもできることにも留意されたい。したがって、上で提示された代替実施形態は、互いに排他的でなく、図５１Ａおよび５１Ｂに示される汎用的なシナリオと同じまたは等価なシナリオを作り出すように、混合され、調和され、組み合わされることができる。ほとんどのプログラミング構成の場合のように、本明細書では説明されないであろうが、それにもかかわらず本発明の精神および範囲によって表されるインターフェースの同じまたは類似の機能を達成する他の同様の方法があることにも留意されたい。すなわち、インターフェースの価値を決定するのは、少なくとも一部は、インターフェースによって表される機能、およびインターフェースによって可能にされる有利な結果であることに留意されたい。
【０１２７】
図５２〜５９を参照して後でより詳しく説明されるように、静的および動的リストの共有に加え、個々の項目も共有されることができる。ユーザがある１つのファイルを共有したいと思う多くのシナリオがあり、例えば、ユーザがそれについてのフィードバックを得たいと思う大規模なプレゼンテーションがある。このような場合、ユーザは、自分が作成したすべてのファイルを有するフォルダではなく、そのプレゼンテーションを含むただ１つのファイルを共有したいと考え得る。他の例は、ユーザが、歌、連絡先、またはｅメールの共有を望む場合であろう。
【０１２８】
図５２は、項目を共有するルーチン５２００を示すフロー図である。ブロック５２１０で、ユーザは、共有される項目を選択する。ブロック５２２０で、ユーザは、項目が共有される相手となる被共有者を選択する。ブロック５２３０で、ユーザは、被共有者に割り当てられるアクセス許可を選択する。アクセス許可の例として、ユーザは、ある特定の被共有者向けに、項目への読取りアクセスのみを与えることを望む場合がある。
【０１２９】
図５３は、項目を共有するために選択された被共有者が、項目にアクセスすることができるようにするルーチン５３００を示すフロー図である。ブロック５３１０で、項目は、共有者のマシン上の元の場所に残され、システムは、被共有者が項目にアクセスできるようにするための処理を開始する。言い換えると、項目は、共有されることになると、共有者のマシンから移動されるのではなく、被共有者が、共有者のマシンを介した項目へのアクセス権を与えられる。
【０１３０】
ブロック５３２０で、システムは、図５４を参照して後でより詳しく説明されるように、項目が被共有者によってアクセスされるためのファイル共有があることを検証する。ブロック５３３０で、システムは、図５５を参照して後でより詳しく説明されるように、アクセス制御リスト（ＡＣＬ）および他のいずれかのアクセス許可が設定されることを検証する。ブロック５３４０で、システムは、図５６を参照して後でより詳しく説明されるように、暗号化ファイルシステム（ＥＦＳ）およびデジタル著作権管理（ＤＲＭ）など、いずれかの保護システムに関わるどの問題も扱う作業を行う。ブロック５３５０で、図５７を参照して後でより詳しく説明されるように、ファイアウォールが構成される。ブロック５３６０で、図５８を参照して後でより詳しく説明されるように、共有トランザクションの詳細が記録される。
【０１３１】
図５４は、共有される項目がアクセスされ得るようにするためのファイル共有があることを確認するルーチン５４００を示すフロー図である。ブロック５４１０で、システムは、共有されている項目より上位にファイル共有があることを検証する。ブロック５４２０で、ファイル共有が既に存在する場合、そのファイル共有が、ファイルをリモートに使用可能にするのに用いられる。ブロック５４３０で、システムは、ファイル共有についてのアクセス許可が正しく、被共有者が共有される項目にアクセスすることを可能にすることを検証する。
【０１３２】
図５５は、ＡＣＬおよび他のいずれかのアクセス許可が設定されていることを検証するルーチン５５００を示すフロー図である。ブロック５５１０で、項目が共有されることになると、ユーザは、その項目を誰と共有したいかを尋ねられる。ブロック５５２０で、ユーザは、どのようなアクセス許可を被共有者に与えたいかも尋ねられる。アクセス許可の例として、ユーザは、ある特定の被共有者に読取り専用許可を与えたいと思う場合も、あるいは、共有されている項目を変更するためのアクセス許可を与える場合もある。ブロック５５３０で、被共有者向けに要求されたアクセス許可に基づいて、システムは、被共有者向けに要求されたアクセス許可を反映し、共有者によって要求されたアクセス許可を認めるように、項目についてのセキュリティＡＣＬを設定する。
【０１３３】
図５６は、ＥＦＳおよびＤＲＭに伴うどの問題も処理する作業を行うルーチン５６００を示すフロー図である。判断ブロック５６１０で、共有される項目が、暗号化ファイルシステム（ＥＦＳ）または他の保護によって保護されるかどうかについて判定が行われる。項目に対する保護がない場合、ルーチンは終了する。項目に対する保護がある場合、ルーチンは、判断ブロック５６２０へ続く。
【０１３４】
判断ブロック５６２０で、共有される項目に関して、マシン上のポリシーまたは項目に対するＤＲＭによって共有が許可されるかどうか判定が行われる。共有が許可されない場合、ルーチンはブロック５６３０へ進み、ここで、項目は保護されていて共有されることができないという通知が行われる。判断ブロック５６２０で共有が許可されると判定された場合、ルーチンは、ブロック５６４０へ進み、ここで、ＥＦＳまたは他の保護に伴うどの問題も、項目が共有されることを可能にするように解決される。
【０１３５】
図５７は、ファイアウォールを構成するルーチン５７００を示すフロー図である。判断ブロック５７１０で、ファイアウォールが有効にされているかどうかについて判定が行われる。デフォルトで、ファイアウォールはほとんどのコンピュータにおいて有効にされ、ユーザが、このような状況の下で依然として安全に共有を行うことができることが望ましい。判断ブロック５７１０でファイアウォールが有効にされていないと判定された場合、ルーチンは終了する。ファイアウォールが有効にされている場合、ルーチンは、ブロック５７２０へ進む。ブロック５７２０で、システムは、ファイアウォールが、共有される項目に被共有者がアクセスすることを可能にするように問題を解決する。
【０１３６】
図５８は、共有トランザクションの詳細を記録するルーチン５８００を示すフロー図である。ブロック５８１０で、何が共有され、それが誰と共有され、いつそれが共有されたかなどを含む、共有トランザクションの詳細が追跡される。ブロック５８２０で、共有トランザクションの詳細は、共有者が後で利用するために記録される。言い換えると、この情報の記録は、自分のマシンから共有されている項目すべてが何であるか、こうした項目を誰と共有しているか、こうした被共有者がどのようなアクセス権をもっているかを、共有者が後で調べ、明らかにすることを可能にする。
【０１３７】
図５３〜５８のルーチンは、共有される項目を被共有者にとって使用可能にするのに必要とされるタスクを実施することが理解されよう。一実施形態では、共有される項目を見つけやすくするために、共有者は、システムに、共有者のマシンから共有項目に直接アクセスするためのリンクを被共有者に送らせることもできる。さらに、システムは、被共有者に、共有者が被共有者と何を共有しているかを調べるために、共有者のマシンに問い合わせる能力を与えることもできる。
【０１３８】
図５９は、項目を共有するためのヘルパルーチン５９００のページの間のナビゲーションを示すブロック図である。ブロック５９１０で、「リストメーカの統合」用のヘルパページ１が提供される。概して、このページは、ユーザが、共有するための複数の項目を選択し、次いで、ヘルパルーチンに入った場合のみ表示される。このページの目的は、ユーザが、共有するために選択されている項目を調べることを可能にし、ユーザが、リストを修正することを可能にすることである。言い換えると、ユーザが、複数の項目を選択し、次いで、共有タスクを選択した場合、共有ヘルパルーチンが起動され、ユーザは、リストメーカ統合共有ページを提示される。このページは、選択されている項目のリストをユーザに示し、ユーザが、追加項目をリストに追加しリストから削除することを可能にする。一実施形態では、リストビューの列は、項目名、順序、サイズ、およびキャプションを示すことができる。ブロック５９１０のヘルパページ１から、ユーザは、次ページボタン５９１１を選択して、ブロック５９２０のヘルパページ２に移ることができる。
【０１３９】
ブロック５９２０で、「ＥＦＳ／ＤＲＭチェック」用のヘルパページ２が提供される。一実施形態では、このページは、ユーザによって選択された項目の１つまたは複数が、ＥＦＳまたはＤＲＭによって保護される場合のみ表示される。このページの目的は、ユーザに、共有している内容が、ＥＦＳまたはＤＲＭによって保護されていることを知らせ、ユーザに、内容の共有を依然として試みたいかどうか尋ね、どのようにして内容を共有したいかについての選択肢を提供することである。このページにおいて、ファイルがＥＦＳで暗号化されている場合、ユーザは、ファイルをＥＦＳで暗号化されたままにしておくか、ヘルパルーチンに、暗号化されたファイルへのアクセス権を被共有者に与えることを試みさせるか、ヘルパルーチンに、項目から暗号を解除させるか選択することができる。ブロック５９２０のヘルパページ２から、ユーザは、戻りボタン５９２１を選択して、ブロック５９１０のヘルパページ１に戻ることもでき、次ページボタン５９２２を選択して、ブロック５９３０のヘルパページ３へ続けることもできる。
【０１４０】
ブロック５９３０で、「人の選択／アクセス許可」用のヘルパページ３が提供される。一実施形態では、このページは、常に表示され、ヘルパルーチンのメインページである。このページから、ユーザは、内容を共有させたい人、共有しているユーザに与えたいアクセス許可を選択することができる。一実施形態では、ただ１つの項目が共有されている場合は、その項目用のアイコンが表示され、複数の項目が共有されている場合は、スタックが表示される。一実施形態では、「名前をタイプ入力し、リストに追加をクリックしてください」で示されるアイコンをユーザがクリックすることによって、ヘルパページ３は入られ得る。ユーザは、名前を行の中にタイプ入力すると、「リストに追加」アイコンをクリックして、項目を共有させたいユーザのリストに被共有者を追加する。一実施形態では、「自動提案」ドロップダウンメニューが、ユーザ用の個人の連絡先ストア、ならびにＳＩＤがある、最近使ったすべての連絡先のキャッシュから、人々を含めることができる。一実施形態では、自身のマシン上にいる他の人々、ならびに自身のドメインまたはキャッスル（ｃａｓｔｌｅ）にいる他の人々をユーザが選ぶことを可能にする、ボタンによって利用可能なモード方式のアドレス帳がある。ユーザは、１人または複数の人またはグループを選択することができる。一実施形態では、被共有者テーブルの右側の列が、被共有者それぞれに対するアクセス許可を共有者が設定することを可能にする。さらに、様々なアクセス許可の選択肢は、読取り、編集、所有、およびアクセス権削除などのレベルを含み得る。デフォルトのアクセス許可は、読取りレベルでよい。被共有者を削除するために、一実施形態では、ユーザは、選択された被共有者をリストから消去するだけでよい。ブロック５９３０のヘルパページ３から、ユーザは、戻りボタン５９３１を選択してブロック５９２０のヘルパページ２に戻ることもでき、高度な共有ボタン５９３２を選択してブロック５９４０のヘルパページ４へ続けることもでき、共有ボタン５９３３を選択してブロック５９５０のヘルパページ５へ続けることもできる。
【０１４１】
ブロック５９４０で、「高度な共有」用のヘルパページ４が提供される。一実施形態では、このページは、ユーザが、高度な共有オプションボタン５９３２を選択した場合のみ表示される。一実施形態では、高度な共有オプションは、使用されているファイル共有の名称の変更、共有対象への接続数の制限の設定、共有対象へのキャッシュ動作の設定、および予め定義されている役割だけでなく、ユーザ向けのカスタムＡＣＬの設定などを含み得る。ヘルパページ４から、ユーザは、戻りボタン５９４１または次ページボタン５９４２を選択して、ブロック５９３０のヘルパページ３に戻ることができる。
【０１４２】
ブロック５９５０で、「共有の進行状況」用のヘルパページ５が提供される。一実施形態では、このページは、進行状況ページとして常に表示される。このページの目的は、ユーザのコンピュータが、要求された項目を共有させるための作業を行っている間、進行状況を示す。一実施形態では、このページは、項目を共有するための動作が、指定された時間（例えば２秒）より長くかかる場合のみ表示される。言い換えると、ユーザが、自分の選択内容を確認し、ブロック５９３０のヘルパページ３から共有ボタン５９３３を選ぶと、セキュリティサブシステムが、項目に対するセキュリティを設定し、必要な共有を実行する。これは、ほとんどの単純な階層にとっては迅速な処理であるが、より時間のかかる処理に対して、ブロック５９５０の「共有の進行状況」用のヘルパページ５が表示され得る。概して、このページは、システムは動作中であることを示し、システムに関して起こっていることを具体的に示すことができる視覚的な手がかり（例えばアニメーション）の提供を意図している。ブロック５９５０のヘルパページ５から、ユーザは、キャンセルボタン５９５１を選択してブロック５９６０のヘルパページ６へ進むこともでき、次ページボタン５９５２を選択してブロック５９７０のヘルパページ７へ進むこともできる。
【０１４３】
ブロック５９６０で、「共有のキャンセル」用のヘルパページ６が提供される。このページは、ユーザが、共有操作をキャンセルするために、ブロック５９５０のヘルパページ５においてキャンセルボタン５９５１をクリックすると表示される。キャンセルボタンのクリックは、要求された項目を共有するための操作を停止させる。一実施形態では、ユーザが、共有処理をキャンセルすると、共有設定の適用が終了しなかったことをユーザに伝えるための確認ダイアログが提供される。
【０１４４】
ブロック５９７０で、「確認／通知」用のヘルパページ７が提供される。一実施形態では、このページは、確認および通知ページとして常に表示される。このページの目的は、項目が正常に共有されたこと、およびエラーがあったかどうかをユーザに伝え、かつユーザが、被共有者に適切な通知を送ることを可能にすることである。一実施形態では、ユーザは、リンクをクリックすることによって、被共有者に勧誘を送ることを選ぶことができる。一実施形態では、勧誘が選択されると、デフォルトのメールクライアントを用いて通知が送られる。一実施形態では、共有が変更されると、共有に追加された新たな人々だけが、ｅメール通知に予め投入され、共有が削除されると、メッセージは送信されない。ｅメール通知が送信されるとき、この通知は、受信者が勧誘／通知を理解するのを助けるための共有項目またはフォルダならびにテキストへのパスを含む。例えば、「あなたと項目を共有したので、ネットワークを介して項目にアクセス可能です。共有項目を入手するには、Ｘをクリックするか、ブラウザでＸと入力してください」などである。ヘルパページ７は、システムが、要求された項目を共有することができない場合に起こり得るエラーを表示するのにも使われる。
【０１４５】
本発明の好ましい実施形態が例示され説明されたが、本発明の精神および範囲から逸脱することなく、様々な変更が行われ得ることが理解されよう。
【図面の簡単な説明】
【０１４６】
【図１】本発明の実施形態を実装するのに適した汎用コンピュータシステムを示すブロック図である。
【図２】仮想フォルダシステムを示すブロック図である。
【図３】ユーザが、選択されたファイルおよびフォルダを引き出すクエリを提供するルーチンを示すフロー図である。
【図４】デフォルトのクエリまたはユーザからのクエリのどちらかに従って、仮想フォルダが構成され画面上に表示されるルーチンを示すフロー図である。
【図５】ハードドライブ上の物理的なフォルダ配置によるフォルダ構造を示すツリー図である。
【図６】仮想フォルダ構造を示すツリー図である。
【図７】クライアントスタックが、コントラクトおよび年によってさらにフィルタリングされている、図６の仮想フォルダ構造を示すツリー図である。
【図８】クライアントスタックのコントラクトが、年によってさらにフィルタリングされている、図７の仮想フォルダ構造を示すツリー図である。
【図９】コントラクトスタックがクライアントおよび年によってさらにフィルタリングされ、クライアントが年によってさらにフィルタリングされている、図６の仮想フォルダ構造を示すツリー図である。
【図１０】ドキュメントライブラリのスタックを表示するスクリーン表示を示す図である。
【図１１】図１０のＡＢＣ  Ｃｏｒｐ．スタック中のドキュメントを表示するスクリーン表示を示す図である。
【図１２】図１１のドキュメントに対してスタック機能が選択されているスクリーン表示を示す図である。
【図１３】図１２のスタック機能に対して、「作成者でスタックする」というパラメータが選択されているスクリーン表示を示す図である。
【図１４】図１３のファイルが、作成者によってスタックされているスクリーン表示を示す図である。
【図１５】図１４のファイルをスタックし直すために、スタック機能が選択され、「カテゴリでスタックする」という選択肢がさらに選択されているスクリーン表示を示す図である。
【図１６】図１４のファイルが、カテゴリによってスタックし直されたスクリーン表示を示す図である。
【図１７】物理フォルダを表示するクイックリンクが選択されているスクリーン表示を示す図である。
【図１８】図１７の仮想フォルダスタックのファイルを含む物理フォルダが選択されているスクリーン表示を示す図である。
【図１９】ユーザが、仮想フォルダを直接操作することができるルーチンを示すフロー図である。
【図２０】新規の「Ｗｅｓｔ  Ｃｏａｓｔ」スタックが図１０のスタックに追加されたスクリーン表示を示す図である。
【図２１】図２０の「ＡＢＣ  Ｃｏｒｐ．」スタックから「Ｗｅｓｔ  Ｃｏａｓｔ」スタックにファイルをコピーするのに、直接処理が用いられるスクリーン表示を示す図である。
【図２２】システムが、新規フィルタ項を動的に生成するルーチンを示すフロー図である。
【図２３】システムが、フィルタ項の選択に基づいて項目をフィルタリングするルーチンを示すフロー図である。
【図２４】図１０のスタックが、項「ＡＢ」によってフィルタリングされたスクリーン表示を示す図である。
【図２５】図１０のスタックが、項「ＡＢＣ」によってフィルタリングされたスクリーン表示を示す図である。
【図２６】図１０のスタックに対して、フィルタ項「２００２年」が選択されているスクリーン表示を示す図である。
【図２７】図１０のスタックが、「２００２年」によってフィルタリングされ、フィルタ項「月」をさらに選択したスクリーン表示を示す図である。
【図２８】フィルタリング用の月を選択するリストが提示されるスクリーン表示を示す図である。
【図２９】図２８のスタックが、１月という月によってさらにフィルタリングされ、「日付」というフィルタ項をさらに表示するスクリーン表示を示す図である。
【図３０】新規クイックリンクを作成するルーチンを示すフロー図である。
【図３１】図２９のフィルタリングに基づいて、「１月の作業」と呼ばれる新規クイックリンクを作成するスクリーン表示を示す図である。
【図３２】「すべての作成者」というクイックリンクが選択されているスクリーン表示を示す図である。
【図３３】図３２の作成者すべてからなるリストが提示されるスクリーン表示を示す図である。
【図３４】図３３のリストから、「作成者１」が選択され、作成者１のドキュメントすべてが表示されるスクリーン表示を示す図である。
【図３５】新規ライブラリを作成するルーチンを示すフロー図である。
【図３６】様々な使用可能ライブラリからなるコレクションが表示されるスクリーン表示を示す図である。
【図３７】仮想フォルダコレクションのスコープを定義するルーチンを示すフロー図である。
【図３８】仮想フォルダコレクションのスコープを形成することができる様々なソースを示すブロック図である。
【図３９】仮想フォルダコレクションに非ファイル項目を含めるルーチンを示すフロー図である。
【図４０】仮想フォルダに含められた様々な非ファイル項目を表示するスクリーン表示を示す図である。
【図４１】静的リストおよび１組の参照項目を含むメモリシステムを示すブロック図である。
【図４２】静的リストを共有するルーチンを示すフロー図である。
【図４３】静的リストから削除／追加された項目にアクセス許可をし直すルーチンを示すフロー図である。
【図４４】動的リストを作成するルーチンを示すフロー図である。
【図４５】動的リストおよび１組の参照項目を含むメモリシステムを示すブロック図である。
【図４６】動的リストを共有するルーチンを示すフロー図である。
【図４７】動的リストから削除／追加された項目にアクセス許可をし直すルーチンを示すフロー図である。
【図４８】項目が削除された動的リストを含むメモリシステムを示すブロック図である。
【図４９】項目が追加された動的リストを含むメモリシステムを示すブロック図である。
【図５０】共有ＡＰＩを呼び出すルーチンを示すフロー図である。
【図５１Ａ】ファイル共有システムにおいて使用されるプログラミングインターフェースの様々な実装形態を示すブロック図である。
【図５１Ｂ】ファイル共有システムにおいて使用されるプログラミングインターフェースの様々な実装形態を示すブロック図である。
【図５１Ｃ】ファイル共有システムにおいて使用されるプログラミングインターフェースの様々な実装形態を示すブロック図である。
【図５１Ｄ】ファイル共有システムにおいて使用されるプログラミングインターフェースの様々な実装形態を示すブロック図である。
【図５１Ｅ】ファイル共有システムにおいて使用されるプログラミングインターフェースの様々な実装形態を示すブロック図である。
【図５１Ｆ】ファイル共有システムにおいて使用されるプログラミングインターフェースの様々な実装形態を示すブロック図である。
【図５１Ｇ】ファイル共有システムにおいて使用されるプログラミングインターフェースの様々な実装形態を示すブロック図である。
【図５１Ｈ】ファイル共有システムにおいて使用されるプログラミングインターフェースの様々な実装形態を示すブロック図である。
【図５１Ｉ】ファイル共有システムにおいて使用されるプログラミングインターフェースの様々な実装形態を示すブロック図である。
【図５１Ｊ】ファイル共有システムにおいて使用されるプログラミングインターフェースの様々な実装形態を示すブロック図である。
【図５１Ｋ】ファイル共有システムにおいて使用されるプログラミングインターフェースの様々な実装形態を示すブロック図である。
【図５１Ｌ】ファイル共有システムにおいて使用されるプログラミングインターフェースの様々な実装形態を示すブロック図である。
【図５２】項目を共有するルーチンを示すフロー図である。
【図５３】選択された被共有者が、共有されるように選択された項目にアクセスできるようにするルーチンを示すフロー図である。
【図５４】項目がアクセスされ得るためのファイル共有が存在することを検証するルーチンを示すフロー図である。
【図５５】ＡＣＬおよび他のいずれかのアクセス許可が設定されていることを検証するルーチンを示すフロー図である。
【図５６】ＥＦＳおよびＤＲＭに伴うどの問題も解決するルーチンを示すフロー図である。
【図５７】ファイアウォールを構成するルーチンを示すフロー図である。
【図５８】トランザクションデータを記録するルーチンを示すフロー図である。
【図５９】共有ヘルパルーチンのページの間のナビゲーションを示すブロック図である。
【図１】
2007509435.tif 000003
【図２】
2007509435.tif 000004
【図３】
2007509435.tif 000005
【図４】
2007509435.tif 000006
【図５】
2007509435.tif 000007
【図６】
2007509435.tif 000008
【図７】
2007509435.tif 000009
【図８】
2007509435.tif 000010
【図９】
2007509435.tif 000011
【図１０】
2007509435.tif 000012
【図１１】
2007509435.tif 000013
【図１２】
2007509435.tif 000014
【図１３】
2007509435.tif 000015
【図１４】
2007509435.tif 000016
【図１５】
2007509435.tif 000017
【図１６】
2007509435.tif 000018
【図１７】
2007509435.tif 000019
【図１８】
2007509435.tif 000020
【図１９】
2007509435.tif 000021
【図２０】
2007509435.tif 000022
【図２１】
2007509435.tif 000023
【図２２】
2007509435.tif 000024
【図２３】
2007509435.tif 000025
【図２４】
2007509435.tif 000026
【図２５】
2007509435.tif 000027
【図２６】
2007509435.tif 000028
【図２７】
2007509435.tif 000029
【図２８】
2007509435.tif 000030
【図２９】
2007509435.tif 000031
【図３０】
2007509435.tif 000032
【図３１】
2007509435.tif 000033
【図３２】
2007509435.tif 000034
【図３３】
2007509435.tif 000035
【図３４】
2007509435.tif 000036
【図３５】
2007509435.tif 000037
【図３６】
2007509435.tif 000038
【図３７】
2007509435.tif 000039
【図３８】
2007509435.tif 000040
【図３９】
2007509435.tif 000041
【図４０】
2007509435.tif 000042
【図４１】
2007509435.tif 000043
【図４２】
2007509435.tif 000044
【図４３】
2007509435.tif 000045
【図４４】
2007509435.tif 000046
【図４５】
2007509435.tif 000047
【図４６】
2007509435.tif 000048
【図４７】
2007509435.tif 000049
【図４８】
2007509435.tif 000050
【図４９】
2007509435.tif 000051
【図５０】
2007509435.tif 000052
【図５１Ａ】
2007509435.tif 000053
【図５１Ｂ】
2007509435.tif 000054
【図５１Ｃ】
2007509435.tif 000055
【図５１Ｄ】
2007509435.tif 000056
【図５１Ｅ】
2007509435.tif 000057
【図５１Ｆ】
2007509435.tif 000058
【図５１Ｇ】
2007509435.tif 000059
【図５１Ｈ】
2007509435.tif 000060
【図５１Ｉ】
2007509435.tif 000061
【図５１Ｊ】
2007509435.tif 000062
【図５１Ｋ】
2007509435.tif 000063
【図５１Ｌ】
2007509435.tif 000064
【図５２】
2007509435.tif 000065
【図５３】
2007509435.tif 000066
【図５４】
2007509435.tif 000067
【図５５】
2007509435.tif 000068
【図５６】
2007509435.tif 000069
【図５７】
2007509435.tif 000070
【図５８】
2007509435.tif 000071
【図５９】
2007509435.tif 000072
【国際調査報告】
2007509435.tif 000073