@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/ada-inspection-dll-csharp/#article>
    schema:about <https://comcomponent.com/knowledge/ada-c-interop/>, <https://comcomponent.com/knowledge/p-invoke/> ;
    schema:mentions <https://comcomponent.com/knowledge/ada/>, <https://comcomponent.com/knowledge/gnat/>, <https://comcomponent.com/knowledge/c-abi/>, <https://comcomponent.com/knowledge/libraryimport/>, <https://comcomponent.com/knowledge/csharp-fixed-statement/>, <https://comcomponent.com/knowledge/blittable-type/>, <https://comcomponent.com/knowledge/structlayout/>, <https://comcomponent.com/knowledge/calling-convention/>, <https://comcomponent.com/knowledge/dll/>, <https://comcomponent.com/knowledge/dll-search-order/>, <https://comcomponent.com/knowledge/video-stride/>, <https://comcomponent.com/knowledge/spark/>, <https://comcomponent.com/knowledge/spark-mode/>, <https://comcomponent.com/knowledge/gnatprove/>, <https://comcomponent.com/knowledge/design-by-contract/>, <https://comcomponent.com/knowledge/integer-overflow/>, <https://comcomponent.com/knowledge/ada-range-constraint/>, <https://comcomponent.com/knowledge/unhandled-exception/>, <https://comcomponent.com/knowledge/gprbuild/>, <https://comcomponent.com/knowledge/ada-stand-alone-library/>, <https://comcomponent.com/knowledge/ada-elaboration/>, <https://comcomponent.com/knowledge/ada-task/>, <https://comcomponent.com/knowledge/wpf/>, <https://comcomponent.com/knowledge/ui-thread-context/> .

<https://comcomponent.com/knowledge/ada-c-interop/> a skos:Concept ;
    skos:prefLabel "AdaとC/C++の相互運用(Annex B)"@ja ;
    skos:definition "Ada参照マニュアルの附属書Bで標準化された、C・Fortranなど他言語とのインターフェース機構。ImportやExportで双方向の呼び出しができる。"@ja ;
    skos:altLabel "Annex B" ;
    skos:altLabel "Interfaces.C" ;
    ks:uses <https://comcomponent.com/knowledge/c-abi/> .

<https://comcomponent.com/knowledge/p-invoke/> a skos:Concept ;
    skos:prefLabel "P/Invoke"@ja ;
    skos:definition "C#などの.NETコードからアンマネージドなC関数群を呼び出すための、.NETの標準的な相互運用機構。"@ja ;
    skos:altLabel "Platform Invoke" ;
    skos:altLabel "P/Invoke(Platform Invoke)" ;
    skos:altLabel "DllImport" ;
    ks:uses <https://comcomponent.com/knowledge/csharp-fixed-statement/> ;
    ks:uses <https://comcomponent.com/knowledge/blittable-type/> ;
    ks:requires <https://comcomponent.com/knowledge/calling-convention/> ;
    ks:uses <https://comcomponent.com/knowledge/dll/> .

<https://comcomponent.com/knowledge/c-abi/> a skos:Concept ;
    skos:prefLabel "C ABI(Application Binary Interface)"@ja ;
    skos:definition "コンパイル済みのバイナリ同士が実行時にどう噛み合うかを、呼び出し規約・型のレイアウト・名前とリンクという3つの約束で定める、機械語レベルの取り決め。"@ja ;
    skos:altLabel "C言語のABI"@ja .

<https://comcomponent.com/knowledge/libraryimport/> a skos:Concept ;
    skos:prefLabel "LibraryImport"@ja ;
    skos:definition ".NET 7で追加された、partialメソッドに対しコンパイル時にP/Invokeのマーシャリングコードを生成するソースジェネレーター。"@ja ;
    skos:altLabel "LibraryImportAttribute" ;
    ks:implements <https://comcomponent.com/knowledge/p-invoke/> .

<https://comcomponent.com/knowledge/csharp-fixed-statement/> a skos:Concept ;
    skos:prefLabel "fixed文(C#)"@ja ;
    skos:definition "移動可能な変数をピン留めしてポインターを宣言するC#の文。文を実行している間はガベージコレクターが変数を移動せず、宣言したポインターはその文の中でだけ使える。配列、文字列、Span<T>などをピン留めできる。"@ja ;
    skos:altLabel "fixed statement" ;
    skos:altLabel "fixedステートメント"@ja .

<https://comcomponent.com/knowledge/blittable-type/> a skos:Concept ;
    skos:prefLabel "blittable型"@ja ;
    skos:definition "マネージドコードとアンマネージドコードの間でメモリ表現が同一で、変換なしにそのまま受け渡せる型。UnmanagedCallersOnlyを付けたメソッドのシグネチャに使える型はこれに限られる。"@ja ;
    skos:altLabel "blittable types" ;
    skos:broader <https://comcomponent.com/knowledge/c-abi/> .

<https://comcomponent.com/knowledge/structlayout/> a skos:Concept ;
    skos:prefLabel "StructLayout"@ja ;
    skos:definition "C#の構造体のメモリ配置をネイティブ側に合わせるための属性。LayoutKind.Sequentialで宣言順どおりに並べる、CharSetで文字列の扱いを指定するといった用途で使う。"@ja ;
    skos:altLabel "LayoutKind.Sequential" .

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

<https://comcomponent.com/knowledge/spark/> a skos:Concept ;
    skos:prefLabel "SPARK"@ja ;
    skos:definition "プログラムの性質を数学的に証明できるように設計された、Adaのサブセット(部分言語)とそのツール群。"@ja ;
    skos:altLabel "SPARK Ada" ;
    skos:altLabel "GNATprove" ;
    ks:uses <https://comcomponent.com/knowledge/gnatprove/> .

<https://comcomponent.com/knowledge/gnatprove/> a skos:Concept ;
    skos:prefLabel "GNATprove"@ja ;
    skos:definition "AdaCoreが提供する、SPARKコードの契約や表明を自動証明器で検証するコマンドラインツールである。"@ja ;
    skos:altLabel "gnatprove コマンド"@ja ;
    skos:broader <https://comcomponent.com/knowledge/spark/> ;
    ks:configuredBy <https://comcomponent.com/knowledge/spark-mode/> .

<https://comcomponent.com/knowledge/spark-mode/> a skos:Concept ;
    skos:prefLabel "SPARK_Mode"@ja ;
    skos:definition "コードをSPARKとして扱うかを指定するアスペクトとプラグマ。Onの部分はSPARKの制限に従ってGNATproveが解析し、Offの部分は解析されず、SPARKの制限にも従う必要がない。"@ja ;
    skos:altLabel "SPARK_Mode => Off" ;
    skos:altLabel "SPARK_Mode => On" ;
    skos:broader <https://comcomponent.com/knowledge/spark/> .

<https://comcomponent.com/knowledge/design-by-contract/> a skos:Concept ;
    skos:prefLabel "契約による設計(Pre/Post)"@ja ;
    skos:definition "サブプログラムの入口での前提条件(Pre)と、出口で保証する性質(Post)を宣言的に記述する、Ada 2012の契約機構である。"@ja ;
    skos:altLabel "Design by Contract" ;
    skos:altLabel "事前条件・事後条件"@ja ;
    skos:broader <https://comcomponent.com/knowledge/ada/> ;
    ks:verifiedBy <https://comcomponent.com/knowledge/gnatprove/> .

<https://comcomponent.com/knowledge/integer-overflow/> a skos:Concept ;
    skos:prefLabel "整数オーバーフロー"@ja ;
    skos:definition "整数の演算結果が、その型で表せる範囲を超えること。言語と設定によって、例外・パニック・折り返しのいずれかになる。Adaでは、値が型の基本範囲に収まるかを確かめるOverflow_Checkに失敗すると、実行時にConstraint_Errorが送出される。"@ja ;
    skos:altLabel "Integer Overflow" ;
    skos:altLabel "integer overflow" ;
    skos:altLabel "算術オーバーフロー"@ja ;
    skos:altLabel "Overflow_Check" ;
    ks:verifiedBy <https://comcomponent.com/knowledge/gnatprove/> .

<https://comcomponent.com/knowledge/unhandled-exception/> a skos:Concept ;
    skos:prefLabel "未処理例外"@ja ;
    skos:definition "アプリケーションのどこでもキャッチされないままランタイムまで届き、プロセスを終了させる例外である。"@ja ;
    skos:altLabel "unhandled exception" .

<https://comcomponent.com/knowledge/ada-stand-alone-library/> a skos:Concept ;
    skos:prefLabel "スタンドアロンライブラリ(Stand-alone Library)"@ja ;
    skos:definition "GPRbuildのライブラリプロジェクトでLibrary_Interfaceに外部へ見せるユニットを指定して作るAdaのライブラリ。初期化と終了処理の手続きを持ち、Ada以外の言語のプログラムから使える。"@ja ;
    skos:altLabel "Stand-alone Library" ;
    skos:altLabel "SAL" ;
    skos:altLabel "Library_Interface" ;
    ks:configuredBy <https://comcomponent.com/knowledge/gprbuild/> .

<https://comcomponent.com/knowledge/gprbuild/> a skos:Concept ;
    skos:prefLabel "GPRbuild"@ja ;
    skos:definition "GNATのプロジェクトファイル(.gpr)を読み、Adaや他言語のソースのコンパイル、バインド、リンクを行うAdaCoreのビルドツール。静的・共有ライブラリも作れる。"@ja ;
    skos:altLabel "gprbuild" .

<https://comcomponent.com/knowledge/ada-elaboration/> a skos:Concept ;
    skos:prefLabel "エラボレーション(elaboration)"@ja ;
    skos:definition "宣言が実行時の効果を得る処理。ライブラリユニットでは、パッケージ本体の初期化の文や変数の初期値の計算が含まれ、ユニットを使う前に行う必要がある。"@ja ;
    skos:altLabel "elaboration" ;
    skos:altLabel "Adaの初期化"@ja .

<https://comcomponent.com/knowledge/ada-task/> a skos:Concept ;
    skos:prefLabel "Adaのタスク(並行処理)"@ja ;
    skos:definition "スレッドをOSのAPIやライブラリに頼らず、言語仕様に組み込む形で提供するAdaの並行実行単位。"@ja ;
    skos:altLabel "task" ;
    skos:altLabel "rendezvous" .

<https://comcomponent.com/knowledge/dll-search-order/> a skos:Concept ;
    skos:prefLabel "DLLの検索順序"@ja ;
    skos:definition "Windowsが実行ファイルの起動時に限らず、LoadLibrary系APIによる動的な読み込み時も含めて、DLL redirectionやKnown DLLsなどの前段ルールを経てDLLを探す、決まった順序でフォルダーを辿る仕組み。"@ja ;
    skos:altLabel "DLL探索順"@ja .

<https://comcomponent.com/knowledge/wpf/> a skos:Concept ;
    skos:prefLabel "WPF"@ja ;
    skos:definition "XAMLでUIを宣言的に記述する、Windows専用のデスクトップUIフレームワーク。ベクターベースの描画とデータバインディングを特徴とする。"@ja ;
    skos:altLabel "Windows Presentation Foundation" ;
    ks:requires <https://comcomponent.com/knowledge/ui-thread-context/> .

<https://comcomponent.com/knowledge/ui-thread-context/> a skos:Concept ;
    skos:prefLabel "UIスレッドのコンテキスト"@ja ;
    skos:definition "WinForms/WPFなどデスクトップアプリで、UIの応答性を保つために画面更新や重い処理の実行場所として意識されるコンテキスト。"@ja ;
    skos:altLabel "UIイベントハンドラ"@ja .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/ada-c-interop/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/c-abi/> ;
    schema:description "C#とAdaの間にはC ABI(関数の呼び方と構造体の並びの決まり)を挟む。Convention => Cを付けたレコードはCの構造体に対応し、レコード型のパラメーターとアクセス型のinのパラメーターはCの関数にt*として渡る。記事の例では、NULLを確かめるためにパラメーターと結果をアクセス型で受けた。"@ja ;
    ks:evidence <https://www.adaic.org/resources/add_content/standards/22rm/html/RM-B-3.html> ;
    ks:verifiedAt "2026-11-10" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/libraryimport/> ;
    rdf:predicate ks:implements ;
    rdf:object <https://comcomponent.com/knowledge/p-invoke/> ;
    schema:description "記事のC#の層は、LibraryImportでAdaのDLLの関数を宣言し、画像と構造体をポインターで渡す。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/dotnet/standard/native-interop/pinvoke-source-generation> ;
    ks:verifiedAt "2026-11-10" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/p-invoke/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/csharp-fixed-statement/> ;
    schema:description "画像のバッファはfixed文でReadOnlySpanをピン留めし、先頭のポインターと長さを渡す。fixed文の間はガベージコレクターが配列を動かさず、ポインターはその中でだけ使えるので、Adaは呼び出しの間だけ読み、ポインターを保存しない。空のSpanをピン留めするとポインターはNULLになる。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/statements/fixed>, <https://learn.microsoft.com/en-us/dotnet/api/system.readonlyspan-1.getpinnablereference> ;
    ks:verifiedAt "2026-11-10" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/p-invoke/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/blittable-type/> ;
    schema:description "記事のパラメーターと結果の構造体はintとlongだけでできたblittable型で、変換せずにポインターで渡せる。boolはblittableではないので、合否もintにした。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/dotnet/standard/native-interop/best-practices> ;
    ks:verifiedAt "2026-11-10" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/blittable-type/> ;
    rdf:predicate ks:configuredBy ;
    rdf:object <https://comcomponent.com/knowledge/structlayout/> ;
    schema:description "記事の2つの構造体はintとlongだけでできたblittable型で、LayoutKind.Sequentialを指定してCの宣言と同じ順にフィールドを並べた。C#のsizeofとAdaのinspect_result_sizeで大きさを比べてから検査を始める。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/dotnet/standard/native-interop/best-practices> ;
    ks:verifiedAt "2026-11-10" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/p-invoke/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/calling-convention/> ;
    schema:description "AdaはConvention => Cで関数を公開しているので、C#の側はCallConvCdeclを指定する。x86のWindowsではP/Invokeの既定がStdcallで、x64では呼び出し規約が1つなので指定は結果を変えない。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/dotnet/standard/native-interop/calling-conventions> ;
    ks:verifiedAt "2026-11-10" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/p-invoke/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/dll/> ;
    schema:description "LibraryImportにlibinspectと書くと、.NETはWindowsではlibinspectとlibinspect.dllを、Linuxではlibinspect.soなどを探すので、gprbuildが作るlibinspect.dllとlibinspect.soのどちらにも届く。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/dotnet/standard/native-interop/native-library-loading> ;
    ks:verifiedAt "2026-11-10" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/spark/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/gnatprove/> ;
    schema:description "判定の関数を置いたInspect_CoreはSPARKのパッケージとしてGNATproveで証明し、ポインターを配列として扱う境界の関数はSPARKの外に置いてテストとレビューで確かめる。"@ja ;
    ks:evidence <https://docs.adacore.com/spark2014-docs/html/ug/en/appendix/command_line_invocation.html> ;
    ks:verifiedAt "2026-11-10" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/gnatprove/> ;
    rdf:predicate ks:configuredBy ;
    rdf:object <https://comcomponent.com/knowledge/spark-mode/> ;
    schema:description "判定の関数のパッケージにはSPARK_Modeを付けて証明の対象にし、境界の関数のパッケージには付けていない。"@ja ;
    ks:evidence <https://docs.adacore.com/spark2014-docs/html/ug/en/spark_mode.html> ;
    ks:verifiedAt "2026-11-10" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/design-by-contract/> ;
    rdf:predicate ks:verifiedBy ;
    rdf:object <https://comcomponent.com/knowledge/gnatprove/> ;
    schema:description "判定の関数の事前条件(行が1つ以上で、幅が列の数以下)と事後条件をGNATproveで確かめる。事前条件は、境界の関数が寸法を確かめてから呼ぶことで満たす。"@ja ;
    ks:evidence <https://docs.adacore.com/spark2014-docs/html/ug/en/source/how_to_investigate_unproved_checks.html> ;
    ks:verifiedAt "2026-11-10" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/integer-overflow/> ;
    rdf:predicate ks:verifiedBy ;
    rdf:object <https://comcomponent.com/knowledge/gnatprove/> ;
    schema:description "欠陥の画素は1行の数をNatural、全体の数を64ビットの整数で数え、どちらもあふれないことをGNATproveで証明した。"@ja ;
    ks:evidence <https://docs.adacore.com/spark2014-docs/html/ug/en/source/how_to_view_gnatprove_output.html> ;
    ks:verifiedAt "2026-11-10" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/ada-c-interop/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/unhandled-exception/> ;
    schema:description "処理しなかったAdaの例外をC#まで届かせると、プロセスが終了しうる。記事の境界の関数は、パラメーターの範囲外をifで確かめて4を返し、想定していない例外はすべて99のエラーコードに変えて返し、例外を外へ出さない。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/dotnet/standard/native-interop/exceptions-interoperability> ;
    ks:verifiedAt "2026-11-10" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/ada-stand-alone-library/> ;
    rdf:predicate ks:configuredBy ;
    rdf:object <https://comcomponent.com/knowledge/gprbuild/> ;
    schema:description "GPRbuildのライブラリプロジェクトでLibrary_Kindを\"dynamic\"にし、Library_InterfaceにInspect_APIを指定して、スタンドアロンライブラリを作る。"@ja ;
    ks:evidence <https://docs.adacore.com/gprbuild-docs/html/gprbuild_ug/gnat_project_manager.html> ;
    ks:verifiedAt "2026-11-10" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/ada-stand-alone-library/> ;
    rdf:predicate ks:automates ;
    rdf:object <https://comcomponent.com/knowledge/ada-elaboration/> ;
    schema:description "Library_Auto_Initを\"true\"にすると、スタンドアロンライブラリは自動で初期化される。記事の例では、初期化で1にする変数を返すinspect_elaboratedが、LinuxでもWindowsのランナーでも1を返した。"@ja ;
    ks:evidence <https://docs.adacore.com/gprbuild-docs/html/gprbuild_ug/gnat_project_manager.html> ;
    ks:verifiedAt "2026-11-10" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/ada-task/> ;
    rdf:predicate ks:incompatibleWith ;
    rdf:object <https://comcomponent.com/knowledge/ada-stand-alone-library/> ;
    schema:description "Windowsではスタンドアロンライブラリにライブラリのレベルのタスクを置けない。記事はこの制約を既存の記事に任せ、例のパッケージにはタスクがないことを書く。"@ja ;
    ks:evidence <https://docs.adacore.com/gnat_ugn-docs/html/gnat_ugn/gnat_ugn/platform_specific_information.html> ;
    ks:verifiedAt "2026-11-10" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/ada-stand-alone-library/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/dll/> ;
    schema:description "WindowsのランナーでAlireのGNATが作ったスタンドアロンライブラリはlibinspect.dllになり、GNATのランタイムのDLLに依存した。"@ja ;
    ks:evidence <https://docs.adacore.com/gnat_ugn-docs/html/gnat_ugn/gnat_ugn/platform_specific_information.html> ;
    ks:verifiedAt "2026-11-10" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/dll/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/dll-search-order/> ;
    schema:description "libinspect.dllとGNATのランタイムのDLLは、Windowsが探すフォルダー(記事ではアプリのフォルダー)に置く。記事のWindowsでのテストでは、ランタイムのDLLを除くとDllNotFoundExceptionでプロセスが終了した。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order>, <https://learn.microsoft.com/en-us/dotnet/standard/native-interop/best-practices> ;
    ks:verifiedAt "2026-11-10" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/wpf/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/ui-thread-context/> ;
    schema:description "WPFのUI要素は作ったスレッドからしか触れないので、記事の例では検査をTask.Runで別のスレッドで行い、結果の表示はawaitのあとUIスレッドに戻ってから行う。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/dotnet/desktop/wpf/advanced/threading-model> ;
    ks:verifiedAt "2026-11-10" ;
    ks:certainty "established" .
