@prefix schema: <https://schema.org/> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix ks: <https://comcomponent.com/vocab/> .

<https://comcomponent.com/blog/2026/01/25/001-why-com-is-beautiful/#article>
    schema:about <https://comcomponent.com/knowledge/com/> ;
    schema:mentions <https://comcomponent.com/knowledge/iunknown/>, <https://comcomponent.com/knowledge/queryinterface/>, <https://comcomponent.com/knowledge/com-reference-counting/>, <https://comcomponent.com/knowledge/iid/>, <https://comcomponent.com/knowledge/clsid/>, <https://comcomponent.com/knowledge/progid/>, <https://comcomponent.com/knowledge/hresult/>, <https://comcomponent.com/knowledge/in-proc-com/>, <https://comcomponent.com/knowledge/com-localserver/>, <https://comcomponent.com/knowledge/bitness-match-requirement/>, <https://comcomponent.com/knowledge/com-binary-compatibility/>, <https://comcomponent.com/knowledge/com-interface-versioning/>, <https://comcomponent.com/knowledge/proxy-stub/>, <https://comcomponent.com/knowledge/out-of-proc-com-disconnection-error/>, <https://comcomponent.com/knowledge/in-proc-crash-propagation/>, <https://comcomponent.com/knowledge/dotnet-com-interop/>, <https://comcomponent.com/knowledge/idl/>, <https://comcomponent.com/knowledge/activex/> .

<https://comcomponent.com/knowledge/com/> a skos:Concept ;
    skos:prefLabel "COM(コンポーネントオブジェクトモデル)"@ja ;
    skos:definition "公開インターフェース、レジストリ登録、Apartment Modelなどを土台にした、Windowsのバイナリ互換コンポーネントモデル。"@ja ;
    skos:altLabel "Component Object Model" ;
    ks:uses <https://comcomponent.com/knowledge/iunknown/> ;
    ks:uses <https://comcomponent.com/knowledge/queryinterface/> ;
    ks:uses <https://comcomponent.com/knowledge/com-reference-counting/> ;
    ks:uses <https://comcomponent.com/knowledge/clsid/> ;
    ks:uses <https://comcomponent.com/knowledge/iid/> ;
    ks:uses <https://comcomponent.com/knowledge/hresult/> ;
    ks:implements <https://comcomponent.com/knowledge/com-binary-compatibility/> ;
    ks:implements <https://comcomponent.com/knowledge/com-interface-versioning/> ;
    ks:uses <https://comcomponent.com/knowledge/idl/> .

<https://comcomponent.com/knowledge/iunknown/> a skos:Concept ;
    skos:prefLabel "IUnknown"@ja ;
    skos:definition "COMのすべてのインターフェースが実装しなければならない基底インターフェースで、QueryInterface・AddRef・Releaseの3メソッドを持つ。"@ja ;
    skos:altLabel "IUnknown interface" .

<https://comcomponent.com/knowledge/queryinterface/> a skos:Concept ;
    skos:prefLabel "QueryInterface"@ja ;
    skos:definition "COMオブジェクトが特定のIIDのインターフェースに対応しているかを、呼び出し側が実行時に安全に確認するための、IUnknownが持つメソッド。"@ja ;
    skos:altLabel "IUnknown::QueryInterface" ;
    skos:broader <https://comcomponent.com/knowledge/com/> .

<https://comcomponent.com/knowledge/com-reference-counting/> a skos:Concept ;
    skos:prefLabel "COMの参照カウント(AddRef/Release)"@ja ;
    skos:definition "AddRefで増え、Releaseで減って0になった時点でオブジェクト自身を破棄する、IUnknownが提供する寿命管理の仕組み。"@ja ;
    skos:altLabel "AddRef" ;
    skos:altLabel "Release" .

<https://comcomponent.com/knowledge/clsid/> a skos:Concept ;
    skos:prefLabel "CLSID(Class ID)"@ja ;
    skos:definition "COMコンポーネントの実装(クラス)を一意に指すGUID。レジストリ上の登録の鍵になる識別子。"@ja ;
    skos:altLabel "Class ID" ;
    skos:broader <https://comcomponent.com/knowledge/com/> .

<https://comcomponent.com/knowledge/iid/> a skos:Concept ;
    skos:prefLabel "IID(インターフェース識別子)"@ja ;
    skos:definition "COMインターフェース(契約)を一意に識別するGUID。契約の内容が変われば必ず新しいIIDになる。"@ja ;
    skos:altLabel "Interface ID" ;
    skos:altLabel "IID" ;
    skos:broader <https://comcomponent.com/knowledge/com/> .

<https://comcomponent.com/knowledge/hresult/> a skos:Concept ;
    skos:prefLabel "HRESULT"@ja ;
    skos:definition "COMの呼び出し結果を表す32ビットの符号付き整数のエラーコード体系で、.NETの例外はHRESULTに対応付けられてCOM側へ伝わる。"@ja .

<https://comcomponent.com/knowledge/com-binary-compatibility/> a skos:Concept ;
    skos:prefLabel "COMのバイナリ互換性"@ja ;
    skos:definition "プログラミング言語やランタイムを問わず、一度ビルドしたCOMコンポーネントをそのまま再利用できる性質。"@ja ;
    ks:requires <https://comcomponent.com/knowledge/iunknown/> .

<https://comcomponent.com/knowledge/com-interface-versioning/> a skos:Concept ;
    skos:prefLabel "COMのバージョン共存"@ja ;
    skos:definition "既存インターフェースを変更せずに新しいインターフェースを追加し、QueryInterfaceで対応状況を実行時に確認することで後方互換を保つ設計。"@ja ;
    ks:requires <https://comcomponent.com/knowledge/queryinterface/> .

<https://comcomponent.com/knowledge/in-proc-com/> a skos:Concept ;
    skos:prefLabel "In-proc COM(DLLサーバー)"@ja ;
    skos:definition "COMコンポーネントを呼び出し側と同じプロセスに読み込んで使う形態。"@ja ;
    skos:altLabel "DLLサーバー"@ja ;
    ks:requires <https://comcomponent.com/knowledge/bitness-match-requirement/> ;
    ks:mayCause <https://comcomponent.com/knowledge/in-proc-crash-propagation/> .

<https://comcomponent.com/knowledge/com-localserver/> a skos:Concept ;
    skos:prefLabel "COM LocalServer(別プロセスCOMサーバー)"@ja ;
    skos:definition "COMサーバーをEXEとして別プロセスで動かす形態。bitnessの壁を越えたり、クラッシュを隔離したりできる。レジストリのCLSID配下のLocalServer32キーにEXEパスを登録する。"@ja ;
    skos:altLabel "LocalServer32" ;
    skos:altLabel "out-of-proc COMサーバー"@ja ;
    skos:broader <https://comcomponent.com/knowledge/com/> ;
    ks:prevents <https://comcomponent.com/knowledge/in-proc-crash-propagation/> .

<https://comcomponent.com/knowledge/bitness-match-requirement/> a skos:Concept ;
    skos:prefLabel "bitness一致要件"@ja ;
    skos:definition "ネイティブモジュール(in-procのCOMコンポーネント、P/Invokeで呼ぶDLL、ベンダー提供SDKのDLLなど)を読み込むホストプロセスと、そのモジュールのビット構成(32bit/64bit)が一致していなければならないという制約。"@ja ;
    skos:altLabel "32bit/64bitの一致"@ja ;
    skos:altLabel "bitness match" .

<https://comcomponent.com/knowledge/in-proc-crash-propagation/> a skos:Concept ;
    skos:prefLabel "In-procのクラッシュ道連れ"@ja ;
    skos:definition "In-proc COMコンポーネントがクラッシュすると、同じプロセスで動作しているホストアプリケーションも一緒に落ちてしまう現象。"@ja .

<https://comcomponent.com/knowledge/out-of-proc-com-disconnection-error/> a skos:Concept ;
    skos:prefLabel "Out-of-proc COMの切断エラー"@ja ;
    skos:definition "Out-of-proc COMのサーバープロセスがクラッシュ・終了したときに呼び出し側へ返る、RPC_E_DISCONNECTEDやRPC_S_SERVER_UNAVAILABLEといったエラー群。"@ja ;
    skos:altLabel "RPC_E_DISCONNECTED" ;
    skos:altLabel "RPC_S_SERVER_UNAVAILABLE" .

<https://comcomponent.com/knowledge/proxy-stub/> a skos:Concept ;
    skos:prefLabel "Proxy/Stub"@ja ;
    skos:definition "マーシャリングを担当する一組の部品。呼び出す側に立つProxyと、呼ばれる側で受け取った呼び出しを本物のオブジェクトへ渡すStubからなる。"@ja .

<https://comcomponent.com/knowledge/idl/> a skos:Concept ;
    skos:prefLabel "IDL(インターフェース定義言語)"@ja ;
    skos:definition "インターフェースという契約を先に記述し、そこから呼び出し側・実装側両方のヘッダーやコードを生成するための言語。"@ja ;
    skos:altLabel "Interface Definition Language" ;
    skos:altLabel "MIDL" .

<https://comcomponent.com/knowledge/dotnet-com-interop/> a skos:Concept ;
    skos:prefLabel ".NETのCOM相互運用(COM Interop)"@ja ;
    skos:definition "ComImport属性やRCW(Runtime Callable Wrapper)を介して.NETからCOMコンポーネントを呼び出す仕組み。HRESULTの失敗を例外に変換するなど、決まった規則で変換する。"@ja ;
    skos:altLabel "COM Interop" ;
    ks:uses <https://comcomponent.com/knowledge/queryinterface/> ;
    ks:uses <https://comcomponent.com/knowledge/hresult/> ;
    ks:uses <https://comcomponent.com/knowledge/com-reference-counting/> .

<https://comcomponent.com/knowledge/progid/> a skos:Concept ;
    skos:prefLabel "ProgID(Programmatic Identifier)"@ja ;
    skos:definition "CLSIDに付けた、人が読める文字列の名前。`Excel.Application`のような形でCLSIDに対応付けられる。"@ja ;
    skos:altLabel "Programmatic Identifier" ;
    skos:broader <https://comcomponent.com/knowledge/com/> .

<https://comcomponent.com/knowledge/activex/> a skos:Concept ;
    skos:prefLabel "ActiveX"@ja ;
    skos:definition "実務ではCOMベースのコントロールやその周辺資産をまとめて指す言葉として使われる技術群。特に.ocx形式のUIコントロールやIE/コンテナへ埋め込む部品を含むことが多い。"@ja ;
    skos:altLabel "ActiveXコントロール"@ja ;
    skos:broader <https://comcomponent.com/knowledge/com/> ;
    ks:requires <https://comcomponent.com/knowledge/com/> .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/com/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/iunknown/> ;
    schema:description "すべてのCOMインターフェースはIUnknownを継承し、QueryInterface・AddRef・Releaseの3メソッドを備える契約になっている。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/com/iunknown> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/com/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/queryinterface/> ;
    schema:description "実行時に別のインターフェースへの対応を尋ねるQueryInterfaceが、実装を知らずに機能を確認する手段になっている。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/com/rules-for-implementing-queryinterface> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/com/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/com-reference-counting/> ;
    schema:description "AddRefで増え、Releaseで減って0になると破棄される参照カウントで、COMオブジェクトの寿命を管理する。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/com/managing-reference-counts> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/com/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/clsid/> ;
    schema:description "コンポーネントの実装はCLSIDという世界で一意なGUIDで識別される。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/com/com-class-objects-and-clsids> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/com/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/iid/> ;
    schema:description "インターフェースの契約もIIDというGUIDで一意に識別され、名前の衝突を防ぐ。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/com/com-interfaces> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/com/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/hresult/> ;
    schema:description "COMメソッドは例外ではなく整数のHRESULTで成否を返し、これが言語をまたいだ解釈を可能にする。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/com/structure-of-com-error-codes> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/com/> ;
    rdf:predicate ks:implements ;
    rdf:object <https://comcomponent.com/knowledge/com-binary-compatibility/> ;
    schema:description "仮想関数テーブルの並び順だけを規約にすることで、言語やコンパイラを問わない再利用を実現している。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/com/component-object-model--com--portal> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/com-binary-compatibility/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/iunknown/> ;
    schema:description "呼び出しの並び順がバイナリレベルで決まるのは、すべてのインターフェースがIUnknownを継承する規約があるからである。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/com/iunknown> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/com/> ;
    rdf:predicate ks:implements ;
    rdf:object <https://comcomponent.com/knowledge/com-interface-versioning/> ;
    schema:description "既存インターフェースを変えずに新しいインターフェースを追加していく設計が、後方互換を保ったバージョン共存を実現する。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/com/rules-for-implementing-queryinterface> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/com-interface-versioning/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/queryinterface/> ;
    schema:description "新しい版の契約に対応しているかどうかを、QueryInterfaceで実行時に確認する。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/com/rules-for-implementing-queryinterface> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/com/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/in-proc-com/> ;
    schema:description "コンポーネントをそう登録した場合、呼び出し側と同じプロセスにDLLとして読み込むIn-proc(DLLサーバー)という配置形態を持つ。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/com/inprocserver32> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/com/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/com-localserver/> ;
    schema:description "コンポーネントをそう登録した場合、別プロセスのEXEとして起動するOut-of-proc(EXEサーバー、LocalServer)という配置形態も持つ。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/com/localserver32> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/in-proc-com/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/bitness-match-requirement/> ;
    schema:description "In-procは呼び出し側プロセスとビット数(32bit/64bit)が一致していないと読み込めない。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/winprog64/running-32-bit-applications> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/in-proc-com/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/in-proc-crash-propagation/> ;
    schema:description "同じプロセスで動くIn-procコンポーネントがクラッシュすると、呼び出し側のホストプロセスも道連れで落ちる。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/com/inprocserver32> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/com-localserver/> ;
    rdf:predicate ks:prevents ;
    rdf:object <https://comcomponent.com/knowledge/in-proc-crash-propagation/> ;
    schema:description "別プロセスで動くOut-of-procなら、サーバー側がクラッシュしても呼び出し側は生き残る。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/com/localserver32> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/com-localserver/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/out-of-proc-com-disconnection-error/> ;
    schema:description "別プロセスであることは相手がいつでも消えうることも意味し、RPC_E_DISCONNECTEDやRPC_S_SERVER_UNAVAILABLEといったエラーが返ることがある。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/com/component-object-model--com--portal> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/com/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/proxy-stub/> ;
    schema:description "別プロセスや別マシンの呼び出しでも、Proxy/Stubが引数の詰め直し(マーシャリング)とプロセス間通信を隠し、呼び出し側のコードの見た目を変えない。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/com/proxies-and-stubs> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/com/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/idl/> ;
    schema:description "インターフェースという契約は通常IDLで先に定義し、そこから各言語向けのヘッダーを生成する。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/midl/midl-language-reference> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/dotnet-com-interop/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/progid/> ;
    schema:description "ProgIDを使って解決する場合、Type.GetTypeFromProgIDのように、人が読めるProgIDから対応するCLSIDのコンポーネントを解決して呼び出せる。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/dotnet/api/system.type.gettypefromprogid> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/dotnet-com-interop/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/queryinterface/> ;
    schema:description "C#でのインターフェースへのキャストは、内部的にQueryInterfaceの呼び出しに相当する。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/com/rules-for-implementing-queryinterface> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/dotnet-com-interop/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/hresult/> ;
    schema:description "失敗したHRESULTは.NET側で例外に変換されるという決まった規則で扱われる。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/dotnet/framework/interop/how-to-map-hresults-and-exceptions> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/dotnet-com-interop/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/com-reference-counting/> ;
    schema:description "AddRef/Releaseは.NET側では見えなくなるが、RCWという薄いラッパーが代わりに呼び出している。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/dotnet/standard/native-interop/> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/activex/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/com/> ;
    schema:description "ActiveXは、実務ではCOMベースのコントロールやその周辺資産をまとめて指す言葉として使われる。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/com/component-object-model--com--portal> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .
