@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/qr-decoded-value-validation/#article>
    schema:about <https://comcomponent.com/knowledge/qr-code/>, <https://comcomponent.com/knowledge/reed-solomon-error-correction/>, <https://comcomponent.com/knowledge/qr-misdecoding/> ;
    schema:mentions <https://comcomponent.com/knowledge/check-digit/>, <https://comcomponent.com/knowledge/structured-append/>, <https://comcomponent.com/knowledge/qr-eci/>, <https://comcomponent.com/knowledge/master-data-verification/>, <https://comcomponent.com/knowledge/gs1-hri/>, <https://comcomponent.com/knowledge/input-validation/> .

<https://comcomponent.com/knowledge/qr-code/> a skos:Concept ;
    skos:prefLabel "QRコード"@ja ;
    skos:definition "デンソーウェーブが開発した、誤り訂正機能を持つマトリックス型の二次元シンボル(バーコード)である。"@ja ;
    skos:altLabel "QR Code" ;
    skos:altLabel "二次元コード"@ja ;
    ks:uses <https://comcomponent.com/knowledge/reed-solomon-error-correction/> ;
    ks:uses <https://comcomponent.com/knowledge/input-validation/> .

<https://comcomponent.com/knowledge/reed-solomon-error-correction/> a skos:Concept ;
    skos:prefLabel "リード・ソロモン誤り訂正"@ja ;
    skos:definition "QRコードが採用する、符号語単位で汚れや破損からデータを復元する誤り訂正方式であり、訂正能力を超える損傷では復元せず読み取り不能になる。"@ja ;
    skos:altLabel "Reed-Solomon符号"@ja ;
    skos:altLabel "QRの誤り訂正"@ja .

<https://comcomponent.com/knowledge/qr-misdecoding/> a skos:Concept ;
    skos:prefLabel "QRコードの誤読"@ja ;
    skos:definition "デコーダがエラーを出さずに、元の値とは異なる妥当な値を読み取り結果として返してしまう現象である。"@ja ;
    skos:altLabel "誤ったデコード結果"@ja ;
    skos:altLabel "誤復号"@ja .

<https://comcomponent.com/knowledge/structured-append/> a skos:Concept ;
    skos:prefLabel "分割QR(Structured Append)"@ja ;
    skos:definition "長いデータを複数のQRシンボルに分割し、読み取り側で集めて連結する仕組みである。"@ja ;
    skos:altLabel "Structured Append" ;
    skos:altLabel "連結QR"@ja .

<https://comcomponent.com/knowledge/qr-eci/> a skos:Concept ;
    skos:prefLabel "ECI(拡張チャネル解釈)"@ja ;
    skos:definition "QRコードのバイトモードで使用する文字コードなどの解釈方式を明示的に宣言する仕組みで、指定がない場合の既定解釈は規格の版によって異なる。"@ja ;
    skos:altLabel "Extended Channel Interpretation" ;
    skos:altLabel "文字コード指定"@ja .

<https://comcomponent.com/knowledge/check-digit/> a skos:Concept ;
    skos:prefLabel "チェックディジット(検査用数字)"@ja ;
    skos:definition "コードの末尾(または先頭)に、他の桁から計算で導けるよう付ける1桁で、入力されたコードの誤りをその場で検出する仕組み。"@ja ;
    skos:altLabel "検査用数字"@ja ;
    skos:altLabel "チェックデジット"@ja ;
    ks:shouldPrecede <https://comcomponent.com/knowledge/master-data-verification/> .

<https://comcomponent.com/knowledge/input-validation/> a skos:Concept ;
    skos:prefLabel "入力値の検証(バリデーション)"@ja ;
    skos:definition "仕様上ありえない値を受け付けない検証処理。IPAは、幅広い文字種を許す自由記述項目ではXSS対策としての有効性が限定的であり、この方法に頼ることは推奨されないとしている。"@ja ;
    skos:altLabel "入力チェック"@ja ;
    ks:shouldPrecede <https://comcomponent.com/knowledge/check-digit/> .

<https://comcomponent.com/knowledge/master-data-verification/> a skos:Concept ;
    skos:prefLabel "マスタ照合(業務検証)"@ja ;
    skos:definition "読み取った値が実在し、かつ今処理すべき対象と一致するかを、マスタデータや業務文脈と突き合わせて確認する検証段階である。"@ja ;
    skos:altLabel "業務検証"@ja ;
    skos:altLabel "台帳突合"@ja .

<https://comcomponent.com/knowledge/gs1-hri/> a skos:Concept ;
    skos:prefLabel "GS1のHRI(人間が読める表記)"@ja ;
    skos:definition "GS1が定める、バーコードの下に人が目視で読める文字列を併記する考え方である。"@ja ;
    skos:altLabel "Human Readable Interpretation" ;
    skos:altLabel "人間可読表記"@ja ;
    ks:recommendedFor <https://comcomponent.com/knowledge/qr-misdecoding/> .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/qr-code/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/reed-solomon-error-correction/> ;
    schema:description "QRコードはリード・ソロモン符号による誤り訂正を採用しており、汚れや破損があってもデータを復元できるよう設計されている"@ja ;
    ks:evidence <https://www.qrcode.com/about/error_correction.html> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/reed-solomon-error-correction/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/qr-misdecoding/> ;
    schema:description "損傷が別の符号語の近傍に偏って入り込むと、規格が明記する通り「明らかに妥当だが異なる符号語」として誤って復元することがある"@ja ;
    ks:evidence <https://www.iso.org/standard/83389.html> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/qr-code/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/structured-append/> ;
    schema:description "長いデータを複数のシンボルに分割する場合、QRコードには読み取り側で連結する仕組み(Structured Append)がある"@ja ;
    ks:evidence <https://www.iso.org/standard/83389.html> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/structured-append/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/qr-misdecoding/> ;
    schema:description "分割QRに対応しないデコーダが1枚目だけを読むと、末尾が欠けた値をエラーなく返すことがある(挙動は実装依存)"@ja ;
    ks:evidence <https://www.iso.org/standard/83389.html> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/qr-code/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/qr-eci/> ;
    schema:description "バイトモードで非ASCII文字を格納し、その文字コードを明示したい場合はECI指定が必要で、指定がなければ既定解釈は規格の版によって変わる。数字モード・英数字モードや、ASCIIの範囲に収めたバイトモードのQRコードにはこの前提は当てはまらない"@ja ;
    ks:evidence <https://www.iso.org/standard/83389.html> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/qr-eci/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/qr-misdecoding/> ;
    schema:description "ECI指定なしのバイトモードは実装ごとに既定の文字コード解釈が異なり、文字化けした文字列をエラーなく成功として返す実装がある"@ja ;
    ks:evidence <https://www.iso.org/standard/83389.html> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/check-digit/> ;
    rdf:predicate ks:mitigates ;
    rdf:object <https://comcomponent.com/knowledge/qr-misdecoding/> ;
    schema:description "チェックディジットは1文字の変化を確実に検出できるが、複数文字が同時に変わる誤読は取りこぼす"@ja ;
    ks:evidence <https://www.gs1.org/standards/barcodes-epcrfid-id-keys/gs1-general-specifications> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/input-validation/> ;
    rdf:predicate ks:shouldPrecede ;
    rdf:object <https://comcomponent.com/knowledge/check-digit/> ;
    schema:description "受け取った文字列の長さ・文字種・接頭辞の形式検査を先に行い、対象外の文字がチェックディジット計算に届かないようにする"@ja ;
    ks:evidence <https://cheatsheetseries.owasp.org/cheatsheets/Input_Validation_Cheat_Sheet.html> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/check-digit/> ;
    rdf:predicate ks:shouldPrecede ;
    rdf:object <https://comcomponent.com/knowledge/master-data-verification/> ;
    schema:description "チェックディジットで自己整合性を確認したうえで、実在確認と今処理すべき対象との一致を業務検証で行う"@ja ;
    ks:evidence <https://www.gs1.org/standards/barcodes-epcrfid-id-keys/gs1-general-specifications> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/master-data-verification/> ;
    rdf:predicate ks:mitigates ;
    rdf:object <https://comcomponent.com/knowledge/qr-misdecoding/> ;
    schema:description "マスタ照合を実在確認だけで終わらせず、いま処理すべき対象との一致まで確認することで古いラベルや別伝票の取り違えを検出できる"@ja ;
    ks:evidence <https://www.gs1.org/standards/barcodes-epcrfid-id-keys/gs1-general-specifications> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/gs1-hri/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/qr-misdecoding/> ;
    schema:description "GS1のHRI(人間が読める表記)の考え方に沿ってQRの下に文字列を併記しておくと、誤読が疑われたときに人が突き合わせられる"@ja ;
    ks:evidence <https://www.gs1.org/standards/barcodes-epcrfid-id-keys/gs1-general-specifications> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/qr-code/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/gs1-hri/> ;
    schema:description "GS1の運用に沿う業務QRでは、QRコードに人が読める文字列(HRI)を併記する"@ja ;
    ks:evidence <https://www.gs1.org/standards/barcodes-epcrfid-id-keys/gs1-general-specifications> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/qr-code/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/input-validation/> ;
    schema:description "読み取った値は外部から来た未検証の入力として扱い、形式検査から始まる検証を課す必要がある"@ja ;
    ks:evidence <https://cheatsheetseries.owasp.org/cheatsheets/Input_Validation_Cheat_Sheet.html> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/qr-misdecoding/> ;
    rdf:predicate ks:verifiedBy ;
    rdf:object <https://comcomponent.com/knowledge/check-digit/> ;
    schema:description "誤読の疑いは、伝票番号のチェックディジット不一致という形で機械的に確認できる(複数文字の変化は取りこぼす)"@ja ;
    ks:evidence <https://www.gs1.org/standards/barcodes-epcrfid-id-keys/gs1-general-specifications> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/qr-code/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/check-digit/> ;
    schema:description "業務QRの多くは、内容にモジュラス10などのチェックディジットを含むコード体系で設計される"@ja ;
    ks:evidence <https://www.gs1.org/standards/barcodes-epcrfid-id-keys/gs1-general-specifications> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/input-validation/> ;
    rdf:predicate ks:mitigates ;
    rdf:object <https://comcomponent.com/knowledge/qr-misdecoding/> ;
    schema:description "長さ・文字種・区切り・接頭辞の完全一致を見る形式検査は、分割QRの断片や文字化けした文字列を検出できる(誤り訂正由来の同一形式の誤読は検出できない)"@ja ;
    ks:evidence <https://cheatsheetseries.owasp.org/cheatsheets/Input_Validation_Cheat_Sheet.html> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .
