マルチパラダむムプログラミング蚀語を蚭蚈したす。パヌト3-知識衚珟蚀語の抂芁

ドメむンモデルを蚘述するための宣蚀的な論理スタむルをサポヌトするマルチパラダむムプログラミング蚀語の䜜成に぀いおの話を続けたす。過去の出版物はここずここにありたす。次に、ドメむンモデル蚘述蚀語の䞻な機胜ず芁件に぀いお説明したす。しかし、最初に、知識を衚珟するための最も人気のある蚀語の簡単な抂芁を䜜りたしょう。これは長い歎史を持぀かなり広範な分野であり、論理プログラミング、リレヌショナル蚈算、セマンティックWebテクノロゞヌ、フレヌム蚀語など、倚くの分野が含たれおいたす。Prolog、SQL、RDF、SPARQL、OWL、Floraなどの蚀語を比范し、蚭蚈されたマルチパラダむムプログラミング蚀語で圹立぀機胜を匷調したいず思いたす。



プロロヌグ



ロゞックプログラミングずProlog蚀語から始めたしょう。䞻題分野に関する知識は、䞀連の事実ず芏則ずしおその䞭に提瀺されたす。事実は即時の知識を説明したす。前の投皿の䟋の顧客ID、名前、電子メヌルアドレスず請求曞アカりントID、顧客、日付、支払額、支払額に関する事実は次のようになりたす。



client(1, "John", "john@somewhere.net").
bill(1, 1,"2020-01", 100, 50).


ルヌルは、他のルヌルや事実から掚枬できる抜象的な知識を蚘述したす。ルヌルは頭ず䜓で構成されおいたす。ルヌルの先頭で、その名前ず匕数のリストを指定する必芁がありたす。ルヌルの本䜓は、論理挔算ANDコンマで指定およびORセミコロンで指定によっお接続された述語のリストです。述語は、ファクト、ルヌル、たたは比范挔算、算術挔算などの組み蟌み述語にするこずができたす。ルヌルヘッドの匕数ず本䜓の述語の匕数ずの関係は、ブヌル倉数を䜿甚しお蚭定されたす。同じ倉数が2぀の異なる匕数の䜍眮にある堎合、これは、これらの匕数が同䞀であるこずを意味したす。ルヌル本䜓の論理匏がtrueの堎合、ルヌルはtrueず芋なされたす。ドメむンモデルは、䞀連の参照ルヌルずしお定矩できたす。



unpaidBill(BillId, ClientId, Date, AmoutToPay, AmountPaid) :- bill(BillId, ClientId, Date, AmoutToPay, AmountPaid), AmoutToPay < AmountPaid.
debtor(ClientId, Name, Email) :- client(ClientId, Name, Email), unpaidBill(BillId, ClientId, _, _, _).


2぀のルヌルを蚭定したした。最初に、未払いの請求額より少ない請求曞はすべお未払いの請求曞であるず䞻匵したす。第二に、債務者は少なくずも1぀の未払いの請求曞を持っおいるクラむアントです。



Prologの構文は非垞に単玔です。プログラムの䞻な芁玠はルヌルであり、ルヌルの䞻な芁玠は述語、論理挔算、および倉数です。ルヌルでは、倉数に泚意が向けられたす。倉数はモデル化された䞖界のオブゞェクトの圹割を果たし、述語はそれらのプロパティずそれらの間の関係を蚘述したす。債務者ルヌルの定矩では、ClientId、Name、およびEmailオブゞェクトがクラむアントずunpaidBillの関係によっお関連付けられおいる堎合、それらも債務者の関係によっお関連付けられるず述べおいたす。 Prologは、問題が䞀連のルヌル、ステヌトメント、たたは論理ステヌトメントずしお定匏化される堎合に圹立ちたす。たずえば、自然蚀語の文法、コンパむラ、゚キスパヌトシステムで䜜業する堎合、コンピュヌタ、コンピュヌタネットワヌク、むンフラストラクチャオブゞェクトなどの耇雑なシステムを分析する堎合です。繁雑、耇雑なルヌルシステムは、明瀺的に説明し、Prologランタむムに任せお自動的に凊理するのが最適です。



プロロヌグは䞀次ロゞックに基づいおいたす高次ロゞックのいく぀かの芁玠が含たれおいたす。掚論は、SLD解決遞択的線圢確定句解決ず呌ばれる手順を䜿甚しお実行されたす。単玔化するず、そのアルゎリズムはすべおの可胜な゜リュヌションのツリヌトラバヌサルです。掚論手順は、ルヌル本䜓の最初の述語のすべおの解を芋぀けたす。ナレッゞベヌスの珟圚の述語が事実のみで衚されおいる堎合、解決策は、倉数の倀ぞの珟圚のバむンドに察応するものです。ルヌルによる堎合は、ネストされた述語の再垰的なチェックが必芁です。解決策が芋぀からない堎合、珟圚の怜玢ブランチは倱敗したす。次に、芋぀かった郚分的な゜リュヌションごずに新しいブランチが䜜成されたす。各ブランチで、掚論手順は芋぀かった倀を倉数にバむンドしたす、珟圚の述語に含たれ、述語の残りのリストの解決策を再垰的に怜玢したす。述語リストの最埌に達するず、䜜業は終了したす。ルヌルを再垰的に定矩する堎合、゜リュヌションの怜玢は無限のルヌプに入る可胜性がありたす。怜玢手順の結果は、ブヌル倉数ぞの倀のすべおの可胜なバむンディングのリストです。



䞊蚘の債務者ルヌルの䟋では、解決ルヌルは最初にクラむアント述語の1぀の゜リュヌションを芋぀け、それをブヌル倀に関連付けたすClientId = 1、Name = "John"、Email = "john@somewhere.net"。次に、この倉数倀のバリアントに察しお、次の述語unpaidBillに察しお゜リュヌションが実行されたす。これを行うには、ClientId = 1の堎合、最初に述語請求曞の解決策を芋぀ける必芁がありたす。結果は、倉数BillId = 1、Date = "2020-01"、AmoutToPay = 100、AmountPaid = 50のバむンディングになりたす。最埌に、AmoutToPay <AmountPaidがチェックされたす。組み蟌みの比范述語で。



セマンティックネットワヌク



セマンティックネットワヌクは、知識を衚す最も䞀般的な方法の1぀です。セマンティックWebは、有向グラフ圢匏のサブゞェクト゚リアの情報モデルです。グラフの頂点はドメむンの抂念に察応し、円匧はそれらの間の関係を定矩したす。



画像



たずえば、䞊の図のグラフによるず、「クゞラ」の抂念は、「哺乳類」の抂念ず「is」「is」の関係に関連付けられ、「氎」の抂念に「䜏んでいる」ず関連付けられおいたす。したがっお、サブゞェクト領域の構造含たれる抂念ずそれらが互いにどのように関連しおいるかを正匏に蚭定できたす。そしお、そのようなグラフを䜿甚しお、質問に察する答えを芋぀け、そこから新しい知識を匕き出すこずができたす。たずえば、関係「is」がクラスずサブクラスの関係を瀺し、サブクラス「Whale」がそのクラス「Mammal」のすべおのプロパティを継承する必芁があるず刀断した堎合、Whaleが「Spine」を持っおいるずいう知識を掚枬できたす。



RDF



セマンティックWebは、マシン凊理に適した圢匏で情報の衚瀺を暙準化するこずにより、World WideWebのリ゜ヌスに基づいおグロヌバルセマンティックネットワヌクを構築する詊みです。このために、情報はHTMLタグの特別な属性の圢匏でHTMLペヌゞに远加で埋め蟌たれたす。これにより、コンテンツの意味をオントロゞヌの圢匏䞀連の事実、抜象的な抂念、およびそれらの間の関係で蚘述するこずができたす。



WEBリ゜ヌスのセマンティックモデルを蚘述するための暙準的なアプロヌチは、RDFリ゜ヌス蚘述フレヌムワヌクたたはリ゜ヌス蚘述フレヌムワヌクです。それによるず、すべおのステヌトメントは、トリプレット「サブゞェクト-述語-オブゞェクト」の圢匏である必芁がありたす。たずえば、「クゞラ」の抂念に関する知識は次のように衚されたす。「クゞラ」は䞻題であり、「䜏んでいる」-述語、「氎」-オブゞェクトです。このようなステヌトメントのセット党䜓は、有向グラフを䜿甚しお蚘述できたす。サブゞェクトずオブゞェクトはその頂点であり、述語はアヌクであり、述語アヌクはオブゞェクトからサブゞェクトに向けられたす。たずえば、動物の䟋のオントロゞヌは次のように説明できたす。



@prefix : <...some URL...>
@prefix rdf: <http://www.w3.org/1999/02/rdf-schema#>
@prefix rdfs: <http://www.w3.org/2000/01/22-rdf-syntax-ns#>
:Whale rdf:type :Mammal;
:livesIn :Water.
:Fish rdf:type :Animal;
:livesIn :Water.


この衚蚘はタヌトルず呌ばれ、人間が読めるように意図されおいたす。ただし、XML、JSON圢匏、たたはHTMLドキュメントのタグず属性を䜿甚しお同じこずを蚘述できたす。Turtle衚蚘では、述語ずオブゞェクトを䞻題ごずにグルヌプ化しお読みやすくするこずができたすが、セマンティックレベルでは、各トリプレットは独立しおいたす。



RDFは、デヌタモデルが耇雑で、倚数のオブゞェクトタむプずそれらの間の関係が含たれおいる堎合に圹立ちたす。たずえば、Wikipediaは、RDF圢匏の蚘事のコンテンツぞのアクセスを提䟛したす。蚘事に蚘茉されおいる事実は構造化されおおり、他の蚘事からの事実を含め、それらの特性ず関係が説明されおいたす。



RDFS



RDFモデルはグラフです。デフォルトでは、远加のセマンティクスは含たれおいたせん。誰もがグラフ内のリンクを適切ず思われるように解釈できたす。RDFスキヌマRDF䞊にオントロゞヌを構築するためのクラスずプロパティのセットを䜿甚しお、いく぀かの暙準リンクを远加できたす。RDFSを䜿甚するず、特定のクラスぞのリ゜ヌスの垰属、クラス間の階局、プロパティの階局など、抂念間の暙準的な関係を蚘述し、サブゞェクトずオブゞェクトの可胜なタむプを制限できたす。



たずえば、ステヌトメント



:Mammal rdfs:subClassOf :Animal.


「Mammal」が「Animal」ずいう抂念のサブクラスであり、そのすべおのプロパティを継承するこずを指定したす。したがっお、「クゞラ」の抂念は、「動物」のクラスにも起因する可胜性がありたす。しかし、このためには、「哺乳類」ず「動物」の抂念がクラスであるこずを指摘する必芁がありたす。



:Animal rdf:type rdfs:Class.
:Mammal rdf:type rdfs:Class.


たた、述語は、そのサブゞェクトずオブゞェクトの可胜な倀に制玄を蚭定できたす。



ステヌトメント



:livesIn rdfs:range :Environment.


「livesin」関係のオブゞェクトは、垞にクラス「Environment」に属するリ゜ヌスである必芁があるこずを瀺したす。したがっお、「氎」の抂念は「環境」の抂念のサブクラスであるずいうステヌトメントを远加する必芁がありたす。



:Water rdf:type :Environment.
:Environment rdf:type rdfs:Class


RDFSを䜿甚するず、デヌタスキヌマを蚘述しお、クラス、プロパティを列挙し、それらの階局ず倀の制限を蚭定できたす。そしおRDFは、このスキヌマを具䜓的な事実で満たし、それらの間の関係を定矩するこずです。これで、このグラフに぀いお質問できたす。これは、SQLに䌌た特別なク゚リ蚀語SPARQLで実行できたす。



SELECT ?creature
WHERE {
?creature rdf:type :Animal;
:livesIn :Water.
} 


このク゚リは、「Whale」ず「Fish」の2぀の倀を返したす。



アカりントず顧客に関する以前の出版物の䟋は、おおよそ次のように実装できたす。RDFを䜿甚するず、デヌタスキヌマを蚘述し、倀を入力できたす。



:Client1 :name "John";
    :email "john@somewhere.net".
:Client2 :name "Mary";
    :email "mary@somewhere.net".
:Bill_1 :client :Client1;
    :date "2020-01";
    :amountToPay 100;
    :amountPaid 50.
:Bill_2 :client :Client2;
    :date "2020-01";
    :amountToPay 80;
    :amountPaid 80.


しかし、このシリヌズの最初の蚘事の「債務者」や「未払いの請求曞」などの抜象的な抂念には、算術挔算ず比范が含たれおいたす。それらは、抂念のセマンティックネットワヌクの静的構造に適合したせん。これらの抂念は、SPARQLク゚リを䜿甚しお衚珟できたす。



SELECT ?clientName ?clientEmail ?billDate ?amountToPay ?amountPaid 
WHERE {
?client :name ?clientName;
          :email ?clientEmail.
?bill :client ?client;
       :date ?billDate;
       :amountToPay ?amountToPay;
       :amountPaid ?amountPaid.
FILTER(?amountToPay > ?amountPaid).
}


WHERE句は、トリプルパタヌンずフィルタヌ条件のリストです。ブヌル倉数は、名前が「」で始たるトリプレットに眮き換えるこずができたす。ク゚リ゚グれキュヌタのタスクは、すべおのトリプレットパタヌンがグラフに含たれ、フィルタリング条件が満たされる倉数のすべおの可胜な倀を芋぀けるこずです。



ルヌルを䜿甚しお他のルヌルを䜜成できるPrologずは異なり、RDFではク゚リはSemanticWebの䞀郚ではありたせん。リク゚ストを別のリク゚ストのデヌタ゜ヌスずしお参照するこずはできたせん。確かに、SPARQLにはク゚リ結果をグラフずしお衚す機胜がありたす。したがっお、ク゚リ結果を元のグラフず組み合わせお、組み合わせたグラフで新しいク゚リを実行するこずができたす。しかし、そのような決定は明らかにRDFのむデオロギヌを超えたす。



OWL



セマンティックWebテクノロゞヌの重芁なコンポヌネントはOWLWeb Ontology Languageです。これはオントロゞヌを蚘述するための蚀語です。RDFSの語圙では、抂念間の最も基本的な関係、぀たりクラスず関係の階局のみを衚珟できたす。OWLは、はるかに豊富な語圙を提䟛したす。たずえば、2぀のクラスたたは2぀の゚ンティティが同等たたは異なるであるこずを指定できたす。このタスクは、オントロゞヌを組み合わせるずきによく発生したす。



亀差、結合、たたは他のクラスの远加に基づいお、耇合クラスを䜜成できたす。



  • 亀差する堎合、耇合クラスのすべおのむンスタンスは、すべおの゜ヌスクラスにも適甚される必芁がありたす。たずえば、「Marine Mammal」は、「Mammal」ず「SeaDweller」の䞡方である必芁がありたす。
  • . , , «» «», «» «». «».
  • , . , «» «».
  • . , .
  • — , .


抂念をリンクできるような匏は、コンストラクタヌず呌ばれたす。

OWLでは、倚くの重芁な関係プロパティを蚭定するこずもできたす。



  • 過枡性。関係Px、yずPy、zが成り立぀堎合、関係Px、zも満たされたす。このような関係の䟋ずしおは、「倚い」-「少ない」、「芪」-「子」などがありたす。
  • 察称。関係Px、yが満たされるず、関係Py、xも満たされたす。たずえば、盞察的な関係。
  • 機胜䟝存。関係Px、yずPx、zが成り立぀堎合、yずzの倀は同䞀でなければなりたせん。䟋は父の関係です-人は2人の異なる父を持぀こずはできたせん。
  • 関係の逆転。関係P1x、yが満たされる堎合、もう1぀の関係P2y、xが満たされる必芁があるこずを指定できたす。このような関係の䟋は、芪子関係です。
  • 関係チェヌン。AがBのプロパティに関連付けられ、BがCに関連付けられおいる堎合、AたたはCは特定のクラスに属するように蚭定できたす。たずえば、AにBの父芪がいお、父芪Bに父芪Cがいる堎合、AはCの孫です。


関係の匕数の倀に制限を蚭定するこずもできたす。たずえば、匕数が垞に特定のクラスに属しおいる必芁があるこず、クラスに特定のタむプの関係が少なくずも1぀ある必芁があるこず、たたはこのタむプの関係の数を制限するこずを指定したす。たたは、特定の関係によっお特定の倀に関連付けられおいるすべおのむンスタンスが特定のクラスに属するように指定できたす。



OWLは珟圚、オントロゞヌを構築するための事実䞊の暙準ツヌルです。この蚀語は、RDFSよりも倧芏暡で耇雑なオントロゞヌの構築に適しおいたす。 OWL構文を䜿甚するず、抂念のさたざたなプロパティずそれらの間の関係を衚珟できたす。ただし、いく぀かの远加の制限も導入されたす。たずえば、同じ抂念をクラスずしおも別のクラスのむンスタンスずしおも同時に宣蚀するこずはできたせん。 OWLオントロゞヌはより厳密で、より暙準化されおいるため、より読みやすくなっおいたす。 RDFSがRDFグラフの䞊にあるいく぀かの远加クラスである堎合、OWLには異なる数孊的基瀎蚘述ロゞックがありたす。したがっお、OWLオントロゞヌから新しい情報を抜出し、それらの䞀貫性をチェックしお質問に答えるこずができる正匏な掚論手順が利甚可胜になりたす。



蚘述ロゞックは、1次ロゞックの䞀郚です。 1぀の堎所の述語たずえば、抂念がクラスに属する、2぀の堎所の述語抂念にはプロパティずその倀がありたす、および䞊蚘のクラスコンストラクタヌず関係プロパティのみが蚱可されたす。蚘述論理における䞀次論理の他のすべおの衚珟は削陀されたした。たずえば、「未払いの請求曞」の抂念が「請求曞」クラスに属し、「請求曞」の抂念に「支払われる金額」および「支払われる金額」のプロパティがあるずいうステヌトメントは受け入れられたす。ただし、「未払いの請求曞」プロパティ「支払われる金額」の抂念は、プロパティ「支払われる金額」よりも倧きくする必芁があるこずを衚明するこずはできたせん。これには、これらのプロパティを比范するための述語を含むルヌルが必芁です。残念ながら、OWLコンストラクタヌはこれを蚱可したせん。

したがっお、蚘述的論理の衚珟力は、䞀次論理の衚珟力よりも䜎い。しかし䞀方で、蚘述ロゞックの掚論アルゎリズムははるかに高速です。さらに、それは決定可胜性の特性を持っおいたす-解決策は有限の時間で保蚌されおいるこずがわかりたす。実際には、そのような語圙は耇雑でボリュヌムのあるオントロゞヌを構築するのに十分であるず考えられおおり、OWLは衚珟力ず掚論効率の間の良い劥協点です。



たた、SWRLSemantic Web Rule Languageも蚀及する䟡倀がありたす。これは、OWLでクラスずプロパティを䜜成する機胜ず、限定バヌゞョンのDatalog蚀語でルヌルを䜜成する機胜を組み合わせたものです。これらのルヌルのスタむルは、Prologの堎合ず同じです。SWRLは、比范、数孊、文字列、日付、およびリスト操䜜のための組み蟌み述語をサポヌトしたす。これは、1぀の簡単な衚珟を䜿甚しお「未払いの請求曞」の抂念を実装するために私たちが欠けおいたものです。



フロヌラ-2



セマンティックネットワヌクの代わりに、フレヌムなどのテクノロゞヌを怜蚎しおください。フレヌムは、耇雑なオブゞェクト、抜象的なむメヌゞ、䜕かのモデルを蚘述する構造です。これは、名前、䞀連のプロパティ特性、およびそれらの倀で構成されたす。プロパティ倀は別のフレヌムにするこずができたす。たた、プロパティにはデフォルト倀を蚭定できたす。その倀を蚈算するための関数をプロパティにアタッチできたす。フレヌムには、フレヌムの䜜成、削陀、プロパティの倀の倉曎などのむベントのハンドラヌを含むサヌビスプロシヌゞャを含めるこずもできたす。フレヌムの重芁なプロパティは、継承する機胜です。子フレヌムには、芪フレヌムのすべおのプロパティが含たれたす。



リンクされたフレヌムのシステムは、RDFグラフず非垞によく䌌たセマンティックネットワヌクを圢成したす。しかし、オントロゞヌを䜜成するタスクでは、フレヌムは珟圚事実䞊の暙準であるOWLに取っお代わられたした。 OWLはより衚珟力があり、より高床な理論的基瀎、぀たり正匏な蚘述ロゞックを備えおいたす。抂念のプロパティが互いに独立しお蚘述されるRDFおよびOWLずは異なり、フレヌムモデルでは、抂念ずそのプロパティは単䞀の党䜓、぀たりフレヌムず芋なされたす。 RDFモデルずOWLモデルで、グラフの頂点に抂念の名前が含たれ、゚ッゞにプロパティが含たれおいる堎合、フレヌムモデルでは、グラフの頂点にすべおのプロパティを持぀抂念が含たれ、゚ッゞには、プロパティ間の接続たたは抂念間の継承関係が含たれたす。



この堎合、フレヌムモデルはオブゞェクト指向のプログラミングモデルに非垞に近いものです。それらはほが同じですが、スコヌプが異なりたす。フレヌムは、抂念ずオブゞェクト間の関係のネットワヌクをモデル化するこずを目的ずし、OOPは、オブゞェクトの動䜜、オブゞェクトの盞互䜜甚をモデル化するこずを目的ずしおいたす。したがっお、OOPは、あるコンポヌネントの実装の詳现を他のコンポヌネントから隠し、クラスのメ゜ッドずフィヌルドぞのアクセスを制限するための远加のメカニズムを提䟛したす。



最新のフレヌミング蚀語KL-ONE、PowerLoom、Flora-2などは、オブゞェクトモデルの耇合デヌタタむプを1次ロゞックず組み合わせたす。これらの蚀語では、オブゞェクトの構造を蚘述するだけでなく、ルヌルでこれらのオブゞェクトを操䜜したり、特定のクラスに属するオブゞェクトの条件を蚘述したルヌルを䜜成したりするこずもできたす。クラスの継承ず構成のメカニズムは論理的な解釈を受け取り、掚論手順で䜿甚できるようになりたす。これらの蚀語はOWLよりも衚珟力があり、2぀の堎所の述語に限定されたせん。



䟋ずしお、Flora-2蚀語で債務者を䜿甚しお䟋を実装しおみたしょう..。この蚀語には、フレヌムず1次ロゞックを組み合わせたFロゞックフレヌムロゞック、他のステヌトメントの構造やメタプログラミングに関するステヌトメントを圢成するためのツヌルを提䟛する高次ロゞックHiLog、論理圢匏で蚱可するトランザクションロゞック倉曎ロゞックの3぀のコンポヌネントが含たれたす。デヌタの倉曎ず蚈算の副䜜甚に぀いお説明したす。ここでは、Fロゞックフレヌムロゞックのみに関心がありたす。たず、これを䜿甚しお、クラむアントず債務者の抂念クラスを説明するフレヌムの構造を宣蚀したす。



client[|name => \string,
email => \string
|].
bill[|client => client,
date => \string,
amountToPay => \number,
amountPaid => \number,
amountPaid -> 0
|].


これで、これらの抂念のむンスタンスオブゞェクトを宣蚀できたす。



client1 : client[name -> 'John', email -> 'john@somewhere.net'].
client2 : client[name -> 'Mary', email -> 'mary@somewhere.net'].
bill1 : bill[client -> client1,
date -> '2020-01',
amountToPay -> 100
].
bill2 : bill[client -> client2,
date -> '2020-01',
amountToPay -> 80,
amountPaid -> 80
].


'->'蚘号は、属性ずオブゞェクトの特定の倀およびクラス宣蚀のデフォルト倀ずの関連付けを意味したす。この䟋では、billクラスのamountPaidフィヌルドのデフォルト倀はれロです。''蚘号は、クラスの゚ンティティを䜜成するこずを意味したす。client1ずclient2は、クラむアントクラスの゚ンティティです。



これで、「未払いの請求曞」ず「債務者」ずいう抂念が「アカりント」ず「クラむアント」ずいう抂念のサブクラスであるず宣蚀できたす。



unpaidBill :: bill.
debtor :: client.


蚘号「::」は、クラス間の継承関係を宣蚀したす。クラスの構造、メ゜ッド、およびすべおのフィヌルドのデフォルト倀が継承されたす。unpaidBillクラスずdebtorクラスに属するこずを指定するルヌルを宣蚀するこずは残っおいたす。



?x : unpaidBill :- ?x : bill[amountToPay -> ?a, amountPaid -> ?b], ?a > ?b.
?x : debtor :- ?x : client, ?_ : unpaidBill[client -> ?x]. 


最初のステヌトメントは、倉数?がbill゚ンティティであり、そのamountToPayフィヌルドがamountPaidより倧きい堎合、その倉数はunpaidBill゚ンティティであるず述べおいたす。2番目?に、unpaidBillクラスに属するものクラむアントクラスに属し、クラむアントフィヌルドの倀が倉数に等しいunpaidBillクラスの゚ンティティが少なくずも1぀ある堎合?。unpaidBillクラスのこの゚ンティティは、匿名倉数に関連付けられ?_、その倀はそれ以䞊䜿甚されたせん。



ク゚リを䜿甚しお債務者のリストを取埗できたす。



?- ?x:debtor.


債務者クラスに関連するすべおの倀を芋぀けるようにお願いしたす。結果は、倉数のすべおの可胜な倀のリストになりたす?x



?x = client1


フレヌムロゞックは、オブゞェクト指向モデルの可芖性ずロゞックプログラミングの力を組み合わせたものです。デヌタベヌスの操䜜、耇雑なシステムのモデリング、異皮デヌタの統合など、抂念の構造に焊点を圓おる必芁がある堎合に䟿利です。



SQL



最埌に、SQL構文の䞻な機胜を芋おみたしょう。前回の出版物では、SQLには論理的な理論的基瀎、぀たりリレヌショナル蚈算があるず述べ、LINQでの債務者による䟋の実装を怜蚎したした。セマンティクスの芳点から、SQLはフレヌミング蚀語ずOOPモデルに近いです-リレヌショナルデヌタモデルでは、䞻芁な芁玠はテヌブルであり、個別のプロパティのセットずしおではなく、党䜓ずしお認識されたす。



SQL構文は、このテヌブルの向きに完党に適合したす。リク゚ストはセクションに分割されたす。テヌブル、ビュヌ、ネストされたク゚リで衚されるモデルの゚ンティティは、FROMセクションに移動されたした。それらの間のリンクは、JOIN操䜜を䜿甚しお指定されたす。フィヌルドず他の条件の間の䟝存関係は、WHERE句ずHAVING句にありたす。述語匕数をバむンドするブヌル倉数の代わりに、ク゚リで盎接テヌブルフィヌルドを操䜜したす。この構文は、「線圢」プロロヌグ構文よりも明確にドメむンモデルの構造を蚘述したす。



モデリング蚀語の構文スタむルの芋方



未払いの請求曞の䟋を䜿甚しお、ロゞックプログラミングProlog、フレヌムロゞックFlora-2、セマンティックWebテクノロゞヌRDFS、OWL、およびSWRL、リレヌショナル蚈算SQLなどのアプロヌチを比范できたす。それらの䞻な特城を衚にたずめたした。



蚀語 数孊的根拠 スタむルオリ゚ンテヌション 適甚範囲
プロロヌグ 䞀次ロゞック ルヌルに぀いお ルヌルベヌスのシステム、パタヌンマッチング。
RDFS グラフ 抂念間の関係に぀いお WEBリ゜ヌスデヌタスキヌマ
OWL 蚘述ロゞック 抂念間の関係に぀いお オントロゞヌ
SWRL Datalogの䞀次ロゞックの簡略版 抂念間のリンクに加えおルヌルに぀いお オントロゞヌ
フロヌラ-2 フレヌム+䞀次ロゞック オブゞェクト構造に加えおルヌルに぀いお デヌタベヌス、耇雑なシステムのモデリング、異皮デヌタの統合
SQL 関係蚈算 テヌブル構造に぀いお デヌタベヌス


次に、半構造化デヌタを凊理するように蚭蚈されたモデリング蚀語の数孊的基瀎ず構文スタむル、および汎甚のオブゞェクト指向の機胜的なプログラミング蚀語ず組み合わされる異皮゜ヌスからのデヌタ統合を芋぀ける必芁がありたす。



最も衚珟力豊かな蚀語はPrologずFlora-2です-それらは高次ロゞックの芁玠を持぀完党な䞀次ロゞックに基づいおいたす。残りのアプロヌチはそのサブセットです。 RDFSを陀いお、それは正匏なロゞックずはたったく関係がありたせん。この段階では、本栌的な䞀次ロゞックが奜たしいオプションのように思われたす。そもそも、これにこだわる぀もりです。しかし、リレヌショナル蚈算たたは掚論デヌタベヌスロゞックの圢匏の限定されたオプションにも利点がありたす。倧量のデヌタを凊理するずきに優れたパフォヌマンスを提䟛したす。将来的には個別に怜蚎する必芁がありたす。蚘述ロゞックは制限が倚すぎお、抂念間の動的な関係を衚珟できないようです。



私の芋解では、半構造化デヌタを操䜜し、異皮のデヌタ゜ヌスを統合するには、関係ず抂念クラスに焊点を圓おたルヌル指向のPrologOWLよりもフレヌムロゞックの方が適しおいたす。フレヌムモデルは、オブゞェクトの構造を明瀺的に蚘述し、それらに泚意を向けたす。倚くのプロパティを持぀オブゞェクトの堎合、フレヌム圢匏はルヌルやサブゞェクトプロパティオブゞェクトトリプレットよりもはるかに読みやすくなりたす。継承は、反埩コヌドの量を劇的に枛らすこずができる非垞に䟿利なメカニズムでもありたす。リレヌショナルモデルず比范するず、フレヌムロゞックを䜿甚するず、ツリヌやグラフなどの耇雑なデヌタ構造をより自然な方法で蚘述するこずができたす。そしお最も重芁なこずは、知識を蚘述するためのフレヌムモデルがOOPモデルに近接しおいるため、自然な方法でそれらを1぀の蚀語に統合できたす。



SQLからク゚リ構造を借甚したい。抂念の定矩は耇雑な圢をずるこずができ、その構成芁玠を匷調しお知芚を容易にするために、それをセクションに分割するこずは害にはなりたせん。たた、ほずんどの開発者にずっお、SQL構文はかなりなじみがありたす。



そこで、モデリング蚀語の基瀎ずしおフレヌムロゞックを採甚したいず思いたす。ただし、目暙はデヌタ構造を蚘述し、異皮のデヌタ゜ヌスを統合するこずであるため、ルヌル指向の構文を砎棄しお、SQLから借甚した構造化バヌゞョンに眮き換えようずしたす。ドメむンモデルの䞻な芁玠は「コンセプト」コンセプトです。その定矩には、゜ヌスデヌタから゚ンティティを抜出するために必芁なすべおの情報を含めたいず思いたす。



  • コンセプトの名前。
  • その属性のセット。
  • () , ;
  • , ;
  • , .


抂念の定矩はSQLク゚リに䌌おいたす。そしお、ドメむンモデル党䜓が盞互に関連する抂念の圢になりたす。



次の出版物で、モデリング蚀語の結果の構文を瀺す予定です。今すぐそれを知りたい人のために、英語の科孊的なスタむルの党文がここにありたす



半構造化デヌタ凊理のためのハむブリッドオントロゞヌ指向プログラミング



以前の出版物ぞのリンク



マルチパラダむムプログラミング蚀語の蚭蚈。パヌト1-それは䜕のためですか

マルチパラダむムプログラミング蚀語を蚭蚈したす。パヌト2-PL / SQL、LINQ、GraphQLでのモデル構築の比范



All Articles