(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023106304
(43)【公開日】2023-08-01
(54)【発明の名称】圧縮グラフ表記
(51)【国際特許分類】
G06F 40/242 20200101AFI20230725BHJP
H03M 7/40 20060101ALI20230725BHJP
G06F 16/901 20190101ALI20230725BHJP
G06F 16/28 20190101ALI20230725BHJP
【FI】
G06F40/242
H03M7/40
G06F16/901
G06F16/28
【審査請求】未請求
【請求項の数】15
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2022201046
(22)【出願日】2022-12-16
(31)【優先権主張番号】21306839
(32)【優先日】2021-12-17
(33)【優先権主張国・地域又は機関】EP
(71)【出願人】
【識別番号】500102435
【氏名又は名称】ダッソー システムズ
【氏名又は名称原語表記】DASSAULT SYSTEMES
(74)【代理人】
【識別番号】110000752
【氏名又は名称】弁理士法人朝日特許事務所
(72)【発明者】
【氏名】エリック ヴァレット・グレニション
(57)【要約】 (修正有)
【課題】リソース記述フレームワーク(RDF)タプルを圧縮及び/又は解凍する方法、システム、及びプログラムを提供する。
【解決手段】方法は、RDFタプルを提供し、インデックスの辞書を提供し、RDFタプル毎に、主語及び目的語に帰属するインデックスを符号化し、同じ述語を共有するRDFタプルをグループ化し、主語及び目的語の符号化を考慮することによって、RDFタプルをグループ化し、ソートされたRDFタプルのグループ毎に、共有述語のインデックスを直列化し、第1のRDFタプルの主語及び目的語の符号化を直列化し、グループの第1のRDFタプルに続くソートされたRDFタプルのグループのRDFタプル毎に、現在のRDFタプルの主語及び目的語の符号化と、前のRDFタプルの主語及び目的語の符号化との間の差分を計算し、計算された差分を可変長整数の形態で直列化する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
RDFタプルを圧縮するコンピュータ実装方法であって、
各々が主語、目的語、及び述語を有するRDFタプルを提供するステップ(S10)と、
提供されたRDFタプルの主語、目的語、及び述語のうちの1つに帰属するインデックスの辞書を提供するステップ(S20)と、
各RDFタプルについて、前記主語及び前記目的語に帰属するインデックスを符号化するステップ(S30)と、
同じ述語を共有するRDFタプルをグループ化し、グループごとに、前記主語及び前記目的語の符号化を考慮することによってRDFタプルをソートするグループ化ステップ(S40)と
を有し、
ソートされたRDFタプルのグループごとに、
共有述語のインデックスを直列化するステップ(S50)と、
並べ替えられたRDFタプルのグループの第1のRDFタプルの前記主語及び前記目的語を符号化するステップ(S60)と、
グループの最初のRDFタプルの後のソートされたRDFタプルのグループの各RDFタプルに対して、
現在のRDFタプルの前記主語及び前記目的語の符号化と、前のRDFタプルの前記主語及び前記目的語の符号化との間の差分を計算する計算ステップ(S70)と、
計算された差分を可変長整数の形成で直列化するステップ(S80)と
を有するコンピュータ実装方法。
【請求項2】
前記符号化ステップ(S30)における符号化が、モートン符号化である
請求項1に記載のコンピュータ実装方法。
【請求項3】
各グループの前記ソートされたRDFタプルが、昇順又は部分的昇順により、若しくは部分的にのみソートされる
請求項1又は2に記載のコンピュータ実装方法。
【請求項4】
前記提供されるRDFタプルの各RDFタプルがさらにグラフを含み、
前記提供されるインデックスの辞書は、提供されるRDFタプルのグラフのうちの1つに帰属するインデックスを備え、
同じ述語及び同じグラフを共有するRDFタプルに対してグループ化ステップ(S40)が行われ、
共有述語のインデックスの直列化ステップ(S50)は、共有グラフのインデックスの直列化を含む
請求項1~3のいずれか一項に記載のコンピュータ実装方法。
【請求項5】
前記主語及び前記目的語を符号化するステップ(S30)が、前記RDFタプルごとに、前記述語及び前記目的語に帰属するインデックスを符号化するステップに置き換えられ、
前記グループ化ステップ(S40)が、同じ主語を共有するRDFタプルについて行われ、
前記共有述語のインデックスの直列化ステップ(S50)が、共有主語を直列化するステップに置き換えられ、
前記ソートされたRDFタプルのグループの主語及び第1のRDFタプルの目的語の符号化を直列化するステップ(S60)が、前記述語の符号化及びソートされたRDFタプルのグループの第1のRDFタプルの前記目的語を直列化するステップに置き換えられ、
前記計算ステップ(S70)において、前記述語の符号化と現在のRDFタプルの前記目的語との間で行われる差分と、前記述語の符号化と前のRDFタプルの前記目的語との間で行われる差分とが計算される
請求項1~3のいずれか一項に記載のコンピュータ実装方法。
【請求項6】
前記主語及び前記目的語の符号化ステップ(S30)が、前記RDFタプルごとに、前記主語及び前記述語に帰属するインデックスを符号化するステップに置き換えられ、
前記グループ化ステップ(S40)が、同じ目的語を共有するRDFタプルについて行われ、
前記共有述語のインデックスの直列化ステップ(S50)が、共有目的語を直列化するステップに置き換えられ、
前記主語の符号化、及びソートされたRDFタプルのグループの第1のRDFタプルの目的語との直列化ステップ(S60)が、前記主語の符号化、及びソートされたRDFタプルのグループの第1のRDFタプルの述語とを直列化するステップにて置き換えられ、
前記計算ステップ(S70)が、前記主語の符号化と現在のRDFタプルの述語との間の差分と、前記主語の符号化と以前のRDFタプルの述語との間の差分とを計算する
請求項1~3のいずれか一項に記載のコンピュータ実装方法。
【請求項7】
前記可変長整数は、無損失圧縮でさらに圧縮される
請求項1に記載のコンピュータ実装方法。
【請求項8】
前記グループ化ステップ(S40)が、同じ述語を共有する前記RDFタプルをカウントするステップを含む
請求項1~3のいずれか一項に記載のコンピュータ実装方法。
【請求項9】
請求項1に記載の方法によって圧縮されたRDFタプルを提供するステップ(S110)と、
前記提供されたRDFタプルの主語、目的語、及び述語のうちの1つに帰属するインデックスの辞書を提供するステップ(S120)と、
前記提供されたRDFタプルのグループごとに、
共有述語のインデックスを非直列化するステップ(S130)と、
前記提供されたRDFタプルのグループの第1のRDFタプルの前記目的語及び前記目的語の符号化を非直列化するステップ(S140)と、
前記グループの最初のRDFタプルの後に提供されたRDFタプルのグループのソートされたRDFタプルごとに、
前記計算された差分を非直列化するステップ(S150)と、
現在のRDFタプルの非直列化及び計算された差分と、前のRDFタプルの非直列化及び計算された差分との間の和を計算するステップ(S160)と、
前記計算された和をデコードするステップ(S170)と、
前記非直列化された述語及び復号された和を有するRDFタプルを生成するステップ(S180)を
を有する、RDFタプルを解凍するコンピュータ実装方法。
【請求項10】
前記提供(S110)されたRDFタプルの各RDFタプルが、グラフを含み、
前記提供(S120)されたインデックスの辞書が、前記提供されたRDFタプルのグラフのうちの1つに帰属するインデックスを含み、
前記述語のインデックスを非直列化するステップ(S130)が、前記グラフのインデックスを非直列化するステップを含み、
前記RDFタプルの生成が、前記グラフの非直列化されたインデックスで行われる
請求項9に記載のコンピュータ実装方法。
【請求項11】
前記辞書を提供するステップ(S20、S120)が、前記提供されたRDFタプルの主語、目的語、述語、及び任意選択のグラフのうちの1つをインデックス化することによって辞書を生成するステップに置き換えられる
請求項1~10のいずれか一項に記載のコンピュータ実装方法。
【請求項12】
前記提供された又は前記生成された辞書が、前記述語のインデックスの提供又は生成された辞書及び前記任意選択のグラフと、前記主語及び前記対象のインデックスの提供又は生成された辞書とによって置き換えられる
請求項1~11のいずれか一項に記載のコンピュータ実装方法。
【請求項13】
請求項1~8及び/又は9~12のいずれか一項に記載の方法を実行させるための命令を含むコンピュータプログラム。
【請求項14】
請求項13に記載のコンピュータプログラムを記録したコンピュータ可読記憶媒体。
【請求項15】
請求項13に記載のコンピュータプログラムを記録したコンピュータ可読記憶媒体を含むデータベース。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、コンピュータプログラム及びシステムの分野に関し、より具体的には、リソース記述フレームワーク(RDF)タプルを圧縮及び/又は解凍するための方法、システム、及びプログラムに関する。
【背景技術】
【0002】
物体の設計、エンジニアリング及び製造のために、多数のシステム及びプログラムが市場に提供されている。CADはコンピュータ支援設計の頭字語であり、例えば、目的語を設計するためのソフトウェアソリューションに関する。CAEはコンピュータ支援エンジニアリングの頭字語であり、例えば、将来の製品の物理的挙動をシミュレートするためのソフトウェアソリューションに関連する。CAMはコンピュータ支援製造の頭字語であり、例えば、製造処理及び動作を定義するためのソフトウェアソリューションに関する。このようなコンピュータ支援設計システムでは、技術の効率の点でグラフィカルユーザーインターフェイスが重要な役割を果たす。これらの技術は、製品ライフサイクル管理(PLM)システム内に組み込まれてもよい。PLMとは、企業が製品データを共有し、共通の処理を適用し、企業知識を活用して、長期的な企業のコンセプトを越えて、コンセプトから生涯にわたる製品の開発に役立てることを支援するビジネス戦略のことをいう。(CATIA、ENOVIA及びDELMIAの商標で)ダッソーシステムズによって提供されるPLMソリューションは、製品工学知識を編成するエンジニアリングハブと、製造工学知識を管理する製造ハブと、エンタープライズハブ及びエンジニアリングハブ及び製造ハブの両方への接続を可能にする企業ハブとを提供する。全体として、システムは最適化された製品定義、製造準備、生産、及びサービスを駆動する動的な知識ベースの製品作成及び意思決定サポートを可能にするために、製品、プロセス、リソースをリンクするオープン目的語モデルを提供する。
【0003】
これらのアプリケーションは、異なるソリューションを探索する能力をユーザに提供する「クリエイティブ・オーサリング・アプリケーション」の例であり、インクリメンタル・メソッドを使用して、自分のワークの異なる状態を保存し、アクセスすることによって問題を解決し、ユーザ間でデータを共有することによって互いから隔離して作業を交互に行う。編集の履歴を記憶し、データベースの過去の状態にアクセスすることは、大量のデータが、少なくとも2つのプロセス間で交換及び/又は持続されることを意味する。これらのデータは、編集、シミュレーション、編集の共有など、さまざまなユースケースで転送する必要がある。データは、例えば、グラフ及びグラフの差分であってもよい。これらのグラフ及びグラフの差分は、一例として、CADアプリケーションにおけるエンジニアリングデータ及び/又はボアホールデータ及び/又は地理的位置を表し得る。
【0004】
RDFグラフは、これらのグラフ及びグラフの差分の記憶及び検索に使用される従来のデータモデルである。
【0005】
RDF仕様は、ワールドワイドウェブコンソーシアム(W3C)によって公表されている。例えば、「RDF 1.1 Concepts and Abstract Syntax published here: https://www.w3.org/TR/RDF11-concepts/」を参照されたい。使用される抽象構文のコア構造は、それぞれが主語、述語、及び目的語からなるトリプルのセットである。そのようなRDFトリプルのセットは、RDFグラフと呼ばれる。RDFグラフは、それぞれのトリプルがノード-アーク-ノード結合として表される、ノード及び有向アーク図として視覚化され得る。例えば、RDFトリプルは、主語及び目的語である2つのノードと、述語であるそれらを接続する円弧とを有することができる。RDFの詳細については、(https://www.w3.org/TR/RDF11-concepts/#data-model)を参照されたい。
【0006】
RDFグラフをやり取りするために最も広く使用されるフォーマットは、W3C TURTLEフォーマットである(https://www.w3.org/TR/turtle/を参照)。W3C TURTLEフォーマットは、RDFグラフをコンパクトで自然なテキスト形成で完全に記述できるようにする、RDFのテキスト構文である。それにもかかわらず、それはプレーンテキストで書かれ、解析コストを誘発する。これには圧縮戦略があり、主語や述語を分解することができる。つまり、TURTLEファイルのサイズは小さくなるが、構文解析のコストが高くなり、目的語や述語の冗長性が完全にはなくならない。
【0007】
ネットワーク上で潜在的に非常に高いスループットを有するRDFタプルを転送するために、1つの解決策は、各RDFタプルの圧縮を改善することである。データ圧縮は、ここでは圧縮とも呼ばれ、元の表現よりも少ないビットを使用して情報を符号化するプロセスである。圧縮は、データを格納及び送信するために必要なリソースを削減するので、有用である。例えば、圧縮されたRDFタプルの転送は、RDFタプルごとに2つのプロセス間で送信されるデータが少なく、したがって性能を向上させる。このため、データ圧縮は、2つのプロセス間で(例えば、ネットワークを介して)非常に高いスループットでRDFタプルを転送するための重要な概念である。
【0008】
グラフの圧縮は、RDFがグラフとして情報を表すために使用されるので、RDFタプルを圧縮することによって行うことができる。圧縮されたグラフ、つまりデータが圧縮されたグラフは、グラフの交換や保存、又は2つのグラフの違いが必要な場所ではどこでも興味深いものである。RDFタプルを圧縮することは、RDFタプルのサイズを縮小するプロセスである。
【0009】
しかしながら、上述の解決策は、性能の欠如に悩まされる。実際、実験は、標準的な機械上で最も効率的な既知の標準フォーマットで達成される最大生スループットが、700,000RDFトリプル/秒の挿入速度をほとんど超えないことを示した。
【0010】
現在のアプリケーション(例えば、以前に提示されたCAD、CAE、CAM、PLMなど)によって使用されるグラフのサイズが増大することを考慮すると、標準的な装置において、毎秒100万RDFタプル(すなわち、2倍及び/又は再利用を含む200万エッジ、及び毎秒100万アーク)の最小挿入速度に到達できることが重要である。標準的な装置上で毎秒100万個のRDFタプルの挿入速度に達するためには、各RDFタプルの圧縮を改善することが不可欠である。挿入率は、例えばデータベース又は読み取り専用索引又はファイルであってもよい対象源から、データが単一のノード上に記憶され、アクセス可能であるデータベースへのデータの転送である。単一のノードは非分散ノードである。これは、ネットワークコストに依存しない挿入レートを定義するために使用される。一例として、標準的な装置は、クワッドコアプロセッサ及び8ギガビットRAMを有するコンピュータとして定義され得る。
【0011】
この文脈において、RDFタプルを圧縮するための改善された方法が依然として必要とされている。
【発明の概要】
【0012】
したがって、RDFタプルを圧縮するためのコンピュータ実装方法が提供される。この方法は、
RDFタプルを圧縮するコンピュータ実装方法であって、
各々が主語、目的語、及び述語を有するRDFタプルを提供するステップと、
提供されたRDFタプルの主語、目的語、及び述語のうちの1つに帰属するインデックスの辞書を提供するステップと、
各RDFタプルについて、前記主語及び前記目的語に帰属するインデックスを符号化するステップと、
同じ述語を共有するRDFタプルをグループ化し、グループごとに、前記主語及び前記目的語の符号化を考慮することによってRDFタプルをソートするグループ化ステップと
を有し、
ソートされたRDFタプルのグループごとに、
共有述語のインデックスを直列化するステップと、
並べ替えられたRDFタプルのグループの第1のRDFタプルの前記主語及び前記目的語を符号化するステップと、
グループの最初のRDFタプルの後のソートされたRDFタプルのグループの各RDFタプルに対して、
現在のRDFタプルの前記主語及び前記目的語の符号化と、前のRDFタプルの前記主語及び前記目的語の符号化との間の差分を計算する計算ステップと、
計算された差分を可変長整数の形成で直列化するステップと
を有する。
【0013】
例において、本方法は、以下の1つ以上をさらに含んでもよい。
前記符号化ステップにおける符号化が、モートン符号化である。
各グループの前記ソートされたRDFタプルが、昇順又は部分的昇順により、若しくは部分的にのみソートされる。
前記提供されるRDFタプルの各RDFタプルがさらにグラフを含み、
前記提供されるインデックスの辞書は、提供されるRDFタプルのグラフのうちの1つに帰属するインデックスを備え、
同じ述語及び同じグラフを共有するRDFタプルに対してグループ化ステップが行われ、
共有述語のインデックスの直列化ステップは、共有グラフのインデックスの直列化を含む。
前記主語及び前記目的語を符号化するステップが、前記RDFタプルごとに、前記述語及び前記目的語に帰属するインデックスを符号化するステップに置き換えられ、
前記グループ化ステップが、同じ主語を共有するRDFタプルについて行われ、
前記共有述語のインデックスの直列化ステップが、共有主語を直列化するステップに置き換えられ、
前記ソートされたRDFタプルのグループの主語及び第1のRDFタプルの目的語の符号化を直列化するステップが、前記述語の符号化及びソートされたRDFタプルのグループの第1のRDFタプルの前記目的語を直列化するステップに置き換えられ、
前記計算ステップにおいて、前記述語の符号化と現在のRDFタプルの前記目的語との間で行われる差分と、前記述語の符号化と前のRDFタプルの前記目的語との間で行われる差分とが計算される。
前記主語及び前記目的語の符号化ステップが、前記RDFタプルごとに、前記主語及び前記述語に帰属するインデックスを符号化するステップに置き換えられ、
前記グループ化ステップが、同じ目的語を共有するRDFタプルについて行われ、
前記共有述語のインデックスの直列化ステップが、共有目的語を直列化するステップに置き換えられ、
前記主語の符号化、及びソートされたRDFタプルのグループの第1のRDFタプルの目的語との直列化ステップが、前記主語の符号化、及びソートされたRDFタプルのグループの第1のRDFタプルの述語とを直列化するステップにて置き換えられ、
前記計算ステップが、前記主語の符号化と現在のRDFタプルの述語との間の差分と、前記主語の符号化と以前のRDFタプルの述語との間の差分とを計算する。
前記可変長整数は、無損失圧縮でさらに圧縮される。
前記グループ化ステップが、同じ述語を共有する前記RDFタプルをカウントするステップを含む。
【0014】
さらに、RDFタプルを解凍するコンピュータ実装方法が提供される。この方法は、
上記の方法によって圧縮されたRDFタプルを提供するステップと、
前記提供されたRDFタプルの主語、目的語、及び述語のうちの1つに帰属するインデックスの辞書を提供するステップと、
前記提供されたRDFタプルのグループごとに、
共有述語のインデックスを非直列化するステップと、
前記提供されたRDFタプルのグループの第1のRDFタプルの前記目的語及び前記目的語の符号化を非直列化するステップと、
前記グループの最初のRDFタプルの後に提供されたRDFタプルのグループのソートされたRDFタプルごとに、
前記計算された差分を非直列化するステップと、
現在のRDFタプルの非直列化及び計算された差分と、前のRDFタプルの非直列化及び計算された差分との間の和を計算するステップと、
前記計算された和をデコードするステップと、
前記非直列化された述語及び復号された和を有するRDFタプルを生成するステップとを有する。
前記提供されたRDFタプルの各RDFタプルが、グラフを含み、
前記提供されたインデックスの辞書が、前記提供されたRDFタプルのグラフのうちの1つに帰属するインデックスを含み、
前記述語のインデックスを非直列化するステップが、前記グラフのインデックスを非直列化するステップを含み、
前記RDFタプルの生成が、前記グラフの非直列化されたインデックスで行われる。
前記辞書を提供するステップが、前記提供されたRDFタプルの主語、目的語、述語、及び任意選択のグラフのうちの1つをインデックス化することによって辞書を生成するステップに置き換えられる。
前記提供された又は前記生成された辞書が、前記述語のインデックスの提供又は生成された辞書及び前記任意のグラフと、前記主語及び前記対象のインデックスの提供又は生成された辞書とによって置き換えられる。
【0015】
さらに、上記いずれかの方法を実行させるための命令を含むコンピュータプログラムが提供される。
【0016】
さらに、上記いずれかの方法を実行させるための命令を含むコンピュータプログラムを記録したコンピュータ可読記憶媒体が提供される。
【0017】
さらに、請求項14に記載のコンピュータプログラムを記録したコンピュータ可読記憶媒体を含むデータベースが提供される。
【図面の簡単な説明】
【0018】
【
図1】RDFタプルを圧縮する方法の一例のフローチャートを示す。
【
図4】RDFタプルを解凍するための方法の例のフローチャートを示す。
【発明を実施するための形態】
【0019】
図1のフローチャートに関連して、RDFタプルを圧縮するためのコンピュータ実装方法が提案される。この方法は、RDFタプルを提供するステップ(S10)を含み、各RDFタプルは、主語(サブジェクト)、目的語(オブジェクト)、及び述語を含む。以下の説明では、RDFタプル(タプルとも呼ばれる)という用語は、RDFトリプル(トリプルとも呼ばれる)又はRDFクワッド(クワッドとも呼ばれる)を指す。
【0020】
グラフラベルをRDFトリプルに追加して、RDFクワッドを得ることができる。各クワッドのグラフラベルは、クワッドがデータセットの一部であるグラフである。
【0021】
一般に、RDFタプル又はタプルという用語は、RDFトリプル(トリプルとも呼ばれる)又はRDFクワッド(クワッドとも呼ばれる)を指定するために使用される。RDFタプルという用語は、以下の説明で使用される。
【0022】
この方法は、インデックスの辞書を提供するステップ(S20)をさらに含み、各インデックスは、提供されたRDFタプルの主語、目的語、及び述語のうちの1つに帰属する。
【0023】
「インデックスの辞書」とは、データ値を(インデックス;値)ペアで記憶するために使用されるデータペアの集合を意味する。辞書は、順序付けられず、変更可能であり、重複を許可しないことがある。インデックスは、整数又は符号なし整数であってもよい。辞書のインデックスの格納サイズは、そのペア値の格納サイズより小さくてもよいし、同じであってもよいし、辞書の直列化されたインデックスの格納サイズは、その直列化されたペア値の格納サイズより小さくてもよいし、同じであってもよい。
【0024】
図2は、各インデックスが値に帰属するインデックスの辞書の例である。例えば、インデックス2は、値「fb:type.property.unique」に関連付けられる。
図2では、インデックスは1から始まり、これは任意の選択であることが理解される。
【0025】
さらに
図2を参照して、RDFトリプル列挙の作成の一例について説明する。この例では、
図2の辞書のインデックスを使用して、以下のRDFトリプル列挙を作成することができ、トリプルの各値は、その対応するインデックスによって置き換えられる。
1, 2, 3
1, 4, 5
6, 7, 8
6, 9, 8
6, 4, 10
6, 4, 11
【0026】
この例のトリプルは、依然としてRDFトリプルであるが、値の代わりにインデックスによって表される。例えば、トリプル「1,2,3」は、以下を表す。
fb:astronomy.astronomical_observatory.discoveries
fb:type.property.unique "false" .
【0027】
提供ステップS20において、インデックスの1つ以上の辞書を使用することができる。一例では、提供ステップS20は、2つのインデックスの辞書、すなわち、述語に対するインデックスの1つの辞書、主語及び目的語に対するインデックスの1つの辞書を提供することを含むことができる。別の例では、提供ステップS20は、3つのインデックスの辞書、すなわち、述語に対するインデックスの1つの辞書、主語に対するインデックスの1つの辞書、及び目的語に対するインデックスの1つの辞書を提供することを含むことができる。例では、1つ又は複数の辞書は、同じソースと同じ宛先との間のRDFタプルの交換中にソースと宛先との間で交換され得る。たとえば、ソースと宛先とはコンピュータ化されたシステムである。例では、1つ又は複数の辞書は、同じソース及び/又は同じ宛先によってすでに記憶されていてもよく、RDFタプルのさらなる交換は、ソースと宛先との間の1つ又は複数の辞書の交換を必要としなくてもよい。例では、1つ又は複数の辞書は更新されてもよく、更新は、(インデックス;値)の1つ又は複数の新しいペアを追加及び/又は削除すること、並びに/又は(インデックス;値)の1つ又は複数のペアのそれぞれの値を置き換えることを含んでもよい。
【0028】
インデックスに基づくRDFタプル列挙は、隣接行列のプリフィギュレーションと見なすことができる。そのような表現(隣接行列のプリフィギュレーションとして見られる)は、表現されるべきRDFタプルの数とともに、メモリのサイズが増大する。
【0029】
そのような表現(隣接行列のプリフィギュレーションとして見られる)はまた、1つ又は複数の辞書の各々によって含まれる対の数を増加させ得ることを理解されたい。辞書によって含まれるペアの数を制限する各インデックスのメモリのサイズ、各インデックスのメモリのサイズの増加が必要とされ得る。しかしながら、各インデックスのメモリのサイズを増加させることは、前述のように、グラフにおける挿入レートの最大値を改善する(増加させる)よりも、あまり重要ではない(例えば、より容易に達成可能である)。本発明は、辞書の使用の結果として生じるインデックスを圧縮することを目的とする。
【0030】
図1に戻って、本方法は、RDFタプルごとに、主語及び目的語に帰属するインデックスを符号化するステップ(S30)をさらに含む。符号化とは、データ表現を変更するプロセスを意味する。例えば、符号化ステップ(S30)は、各RDFタプルのインデックスをバイナリコードとしての表現に変換することからなる。使用される2シンボルシステムは、2進数システムから「0」及び「1」であることが多い。2進コードは、各文字、命令などに、ビットとしても知られる2進数の型紙を割り当てる。例えば、8ビットのバイナリストリングは、256個の可能な値のいずれかを表すことができ、したがって、多種多様な異なるアイテムを表すことができる。
【0031】
被験者及び対象物の情報を符号化することにより、例えば、Snappy(以下参照:(discussed here: https://en.wikipedia.org/wiki/Snappy_ (compression)))又はLZ4(以下参照:https://en.wikipedia.org/wiki/LZ4_(compression_algorithm))などの古典的なアルゴリズムを用いて、非常に良好な圧縮が可能になる。実際、本出願人は、驚くべきことに、ダッソーシステムズ社内固有のデータセット及びオープンソースデータセット、例えば、ChEMBLデータセット又はDBPediaもしくはFreebase(以下でより多くの情報を入手可能である:https://developers.google.com/freebase/)又はWikidata(以下でより多くの情報を入手可能である:https://www.wikidata.org/wiki/Wikidata:Main_Page)、又はRDF Berlin benchmarkからのeコマースデータ(以下参照:http://wifo5-03.informatik.uni-mannheim.de/bizer/berlinsparqlbenchmark/)を調査し、ペア(主語、目的語)の価値の間に相関関係があり、また、一連のペアに非常に低いエントロピーが存在することを発見した。相関は、提供されたRDFタプルのペア(主語、目的語)の値間の統計的関係であり、この関係は、ペア(主語、目的語)の値が線形的に関連する度合いとして表され得る。
【0032】
したがって、ステップS30の出力は、符号化されたRDFタプルを与えられたものであり、符号化されたRDFタプルと呼ばれる。ここで説明する以下のステップは、符号化されたRDFタプルに対して動作する。
【0033】
この方法は、同じ述語を共有するRDFタプルをグループ化するステップ(S40)と、各グループについて、主語及び目的語の符号化を考慮することによってRDFタプルをソートするステップをさらに含む。ステップS40では、同じ述語を有するRDFタプルが一緒にグループ化される。上記の例に従うと、RDFトリプル「1,4,5」、「6,4,10」及び「6,4,11」は、同じ述語「a」を共有する。これらのRDFトリプルは、ステップS40を実行した結果、グループ化され、同じ述語を有するRDFタプルのグループ化ステップ(S40)は、述語がより少ないエントロピーを有するRDFタプルのエンティティであるという観測を利用することを可能にする。言い換えれば、RDFデータでは述語のばらつきが小さいので、同じ述語を共有するRDFタプルをグループ化することは、RDFタプルを圧縮するのに効率的である。
【0034】
さらに、同じ述語を有するRDFタプルをグループ化するステップ(S40)は、述語による垂直分割パーティションデータとして、垂直分割に基づくグラフ表現を有するデータベースの処理性能も向上させる。
【0035】
ステップS40において、主語及び目的語の符号化を考慮することによって、各グループのRDFタプルのソートが実行される。
【0036】
例では、ソートは、増加する符号の順序であってもよい。言い換えれば、第1のRDFタプルは、主語の符号化の値と第1のRDFタプルの目的語が、主語の符号化の値と第2のRDFタプルの目的語より小さい場合、第2のRDFタプルの前に配置される。第1のRDFタプルは、ランク1にされ、第2のRDFタプルはランク2にされる。
【0037】
例では、ソートは、減少する符号の順序であってもよい。言い換えると、第1のRDFタプルの符号化の値及び第1のRDFタプルの目的語が、第2のRDFタプルの符号化の値及び第2のRDFタプルの目的語よりも大きい場合、第1のRDFタプルは、第2のRDFタプルの前に配置され、第1のRDFタプルは、2にランク付けされ、第2のRDFタプルは、1にランク付けされる。
【0038】
RDFタプルのグループが1つのRDFタプルのみを含む場合、ソートは実行されない。
【0039】
図1に戻って、ステップS40の結果として、(符号化された)RDFタプルがグループ化され(それによって、RDFタプルのグループのセットが取得され)、RDFタプルの各グループがソートされている。したがって、ソートされた(及び符号化された)RDFタプルのグループが得られる。そして、ソートされたRDFの各グループは、以下のように個別に処理される。
【0040】
(1)共有述語のインデックスの直列化するステップ(S50)が実行され、(2)ソートされたRDFタプルのグループの第1のRDFタプルの目的語及び目的語の符号化の直列化(S60)が実行される。
【0041】
直列化は、データ構造又は目的語状態を、記憶又は送信することができ、後で(例えば、一連のビットとして)、場合によっては異なるコンピュータ環境において再構成することができるフォーマットに変換するプロセスである。結果として得られる一連のビットが直列化フォーマットに従って再び読み出されるとき、それは、元の目的語の意味的に同一のクローンを作成するために使用され得る。直列化ステップS50及びS60を実行するために使用される技術(又は実装)は、同一であっても異なっていてもよい。
【0042】
その後、そのグループの最初のRDFタプルに続く、提供されたRDFタプルのグループのソートされたRDFタプルごとに、以下のステップが実施される。
【0043】
(3)差分が、主語及び目的語の符号化と現在のRDFタプルの目的語との間で計算され(ステップS70)、主語及び目的語の符号化と以前のRDFタプルの目的語との間で計算される。
【0044】
言い換えれば、(1)及び(2)によって得られるソートされたRDFタプルの各グループについて、ソートされたRDFタプルの各グループの第1のRDFタプルを除くすべてのRDFタプルについて計算ステップ(S70)が行われる。
【0045】
例えば、現在のソートされたタプルのグループにおける第3のRDFタプルについての差分を計算するために(S70)、現在のソートされたタプルのグループにおける第3のRDFタプルの主語と目的語の符号化と、現在のソートされたタプルのグループにおける第2のRDFタプルの主語と目的語の符号化との間で差分を行うことによって計算ステップ(S70)を行うことができる。
【0046】
(4)計算された差分は、可変長整数の形成で直列化される(S80)。
【0047】
可変長整数は、当技術分野で知られているように、任意の数のバイナリオクテットを使用して任意の大きい整数を表すユニバーサルコードである。
【0048】
差分のみを直列化することによって、本発明の方法は、圧縮をさらに増加させる。実際、可変長整数は、より小さい値を直列化するためにより少ないバイトを使用し、より大きい値の場合よりも少ないスペースを占有する。したがって、ソートされたタプルのグループの2つの連続するタプル間で差が計算されるので、差の値は最小であり、直列化ステップ(S80)は、圧縮の点でさらにより効率的である。
【0049】
上述のように、本発明の目的は、1つ以上の辞書の圧縮ではない。実際、1つ又は複数の辞書は、RDFタプルと同じ頻度で転送及び/又は記憶される必要はない。さらに、出願人は、RDFタプルの数が有意であるとき、述語の辞書のサイズが非常に限られていることに気付く。有意とは、RDFタプルの数が少なくとも1000個のRDFタプルを含むことを意味する。RDFタプルの数が1000個のRDFタプルを超えない場合でも、1つ又は複数の辞書は、RDFタプルと同じ頻度で転送及び/又は記憶される必要がないことを理解されたい。
【0050】
同じ述語を共有するRDFタプルをグループ化し(S40)、グループごとに、主語及び目的語の符号化を考慮することによってRDFタプルをソートすることによって、本方法は、ペアの値間の距離が一般に非常に小さいので、特に効率的である。2進形式の3つの整数の直列化のような単純な2進実装ではなく、RDFタプル当たり1~2オクテットの使用に収束することを示した。
【0051】
本発明の方法は、RDFタプルをうまく圧縮すること以外の他の利点を提供する。グループ化することができる転送ユニットとしてバッチを考えると、本発明は、できるだけ高密度で処理が容易な方法で、ネットワークを介してデータを転送することを可能にする。このデータの転送は、編集目的、例えばクリエイティブオーサリングアプリケーションにおいて、又はユーザ間でデータを共有するために使用することができる。これらのデータのソースは、例えば、バッチで作られたファイル、又は本発明によって説明されるフォーマットでそのデータを出力することができる読み取り専用インデックス、又は本発明によって説明されるフォーマットでそのデータを出力することもできる別のデータベースであってもよい。
【0052】
図1に戻ると、ステップS50、S60及び第2のforループ「グループの第1のRDFタプルに続くソートされたRDFタプルのグループの各RDFタプル」は、第1のforループ「ソートされたRDFタプルのグループごと」のボディであることに留意されたい。第2のforループのボディは、ステップS70及びS80である。
【0053】
この方法は、コンピュータで実施される。これは、この方法のステップ(又は実質的に全てのステップ)が少なくとも1つのコンピュータ又は任意のシステムによって実行されることを意味する。したがって、本方法のステップはコンピュータによって、場合によっては完全に自動的に、又は半自動的に実行される。例では、本方法のステップのうちの少なくともいくつかのトリガがユーザ/コンピュータ対話を介して実行され得る。必要とされるユーザ/コンピュータ対話のレベルは予測される自動化のレベルに依存し、ユーザの希望を実施する必要性とバランスをとることができる。例では、このレベルがユーザ定義及び/又は事前定義され得る。
【0054】
図5は、システムの例を示し、システムは、サーバ、例えば、データベースをホストするサーバである。
【0055】
本例のサーバは、内部通信バス1000に接続された中央処理装置(CPU)1010と、バスにも接続されたランダムアクセスメモリ(RAM)1070とを備える。サーバは、バスに接続されたビデオランダムアクセスメモリ1100に関連付けられたグラフィカルプロセッシングユニット(GPU)1110をさらに備えることができる。ビデオRAM1100は、当技術分野ではフレームバッファとしても知られている。大容量記憶装置コントローラ1020は、ハードドライブ1030などの大容量記憶装置へのアクセスを管理する。コンピュータプログラム命令及びデータを有形に具現化するのに適した大容量メモリデバイスは、例として、EPROM、EEPROM、及びフラッシュメモリデバイスなどの半導体メモリデバイス、内部ハードディスク及びリムーバブルディスクなどの磁気ディスク、光磁気ディスク、並びにCD-ROMディスク1040を含む、すべての形態の不揮発性メモリを含む。前述のいずれも、特別に設計されたASIC(特定用途向け集積回路)によって補足されるか、又はその中に組み込まれてもよい。1つ又は複数の大容量メモリデバイスが、データベースの記憶層を実装するために使用され得る。ネットワークアダプタ1050は、ネットワーク1060へのアクセスを管理する。サーバは、カーソル制御デバイス、キーボードなどの触覚デバイス1090も含んでもよい。ユーザがディスプレイ1080上の任意の所望の位置にカーソルを選択的に位置決めすることを可能にするために、カーソル制御装置がサーバ内で使用される。さらに、カーソル制御装置はユーザが様々なコマンドを選択し、制御信号を入力することを可能にする。カーソル制御装置は、システムに制御信号を入力するための多数の信号発生装置を含む。典型的にはカーソル制御装置がマウスであってもよく、マウスのボタンは信号を生成するために使用される。代替的に又は追加的に、サーバは、センシティブパッド及び/又はセンシティブスクリーンを含んでもよい。
【0056】
コンピュータプログラムはコンピュータによって実行可能な命令を含むことができ、命令は、上記装置に該方法を実行させるための手段を含む。プログラムは、システムのメモリを含む任意のデータ記憶媒体に記録可能であってもよい。プログラムは例えば、デジタル電子回路において、又はコンピュータハードウェア、ファームウェア、ソフトウェアにおいて、又はそれらの組み合わせにおいて実装されてもよい。プログラムは装置、例えば、プログラマブルプロセッサによる実行のためのコンピュータ可読記憶デバイスに有形に具現化された製品として実装されてもよい。方法のステップは入力データに対して動作し、出力を生成することによって、方法の機能を実行するための命令のプログラムを実行するプログラマブルプロセッサによって実行されてもよい。したがって、プロセッサはプログラム可能であり、データ記憶システム、少なくとも1つの入力デバイス、及び少なくとも1つの出力デバイスからデータ及び命令を受信し、それらにデータ及び命令を送信するように結合され得る。アプリケーションプログラムは、高レベルの手続き型又はオブジェクト指向プログラミング言語で、あるいは必要に応じてアセンブリ言語又は機械語で実装することができる。いずれの場合も、言語は、コンパイルされた言語又は解釈された言語であってもよい。プログラムはフルインストールプログラムであってもよいし、更新プログラムであってもよい。システム上にプログラムを適用すると、いずれにしても、この方法を実行するための命令が得られる。
【0057】
方法のコンピュータ実装の典型的な実例は、このために適合された装置、例えばサーバーを用いて方法を実行することである。システムは、メモリに結合されたプロセッサを備えることができ、メモリは、方法を実行するための命令を備えるコンピュータプログラムを記録したものである。メモリはまた、データベースを記憶してもよい。メモリはそのような記憶装置に適合された任意のハードウェアであり、場合によっては、いくつかの物理的に別個の部品(例えば、プログラムのための部品、及び場合によってはデータベースのための部品)を備える。
【0058】
一例では、この方法は、オーサリングアプリケーションを用いたモデル化オブジェクトの一般的な操作のプロセスにおいて使用される。モデル化オブジェクトは、例えばデータベースに格納されたデータによって定義される任意の目的語である。拡張により、表現「モデル化オブジェクト」は、データ自体を指定する。システムのタイプに応じて、モデル化オブジェクトは、異なる種類のデータによって定義されてもよい。システムは、実際にはCADシステム、CAEシステム、CAMシステム、PDMシステム、及び/又はPLMシステムの任意の組み合わせであってもよい。これらの異なるシステムでは、モデル化オブジェクトが対応するデータによって定義される。したがって、CAD目的語、PLM目的語、PDM目的語、CAE目的語、CAM目的語、CADデータ、PLMデータ、PDMデータ、CAMデータ、CAEデータについて言うことができる。しかしながら、モデル化オブジェクトはこれらのシステムの任意の組み合わせに対応するデータによって定義され得るので、これらのシステムは他のシステムのうちの1つを排他的にするものではない。したがって、システムは、CAD及びPLMシステムの両方であってもよい。
【0059】
説明のためだけに、CADシステムにおいて使用される方法の例が、ここで議論される。
【0060】
CADシステムとは、さらに、CATIAのような、モデル化オブジェクトのグラフィック表現に基づいてモデル化オブジェクトを少なくとも設計するように適合された任意のシステムを意味する。この場合、モデル化オブジェクトを定義するデータは、モデル化オブジェクトの表現を可能にするデータを含む。CADシステムは例えば、ある場合には、顔又は表面を有するエッジ又は線を使用してCADモデル化オブジェクトの表現を提供することができる。線、エッジ、又は表面は様々な方法、例えば、不均一有理Bスプライン(NURBS)で表すことができる。具体的には、CADファイルは仕様を含み、そこからジオメトリーを生成することができ、これにより表現を生成することができる。モデル化オブジェクトの仕様は、単一のCADファイル又は複数のCADファイルに格納することができる。CADシステム内のモデル化オブジェクトを表すファイルの典型的なサイズは、部品当たり1メガバイトの範囲内である。そして、モデル化オブジェクトは、典型的には何千もの部品のアセンブリであってもよい。
【0061】
CADの文脈では、モデル化オブジェクトが典型的には例えば、部品又は部品のアセンブリ、又は場合によっては製品のアセンブリなどの製品を表す3Dモデル化オブジェクトとすることができる。「3Dモデル化オブジェクト」とは、その3D表現を可能にするデータによってモデリングされる任意の目的語を意味する。3D表現は、全ての角度から部品を見ることを可能にする。例えば、3Dモデル化オブジェクトは3D表現される場合、その軸のいずれかの周り、又は表現が表示される画面内のいずれかの軸の周りで取り扱われ、回転され得る。これは特に、3Dモデル化されていない2Dアイコンを除外する。3D表現の表示は設計を容易にする(すなわち、設計者が統計的に彼らのタスクを達成する速度を増加させる)。これは、製品の設計が製造工程の一部であるため、産業界における製造工程を高速化する。
【0062】
3Dモデル化オブジェクトは、例えば、(例えば、機械的である)部品又は部品のアセンブリ(又は等価的に部品のアセンブリ、部品のアセンブリは、方法の観点から部品自体見ることができる、又は方法は、アセンブリの各部品に独立して適用することができる)、又はより一般的には任意の剛体アセンブリ(例えば、可動機構)などのCADソフトウェアソリューション又はCADシステムを用いて、その仮想デザインの完了後に現実世界で製造されるべき製品のジオメトリーを表すことができる。CADソフトウェアソリューションは、航空宇宙、建築、建築、消費財、ハイテク装置、産業機器、輸送、海洋、及び/又は沖合の石油/ガスの生産又は輸送を含む、さまざまな無制限の産業分野における製品の設計を可能にする。したがって、方法によって設計された3Dモデル化オブジェクトは、地上車両の部品(例えば、自動車及び軽トラック装置、レーシングカー、オートバイ、トラック及びモーター装置、トラック及びバス、列車を含む)、航空車両の部品(例えば、機体装置、航空宇宙機器、推進装置、防衛製品、航空機装置、宇宙機器を含む)、海軍車両の部品(例えば、海軍装置、商業船、洋上設備、ヨット及び作業船を含む)、一般機械部品(例えば、産業用製造機械、重機機械又は装置、設備、産業機器、製造装置、産業機器、加工金属製品、タイヤ製造製品を含む)、電気機械又は電子部品(例えば、民生用電子機器、セキュリティ及び/又は制御及び/又は計装製品、計算及び通信機器、半導体、医療機器及び機器を含む)、消費財(g.家具、家庭用及び庭用品、レジャー用品、ファッション用品、耐久消費財の小売業者の製品、織物類の小売業者の製品)、包装(例えば、食品及び飲料並びにたばこ、美容及びパーソナルケア、家庭用品包装を含む)を表すことができる。
【0063】
CADにおける設計プロセスは、典型的には、協調的な手順であり、いくつかの人々が、互いに独立して、又は相互依存的に作業することを必要とする。この問題では、ユーザが、より多くのデータをより短い期間で受信するので、コンピュータシステムのための待ち時間を回避するために、ユーザのCADモデルにできるだけ速くアクセスし、編集し、保存することを可能にするために、RDFデータを高周波数で転送できることが重要である。例では、設計プロセスの履歴は、データベースに記憶され得る。評価結果によると、本発明の方法が、ターゲットソースから履歴が記憶されているデータベースへの毎秒100万トリプルのスループットを有するRDFデータを転送可能にすることが示される。ターゲットソースは、データベース、読み取り専用インデックス、又はファイルとすることができる。履歴が記憶されるデータベースは、いくつかのバージョンのクリエイティブアプリケーションを介して、CADモデル設計の収集された情報を含むことができる。これらのバージョンは、CADモデル上で並行して動作することができる設計者又はいくつかの設計者によって作成及び/又は修正されていることがある。データベースファイル内のデータを編成するための任意の内部基本構造が使用され得ることを理解されたい。
【0064】
設計ソフトウェアアプリケーションは、異なる設計可能性の中でいくつかのバージョンを必要とする創造的なオーサリングを必要とする。本発明の方法の例は、CADオーサリングアプリケーションの文脈で議論される。これらの例は、CADオーサリングアプリケーションに限定されず、任意のオーサリングアプリケーションに適用することができることを理解されたい。より一般的には、本方法は、ソフトウェアアプリケーションをオーサリングする特定の分野に限定されず、すなわち、本方法は、RDFタプルを有するグラフ表現を有する任意のデータベースに適用される。
【0065】
本方法のさらなる例を以下に説明する。
【0066】
例では、方法の符号化ステップ(S30)は、モートン符号化であってもよい。モートン符号化は、Z次曲線としても知られる。モートン符号化は、当技術分野で知られているように、行列のような多次元データに対して使用される圧縮方式である。多次元における点のZ値は、その座標値の二進表現をインターリーブすることによって計算される。例えば、トリプル(RDFタプル)「1,2,3」に対してモートン符号化ステップ(S30)を適用することによって、主語のインデックス及びこのRDFタプルに対する目的語のインデックスの結果として生じる符号化値は11である。モートン符号化の詳細については、https://en.wikipedia.org/wiki/Z-order_curveを参照されたい。
【0067】
モートン符号化は、近接によってビットマップを探索するので、各RDFタプルの主語及び目的語を符号化するために特に適応される。モートン符号化は、局所性を維持しながら、多寸法データを1つの寸法にマッピングする。さらに、処理速度に関するモートン符号化の性能は、その一定の複雑さと、それを最適化するために特定のインテルプロセッサ命令を使用する能力のために、非常に良好である。したがって、モートン符号化は、一連のRDFデータの圧縮及び解凍速度を向上させる。例では、グループ化ステップ(S40)によって得られた各グループのRDFタプルは、昇順又は部分的な昇順でソートされてもよいし、部分的にソートされてもよい。
【0068】
RDFタプルを昇順にソートすることは、ソートが終了すると、第2のRDFタプルの値よりも大きい値を有する第1のRDFタプルが第2のRDFタプルの後に配置されることを意味し、各グループのすべてのRDFタプルがソートされる。ここで、RDFタプルの値は、主語及び目的語の符号化を考慮することによって計算され得る。上記で説明したように、ステップS70は、現在のRDFタプルの目的語及び目的語の符号化と、前のRDFタプルの目的語及び目的語の符号化との間の差分を計算することを含んでもよい。グループ化ステップ(S40)によって得られた各グループのRDFタプルを昇順にソートすることによって、ステップS70において計算された差分が厳密に正であることが保証される。これにより、計算された差分を可変長符号なし整数の形成で直列化することができる。可変長符号なし整数については様々な実装が使用され得る。一例として、SQLite4可変長整数を使用することができる。SQLite4可変長は、64ビットの符号なし整数を1~9バイトに符号化したものである。符号化には次のプロパティがある。
・より小さい(及びより一般的である)値は、より少ないバイトを使用し、より大きい(及びより一般的でない)値よりも少ないスペースを占有する。
・任意の変数の長さは、符号化の最初のバイトだけを見ることによって決定することができる。
・変数の辞書式順序と数値順序は同じである。したがって、変数のグループが(つまり、それらが最初に来るより短い変数を持つmemcmp()による順番であるならば)、それらの変数も数値順に並べられる。このプロパティは、変数を鍵/値バックエンドストレージ内の鍵として使用でき、記録は鍵の数値順に発生することを意味する。
【0069】
SQLite4可変長の詳細については、以下を参照のこと。
https://sqlite.org/src4/doc/trunk/www/varint.wiki
【0070】
可変長整数の代わりに可変長符号なし整数を使用することは、ステップS70において計算された差分の記憶の圧縮を改善する。
【0071】
ソートは、昇順又は降順のいずれかに基づいて、部分的にのみ実行されてもよい。部分的ソートの様々な例が可能である。一例では、(昇順又は降順の)ソートは、同じグループのRDFタプルの一部のみに対して実行されてもよく、残りのRDFタプルはソートされなくてもよい。別の例では、ソートは、1つ又は複数のグループのRDFタプルに対して実行されてもよく、RDFタプルの残りのグループは、ソートされないことがある。別の例では、ソートは、同じグループのRDFタプルの一部のみに対して実行されてもよく、残りのRDFタプルは、前の(昇順又は降順の)ソートによって既にソートされてもよい。RDFタプルの各グループは、RDFタプルの様々なサブグループから構成されると考える。したがって、同じグループのRDFタプルは、サブグループによってのみソートされる可能性がある。言い換えれば、同じグループの他のサブグループに対するサブグループの位置は変化しないが、各サブグループ内では、各RDFタプルの位置は変化し得る。したがって、昇順のソートが部分的にしか行われない場合、サブグループの最大値を有するRDFタプルの後に、次のサブグループの最小値を有するRDFタプルが続くことができる。ここで、RDFタプルの値は、主語及び目的語の符号化を考慮することによって計算され得る。例えば、各サブグループが、現在のグループに追加されたRDFタプルのセットであるとき、部分的にだけ増加する順序でのソートが使用され得る。戦略は、追加されたRDFタプルのみをソートすることからなり、したがって、グループ全体の部分的ソートを得ることができる。
【0072】
部分的にのみソートすることは、コンピュータプロセッサユニット(CPU)及びステップS40中の時間などのリソースを節約するのに効率的であってもよい。実際、グループのRDFタプルの一部のみをソートすることは、より少ない計算資源を必要とし、グループのRDFタプル全体をソートするよりも速い。
【0073】
例では、提供されるRDFタプルの各RDFタプルは、グラフをさらに備え得る。たとえば、コンピュータ実装方法は、RDFクワッドを圧縮するために使用され得る。RDFクワッドを使用することは、セマンティックを共有するRDFトリプルをグループ化するのに特に有用であってもよい。一例として、オントロジを共有するすべてのRDFは、1つのグラフにグループ化され得る。したがって、RDFタプルがRDFクワッドである場合、RDFクワッドを圧縮するためのコンピュータ実装方法が実行される。提供されたインデックスの辞書は、提供されたRDFタプルのグラフのうちの1つに帰属するインデックスを含むこともできる。そのような提供された辞書の例が、
図3に示される。例えば、インデックス「5」は、グラフ「http://www.example.com/Graph.data」に帰属する。
【0074】
一例として、対応する値の代わりに
図3の辞書のインデックスを使用して、以下のRDFクワッド列挙を作成することができる。
5, 1, 2, 3
5, 1, 4, 6
5, 7, 8, 9
5, 7, 10, 9
5, 7, 4, 11
5, 7, 4, 12
【0075】
さらに、RDFクワッドであるRDFタプルを有する例では、グループ化ステップ(S40)は、同じ述語及び同じグラフを共有するRDFクワッドに対して行われ得る。言い換えれば、同じ述語及び同じグラフを共有するRDFクワッドは、一緒にグループ化され得る。2つのRDFクワッドが2つの異なる述語又はグラフを有する場合、それらは一緒にグループ化されないことがある。同じ述語と同じグラフを共有するRDFクワッドをグループ化すると、述語とグラフとが強く束縛されるため、特に効率的である。言い換えれば、RDFクワッドのセットの場合、特定の述語を有するRDFクワッドは、同じグラフも共有することが多い。したがって、同じ述語及び同じグラフを有するRDFクワッドをグループ化することによって、RDFクワッドのグループの数は最小に保たれるか、又は最小になる傾向がある。RDFクワッドのグループの数を最小に保つことによって、グループ当たりのペア(主語、目的語)の数は最大に保たれ、したがって、グループのデータの圧縮の相対コストは最小になる。同じ述語及び同じグラフを共有するRDFクワッドを厳密にグループ化するステップ(S40)は、対(述語、グラフ)がより少ないエントロピーを有するRDFクワッドのエンティティであるので、圧縮性能に関しても効率的である。
【0076】
さらに、RDFクワッドであるRDFタプルを有する例では、共有述語のインデックスの直列化ステップ(S50)は、共有グラフのインデックスの直列化も含む。言い換えれば、同じ述語及び同じグラフを共有するRDFクワッドのグループの場合、ステップ(S50)の開始時に、共有述語の直列化が行われてもよく、それに続いて、共有グラフの直列化が行われ得る。別の例では、共有グラフの直列化は、共有述語の直列化の前に行われ得る。
【0077】
さらに、RDFクワッドであるRDFタプルを有する例では、グループ化ステップ(S40)は、同じ主語及び同じ目的語を共有するRDFクワッドに対して行われ得る。この例では、直列化ステップ(S50)は、共有主語のインデックスを直列化し、共有目的語のインデックスを直列化することによって行われてもよく、それに続いて、又はそれに先行して、共有目的語のインデックスが直列化されてもよい。
【0078】
さらに、RDFクワッドであるRDFタプルを有する例では、グループ化ステップ(S40)は、同じグラフ及び同じ主語を共有するRDFクワッドに対して行われ得る。この例では、直列化ステップ(S50)は、共有グラフのインデックスを直列化し、共有主語のインデックスを直列化することによって行われてもよい。
【0079】
さらに、RDFクワッドであるRDFタプルを有する例では、グループ化ステップ(S40)は、同じグラフ及び同じ目的語を共有するRDFクワッドに対して行われ得る。この例では、直列化ステップ(S50)は、共有グラフのインデックスを直列化し、共有目的語のインデックスを直列化することによって行われてもよい。
【0080】
さらに、RDFクワッドであるRDFタプルを有する例では、グループ化ステップ(S40)は、同じ述語及び同じ目的語を共有するRDFクワッドに対して行われ得る。この例では、直列化ステップ(S50)は、共有述語のインデックスを直列化し、共有目的語のインデックスの直列化に続いて、又はその前に行うことができる。
【0081】
さらに、RDFクワッドであるRDFタプルを有する例では、グループ化ステップ(S40)は、同じ主語及び同じ述語を共有するRDFクワッドに対して行われ得る。この例では、直列化ステップ(S50)は、共有主語のインデックスを直列化し、共有述語のインデックスを直列化した後、又は直列化した後に行うことができる。
【0082】
例では、主語及び目的語の符号化ステップ(S30)は、述語及び目的語に帰属するインデックスをRDFタプルごとに符号化することによって置き換えられてもよく、グループ化ステップ(S40)は、同じ主語を共有するRDFタプルに対して行われてもよく、共有述語のインデックスの直列化ステップ(S50)は、共有主語の直列化によって置き換えられてもよく、主語の符号化及びソートされたRDFタプルのグループの第1のRDFタプルの目的語の直列化ステップ(S60)は、述語の符号化及びソートされたRDFタプルのグループの第1のRDFタプルの目的語の直列化によって置き換えられてもよく、計算ステップ(S70)は、述語及び現在のRDFタプルの目的語の符号化と、述語及び以前のRDFタプルの目的語の符号化との間で行われてもよい。この例は、RDFタプル(RDFトリプル又はRDFクワッドのいずれか)を圧縮するのによく適しており、RDFタプルは、オブジェクト指向である知識を表すために使用される。また、それは、文献に基づいて知識を表現するように特に適応される。オブジェクト指向データモデル(OODM)は、オブジェクト指向プログラミング言語(詳細は以下を参照:https://en.wikipedia.org/wiki/Object-oriented_programming)で使用されるものを反映する複雑なデータ目的語で動作することができるデータモデリングである。言い換えれば、OODMの要素は次のようになる。
・目的語(オブジェクト):ToDoリスト内の特定のライフタスクなどの現実世界のエンティティ-「ゴミを取り出す」。
・属性:目的語の状態と行動。目的語には、名前、ステータス、作成日などの特性がある(属性とも呼ばれる)。一緒になったプロパティのセットは、その状態を表す。
・クラス:同じプロパティを持つすべての目的語のグループ化は、クラスを形成する。この例では、タスク目的語について説明する。これらの目的語はすべてタスククラスに属する。例えば、主語及び主語の符号化ステップ(S30)は、RDFタプルごとに、主語及び述語に帰属するインデックスを符号化することによって置き換えられてもよく、グループ化ステップ(S40)は、同じ主語を共有するRDFタプルに対して行われてもよく、共有述語のインデックスの直列化ステップ(S50)は、共有目的語の直列化によって置き換えられてもよく、主語の符号化及びソートされたRDFタプルのグループの第1のRDFタプルの目的語の直列化ステップ(S60)は、主語の符号化及びソートされたRDFタプルのグループの第1のRDFタプルの述語の直列化によって置き換えられてもよく、コンピューティング(S70)は、主語の符号化と現在のRDFタプルの述語との間で差分が行われてもよく、主語の符号化と以前のRDFタプルの述語との間で行われてもよい。
【0083】
例では、ステップS80の可変長整数は、無損失圧縮でさらに圧縮され得る。無損失圧縮は、元のデータが圧縮データから完全に再構成されることを可能にするデータ圧縮アルゴリズムのクラスとして定義され得る。当技術分野で知られている無損失圧縮は、本発明の全ての異なる実施形態と互換性がある。例えば、ステップS80で得られた可変長整数を圧縮するために、Snappy又はLZ4などの可逆圧縮方法を使用することができる。この圧縮は、本発明の方法の圧縮率をさらに増加させる。
【0084】
例では、グループ化ステップ(S40)はまた、同じ述語を共有するRDFタプルをカウントすることを含む。同じ述語を共有するRDFタプルの数であるカウントの結果は、次いで、現在のグループの第1のRDFタプルに続くソートされたRDFタプルの各グループのRDFタプルに対して反復的に行われるステップS70及びS80のための終了値として使用され得る。実装としては、例えば、計数結果に設定された終端値を用いてforループを用いることができる。計数の結果は、RDFタプルの解凍中に非直列化され、読み出されるために直列化されてもよい。
【0085】
現在のグループの第1のRDFタプルの後のソートされたRDFタプルの各グループのRDFタプルごとに反復的に行われるステップS70及びS80のための終了戦略を実装する別の方法は、グループの最後のRDFタプルについてステップS70及びS80において計算された差分の後に値「0」(ゼロ)を直列化することである。言い換えれば、計算ステップ(S70)が、主語の符号化と、グループの最後のRDFタプルの目的語との間の差分と、主語の符号化と、最後のRDFタプルの前の目的語とが直列化されるとき(S80)、値「0」(ゼロ)が後に直列化され得る。この値「0」(ゼロ)は、RDFタプルの解凍中に非直列化され、RDFタプルのグループの終わりを識別するために使用され得る。値「0」(ゼロ)の選択は、ステップS70の計算された差分が、提供された辞書(S20)に重複値がないので、ゼロに等しくないことがあるので、任意ではないことに留意する価値がある。
【0086】
図4のフローチャートを参照すると、
図1を参照して説明した手法で圧縮されたRDFタプルを解凍するコンピュータ実装方法が提案されている。
【0087】
RDFタプルを解凍する方法は、
図1を参照して説明した方法で圧縮されたRDFタプルを提供するステップ(S110)を含む。本方法は、インデックスの辞書を提供するステップ(S120)をさらに含み、各インデックスは、提供されたRDFタプルの主語、目的語、及び述語のうちの1つに帰属する。
【0088】
圧縮されたRDFタプルが提供され、RDFタプルがステップS40で説明したようにグループ化され、RDFタプルがグループ化され、RDFタプルの各グループがソートされている。したがって、ソートされた(及び符号化された)RDFタプルのグループが提供される。
【0089】
次に、本方法は、提供されたRDFタプルのグループごとに、共有述語のインデックスを非直列化し(S130)、提供されたRDFタプルのグループの主語及び第1のRDFタプルの目的語の符号化を非直列化するステップ(S140)ことをさらに含む。非直列化は、直列化の逆の動作として定義され得る。これは、一連のバイトからデータ構造を抽出することからなる。なお、非直列化(S130)は、直列化ステップ(S50)の逆動作であってもよく、非直列化(S140)は、直列化ステップ(S60)の逆動作であってもよい。「逆動作」とは、非直列化により、直列化されたデータ構造と同等のデータ構造又は同一のデータ構造を取り出すことができることを意味する。
【0090】
次に、グループの最初のRDFタプルに続く、提供されたRDFタプルの各グループのソートされたRDFタプルごとに、以下のステップが実施される。
【0091】
(1)計算された差分は非直列化される(S150)。一例として、主語及び目的語の符号化と現在のRDFタプルの目的語との間の差は、主語及び目的語の符号化と前のRDFタプルの目的語との間で計算され得る(S50)。非直列化(S150)は、直列化ステップ(S80)の逆の動作である。
【0092】
(2)現在のRDFタプルの非直列化された計算された差分と前のRDFタプルの非直列化された計算された差分との間の和が計算され(S160)、計算された和が復号される(S170)。復号化は、本発明の基準圧縮方法で論じられる符号化の逆プロセスであり、符号化されたフォーマットを元の文字シーケンスに戻す変換として定義することができる。
【0093】
(3)非直列化された述語と復号された和とを用いてRDFタプルが生成される(S180)。例えば、非直列化された述語及び復号された和を有するRDFタプルを生成するために(S180)、提供される辞書(S120)を使用して、主語、目的語及び述語のインデックスから値を取り出すことができる。
【0094】
例では、提供されるRDFタプルの各RDFタプルはまた、グラフを備え得る。言い換えれば、RDFタプルを解凍するための方法は、
図1を参照して説明した方法によって圧縮されたRDFクワッドを解凍するために使用され得る。RDFクワッドを解凍するための方法はまた、インデックスの提供された(S120)辞書が、提供されたRDFタプルのグラフのうちの1つに帰属するインデックスも備えることを備え得る。述語のインデックスを非直列化するステップ(S130)はまた、グラフのインデックスを非直列化すること、及びグラフの非直列化されたインデックスを用いて行われるRDFタプルを生成するステップ(S180)を含むことができる。非直列化された述語及び復号された和を有するRDFクワッドを生成するために(S180)、提供された辞書(S120)を使用して、主語、目的語、述語及びグラフのインデックスから値を取り出すことができることに留意する価値がある。
【0095】
図4に戻って、ステップS130、S140、及び第2のforループ「グループの第1のRDFタプルに続く提供されたRDFタプルのグループの各ソートされたRDFタプルについて」は、第1のforループ「提供されたRDFタプルのグループごと」のボディであることに留意されたい。第2のforループのボディは、ステップS150、S160、S170、及びS180である。
【0096】
例では、辞書を提供するステップ(S20、S120)は、提供されたRDFタプルの主語、目的語、述語、及び任意選択のグラフのうちの1つをインデックス付けすることによって辞書を生成することによって置き換えられ得る。例えば、辞書の生成は、RDFタプルを圧縮するためのステップS30の前にいつでも行うことができる。別の例では、辞書の生成は、RDFタプルを解凍するためのステップS130の前のいつでも行われ得る。
【0097】
例では、提供又は生成された辞書は、述語のインデックスの提供又は生成された辞書及び任意選択のグラフ、並びに主語及び目的語のインデックスの提供又は生成された辞書によって置き換えられ得る。例えば、ステップS20又はステップS120において提供された辞書は、述語及び任意のグラフのインデックスの提供された辞書と、主語及び目的語のインデックスの提供された辞書とに置き換えられてもよい。別の例では、ステップS20又はステップS120において提供された辞書は、述語及び任意選択のグラフのインデックスの提供された辞書と、主語及び目的語のインデックスの生成された辞書とによって置き換えられ得る。別の例では、ステップS20又はステップS120において提供された辞書は、述語及び任意選択のグラフのインデックスの生成された辞書、並びに主語及び目的語のインデックスの提供された辞書によって置き換えられ得る。別の例では、ステップS20又はステップS120において生成された辞書は、生成された述語のインデックスの辞書及び任意選択のグラフと、生成された主語及び目的語のインデックスの辞書とに置き換えられてもよい。別の例では、ステップS20又はステップS120において生成された辞書は、述語及び任意選択のグラフのインデックスの提供された辞書と、主語及び目的語のインデックスの生成された辞書とによって置き換えられ得る。別の例では、ステップS20又はステップS120において生成された辞書は、述語及び任意選択のグラフのインデックスの生成された辞書と、主語及び目的語のインデックスの提供された辞書とによって置き換えられ得る。
【0098】
述語のみ又は述語及び任意のグラフに専用の1つの辞書と、主語及び目的語に専用の別の辞書とを有することによって、本方法は部分的な更新を可能にする。例えば、主語及び目的語のみが変化した場合、述語専用の辞書、任意のグラフ、主語及び目的語が更新される状況と比較して、1つの辞書のみが更新される必要があり、例えば、辞書を準備/更新するためのより少ない計算資源、及び辞書を転送するためのより少ないネットワークリソースが必要とされる。
【0099】
さらに、述語のみ、又は述語及び任意のグラフに専用の1つの辞書と、主語及び目的語に専用の別の辞書とを有することにより、述語及び任意のグラフのインデックスの辞書と、主語及び目的語のインデックスの辞書とに対して2つの異なる戦略を採用することが可能になる。例えば、第1の辞書は、第2の辞書が生成され得るように、解凍中及び/又は圧縮中に提供され得る。
【0100】
上述した圧縮/解凍方法の一般的な例、RDFタプルを圧縮するための方法及びRDFタプルを解凍するための方法を示す実装の例が提示されているが、この実装の例は、例示のためにのみ提示されており、一般的な例を限定するものとして解釈されるべきではない。
【0101】
第1のステップは、辞書及び隣接行列を構築することである。単独の辞書を有するのではなく、主語及び目的語のための辞書、述語のための辞書、及びグラフのための辞書が使用されてもよい。
図6に、主題及び目的語の辞書の一例を示す。述語の辞書の一例を
図7に示す。グラフの辞書の一例を
図8に示す。ここでは、一例として、すべてのデータが1つのグラフ内にあるので、グラフの辞書は、1つの対インデックス値のみを含む。明らかに、データは異なるグラフであってもよく、アルゴリズムを変更しない。
【0102】
一例として、グラフのセット及び述語のセットが交差を有する確率が非常に低いので、グラフ及び述語のための2つの別個の辞書が使用され得る。したがって、2つの異なる辞書を構築することは、それを実装する簡単な方法であるため、良い選択肢であるが、ここでは1つの辞書をグラフと述語の両方に使用することができる。
【0103】
これらの辞書を有することは、RDFタプルをインデックスのみを使用して列挙に変換することを可能にし得る。例えば、
図2を参照して論じたRDFトリプル列挙の作成の例から開始して、RDFクワッド列挙は、各行の第1のインデックスのためのグラフのための辞書を使用し、各行の第2及び第4のインデックスのための主語及び目的語のための辞書を使用し、各行の第3のインデックスのための述語のための辞書を使用することによって取得され得る。
G1,S1,P1,S2
G1,S1,P2,S3
G1,S4,P3,S5
G1,S4,P4,S5
G1,S4,P2,S6
G1,S4,P2,S7
【0104】
より良い理解のために、一例として、「G1」は、グラフに対する辞書の値「1」を有するインデックスに対応し、「S2」は、主語及び目的語に対する辞書の値「2」を有するインデックスに対応し、「P3」は、述語に対する辞書の値「3」を有するインデックスに対応する。
【0105】
RDFタプルは、例えば、ベクトル、又はマルチマップ、又はこれらのコレクションの任意のバリエーションにおいて収集され得る。
【0106】
先に述べたように、出願人は、述語が、より少ないエントロピーを有するRDFタプルのエンティティであることを観察した。したがって、最初にRDFタプルを述語によってグループ化することが好ましい場合がある。この選択は、述語によってもデータをパーティション化するため、一部のデータベースの垂直パーティション・ストレージ・スキームのために、処理パフォーマンスの点でも興味深い場合がある。述語は、多くの場合、それらのグラフに密接に結合されるので、それらをグラフによってグループ化することも好ましい場合がある。ここでも、グラフは任意であり、省略しても本発明は変更されない。述語及びグラフを修正することも、両者が強く束縛されているため、解決策の1つである。
【0107】
結合(述語、グラフ)は、それがより少ないエントロピーを有するRDFタプルのエンティティであるので、最初にグループ化されているが、任意の他のものが選択され得る。
【0108】
RDFクワッド列挙の上記の例に従うために、RDFタプルを最初に述語によって、次いでグラフによってグループ化することは、以下の結果を与え得る。
P1,G1((S1,S2))
P2,G1((S1,S3),(S4,S6),(S4,S7))
P3,G1((S4,S5))
P4,G1((S4,S5))
【0109】
次のステップは、インデックスに対して圧縮方式を使用することであってもよい。一例として、データ点の局所性を維持しながら多寸法データを1つの寸法にマッピングする圧縮方式を使用することができ、これはすべて、可能な限り最良の性能を有する。Z次曲線とも呼ばれるモートン符号化は、近接によってビットマップを探索する圧縮方式である。好ましい例として、モートン符号化は、局所性を維持しながら多次元データを1次元にマッピングし、その一定の複雑さと、それを最適化するために特定のインテルプロセッサ命令を使用する能力(例えば、特に、並列ビットデポジットPDEP及び並列ビット抽出PEXT)のために、その性能が非常に良好であるので、使用され得る。しかし、他の圧縮方式を使用することもできる。また、モートン符号化は、圧縮から利益を得るのに十分な相関効果を達成するために完全である必要はないことに留意されたい。これは、より少ない中央処理装置(CPU)を消費する部分的なモートン符号化であってもよい。
【0110】
出願人は、対象と対象とが相関することを観察し、各主語-目的語のペアをモートン符号化することによる相関を、その後、さらに増加させることができる。言い換えれば、主語及び目的語の値は、両方とも1つの値にマージされ得る。
【0111】
これで、直列化が開始される可能性がある。任意のステップとして、辞書の書き込みが最初に行われてもよい。別の直列化から辞書を再利用することもできる。例えば、この直列化が、分割された又は複製されたクラスターのノード間で使用され得る場合、辞書ではなく、ノード間で隣接行列の一部のみを交換することが行われ得る。目的は、構築されたリテラル及びインデックスのペアを直列化するように定義され得る。
【0112】
次のステップは、RDFタプルの直列化であってもよい。一例として、より多くの圧縮を増加させるために、直列化は、インデックスの値ではなく、インデックス間の差分に対して行われ得る。インデックスの値に対して直列化を行うことも使用され得る。差分をできるだけ小さく、常に同じ方向にするために、より圧縮された方法で符号なし整数としてインデックスを直列化する可変長整数を使用することができる。符号なし整数を使用するために、インデックスは、それらの値の昇順によってソートされ得る。昇順でインデックスをソートすることはまた、本発明において符号なし整数の使用を可能にする、絶えず増加するスイートを有するように選択されてもよい。これはまた、完全性についてチェックされ得る不変性を提供し、値が境界外である場合(すなわち、値がゼロ以下である場合)、警告を起こすか、又は方法を停止することさえも検出され得る。例えば、値0は決して計算されてはならない。実際、同じペアは2回見ることができないので、ヌル差は不可能であり、終端セパレータとして使用することができる。この選択は、圧縮を増加させるために任意選択であるが、任意の順序、例えば、降順又は部分順序を選択することができ、正及び負の整数を有することは、他の互換性のあるオプションである。
【0113】
ここでは、PがRDFタプルの述語であり、GがRDFタプルのグラフであり、SがRDFタプルの主語であり、OがRDFタプルの目的語である、擬似コードで書き込まれたRDFタプルを圧縮するための方法の例を示す。
収集され、ソートされた別個のRDFタプルの各ペア(P、G)について:
a. PとGを直列化する。
b. RDFタプル数をカウントし、ペア数(S、O)を格納する。
c. 変数の前のペアを「0」(ゼロ)に初期化する。
d. 各ペア(S,O)について:
i. SとOとのモートン符号化を現在の変数ペアに格納する。
ii. 現在のペアと前のペアとの差が「0」(ゼロ)でない場合、可変長整数の形成でこの値を直列化する。
そうでない場合は、重複していることを意味するので無視する。
iii. 前のペア変数で現在のペアをコピーする。
【0114】
擬似コードで書き込まれたRDFタプルを圧縮するための方法の代替は、以下のように書かれ得る。
収集され、ソートされた別個のRDFタプルの各ペア(P、G)について:
a. PとGを直列化する。
b. 変数の前のペアを0に初期化する。
c. 各ペア(S,O)について:
i. SとOとのモートン符号化を現在の変数ペアに格納する。
ii. 現在のペアと前のペアの差がゼロでない場合、この値を可変長整数の形成で直列化する。
そうでない場合は、重複していることを意味するので無視する。
iii. 前のペア変数に現在のペアをコピーする。
d. ゼロは、前のステップ(c.iii)で使用されなかった値であり、終端値として「0」(ゼロ)を直列化する。
【0115】
一例として、LZ4又はSnappyのようなライブラリによる可変長整数のさらなる圧縮を行うことができる。これは、解凍アルゴリズムの複雑さを増加させ得るが、辞書が圧縮され得ないという事実を補償することができる。1つ又は複数の辞書を圧縮することは、本方法と互換性があり、したがって、任意の公知の圧縮方法を用いて行うことができる。
上記の例に続いて、値の昇順でRDFタプルをソートすることができる:
P1,G1(9)
P2,G1 (11、56、58)
P3,G1(50)
P4,G1(50)
【0116】
次いで、符号化されたペアの2つの値の間の差分が記憶され得る。上記の例では、このステップは、他のグループがただ1つの値を有するので、共通の述語「P2」を有するRDFタプルのグループにのみ適用される。
P2(11,45,2)
【0117】
次いで、値、述語、及び辞書は、最終的に、可変長整数として直列化され得る。
【0118】
ここで、一例として、RDFタプルを解凍するための方法の好ましい実施形態を与える。
【0119】
ここでは、PがRDFタプルの述語であり、GがRDFタプルのグラフであり、SがRDFタプルの主語であり、OがRDFタプルの目的語である、擬似コードで書き込まれたRDFタプルを解凍するための方法の例を示す。
SOの辞書とPGの辞書を読む。
各ペアPGについて:
a. ペアPGの非直列化。
b. このPGペアのペアSOの数の非直列化。
c. 変数の前のペアを0に初期化する。
d. ペアの数だけ繰り返し:
i. 現在のSOの非直列化。
ii. したがって、現在のペアSOの値に前のペアSOの値を加算すると、現在のペアSOは、モートン符号化で符号化されたS及びOの値を保持する。
iii. モートン抽出を用いたSOの抽出
iv. P、G、S、Oのインデックスと辞書を使用してRDFを生成する。
v. 変数の前のペアに現在のSOを格納する。
【0120】
例として、このアルゴリズムを次の例に適用する。第1のステップは、述語グラフペアと主語目的語ペアの数とを繰り返し読み取ることからなる。この時点で、直列化されたグラフのデータのブロックが取得される。簡単にするために、パディング及びフィールド境界は省略される。これには、タグ、実行するループのサイズ又は数を含むプロローグ、又は終了センチネルとして機能する無効なグラフ述語ペアを指定できる。このステップの最後に取得されるデータの例を次に示す。
P1,G1 1(9)
P2,G1 3(11、56、58)
P3,G1 1 (50)
P4,G1 1 (50)
【0121】
一例として、ここでは、以下の例に基づいてRDFタプルを解凍するための本方法の擬似コードの適用である。
以下は第1のループである:
a. P1,G1のインデックスを読み出す。
b. 目的語数(1)を読み出す。
c. 変数の前のペアを「0」(ゼロ)に初期化する。
d. 各ペアSOに対して(最初のループに対して1回だけ行う):
i. ペアSO(9)の現在値を非直列化する。
ii. したがって、現在のSOの値(0+9)に変数の前のペアを追加すると、現在のSOは、モートン符号化で符号化されたS及びOの値を保持する。
iii. モートン抽出を用いてSとOのインデックスの値を抽出する(1,2)。
iv. P、G、S、Oのインデックスと辞書を使用してRDFを生成する。
v. 現在のSO の値を前の変数ペアに格納する。
【0122】
以下は第2のループである:
a. P2とG1のインデックスを読み出す。
b. 目的語数(3)を読み出す。
c. 変数の前のペアを“0”(ゼロ)に初期化する。
d. 各ペアに対して(2番目のループに対して3回実行):
i. ペアSOの現在値(ペアSO11,45,2毎)を非直列化する。
ii. したがって、(11+0、45+11+0、及び2+45+11+0の結果としての各ペアSO11、56、58についてそれぞれ)現在のSOの値に変数前のペアを加算すると、現在のSOは、モートン符号化で符号化されたS及びOの値を保持する。
iii. モートン抽出を用いて抽出することは、S及びOのインデックスの値を(それぞれ、各ペアSO(1、3)、(4、6)及び(4、7)について)抽出する。
iv. P、G、S、Oのインデックスと辞書を使用してRDFを生成する。
v. 現在のSOの値を前の変数ペアに格納する。
【0123】
以下は第3のループである:
a. インデックスP3,G1(3,1)の読み出し。
b. 目的語数(1)を読み出す。
c. 変数の前のペアを「0」(ゼロ)に初期化する。
d. 各ペアSOに対して(最初のループに対して1回だけ行う):
i. ペアSO(50)の現在値を非直列化する。
ii. したがって、現在のSOの値(0+50)に変数の前のペアを追加すると、現在のSOは、モートン符号化で符号化されたS及びOの値を保持する。
iii. モートン抽出を用いてSとOのインデックスの値を抽出する(4,5)。
iv. P、G、S、Oのインデックスと辞書を使用してRDFを生成する。
v. 現在のSOの値を前の変数ペアに格納する。
【0124】
以下は、第4及び最後のループである:
a. P4,G1(4,1)のインデックスを読み出す。
b. 目的語数(1)を読み出す。
c. 変数の前のペアを「0」(ゼロ)に初期化する。
d. 各ペアSOに対して(最初のループに対して1回だけ行う):
i. ペアSO(50)の現在値を非直列化する。
ii. したがって、SOの現在の値(0+50)に前のペアを追加すると、現在のSOは、モートン符号化で符号化されたS及びOの値を保持する。
iii. モートン抽出を用いてSとOのインデックスの値を抽出する(4,5)。
iv. P、G、S、Oのインデックスと辞書を使用してRDFを生成する。
v. 現在のSOの値を前の変数ペアに格納する。
【0125】
本手法は、圧縮と解凍の両方のために、ビジター(ビジターの定義は以下を参照:https://en.wikipedia.org/wiki/Visitor_pattern)及びイテレーター(イテレーターの定義は以下を参照:https://en.wikipedia.org/wiki/Iterator_pattern)を実装するように適合され得る。また、必要に応じてステップ2.d.vを追加することによって、RDFタプルの集合を構築することができる。
【0126】
以上、本発明の好適な実施形態について説明した。本発明の精神及び範囲から逸脱することなく、種々の変形がなされ得ることが理解されるであろう。したがって、他の実装は、以下の請求項の範囲内で可能である。
【手続補正書】
【提出日】2023-04-17
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
RDFタプルを圧縮するコンピュータ実装方法であって、
各々が主語、目的語、及び述語を有するRDFタプルを提供するステップ(S10)と、
提供されたRDFタプルの主語、目的語、及び述語のうちの1つに帰属するインデックスの辞書を提供するステップ(S20)と、
各RDFタプルについて、前記主語及び前記目的語に帰属するインデックスを符号化するステップ(S30)と、
同じ述語を共有するRDFタプルをグループ化し、グループごとに、前記主語及び前記目的語の符号化を考慮することによってRDFタプルをソートするグループ化ステップ(S40)と
を有し、
ソートされたRDFタプルのグループごとに、
共有述語のインデックスを直列化するステップ(S50)と、
並べ替えられたRDFタプルのグループの第1のRDFタプルの前記主語及び前記目的語を符号化するステップ(S60)と、
グループの最初のRDFタプルの後のソートされたRDFタプルのグループの各RDFタプルに対して、
現在のRDFタプルの前記主語及び前記目的語の符号化と、前のRDFタプルの前記主語及び前記目的語の符号化との間の差分を計算する計算ステップ(S70)と、
計算された差分を可変長整数の形成で直列化するステップ(S80)と
を有するコンピュータ実装方法。
【請求項2】
前記符号化ステップ(S30)における符号化が、モートン符号化である
請求項1に記載のコンピュータ実装方法。
【請求項3】
各グループの前記ソートされたRDFタプルが、昇順又は部分的昇順により、若しくは部分的にのみソートされる
請求項1に記載のコンピュータ実装方法。
【請求項4】
前記提供されるRDFタプルの各RDFタプルがさらにグラフを含み、
前記提供されるインデックスの辞書は、提供されるRDFタプルのグラフのうちの1つに帰属するインデックスを備え、
同じ述語及び同じグラフを共有するRDFタプルに対してグループ化ステップ(S40)が行われ、
共有述語のインデックスの直列化ステップ(S50)は、共有グラフのインデックスの直列化を含む
請求項1に記載のコンピュータ実装方法。
【請求項5】
前記主語及び前記目的語を符号化するステップ(S30)が、前記RDFタプルごとに、前記述語及び前記目的語に帰属するインデックスを符号化するステップに置き換えられ、
前記グループ化ステップ(S40)が、同じ主語を共有するRDFタプルについて行われ、
前記共有述語のインデックスの直列化ステップ(S50)が、共有主語を直列化するステップに置き換えられ、
前記ソートされたRDFタプルのグループの主語及び第1のRDFタプルの目的語の符号化を直列化するステップ(S60)が、前記述語の符号化及びソートされたRDFタプルのグループの第1のRDFタプルの前記目的語を直列化するステップに置き換えられ、
前記計算ステップ(S70)において、前記述語の符号化と現在のRDFタプルの前記目的語との間で行われる差分と、前記述語の符号化と前のRDFタプルの前記目的語との間で行われる差分とが計算される
請求項1に記載のコンピュータ実装方法。
【請求項6】
前記主語及び前記目的語の符号化ステップ(S30)が、前記RDFタプルごとに、前記主語及び前記述語に帰属するインデックスを符号化するステップに置き換えられ、
前記グループ化ステップ(S40)が、同じ目的語を共有するRDFタプルについて行われ、
前記共有述語のインデックスの直列化ステップ(S50)が、共有目的語を直列化するステップに置き換えられ、
前記主語の符号化、及びソートされたRDFタプルのグループの第1のRDFタプルの目的語との直列化ステップ(S60)が、前記主語の符号化、及びソートされたRDFタプルのグループの第1のRDFタプルの述語とを直列化するステップにて置き換えられ、
前記計算ステップ(S70)が、前記主語の符号化と現在のRDFタプルの述語との間の差分と、前記主語の符号化と以前のRDFタプルの述語との間の差分とを計算する
請求項1に記載のコンピュータ実装方法。
【請求項7】
前記可変長整数は、無損失圧縮でさらに圧縮される
請求項1に記載のコンピュータ実装方法。
【請求項8】
前記グループ化ステップ(S40)が、同じ述語を共有する前記RDFタプルをカウントするステップを含む
請求項1に記載のコンピュータ実装方法。
【請求項9】
請求項1に記載の方法によって圧縮されたRDFタプルを提供するステップ(S110)と、
前記提供されたRDFタプルの主語、目的語、及び述語のうちの1つに帰属するインデックスの辞書を提供するステップ(S120)と、
前記提供されたRDFタプルのグループごとに、
共有述語のインデックスを非直列化するステップ(S130)と、
前記提供されたRDFタプルのグループの第1のRDFタプルの前記目的語及び前記目的語の符号化を非直列化するステップ(S140)と、
前記グループの最初のRDFタプルの後に提供されたRDFタプルのグループのソートされたRDFタプルごとに、
前記計算された差分を非直列化するステップ(S150)と、
現在のRDFタプルの非直列化及び計算された差分と、前のRDFタプルの非直列化及び計算された差分との間の和を計算するステップ(S160)と、
前記計算された和をデコードするステップ(S170)と、
前記非直列化された述語及び復号された和を有するRDFタプルを生成するステップ(S180)を
を有する、RDFタプルを解凍するコンピュータ実装方法。
【請求項10】
前記提供(S110)されたRDFタプルの各RDFタプルが、グラフを含み、
前記提供(S120)されたインデックスの辞書が、前記提供されたRDFタプルのグラフのうちの1つに帰属するインデックスを含み、
前記述語のインデックスを非直列化するステップ(S130)が、前記グラフのインデックスを非直列化するステップを含み、
前記RDFタプルの生成が、前記グラフの非直列化されたインデックスで行われる
請求項9に記載のコンピュータ実装方法。
【請求項11】
前記辞書を提供するステップ(S20、S120)が、前記提供されたRDFタプルの主語、目的語、述語、及び任意選択のグラフのうちの1つをインデックス化することによって辞書を生成するステップに置き換えられる
請求項1に記載のコンピュータ実装方法。
【請求項12】
前記提供された又は前記生成された辞書が、前記述語のインデックスの提供又は生成された辞書及び前記任意選択のグラフと、前記主語及び前記対象のインデックスの提供又は生成された辞書とによって置き換えられる
請求項1に記載のコンピュータ実装方法。
【請求項13】
請求項1~8及び/又は9~12のいずれか一項に記載の方法を実行させるための命令を含むコンピュータプログラム。
【請求項14】
請求項13に記載のコンピュータプログラムを記録したコンピュータ可読記憶媒体。
【請求項15】
請求項13に記載のコンピュータプログラムを記録したコンピュータ可読記憶媒体を含むデータベース。
【外国語明細書】