Tagsistantセマンティックファむルシステム

こんにちは ハブには既にTagsistantに捧げられた資料がありたしたが、私には䞀貫性がなく䞍完党であるように思われたした。 別の方法でそれを提瀺するこの詊みは、英語のマニュアルず私自身の芳察からの短い絞りです。



Tagsistantプロゞェクトは、その䜜成、tagfsを䞀般的な傟向に埓っお配眮したす。 圌らはむンタヌネットを段階的にセマンティックトラックに倉換しようずしおいたす。プロゞェクトの䜜者によるず、ファむルシステムは時代遅れの原則に基づいおいたす-階局、ディレクトリ、 それだけです。

そしお原則ずしお、私は圌らに䜕かに同意したす。 数癟枚の写真があり、そのうちのいく぀かはケルンで撮圱され、他は日没で撮圱され、3枚目は女の子、4枚目は2010幎に撮圱されたず想像しおください。 次の操䜜を実行するずしたす。2010幎に撮圱されたものを陀く、ケルンで日没時に撮圱された写真のリストをガヌルフレンドず䞀緒に取埗したす。

はい、おそらく誰かが蚀うでしょう、たずえば、 Koeln、sunset、girls、2010などのディレクトリを䜜成し、それらにファむルぞの゜フトリンクを送信できたす...そのようなものですが、リク゚ストをコンパむルするのに必芁な柔軟性ず利䟿性を提䟛したすただし䞊蚘の䟋の解決策になりたすか

はい、EXIFタグを䜿甚しおみおください。 しかし、カメラは写真の䞭の女の子の存圚やあなたの想像力によっお制限される他の基準を圌らに瀺したせん。 そしお、それが写真に぀いおではなく、 レポヌトに぀いおですか

setattr \ getattrを䜿甚しお、ext4を䜿甚しおファむル属性に固有のタグを蚘述しようずするこずができたす-少なくずも、ファむルのタグ付けの問題でこのような文を芋たしたが、詊しおいたせん。 しかし、これはうたくいくずしおも、䞭途半端な決定でもありたす。

私のニヌズに基づいお思い぀くこずができる本圓の皮の䟋。 私は、ダりンロヌドに保存され、埌でテストされた実際には、1぀ではない膚倧な量の異なる画像ゞャンクを含むフォルダヌを持っおいたす。 この埋め立お地から、キ゚フで䜜られたビヌルの画像が含たれ、2012幎以前に䜜られたフォヌラムの女の子の写真のリストを取埗したいず思いたす。 圌らず䞀緒に、私が持っおいるすべおのフォヌラム管理者の画像を取埗したい

$ ls〜/ tagsistant / store / forum / girls / beer / = Kyiv / time/ year / lt / 2012 / + / admin / @ /






tagfsが提䟛するものを怜蚎しおください。



最初は、ファむル、ディレクトリ、デバむス、さらにはパむプにタグを付けるこずです 。 2぀目は、タグ間の関係です。タグには、include、exclude、equivalent、requireがありたす。 ファむルは/ archive技術ディレクトリに保存され、タグは/ tagsに保存され、 タグに䞀臎するファむルは/ storeディレクトリに保存されたす。 合蚈ディレクトリ6

゚むリアス/アヌカむブ/関係/統蚈/ストア/タグ/



可胜な限り倚くのタグを含めるこずができたす合理的な制限内。 ファむルにタグを付けるための構文は次のずおりです。

$ ln -s〜/ foto1.jpg〜/ tagsistant / store / koeln / wife / sunset / @


写真は、「ケルン」、「劻」、「日没」の3぀の独立したタグのセットに垰属したす。 これで、この写真は、これらのタグのいずれかの遞択、およびそれらの任意の組み合わせに分類されたす。



なぜln -sで、最埌に「埌背䜍」なのでしょうか たず、なぜですか ファむル自䜓が既に存圚し、ファむルずタグの間に察応関係を䜜成するだけで、ファむル党䜓をコピヌし、コピヌするためにより倚くのスペヌスず時間がかかるのはなぜですか

次に、 @蚘号は䞀連のタグの終わりを瀺すマヌカヌずしお機胜したす。 パス内のTagsistantはtagfsのマりントポむントを指し 、 ストアディレクトリはファむルをタグに盎接関連付けおアクセスするために䜿甚されたす。 さらにすべおは、ファむルに関連付けられた䞀連のタグです。 ここで、タグの異なるセットでさらに10個のファむルを远加したず想像しおください。䞀郚には/ wife / sunsetのみ、その他には/ koeln / wifeなどが含たれたす これで、さたざたな遞択を行うこずができたす。

$ ls tagsistant / store / koeln / @ /

結果ケルンで撮圱されたすべおの写真

$ ls tagsistant / store / koeln / wife / @ /

結果ケルンで撮圱した劻のすべおの写真

$ ls tagsistant / store / koeln / wife /-/ sunset / @ /

結果同じ、「日没」の写真を陀く




なぜすべお同じトヌクン@ですか しかし、なぜ

fbi コン゜ヌルビュヌアヌ、写真を開きたす tagsistant / store / koeln / sunset / @ / タグのセットを指定しお完了 foto2.jpg 指定したタグに察応する写真のセットから特定のファむルを指定


ファむルシステムサヌビスは、タグがどこにあり、ファむル名が既にどこにあるかを他にどのように刀断したすか..



オペレヌタヌ



+、-挔算子および䞭括匧を䜿甚しお、より耇雑な遞択を行うこずができたす。 䟋

$ ls〜/ tagsistant / store / koeln / + / sunset / @ /

結果ケルンの写真ず日没の写真。 これらのタグの重ね合わせではなく日没時にケルンで撮圱された写真、2぀の異なるサンプル1日の任意の時間にケルンの写真ず絶察に任意の堎所で撮圱された日没の写真の合䜵です。


$ ls〜/ tagsistant / store / koeln /-/ sunset /-/ wife / @ /

同様に、日没で撮圱されたものを陀き、ケルンのすべおの写真。 そしお劻も、釣りの写真だけが必芁です。 :)


 + +融合挔算子はたったく同じように機胜したす。各挔算子は埌続のタグを1぀だけ参照するため、3぀のタグの融合をマヌゞするには2぀の挔算子が必芁です。

䞭括匧はタグをグルヌプ化するために䜿甚されたす。 3セットのファむルを遞択する必芁があるずしたす。 最初のセットは「スタヌりォヌズ」ず「むメヌゞ」ずしお、2番目は「スタヌりォヌズ」ず「音楜」ずしお、3番目は「スタヌりォヌズ」ず「ビデオ」ずしお同時にテストされたす。 マヌゞ挔算子を䜿甚するず、これは次のように衚珟できたす。

$ ls〜/ tagsistant / store / starwars / image / + / starwars / music / + / starwars / video / @ /


しかし、それは良いです

$ ls〜/ tagsistant / store / starwars / {/ image / music / video /} / @ /




より高床な䜿甚䟋には、次のク゚リ䟋が含たれたす。

$ ls〜/ myfiles / store / {/ starwars / startrek /} / {/画像/音楜/ビデオ/} / @ /


これにより、2぀の異なる映画に関連するすべおの写真、音楜、およびビデオのセレクションが提䟛されたす。 グルヌプ化せずに䜜成された同等のク゚リは次のようになりたす。

$ ls〜/ tagsistant / store / starwars / image / + / starwars / music / + / starwars / video / + / startrek / image / + / startrek / music / + / startrek / video / @ /


グルヌプ化されたタグには他のグルヌプを含めるこずはできたせんタググルヌプでできないのは、それらをネストするこずだけです 。 たた、ブラケットのペアを芳察し、それらを閉じるこずを忘れないでください。



ファむルタグずALLメタタグの列挙



自然に期埅されるもう1぀の機胜は、ファむルに関連付けられおいるすべおのタグを䞀芧衚瀺するこずです。 それを取埗するには、 catコマンドを䜿甚しお、サフィックス".tags"が付いたファむルにアクセスする必芁がありたす。 このように

$ cat tagsistant/store/koeln/@/photo1.jpg.tags

ケルン

劻

日没

画像


これは、ファむルに関連する少なくずも1぀のタグを芚えおいる堎合です。 そうでない堎合、メモリは完党に消えたしたか グロヌバルメタタグALL /は圹立ちたす。 結果は同じです。

$ cat tagsistant/store/ALL/@/photo1.jpg.tags




ALLメタタグはtagfsに含たれるファむルの完党なリストを提䟛し、たずえば、埓来の階局システムのようにストアフォルダヌの再垰凊理が機胜しないため、 すべおのファむルの自動凊理などに圹立ちたす。 たたは、䞊蚘のように、特定のファむルにタグを付けたこずを芚えおいたすが、そのタグは芚えおいたせん。 それらのリストを衚瀺するには、共通のメタタグを䜿甚したす。



トリプル耇合タグ



おそらく、フラットタグで終わり、名前空間ずトリプルタグに移る時が来たのでしょう。 前の䟋は優れた柔軟性を瀺しおいたしたが、䞀定の制限がありたす。 私は自分の自転車を発明せず、マニュアルの䟋を取り䞊げたす。幎ごずに差別化したタグを導入したいずしたしょう。 これを実装するにはどうすればよいですか 2000 、 year_2000などのタグを䜜成したす。 各幎のタグで。 これにより、タグディレクトリが乱雑になり、さらにタグ名が衝突する可胜性がありたす。

構造化ず䜿いやすさを远求したtagfsのタグ開発の第2レベルは、次のような3぀の芁玠のタグの構成で衚されたす。

名前空間-キヌ-倀


名前空間は、含たれるキヌず倀のペアのセマンティックアフィリ゚ヌションを蚘述し、非垞に䞀般的な堎合がありたす 。たずえば、特定の䟋では、名前空間 timeを䜿甚できたす。 キヌは幎のように芋えたすが、特定の数倀は倀の 3番目の芁玠に含たれたす 。

実際の䜿甚では、耇合タグに別の芁玠がありたす operator 挔算子のリストから、それらの圹割が明らかになりたす eq 等しい、 inc 含む、 gt より倧きい、 lt より小さい。 したがっお、耇合タグの完党なスキヌムは次のようになりたす。

名前空間/キヌ/挔算子/倀/


名前空間の埌のコロンに泚意しおください。これは必須であり、このスペヌスを定矩するだけの圹割を果たしたす。



したがっお、タグディレクトリを乱雑にするこずなく、写真を幎、月などで分類するこずもできたす。 2010幎8月にケルンで撮圱されたケルンのタグの写真を䜿甚しお、ディレクトリ内のすべおの写真に垰属するず、次のようになりたす。

$ ln -s〜/ Koeln_fotos / *。jpg〜/ tagsistant / store / photos / koeln / time/ year / eq / 2010 / time/ month / eq / August / @ /


埌日、2010幎に撮圱されたすべおの写真を怜玢し、その䞭からケルンの写真を芋るこずができるようになりたす。

$ ls〜/ tagsistant / store / photos / time/ year / eq / 2010 / @ /


システムは、ファむルメタデヌタに基づいた自動タグ付けの基瀎も築きたしたが、通垞のメタデヌタほずんどの堎合、これらは写真ですを含む䞀連のファむルがないため、実際にはテストできたせんでした。 マニュアルでは、構成iniファむルを線集するこずにより、メタデヌタから抜出される情報に圱響する正芏衚珟を構成できるず述べおいたす。 システムがファむル拡匵子に基づいお自動タグも远加するず䟿利です。たずえば、すべおのjpeg-png-gifに察しお、画像タグ、mp3-flac-音楜などを提䟛したす。 そのような機胜がプロゞェクトに組み蟌たれおいるかどうかはただ明らかではありたせん。おそらく、そのような機胜を持぀独自のプラグむンを䜜成できたす。



関係に぀いお



それらの4぀だけがありたす include、exclude、is_equivalent 、 requires 。 暙準マニュアルには、それぞれの詳现な説明はありたせん。 䟋は1぀だけです。

$ mkdir〜/ tagsistant / relations / TAG1 / includes / TAG2 /


このような関係を䜜成した埌、 TAG1ぞの芁求は、タグTAG1ずTAG2の䞡方を持぀ファむルのリストを生成したす。 実際の䜿甚䟋-imagesタグには写真が含たれたす 。 2014幎のロンドン旅行䞭に、いく぀かの写真を撮り、同時にむンタヌネットからいく぀かの写真をダりンロヌドしたずしたす。 それらのいく぀かはbashorgのコミックであり、䞀郚は壁玙です。 ある時点で、その期間のロンドン/ London / photos /の写真を壁玙/ images /ず䞀緒に芋たいず思っおいたしたが、挫画/ comics /で時間を無駄にしたくありたせんでした。 次に、ク゚リは次のようになりたす。

$ ls〜/ tagsistant / store / London / images / time/ year / eq / 2014 /-/ comics / @ /




陀倖は安定しおいお明癜です。 セットAに はセットBが 含たれ 含たれ、セットBにはCが含たれたせん。 ここで、 fileA タグA 、 fileB タグB およびfileC タグBおよびC の3぀のファむルがある堎合、タグAのリク゚ストはfileAおよびfileBを返し 、 fileCは怜玢から陀倖されたす。 fileCは、 Cタグに盎接アクセスするこずによっおのみ取埗できたす。

ク゚リ/ストア/ A / + / B /-/ C / @ /も同様に機胜したす。 関係により、長期的な関係を確立し、問い合わせを枛らすこずができたす。



暙準マニュアル以倖の゜ヌスからは、 is_equivalentリレヌションが最も明癜でシンプルな機胜を持っおいるこずが明らかになりたす。掚論のブロックから芋るず、あるタグを別のタグず同等にしたす。 そのような䟋がありたしたビヌトルズはthe_beatlesず同等になり、2番目の䟋は、誰かがmy_homeのようなボトムラむンを䜿甚するタグを奜たないかもしれないずいう掚論の背景にmy_homeをmy \ homeず同等にしたした。 なぜ-それは明確ではありたせん。 これは私の意芋です。



必芁ずする最も明癜なこずは、ファむルシステム階局内の1぀のタグを別のタグ内に隠すこずです。 ぀たり、たずえば、次を実行する堎合

$ mkdir〜/ tagsistant / relations / TAG1 / require / TAG2 /

$ ln -s〜/ somefile.txt〜/ tagsistant / store / TAG1 / @ /


その埌、タグTAG1でsomefile.txtにアクセスできるようになりたすが、 ストアディレクトリのタグリストにはTAG1は衚瀺されたせん。TAG2/内に非衚瀺になりたす。

$ ls〜/ tagsistant / store /

+ /-/ @ / @@ / ALL / TAG2 {/

$ ls〜/ tagsistant / store / TAG2 /

+ /-/ @ / @@ / ALL / TAG1 {/

$ ls〜/ tagsistant / store / TAG1 / @ /

somefile.txt アクセスは必芁なタグを通過したすが、この階局レベルではありたせん。 ただし、ここの階局はあたり機胜しおいたせん...

$ cat ~/tagsistant/store/ALL/@/somefile.txt.tags

TAG1 ぀たり、ファむルには1぀のタグのみがタグ付けされたす


これらのタグ間の関係が存圚しない堎合、TAG1は最䞊䜍のstore /ディレクトリに含たれたす。 これたでのずころ、この関係の深い存圚論的意味は私には届いおいたせん。 䞍十分な説明では、実際には描かれおいたせん。

UPDプロゞェクトのChangeLogで、 requiredず呌ばれる新しい関係に぀いおの蚀及を芋぀けたした。 文字通り、そこは次のように蚀われおいたす英語からの翻蚳 

「必須」関係が導入されたした。 タグSにタグMが必芁な堎合、タグMは、タグMがリク゚ストの最埌の䜍眮に含たれおいる堎合にのみ衚瀺されたす。䟋

店舗/ M /

店舗/ P / Q / + / M /


ただし、以䞋には衚瀺されたせん。

店舗/ P /

店舗/ P / + / Q /


この関係の目的は、タグを階局構造に敎理しお、ルヌトディレクトリの混乱を防ぐこずです。 ある皋床、名前空間の機胜を補完したす。


正盎なずころ、明確さはありたせんでした。 少なくずも、説明されおいる動䜜は確認しおいたせん。 たぶん私は䜕かを理解しおいたせん。



ホむヌルの重耇排陀ずその他のスティック



重耇排陀は、同じファむルがファむルシステムで2぀の異なるiノヌドを䜿甚するのを防ぐメカニズムです。 これは、フラグずしお空の䞀時ファむルを䜜成するゞョヌクはここでは機胜しないこずを意味したすが、これは必芁ではありたせん-これは補助的な専甚システムです。

次のようになりたす。

$ touch〜/ tagsistant / store / tag1 / @ / tempfile1

$ touch〜/ tagsistant / store / tag2 / @ / tempfile2

$ touch〜/ tagsistant / store / tag2 / @ / tempfile3


これらの操䜜の結果は、タグtag1ずtag2が割り圓おられたtempfile1のみになりたす。 他の2぀のファむルを䜜成しようずするず、コンテンツの怜蚌が行われたす。最初のファむルず同じファむルがありすべお等しく空です、最埌のペアに割り圓おられたタグは同じ名前の最初のファむルに割り圓おられたす。



掚論システムの無効化思考のブロック



@蚘号を䜿甚したリク゚スト内の䞀連のタグの完了は、前述のブロックを「オン」にし、すべおのリク゚ストロゞックを完了するように匷制したす。2぀の文字@@ 「オフ」を䜿甚したす。 いく぀かの堎合に圹立ちたす。その䞭には、個別のファむル操䜜ず、関係を䌎わないタグに関連付けられたセットの衚瀺がありたす。 たずえば、タグAにタグBが含たれおいる堎合、タグAぞの芁求に応じお、システムは䞡方のセットを衚瀺したす。 同様のリク゚ストで囚人をオフにするず、セットAのみが取埗されたす。

$ ls〜/ tagsistant / store / A / @ /

Afile1 Afile2 Bfile1

$ ls〜/ tagsistant / store / A / @@ /

Afile1 Afile2




゚むリアス



おなじみのタグチェヌンは、 =で瀺される短い゚むリアスで非衚瀺にできたす。 ゚むリアスに関連付けられたク゚リチェヌンはそのたた眮き換えられるため、結果ずしおいく぀かのトリックが発生する可胜性がありたす。 ゚むリアスは、関連付けられたク゚リ文字列を含むファむルずしお゚むリアスディレクトリに保存されたす。 behemothずいう名前の゚むリアスファむルに文字列behemoth / file/ format / eq / AVI /が含たれおいるずしたす。 将来的には、より䞀般的なリク゚ストに眮き換えたす

$ ls〜/ tagsistant / store / = behemoth / time/ year / lt / 2000 / @ /


前述のキャッチは、゚むリアスに+ /挔算子が含たれおいる堎合、゚むリアスに続くク゚リの郚分党䜓が2番目の郚分にのみ適甚されるずいう事実から成りたす。 ずころで、マニュアルでは、オペレヌタヌはそれに続く1぀のタグのみを参照するず蚀われおいるため、完党に明確ではありたせん。 おそらく、情報には、別のむノベヌションの埌に曎新する時間がありたせんでした。



タグのマヌゞ



たた重芁な郚分は、蚀及するしかありたせんでした。 2぀のタグを1぀にマヌゞするには、䞀方のディレクトリの内容党䜓を他方のディレクトリに転送するだけです。 そしお、最初のものを削陀したす。

$ mv store / merged_tag / @ / * store / destination_tag / @ /

$ rmdirタグ/ merged_tag


同様に重芁な泚意。 / storeディレクトリ内の空でないフォルダを削陀しないでください 。 各タグの各ディレクトリには、他のすべおのタグそれらのディレクトリぞのリンクが含たれおいるため、1぀のタグのフォルダを削陀するず、リポゞトリ党䜓が砎壊されたす。 / storeフォルダヌ内のすべおの削陀は、完了した芁求でのみ可胜です。 思考リゟナヌのマヌカヌ@たたは@@が含たれおいる堎合、リク゚ストは完了したす。 この堎合、リク゚ストにリストされおいるタグぞのアクセスの結果ずなるファむルのみが削陀されたす。

タグを削陀するには、 / storeディレクトリではなく/ tagsディレクトリにアクセスする必芁がありたす。 このタグが割り圓おられおいるすべおのファむルはそのたた残りたすが、察応するタグは倱われたす。



組立



Tagsistantは、LinuxたたはBSDでビルドするように蚭蚈されおおり、glib2、fuse、libdbd-sqlite3、libdbd-mysql、libextractorプラグむンを備えたlibdbiラむブラリが必芁です。 デスクトップディストリビュヌションがないため、䟝存関係の半分を手動で収集したした。 同時に、Tagsistantはsqlite3ヘッダヌのみず䞀緒になりたした実際、ご芧のずおり、圌にずっおも十分ですが、ガベヌゞメッセヌゞが衚瀺されたす。 おそらく、mysqlヘッダヌなしでアセンブルしたからでした-起動埌、䜜業䞭に、 「ステヌトメントにテヌブルがありたせん」などのメッセヌゞが端末に送られたす。 暙準出力をアストラル1> / dev / nullにリダむレクトするだけで十分です。これにより、䜜業に目に芋える圱響がありたせん。



もちろん、だれかが「フォルダの階局を敎理できるのに、なぜこのバむクなのか」ずいう粟神で蚀うこずができたす。 フォルダの階局は、このような柔軟性ず利䟿性を提䟛するものではなく、思い぀いただけのリク゚ストを絶察に尋ねるこずができるず信じおいたす。 さらに、私の芳点からは、階局、リンクなどず同様の倧隒ぎが繰り返されおいたす。 写真付きの䟋が原因で誰かに偶然発生した可胜性のあるEXIFタグは、チャットアヌカむブやTagistantがタグ付けできるすべおにタグを付けるのに適しおいたせん。 システムには倚くの開発が必芁ですが、 すでに䟿利で安定しおいたす。 圌女に泚意しおください。



All Articles