@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/dll-com-interface-backward-compatibility/#article>
    schema:about <https://comcomponent.com/knowledge/dll/>, <https://comcomponent.com/knowledge/com-interface/>, <https://comcomponent.com/knowledge/dotnet-compatibility-change-rules/> ;
    schema:mentions <https://comcomponent.com/knowledge/abi/>, <https://comcomponent.com/knowledge/calling-convention/>, <https://comcomponent.com/knowledge/export-ordinal/>, <https://comcomponent.com/knowledge/cbsize-convention/>, <https://comcomponent.com/knowledge/com/>, <https://comcomponent.com/knowledge/vtable/>, <https://comcomponent.com/knowledge/iid/>, <https://comcomponent.com/knowledge/clsid/>, <https://comcomponent.com/knowledge/progid/>, <https://comcomponent.com/knowledge/queryinterface/>, <https://comcomponent.com/knowledge/type-library/>, <https://comcomponent.com/knowledge/vb6/>, <https://comcomponent.com/knowledge/vb6-early-binding/>, <https://comcomponent.com/knowledge/default-interface-member/>, <https://comcomponent.com/knowledge/strong-name/>, <https://comcomponent.com/knowledge/binding-redirect/>, <https://comcomponent.com/knowledge/assembly-version/>, <https://comcomponent.com/knowledge/semver/>, <https://comcomponent.com/knowledge/package-validation-apicompat/>, <https://comcomponent.com/knowledge/binary-compatibility/>, <https://comcomponent.com/knowledge/source-compatibility/>, <https://comcomponent.com/knowledge/behavioral-compatibility/>, <https://comcomponent.com/knowledge/dotnet/>, <https://comcomponent.com/knowledge/dotnet-framework/> .

<https://comcomponent.com/knowledge/dll/> a skos:Concept ;
    skos:prefLabel "DLL(ダイナミックリンクライブラリ)"@ja ;
    skos:definition "実行時に読み込まれ、関数やデータを他のモジュールと共有できるWindowsのバイナリモジュール。"@ja ;
    skos:altLabel "Dynamic Link Library" ;
    skos:altLabel "動的リンクライブラリ"@ja ;
    ks:uses <https://comcomponent.com/knowledge/abi/> ;
    ks:uses <https://comcomponent.com/knowledge/export-ordinal/> .

<https://comcomponent.com/knowledge/com-interface/> a skos:Concept ;
    skos:prefLabel "COMインターフェース"@ja ;
    skos:definition "一意なIIDを持ち、vtable(関数ポインタ表)というバイナリレイアウトで実装される、COMコンポーネントが公開するメソッド契約。公開後は不変(immutable)とされる。"@ja ;
    skos:altLabel "COM Interface" ;
    skos:altLabel "IUnknown派生インターフェース"@ja ;
    skos:broader <https://comcomponent.com/knowledge/com/> ;
    ks:uses <https://comcomponent.com/knowledge/vtable/> ;
    ks:requires <https://comcomponent.com/knowledge/iid/> ;
    ks:requires <https://comcomponent.com/knowledge/queryinterface/> ;
    ks:requires <https://comcomponent.com/knowledge/binary-compatibility/> .

<https://comcomponent.com/knowledge/dotnet-compatibility-change-rules/> a skos:Concept ;
    skos:prefLabel ".NETの互換性変更ルール"@ja ;
    skos:definition "Microsoftが.NETライブラリ自身の開発で使っている、public APIへの変更を許可・禁止・要判断に分類した公式ルール。"@ja ;
    skos:altLabel "Change rules for compatibility" ;
    skos:altLabel "互換性のための変更ルール"@ja ;
    ks:uses <https://comcomponent.com/knowledge/binary-compatibility/> ;
    ks:uses <https://comcomponent.com/knowledge/source-compatibility/> ;
    ks:uses <https://comcomponent.com/knowledge/behavioral-compatibility/> ;
    ks:verifiedBy <https://comcomponent.com/knowledge/package-validation-apicompat/> .

<https://comcomponent.com/knowledge/abi/> a skos:Concept ;
    skos:prefLabel "ABI(Application Binary Interface)"@ja ;
    skos:definition "コンパイル済みバイナリ同士が守る取り決めで、引数の渡し方や構造体のメモリ配置、シンボル名の付け方などソースコードではなく機械語レベルの契約を指す。"@ja ;
    skos:altLabel "Application Binary Interface" ;
    skos:altLabel "バイナリレベルの契約"@ja ;
    skos:broader <https://comcomponent.com/knowledge/dll/> ;
    ks:uses <https://comcomponent.com/knowledge/calling-convention/> .

<https://comcomponent.com/knowledge/calling-convention/> a skos:Concept ;
    skos:prefLabel "呼び出し規約(calling convention)"@ja ;
    skos:definition "関数呼び出しで引数をレジスタとスタックのどちらでどう渡すか、戻り値をどこに置くか、呼び出し後にスタックを戻すのが呼ぶ側か呼ばれる側かを定める約束。"@ja ;
    skos:altLabel "cdecl" ;
    skos:altLabel "stdcall" ;
    skos:broader <https://comcomponent.com/knowledge/c-abi/> .

<https://comcomponent.com/knowledge/export-ordinal/> a skos:Concept ;
    skos:prefLabel "エクスポート序数(ordinal)"@ja ;
    skos:definition "DLLのエクスポートテーブルで各関数に振られる番号で、呼び出し側は関数名の代わりにこの番号でインポートすることもできる。"@ja ;
    skos:altLabel "Ordinal" ;
    skos:altLabel "DLLエクスポート序数"@ja ;
    skos:broader <https://comcomponent.com/knowledge/dll/> .

<https://comcomponent.com/knowledge/cbsize-convention/> a skos:Concept ;
    skos:prefLabel "cbSize慣習"@ja ;
    skos:definition "構造体の先頭にサイズフィールド(cbSize)を持たせ、呼び出し側がどの世代の構造体を知っているかをDLL側が判別できるようにするWin32の拡張手法。"@ja ;
    skos:altLabel "cbSizeメンバ"@ja ;
    skos:altLabel "サイズフィールドによる世代管理"@ja ;
    skos:broader <https://comcomponent.com/knowledge/dll/> .

<https://comcomponent.com/knowledge/binary-compatibility/> a skos:Concept ;
    skos:prefLabel "バイナリ互換"@ja ;
    skos:definition "呼び出し側を再ビルドせずに新しいバイナリで動作する、互換性の中で最も条件が厳しい層。"@ja ;
    skos:altLabel "Binary Compatibility" ;
    skos:altLabel "再ビルド不要の互換性"@ja .

<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/com-interface/> .

<https://comcomponent.com/knowledge/vtable/> a skos:Concept ;
    skos:prefLabel "vtable(仮想関数テーブル)"@ja ;
    skos:definition "関数ポインタを決まった順番で並べた表で、COMインターフェースの実体であり、呼び出し側は何番目のスロットかという位置で目的のメソッドを呼ぶ。"@ja ;
    skos:altLabel "Virtual Function Table" ;
    skos:altLabel "仮想関数テーブル"@ja ;
    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/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/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/> ;
    ks:uses <https://comcomponent.com/knowledge/clsid/> .

<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/vb6/> a skos:Concept ;
    skos:prefLabel "Visual Basic 6.0(VB6)"@ja ;
    skos:definition "COMコンポーネントを型付きで呼び出せる、レガシーなVisual Basicの開発環境・言語。"@ja ;
    skos:altLabel "VB6" .

<https://comcomponent.com/knowledge/vb6-early-binding/> a skos:Concept ;
    skos:prefLabel "VB6/VBAの事前バインディング"@ja ;
    skos:definition "VB6やVBAが参照設定でCOMコンポーネントを使う際、コンパイル時にタイプライブラリを読んでvtable上の位置を焼き込む呼び出し方式。"@ja ;
    skos:altLabel "Early Binding" ;
    skos:altLabel "参照設定"@ja ;
    ks:requires <https://comcomponent.com/knowledge/vtable/> ;
    ks:requires <https://comcomponent.com/knowledge/type-library/> .

<https://comcomponent.com/knowledge/type-library/> a skos:Concept ;
    skos:prefLabel "型ライブラリ(TLB)"@ja ;
    skos:definition "インターフェース、メソッド、引数の型といった型情報をバイナリで持つファイル。VB6や.NETから型付きでCOMを呼び出す際の情報源になる。"@ja ;
    skos:altLabel "Type Library" ;
    skos:altLabel "TLB" ;
    skos:broader <https://comcomponent.com/knowledge/com/> .

<https://comcomponent.com/knowledge/dotnet/> a skos:Concept ;
    skos:prefLabel ".NET(Core以降)"@ja ;
    skos:definition ".NET Frameworkの後継となる、クロスプラットフォーム対応の.NETランタイム(.NET 5以降)。"@ja ;
    skos:altLabel ".NET Core" ;
    skos:altLabel "モダンな.NET"@ja ;
    ks:uses <https://comcomponent.com/knowledge/dotnet-compatibility-change-rules/> .

<https://comcomponent.com/knowledge/source-compatibility/> a skos:Concept ;
    skos:prefLabel "ソース互換"@ja ;
    skos:definition "呼び出し側を再ビルドすれば動作する互換性の層。"@ja ;
    skos:altLabel "Source Compatibility" .

<https://comcomponent.com/knowledge/behavioral-compatibility/> a skos:Concept ;
    skos:prefLabel "動作互換"@ja ;
    skos:definition "仕様としての振る舞いが変わらない互換性の層で、バイナリ互換・ソース互換が保たれていても壊れることがある。"@ja ;
    skos:altLabel "Behavioral Compatibility" ;
    skos:altLabel "振る舞いの互換性"@ja .

<https://comcomponent.com/knowledge/default-interface-member/> a skos:Concept ;
    skos:prefLabel "既定インターフェースメンバ(DIM)"@ja ;
    skos:definition ".NET Core 3.0/C# 8.0で導入された、インターフェースにメンバを追加しても既存の実装クラスに実装漏れを起こさせないための既定実装の仕組み。"@ja ;
    skos:altLabel "Default Interface Members" ;
    skos:altLabel "DIM" ;
    ks:incompatibleWith <https://comcomponent.com/knowledge/dotnet-framework/> .

<https://comcomponent.com/knowledge/dotnet-framework/> a skos:Concept ;
    skos:prefLabel ".NET Framework"@ja ;
    skos:definition "Windowsのコンポーネントとして扱われ、インストールされているOSのライフサイクルに沿ってサポートされるランタイム。System.Messagingの対象範囲。"@ja .

<https://comcomponent.com/knowledge/strong-name/> a skos:Concept ;
    skos:prefLabel "強い名前(strong name)"@ja ;
    skos:definition ".NETアセンブリを「名前+バージョン+カルチャ+公開鍵トークン」と署名で一意に識別する仕組み。"@ja ;
    skos:altLabel "Strong Name" ;
    ks:uses <https://comcomponent.com/knowledge/assembly-version/> .

<https://comcomponent.com/knowledge/assembly-version/> a skos:Concept ;
    skos:prefLabel "AssemblyVersion"@ja ;
    skos:definition "ランタイムがアセンブリの識別・ロードに使う唯一のバージョン番号。強い名前付きアセンブリでは.NET FrameworkのCLRが厳密一致を要求する。"@ja ;
    skos:altLabel "アセンブリバージョン"@ja .

<https://comcomponent.com/knowledge/binding-redirect/> a skos:Concept ;
    skos:prefLabel "バインディングリダイレクト"@ja ;
    skos:definition ".NET Frameworkで、呼び出し側が要求するアセンブリバージョンを実際にロードする別のバージョンへ読み替えさせる構成ファイルの設定。"@ja ;
    skos:altLabel "Binding Redirect" .

<https://comcomponent.com/knowledge/semver/> a skos:Concept ;
    skos:prefLabel "セマンティックバージョニング(semver)"@ja ;
    skos:definition "互換性のない変更でMAJOR、後方互換のある機能追加でMINOR、後方互換のあるバグ修正でPATCHを上げるという、バージョン番号の付け方の規約。"@ja ;
    skos:altLabel "Semantic Versioning" ;
    skos:altLabel "SemVer" .

<https://comcomponent.com/knowledge/package-validation-apicompat/> a skos:Concept ;
    skos:prefLabel "Package Validation / ApiCompat"@ja ;
    skos:definition "前バージョンとのバイナリ互換を機械的にチェックできる.NETのツール群。"@ja ;
    skos:altLabel "Package Validation" ;
    skos:altLabel "ApiCompat" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/dll/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/abi/> ;
    schema:description "ネイティブDLLの互換性はエクスポートテーブル・呼び出し規約・メモリレイアウトというABI(バイナリレベルの契約)によって決まる"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/dlls/dynamic-link-libraries> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/abi/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/calling-convention/> ;
    schema:description "ABIは引数の受け渡し方法や後始末の責任を定める呼び出し規約(__cdecl/__stdcallなど)を構成要素の1つとする"@ja ;
    ks:evidence <https://learn.microsoft.com/cpp/build/reference/rtc-run-time-error-checks> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/dll/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/export-ordinal/> ;
    schema:description "DLLのエクスポートテーブルでは各関数に番号が振られ、呼び出し側は関数名の代わりにこのエクスポート序数でインポートすることもできる"@ja ;
    ks:evidence <https://learn.microsoft.com/cpp/build/exporting-from-a-dll-using-def-files> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/dll/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/cbsize-convention/> ;
    schema:description "呼び出し側が確保して渡す構造体を拡張可能にするため、DLLの公開構造体には先頭にcbSizeを持たせる設計を採用できる"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/api/shellapi/ns-shellapi-notifyicondataw> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/dll/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/binary-compatibility/> ;
    schema:description "客先で動く古いEXEなど再ビルドできない呼び出し側がいる場合、DLLの変更はバイナリ互換を前提として設計する必要がある"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/standard/library-guidance/breaking-changes> ;
    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-interface/> ;
    schema:description "COMは一意なIIDを持つ不変のインターフェースを部品の公開契約として使う設計である"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/com/interface-design-rules> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/com-interface/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/vtable/> ;
    schema:description "COMインターフェースはvtable(関数ポインタ表)というバイナリレイアウトを実体として持つ"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/com/interface-pointers-and-interfaces> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/com-interface/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/iid/> ;
    schema:description "COMインターフェースは一意なIID(インターフェース識別子)を持たねばならず、契約の内容が変われば必ず新しいIIDになる"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/com/interface-design-rules> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/com-interface/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/queryinterface/> ;
    schema:description "新旧どちらのインターフェースに対応しているかを呼び出し側が実行時に安全に確認する手段として、COMインターフェースはQueryInterfaceを前提とする"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/rpc/the-versioning-theory-for-rpc-and-com> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/com-interface/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/binary-compatibility/> ;
    schema:description "COMインターフェースが公開後は不変であるという鉄則は、vtableのバイナリレイアウトに依存する呼び出し側のバイナリ互換を保つための設計である"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/com/interface-design-rules> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/progid/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/clsid/> ;
    schema:description "ProgIDはCLSIDへの対応をレジストリで引くための人間可読な別名で、バージョン非依存ProgIDはCurVerで最新版のCLSIDに対応付けられる"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/com/com-registry-keys> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/clsid/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/com-interface/> ;
    schema:description "CLSIDが指す実装を同じCLSIDのまま差し替えられるのは、公開済みのCOMインターフェースの契約を守っている場合に限られる"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/com/com-registry-keys> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/vb6/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/vb6-early-binding/> ;
    schema:description "参照設定でCOMコンポーネントを使う場合、VB6/VBAは事前バインディングで型付きに呼び出せる"@ja ;
    ks:evidence <https://learn.microsoft.com/office/vba/project/concepts/ole-programmatic-identifiers-late-binding-and-early-binding-project> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/vb6-early-binding/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/vtable/> ;
    schema:description "VB6/VBAの事前バインディングはコンパイル時に読み込んだ情報からvtable上の位置を焼き込んで呼び出しを解決する"@ja ;
    ks:evidence <https://learn.microsoft.com/office/vba/project/concepts/ole-programmatic-identifiers-late-binding-and-early-binding-project> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/vb6-early-binding/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/type-library/> ;
    schema:description "VB6/VBAの事前バインディングは参照設定でコンパイル時にタイプライブラリを読んで呼び出しを解決する"@ja ;
    ks:evidence <https://learn.microsoft.com/office/vba/project/concepts/ole-programmatic-identifiers-late-binding-and-early-binding-project> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/com-interface/> ;
    rdf:predicate ks:incompatibleWith ;
    rdf:object <https://comcomponent.com/knowledge/vb6-early-binding/> ;
    schema:description "公開後にインターフェースのレイアウトを変更すると、事前バインディングで位置を焼き込んだVB6/VBAクライアントは別のメソッドを呼んでしまい両立しない"@ja ;
    ks:evidence <https://learn.microsoft.com/office/vba/project/concepts/ole-programmatic-identifiers-late-binding-and-early-binding-project> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/dotnet/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/dotnet-compatibility-change-rules/> ;
    schema:description ".NET開発では、Microsoft自身が.NETライブラリの開発で使う互換性変更ルールが自社ライブラリの評価基準として公開されている"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/core/compatibility/library-change-rules> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/dotnet-compatibility-change-rules/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/binary-compatibility/> ;
    schema:description ".NETの破壊的変更は、バイナリ互換を壊すかどうかという観点を含めて分類される"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/standard/library-guidance/breaking-changes> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/dotnet-compatibility-change-rules/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/source-compatibility/> ;
    schema:description ".NETの破壊的変更は、ソース互換を壊すかどうかという観点を含めて分類される"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/standard/library-guidance/breaking-changes> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/dotnet-compatibility-change-rules/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/behavioral-compatibility/> ;
    schema:description ".NETの破壊的変更は、バイナリ・ソース互換が保たれたまま振る舞いだけが変わる動作互換の観点も含めて分類される"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/standard/library-guidance/breaking-changes> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/dotnet-compatibility-change-rules/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/default-interface-member/> ;
    schema:description "インターフェースへのメンバ追加は要判断とされ、既定実装(DIM)を付ければ既存の実装クラスを壊さずに済む場合がある"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/core/compatibility/library-change-rules> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/default-interface-member/> ;
    rdf:predicate ks:incompatibleWith ;
    rdf:object <https://comcomponent.com/knowledge/dotnet-framework/> ;
    schema:description "既定実装(DIM)は.NET Core 3.0/C# 8.0で導入された機能で.NET Frameworkは対象外のため、.NET Framework上のクライアントが残るライブラリではこの緩和策を使えない"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/core/compatibility/library-change-rules> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/dotnet/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/strong-name/> ;
    schema:description "強い名前を付けて配布する場合、.NETアセンブリは名前・バージョン・カルチャ・公開鍵トークンで一意に識別できる"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/standard/library-guidance/versioning> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/strong-name/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/assembly-version/> ;
    schema:description "強い名前付きアセンブリの識別には、ランタイムがロードに使う唯一のバージョンであるAssemblyVersionが使われる"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/standard/library-guidance/versioning> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/assembly-version/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/binding-redirect/> ;
    schema:description "強い名前付きアセンブリでAssemblyVersionを上げると、.NET FrameworkのCLRは厳密一致を要求するため、呼び出し側にバインディングリダイレクトが必要になる"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/standard/library-guidance/versioning> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/semver/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/dotnet-compatibility-change-rules/> ;
    schema:description "semverは公開APIと破壊的変更の定義を宣言して初めて機能するため、.NETでは公式の互換性変更ルールをその定義として採用できる"@ja ;
    ks:evidence <https://semver.org/> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/dotnet-compatibility-change-rules/> ;
    rdf:predicate ks:verifiedBy ;
    rdf:object <https://comcomponent.com/knowledge/package-validation-apicompat/> ;
    schema:description "自社の破壊的変更の定義として採用した互換性変更ルールへの準拠は、Package ValidationやApiCompatツールで前バージョンとのバイナリ互換を機械的に確認できる"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/standard/library-guidance/nuget-package-compatibility-rules> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .
