@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/06/09/003-dotnet-algebraic-data-types/#article>
    schema:about <https://comcomponent.com/knowledge/algebraic-data-type/>, <https://comcomponent.com/knowledge/sum-type/> ;
    schema:mentions <https://comcomponent.com/knowledge/product-type/>, <https://comcomponent.com/knowledge/closed-case-class-hierarchy/>, <https://comcomponent.com/knowledge/record-case-hierarchy/>, <https://comcomponent.com/knowledge/fsharp-discriminated-union/>, <https://comcomponent.com/knowledge/oneof-library/>, <https://comcomponent.com/knowledge/source-generator-union/>, <https://comcomponent.com/knowledge/csharp-union-type-preview/>, <https://comcomponent.com/knowledge/match-method-pattern/>, <https://comcomponent.com/knowledge/case-handling-omission/>, <https://comcomponent.com/knowledge/closed-case-set/>, <https://comcomponent.com/knowledge/option-type/>, <https://comcomponent.com/knowledge/result-type/>, <https://comcomponent.com/knowledge/business-expected-failure/>, <https://comcomponent.com/knowledge/dotnet-exception/>, <https://comcomponent.com/knowledge/unexpected-system-failure/>, <https://comcomponent.com/knowledge/dotnet/>, <https://comcomponent.com/knowledge/dotnet-framework/> .

<https://comcomponent.com/knowledge/algebraic-data-type/> a skos:Concept ;
    skos:prefLabel "代数的データ型"@ja ;
    skos:definition "直積型と直和型の組み合わせによって、値が取り得る形をコメントや命名規則ではなく型として表現する考え方。"@ja ;
    skos:altLabel "Algebraic Data Type" ;
    skos:altLabel "ADT" ;
    ks:uses <https://comcomponent.com/knowledge/product-type/> ;
    ks:uses <https://comcomponent.com/knowledge/sum-type/> .

<https://comcomponent.com/knowledge/sum-type/> a skos:Concept ;
    skos:prefLabel "直和型"@ja ;
    skos:definition "AまたはBのどちらか1つである、という閉じたケースの集合として値を表す型。"@ja ;
    skos:altLabel "Sum Type" ;
    skos:broader <https://comcomponent.com/knowledge/algebraic-data-type/> .

<https://comcomponent.com/knowledge/product-type/> a skos:Concept ;
    skos:prefLabel "直積型"@ja ;
    skos:definition "AとBを両方持つ、フィールドの組み合わせとして値を表す型。"@ja ;
    skos:altLabel "Product Type" ;
    skos:broader <https://comcomponent.com/knowledge/algebraic-data-type/> .

<https://comcomponent.com/knowledge/fsharp-discriminated-union/> a skos:Concept ;
    skos:prefLabel "F#の判別共用体"@ja ;
    skos:definition "直和型を言語機能として自然に書けるF#の型定義構文で、コンパイラーがmatch式の網羅性を検査する。"@ja ;
    skos:altLabel "Discriminated Union" ;
    skos:altLabel "DU" ;
    skos:broader <https://comcomponent.com/knowledge/sum-type/> ;
    ks:implements <https://comcomponent.com/knowledge/sum-type/> ;
    ks:mitigates <https://comcomponent.com/knowledge/case-handling-omission/> ;
    ks:implements <https://comcomponent.com/knowledge/option-type/> ;
    ks:uses <https://comcomponent.com/knowledge/dotnet/> .

<https://comcomponent.com/knowledge/closed-case-class-hierarchy/> a skos:Concept ;
    skos:prefLabel "閉じたクラス階層パターン"@ja ;
    skos:definition "privateコンストラクターを持つ抽象基底クラスと、そのネスト型として定義したsealedなケースクラス、Matchメソッドの組み合わせで直和型を表すC#の実装パターン。"@ja ;
    skos:altLabel "sealed class hierarchy" ;
    skos:altLabel "private constructor + nested sealed classes" ;
    skos:broader <https://comcomponent.com/knowledge/sum-type/> ;
    ks:implements <https://comcomponent.com/knowledge/sum-type/> ;
    ks:uses <https://comcomponent.com/knowledge/match-method-pattern/> ;
    ks:implements <https://comcomponent.com/knowledge/option-type/> ;
    ks:implements <https://comcomponent.com/knowledge/result-type/> ;
    ks:uses <https://comcomponent.com/knowledge/dotnet-framework/> .

<https://comcomponent.com/knowledge/record-case-hierarchy/> a skos:Concept ;
    skos:prefLabel "record階層"@ja ;
    skos:definition "抽象recordを基底に、ケースごとのsealed recordをネスト型として定義する、C# 9以降で使える直和型の実装パターン。"@ja ;
    skos:altLabel "abstract record + sealed record cases" ;
    skos:broader <https://comcomponent.com/knowledge/sum-type/> .

<https://comcomponent.com/knowledge/oneof-library/> a skos:Concept ;
    skos:prefLabel "OneOfライブラリ"@ja ;
    skos:definition "専用の基底クラスを作らずに、C#で局所的な直和型の戻り値を表せるNuGetライブラリ。"@ja ;
    skos:altLabel "OneOf" ;
    skos:broader <https://comcomponent.com/knowledge/sum-type/> ;
    ks:implements <https://comcomponent.com/knowledge/sum-type/> .

<https://comcomponent.com/knowledge/source-generator-union/> a skos:Concept ;
    skos:prefLabel "Source Generator系ライブラリによる直和型生成"@ja ;
    skos:definition "属性を付けるだけでSwitch/Map/検証などのコードを生成し、判別共用体風の型を実現するライブラリの総称。"@ja ;
    skos:altLabel "Source Generator" ;
    skos:altLabel "[Union]属性"@ja ;
    skos:broader <https://comcomponent.com/knowledge/sum-type/> .

<https://comcomponent.com/knowledge/csharp-union-type-preview/> a skos:Concept ;
    skos:prefLabel "C# 15のunion型(プレビュー)"@ja ;
    skos:definition "指定した型のどれか1つであることを宣言できる、C#の提案・プレビュー段階の言語機能。正式リリースまでに仕様が変わる可能性がある。"@ja ;
    skos:altLabel "C# union types" ;
    skos:altLabel "union Pet(...)" ;
    skos:broader <https://comcomponent.com/knowledge/sum-type/> .

<https://comcomponent.com/knowledge/match-method-pattern/> a skos:Concept ;
    skos:prefLabel "Matchメソッドパターン"@ja ;
    skos:definition "直和型の全ケース分の関数を引数に取り、呼び出し側に全ケースの処理を強制するメソッドを用意する設計手法。"@ja ;
    skos:altLabel "Match<T>" ;
    skos:altLabel "網羅的ディスパッチ"@ja ;
    ks:prevents <https://comcomponent.com/knowledge/case-handling-omission/> .

<https://comcomponent.com/knowledge/case-handling-omission/> a skos:Concept ;
    skos:prefLabel "ケース処理漏れ"@ja ;
    skos:definition "直和型に新しいケースを追加した際、呼び出し側の分岐がそのケースに対応できておらず、処理が漏れること。"@ja ;
    skos:altLabel "処理漏れ"@ja ;
    skos:altLabel "網羅性の欠如"@ja .

<https://comcomponent.com/knowledge/option-type/> a skos:Concept ;
    skos:prefLabel "Option型"@ja ;
    skos:definition "値があるかないかを、nullではなくSome(value)またはNoneという型で表す代数的データ型。"@ja ;
    skos:altLabel "Option<T>" ;
    skos:altLabel "Maybe型"@ja ;
    skos:broader <https://comcomponent.com/knowledge/algebraic-data-type/> .

<https://comcomponent.com/knowledge/result-type/> a skos:Concept ;
    skos:prefLabel "Result型"@ja ;
    skos:definition "処理の結果をSuccess(value)またはFailure(error)のどちらかとして表す代数的データ型。"@ja ;
    skos:altLabel "Result<TSuccess, TError>" ;
    skos:broader <https://comcomponent.com/knowledge/algebraic-data-type/> ;
    ks:recommendedFor <https://comcomponent.com/knowledge/business-expected-failure/> .

<https://comcomponent.com/knowledge/business-expected-failure/> a skos:Concept ;
    skos:prefLabel "想定内の業務上の失敗"@ja ;
    skos:definition "在庫不足やメール重複、パスワード誤りなど、呼び出し側が通常の分岐として扱うべき、業務上よく起きる失敗。"@ja ;
    skos:altLabel "想定内の失敗"@ja ;
    skos:altLabel "業務エラー"@ja .

<https://comcomponent.com/knowledge/dotnet-exception/> a skos:Concept ;
    skos:prefLabel ".NET例外"@ja ;
    skos:definition "回復不能な異常が起きた箇所からthrowされ、呼び出し元へスタックを遡って伝播し、catchで捕捉される.NETのエラー通知の仕組み。"@ja ;
    skos:altLabel "Exception" ;
    skos:altLabel "例外処理"@ja ;
    ks:recommendedFor <https://comcomponent.com/knowledge/unexpected-system-failure/> ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/business-expected-failure/> .

<https://comcomponent.com/knowledge/unexpected-system-failure/> a skos:Concept ;
    skos:prefLabel "想定外の異常"@ja ;
    skos:definition "DB接続断や設定ファイル破損など、通常の処理では回復できない想定外の異常。"@ja ;
    skos:altLabel "想定外のエラー"@ja ;
    skos:altLabel "回復不能な異常"@ja .

<https://comcomponent.com/knowledge/closed-case-set/> a skos:Concept ;
    skos:prefLabel "閉じたケース集合"@ja ;
    skos:definition "型が取り得るケースの一覧があらかじめ決まっていて、外部から新しいケースが増えない集合。"@ja ;
    skos:altLabel "Closed Case Set" ;
    ks:requires <https://comcomponent.com/knowledge/closed-case-class-hierarchy/> .

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

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/algebraic-data-type/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/product-type/> ;
    schema:description "代数的データ型は、AとBを両方持つ直積型を構成要素の1つとする"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/fsharp/language-reference/discriminated-unions> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/algebraic-data-type/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/sum-type/> ;
    schema:description "代数的データ型は、AまたはBのどちらかである直和型を構成要素の1つとする"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/fsharp/language-reference/discriminated-unions> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/fsharp-discriminated-union/> ;
    rdf:predicate ks:implements ;
    rdf:object <https://comcomponent.com/knowledge/sum-type/> ;
    schema:description "F#では直和型を、判別共用体という言語機能としてそのまま実装できる"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/fsharp/language-reference/discriminated-unions> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/closed-case-class-hierarchy/> ;
    rdf:predicate ks:implements ;
    rdf:object <https://comcomponent.com/knowledge/sum-type/> ;
    schema:description ".NET Frameworkを含む既存システムでは、直和型をprivateコンストラクター+ネストしたsealedクラス+Matchメソッドというクラス階層パターンで実装できる"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/csharp/programming-guide/classes-and-structs/access-modifiers> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/record-case-hierarchy/> ;
    rdf:predicate ks:implements ;
    rdf:object <https://comcomponent.com/knowledge/sum-type/> ;
    schema:description ".NET 5以降を前提にできるなら、直和型をabstract recordとsealed recordの階層で簡潔に実装できる"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/record> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/oneof-library/> ;
    rdf:predicate ks:implements ;
    rdf:object <https://comcomponent.com/knowledge/sum-type/> ;
    schema:description "局所的な戻り値であれば、直和型をOneOfのようなライブラリで表せる"@ja ;
    ks:evidence <https://www.nuget.org/packages/OneOf> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/source-generator-union/> ;
    rdf:predicate ks:implements ;
    rdf:object <https://comcomponent.com/knowledge/sum-type/> ;
    schema:description "現行.NETでは、Source Generatorを使って属性を付けるだけで判別共用体風の型を生成するライブラリでも直和型を実装できる"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/csharp/roslyn-sdk/> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/csharp-union-type-preview/> ;
    rdf:predicate ks:implements ;
    rdf:object <https://comcomponent.com/knowledge/sum-type/> ;
    schema:description "C# 15のunion型はプレビュー段階の機能で、指定した型のどれか1つであることを宣言する形で直和型を表現できるが、正式リリースまでに仕様が変わる可能性がある"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/csharp/language-reference/proposals/unions> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/match-method-pattern/> ;
    rdf:predicate ks:prevents ;
    rdf:object <https://comcomponent.com/knowledge/case-handling-omission/> ;
    schema:description "Matchメソッドは全ケース分のデリゲートを引数に要求するため、新しいケースを追加すると呼び出し側の呼び出しがコンパイルエラーになり、処理漏れを検出できる"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/csharp/fundamentals/functional/pattern-matching> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/fsharp-discriminated-union/> ;
    rdf:predicate ks:mitigates ;
    rdf:object <https://comcomponent.com/knowledge/case-handling-omission/> ;
    schema:description "F#のコンパイラーはmatch式の網羅性を検査し、不足があれば警告するため処理漏れが起きにくい。ただし既定では警告であってコンパイルエラーではないため、警告を無視すれば処理漏れのまま実行され得る"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/fsharp/language-reference/discriminated-unions> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/record-case-hierarchy/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/case-handling-omission/> ;
    schema:description "record階層だけでswitch式を書くと、C#の古い安定版では網羅性チェックが弱く処理漏れが起きやすい"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/csharp/fundamentals/functional/pattern-matching> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/closed-case-class-hierarchy/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/match-method-pattern/> ;
    schema:description "このパターンはMatchメソッドを用意し、呼び出し側にすべてのケースの処理を強制する設計とセットで使う"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/csharp/fundamentals/functional/pattern-matching> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/record-case-hierarchy/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/match-method-pattern/> ;
    schema:description "Matchメソッドを追加する設計を選ぶ場合、record階層でも呼び出し側は常に全ケースを意識して処理できる"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/csharp/fundamentals/functional/pattern-matching> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/fsharp-discriminated-union/> ;
    rdf:predicate ks:implements ;
    rdf:object <https://comcomponent.com/knowledge/option-type/> ;
    schema:description "F#のOption<'T>型は、値があるかないかを表す判別共用体の自然な例である"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/fsharp/language-reference/options> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/closed-case-class-hierarchy/> ;
    rdf:predicate ks:implements ;
    rdf:object <https://comcomponent.com/knowledge/option-type/> ;
    schema:description ".NET Frameworkでも使えるOption<T>は、privateコンストラクター+ネストしたsealedなSome/Noneクラスという同じクラス階層パターンで実装できる"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/csharp/programming-guide/classes-and-structs/access-modifiers> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/closed-case-class-hierarchy/> ;
    rdf:predicate ks:implements ;
    rdf:object <https://comcomponent.com/knowledge/result-type/> ;
    schema:description "Result<TSuccess, TError>も、privateコンストラクター+ネストしたsealedクラスというパターンで表せる"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/csharp/programming-guide/classes-and-structs/access-modifiers> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/result-type/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/business-expected-failure/> ;
    schema:description "在庫不足やメール重複、パスワード誤りなど呼び出し側が通常の分岐として扱うべき想定内の失敗は、Result型で返すことが推奨される"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/standard/exceptions/> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/dotnet-exception/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/unexpected-system-failure/> ;
    schema:description "DB接続断や設定ファイル破損など、通常の処理では回復できない想定外の異常は例外にすることが推奨される"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/standard/exceptions/> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/dotnet-exception/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/business-expected-failure/> ;
    schema:description "業務上よく起きる分岐まで例外にすると、try-catchが業務分岐の代用品になり処理の見通しが悪くなる"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/standard/exceptions/> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/closed-case-set/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/closed-case-class-hierarchy/> ;
    schema:description "ケースの集合を閉じた状態に保つには、基底クラスのコンストラクターをprivateにし、ネストした型だけが継承できるようにする"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/csharp/programming-guide/classes-and-structs/access-modifiers> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/algebraic-data-type/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/closed-case-set/> ;
    schema:description "代数的データ型はケースの集合が業務上ほぼ閉じているものに向いており、外部からケースが増える設計にはインターフェースの方が向く"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/csharp/programming-guide/classes-and-structs/access-modifiers> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/closed-case-class-hierarchy/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/dotnet-framework/> ;
    schema:description "privateコンストラクター+ネストしたsealedクラス+MatchメソッドというパターンはC#の古いバージョンでも使え、.NET Frameworkを含む既存システムに導入しやすい"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/csharp/programming-guide/classes-and-structs/access-modifiers> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/record-case-hierarchy/> ;
    rdf:predicate ks:incompatibleWith ;
    rdf:object <https://comcomponent.com/knowledge/dotnet-framework/> ;
    schema:description "recordはC# 9以降の機能であり、.NET Frameworkも対象にする共有ライブラリではrecordより普通のclassで書いた方が扱いやすい場合がある"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/record> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/fsharp-discriminated-union/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/dotnet/> ;
    schema:description "F#の判別共用体は.NETの型としてコンパイルされるため、.NET Framework向けでも現行.NET向けのF#プロジェクトでも利用できる"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/fsharp/language-reference/discriminated-unions> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .
