Версія: 1.0 Candidate
Статус: Machine-Readable Specification Candidate
Протокол: Qualification Web Protocol (QWP)
Основний формат: JSON
Схеми: JSON Schema Draft 2020-12
Цей документ визначає канонічне машинозчитуване представлення основних об’єктів Qualification Web Protocol.
Метою є забезпечення можливості для незалежних програмних систем:
створювати QWP-документи;
читати QWP-документи;
перевіряти їхню структуру;
обмінюватися доказовими пакетами;
виконувати однакову базову інтерпретацію полів;
підготовлювати дані до QCE evaluation.
QWP v1.0 визначає такі основні JSON-документи:
QualificationSpecification
QualificationProof
EvidenceObject
AssessmentEvent
ValidityArgument
AuthorityRecord
IdentityAssurance
ProcessAssurance
HumanJudgmentEvent
ConformanceDecision
DecisionTrace
GapReport
RecognitionRecord
qwp-v1/
|
+-- schemas/
| +-- qualification-specification.schema.json
| +-- qualification-proof.schema.json
| +-- evidence-object.schema.json
| +-- assessment-event.schema.json
| +-- validity-argument.schema.json
| +-- authority-record.schema.json
| +-- human-judgment.schema.json
| +-- conformance-decision.schema.json
| +-- gap-report.schema.json
|
+-- contexts/
| +-- qwp-v1.jsonld
|
+-- shapes/
| +-- qwp-v1.shacl.ttl
|
+-- examples/
| +-- qualification-example.json
| +-- proof-pass.json
| +-- proof-fail.json
| +-- proof-indeterminate.json
| +-- invalid-proof.json
|
+-- vocabulary/
| +-- qwp-v1.ttl
|
+-- README.md
Кожний нормативний QWP JSON object MUST:
бути syntactically valid JSON;
мати id;
мати type;
використовувати стабільні field names;
мати version information, якщо meaning залежить від version;
не містити duplicate object identifiers у межах одного normative proof scope.
Conceptual base:
{
"id": "https://example.org/object/123",
"type": "EvidenceObject",
"version": "1.0"
}
Поле:
id
представляє machine identifier.
Рекомендований формат:
URI / IRI
Наприклад:
{
"id": "https://qualificationweb.org/id/qualification/example-master/1.0"
}
Поле:
type
визначає QWP object class.
Наприклад:
{
"type": "QualificationProof"
}
або:
{
"type": "EvidenceObject"
}
Версія повинна бути machine-readable.
Наприклад:
{
"version": "1.0"
}
Для нормативних objects рекомендується Semantic Versioning-compatible syntax.
Об’єкти MAY містити:
{
"createdAt": "2026-09-26T18:30:00Z",
"updatedAt": "2026-09-26T19:00:00Z",
"language": "uk",
"status": "ACTIVE"
}
Канонічна мінімальна структура:
{
"id": "https://qualificationweb.org/id/qualification/example-master/1.0",
"type": "QualificationSpecification",
"version": "1.0",
"title": "Example Master Qualification",
"requirements": [],
"decisionRuleSet": {
"id": "https://qualificationweb.org/id/rules/example-master/1.0",
"version": "1.0"
}
}
id
type
version
title
requirements
decisionRuleSet
description
field
qualificationLevel
frameworkAlignments
maintainer
effectiveFrom
effectiveUntil
status
Приклад:
{
"id": "req:research-methods",
"type": "QualificationRequirement",
"requirementType": "MANDATORY",
"title": "Поглиблені методи дослідження",
"claims": [
"claim:research-design",
"claim:method-selection"
]
}
Допустимі core values:
[
"MANDATORY",
"COMPENSABLE",
"INTEGRATIVE"
]
{
"id": "claim:research-design",
"type": "Claim",
"title": "Кандидат здатний самостійно проєктувати дослідження",
"addressesRequirement": [
"req:research-methods"
]
}
Мінімальний приклад:
{
"id": "evidence:project-001",
"type": "EvidenceObject",
"evidenceType": "RESEARCH_CONTRIBUTION",
"subject": "candidate:123",
"createdAt": "2026-04-18T10:00:00Z",
"status": "ACTIVE",
"supports": [
"claim:research-design"
]
}
Core values:
[
"ARTIFACT",
"PERFORMANCE",
"OBSERVATION",
"ASSESSMENT_RESULT",
"CREDENTIAL",
"PUBLICATION",
"DATASET",
"SOFTWARE",
"PORTFOLIO",
"PROFESSIONAL_RECORD",
"RESEARCH_CONTRIBUTION",
"OTHER"
]
Приклад:
{
"provenance": {
"createdBy": "candidate:123",
"generatedBy": "activity:research-project-01",
"derivedFrom": [
"dataset:001"
]
}
}
{
"integrity": {
"status": "VERIFIED",
"verificationMethod": "sha256",
"digest": "..."
}
}
Core values:
VERIFIED
PARTIALLY_VERIFIED
UNVERIFIED
INVALID
REVOKED
Evidence Object MAY містити:
{
"aiUse": {
"policy": "AI_ALLOWED_DISCLOSED",
"disclosed": true,
"description": "AI використовувався для мовного редагування та пошуку альтернативних формулювань."
}
}
[
"AI_PROHIBITED",
"AI_RESTRICTED",
"AI_ALLOWED_DISCLOSED",
"AI_NATIVE"
]
{
"id": "assessment-design:oral-defence-1",
"type": "AssessmentDesign",
"version": "1.0",
"assessmentType": "ORAL_DEFENCE",
"targetClaims": [
"claim:research-design"
],
"decisionCriteria": [
"candidate_explains_method",
"candidate_defends_limitations"
]
}
Core values:
[
"EXAMINATION",
"PROJECT",
"PORTFOLIO",
"ORAL_DEFENCE",
"OBSERVED_PERFORMANCE",
"SIMULATION",
"PRACTICAL_TASK",
"RESEARCH_ASSESSMENT",
"STRUCTURED_INTERVIEW",
"PEER_REVIEW",
"EXPERT_REVIEW",
"TRANSFER_TASK",
"COMPOSITE"
]
{
"id": "assessment:001",
"type": "AssessmentEvent",
"assessmentDesign": "assessment-design:oral-defence-1",
"candidate": "candidate:123",
"date": "2026-05-14T12:00:00Z",
"assessors": [
"assessor:01",
"assessor:02"
],
"evidenceGenerated": [
"evidence:defence-record-001"
],
"status": "COMPLETED"
}
Recommended values:
[
"SCHEDULED",
"IN_PROGRESS",
"COMPLETED",
"INVALIDATED",
"CANCELLED"
]
{
"id": "identity-assurance:candidate-123",
"type": "IdentityAssurance",
"subject": "candidate:123",
"level": "IA-3",
"method": "government-id-verification",
"verifiedAt": "2026-05-14T11:30:00Z"
}
[
"IA-0",
"IA-1",
"IA-2",
"IA-3",
"IA-4"
]
{
"id": "process-assurance:assessment-001",
"type": "ProcessAssurance",
"assessmentEvent": "assessment:001",
"level": "PA-3",
"basis": [
"live-supervision",
"authenticated-session"
]
}
[
"PA-0",
"PA-1",
"PA-2",
"PA-3",
"PA-4"
]
{
"id": "authority:assessor-01",
"type": "AuthorityRecord",
"holder": "assessor:01",
"scope": [
"advanced-research-methods"
],
"issuer": "organization:assessment-board",
"status": "ACTIVE",
"validFrom": "2026-01-01",
"validUntil": "2027-12-31"
}
[
"ACTIVE",
"EXPIRED",
"SUSPENDED",
"REVOKED",
"UNVERIFIED"
]
{
"id": "conflict:assessment-001-assessor-02",
"type": "ConflictRecord",
"assessmentEvent": "assessment:001",
"involves": [
"assessor:02",
"candidate:123"
],
"conflictType": "SUPERVISORY",
"status": "DECLARED"
}
[
"NONE_DECLARED",
"FINANCIAL",
"SUPERVISORY",
"PERSONAL",
"ORGANIZATIONAL",
"SELF_ASSESSMENT",
"IDENTITY_OVERLAP",
"OTHER",
"UNKNOWN"
]
{
"id": "validity:research-design",
"type": "ValidityArgument",
"targetClaim": "claim:research-design",
"supportingEvidence": [
"evidence:project-001",
"evidence:defence-record-001"
],
"inference": "Успішний незалежний проєкт і захист підтримують твердження про здатність самостійно проєктувати дослідження.",
"status": "SUPPORTED"
}
[
"SUPPORTED",
"PARTIALLY_SUPPORTED",
"NOT_SUPPORTED",
"INSUFFICIENT_BASIS",
"CONTESTED"
]
Приклад:
{
"assumptions": [
{
"id": "assumption:01",
"statement": "Захист був проведений без зовнішньої підказки в реальному часі."
}
]
}
{
"id": "human-judgment:001",
"type": "HumanJudgmentEvent",
"target": "req:integrative-capstone",
"reviewers": [
"assessor:01",
"assessor:03"
],
"decision": "SUPPORTED",
"date": "2026-05-15T09:00:00Z",
"rationale": "Кандидат продемонстрував інтеграцію методологічних, етичних та аналітичних компетентностей."
}
[
"SUPPORTED",
"NOT_SUPPORTED",
"CONTESTED",
"DEFERRED",
"REASSESSMENT_REQUIRED"
]
QualificationProof агрегує relevant objects.
Мінімальна структура:
{
"id": "proof:123",
"type": "QualificationProof",
"version": "1.0",
"subject": "candidate:123",
"qualificationSpecification": "https://qualificationweb.org/id/qualification/example-master/1.0",
"proofStatus": "READY_FOR_EVALUATION",
"evidence": [],
"assessmentEvents": [],
"validityArguments": [],
"authorityRecords": [],
"humanJudgments": []
}
[
"DRAFT",
"READY_FOR_EVALUATION",
"VALIDATED",
"EVALUATED",
"SUPERSEDED",
"REVOKED",
"INVALID"
]
QualificationProof або ConformanceDecision може містити:
{
"requirement": "req:research-methods",
"status": "SUPPORTED",
"supportingEvidence": [
"evidence:project-001",
"evidence:defence-record-001"
]
}
Допустимі значення:
[
"SUPPORTED",
"NOT_SUPPORTED",
"INSUFFICIENT_EVIDENCE",
"CONTESTED",
"HUMAN_REVIEW"
]
{
"id": "decision:123",
"type": "ConformanceDecision",
"qualificationSpecification": "https://qualificationweb.org/id/qualification/example-master/1.0",
"specificationVersion": "1.0",
"proof": "proof:123",
"proofVersion": "1.0",
"decision": "PASS",
"evaluationTime": "2026-05-15T10:00:00Z",
"decisionRulesVersion": "1.0",
"engineVersion": "1.0.0-rc1",
"requirementResults": []
}
[
"PASS",
"FAIL",
"INDETERMINATE"
]
Технічний pre-evaluation status:
INVALID_PROOF
не повинен змішуватися з academic outcome.
{
"id": "trace:decision-123",
"type": "DecisionTrace",
"decision": "decision:123",
"steps": [
{
"requirement": "req:research-methods",
"claim": "claim:research-design",
"evidence": [
"evidence:project-001"
],
"result": "SUPPORTED"
}
]
}
{
"id": "gap-report:123",
"type": "GapReport",
"qualificationSpecification": "https://qualificationweb.org/id/qualification/example-master/1.0",
"proof": "proof:123",
"currentDecision": "INDETERMINATE",
"gaps": [
{
"requirement": "req:quantitative-methods",
"gapType": "MISSING_EVIDENCE",
"description": "Відсутнє незалежне оцінювання кількісної компетентності.",
"recommendedEvidenceType": "PRACTICAL_TASK"
}
]
}
Recommended core values:
[
"MISSING_EVIDENCE",
"INVALID_EVIDENCE",
"INSUFFICIENT_ASSESSMENT",
"AUTHORITY_UNVERIFIED",
"IDENTITY_UNRESOLVED",
"PROCESS_ASSURANCE_INSUFFICIENT",
"VALIDITY_UNRESOLVED",
"HUMAN_REVIEW_PENDING",
"CONFLICT_UNRESOLVED",
"OTHER"
]
Recognition layer є окремим від academic conformance.
{
"id": "recognition:001",
"type": "RecognitionRecord",
"qualification": "https://qualificationweb.org/id/qualification/example-master",
"recognitionAuthority": "authority:example-recognition-body",
"jurisdiction": "EXAMPLE",
"purpose": "FOR_STUDY",
"decision": "RECOGNIZED",
"date": "2026-06-01"
}
[
"FOR_STUDY",
"FOR_EMPLOYMENT",
"FOR_CREDIT_TRANSFER",
"FOR_PROFESSIONAL_ACCESS",
"OTHER"
]
[
"RECOGNIZED",
"PARTIALLY_RECOGNIZED",
"NOT_RECOGNIZED",
"CONDITIONAL",
"NOT_EVALUATED"
]
Кожна schema використовує:
{
"$schema": "https://json-schema.org/draft/2020-12/schema"
}
Концептуальна нормативна версія:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://qualificationweb.org/schema/v1/qualification-specification.schema.json",
"title": "QWP Qualification Specification",
"type": "object",
"required": [
"id",
"type",
"version",
"title",
"requirements",
"decisionRuleSet"
],
"properties": {
"id": {
"type": "string",
"minLength": 1
},
"type": {
"const": "QualificationSpecification"
},
"version": {
"type": "string",
"minLength": 1
},
"title": {
"type": "string",
"minLength": 1
},
"description": {
"type": "string"
},
"requirements": {
"type": "array",
"minItems": 1,
"items": {
"$ref": "#/$defs/requirement"
}
},
"decisionRuleSet": {
"$ref": "#/$defs/decisionRuleSet"
}
},
"$defs": {
"requirement": {
"type": "object",
"required": [
"id",
"type",
"requirementType",
"title"
],
"properties": {
"id": {
"type": "string",
"minLength": 1
},
"type": {
"const": "QualificationRequirement"
},
"requirementType": {
"enum": [
"MANDATORY",
"COMPENSABLE",
"INTEGRATIVE"
]
},
"title": {
"type": "string",
"minLength": 1
},
"claims": {
"type": "array",
"items": {
"type": "string"
},
"uniqueItems": true
}
},
"additionalProperties": true
},
"decisionRuleSet": {
"type": "object",
"required": [
"id",
"version"
],
"properties": {
"id": {
"type": "string"
},
"version": {
"type": "string"
}
}
}
},
"additionalProperties": true
}
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://qualificationweb.org/schema/v1/evidence-object.schema.json",
"title": "QWP Evidence Object",
"type": "object",
"required": [
"id",
"type",
"evidenceType",
"subject",
"status"
],
"properties": {
"id": {
"type": "string",
"minLength": 1
},
"type": {
"const": "EvidenceObject"
},
"evidenceType": {
"enum": [
"ARTIFACT",
"PERFORMANCE",
"OBSERVATION",
"ASSESSMENT_RESULT",
"CREDENTIAL",
"PUBLICATION",
"DATASET",
"SOFTWARE",
"PORTFOLIO",
"PROFESSIONAL_RECORD",
"RESEARCH_CONTRIBUTION",
"OTHER"
]
},
"subject": {
"type": "string",
"minLength": 1
},
"supports": {
"type": "array",
"items": {
"type": "string"
},
"uniqueItems": true
},
"status": {
"enum": [
"ACTIVE",
"REVOKED",
"INVALID",
"SUPERSEDED"
]
}
},
"additionalProperties": true
}
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://qualificationweb.org/schema/v1/assessment-event.schema.json",
"title": "QWP Assessment Event",
"type": "object",
"required": [
"id",
"type",
"assessmentDesign",
"candidate",
"date",
"status"
],
"properties": {
"id": {
"type": "string"
},
"type": {
"const": "AssessmentEvent"
},
"assessmentDesign": {
"type": "string"
},
"candidate": {
"type": "string"
},
"date": {
"type": "string",
"format": "date-time"
},
"assessors": {
"type": "array",
"items": {
"type": "string"
},
"uniqueItems": true
},
"status": {
"enum": [
"SCHEDULED",
"IN_PROGRESS",
"COMPLETED",
"INVALIDATED",
"CANCELLED"
]
}
},
"additionalProperties": true
}
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://qualificationweb.org/schema/v1/authority-record.schema.json",
"title": "QWP Authority Record",
"type": "object",
"required": [
"id",
"type",
"holder",
"scope",
"issuer",
"status"
],
"properties": {
"id": {
"type": "string"
},
"type": {
"const": "AuthorityRecord"
},
"holder": {
"type": "string"
},
"scope": {
"type": "array",
"minItems": 1,
"items": {
"type": "string"
}
},
"issuer": {
"type": "string"
},
"status": {
"enum": [
"ACTIVE",
"EXPIRED",
"SUSPENDED",
"REVOKED",
"UNVERIFIED"
]
}
},
"additionalProperties": true
}
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://qualificationweb.org/schema/v1/qualification-proof.schema.json",
"title": "QWP Qualification Proof",
"type": "object",
"required": [
"id",
"type",
"version",
"subject",
"qualificationSpecification",
"proofStatus",
"evidence"
],
"properties": {
"id": {
"type": "string",
"minLength": 1
},
"type": {
"const": "QualificationProof"
},
"version": {
"type": "string"
},
"subject": {
"type": "string"
},
"qualificationSpecification": {
"type": "string"
},
"proofStatus": {
"enum": [
"DRAFT",
"READY_FOR_EVALUATION",
"VALIDATED",
"EVALUATED",
"SUPERSEDED",
"REVOKED",
"INVALID"
]
},
"evidence": {
"type": "array",
"items": {
"$ref": "evidence-object.schema.json"
}
},
"assessmentEvents": {
"type": "array",
"items": {
"$ref": "assessment-event.schema.json"
}
},
"authorityRecords": {
"type": "array",
"items": {
"$ref": "authority-record.schema.json"
}
}
},
"additionalProperties": true
}
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://qualificationweb.org/schema/v1/conformance-decision.schema.json",
"title": "QWP Conformance Decision",
"type": "object",
"required": [
"id",
"type",
"qualificationSpecification",
"specificationVersion",
"proof",
"proofVersion",
"decision",
"evaluationTime",
"decisionRulesVersion",
"engineVersion"
],
"properties": {
"id": {
"type": "string"
},
"type": {
"const": "ConformanceDecision"
},
"qualificationSpecification": {
"type": "string"
},
"specificationVersion": {
"type": "string"
},
"proof": {
"type": "string"
},
"proofVersion": {
"type": "string"
},
"decision": {
"enum": [
"PASS",
"FAIL",
"INDETERMINATE"
]
},
"evaluationTime": {
"type": "string",
"format": "date-time"
},
"decisionRulesVersion": {
"type": "string"
},
"engineVersion": {
"type": "string"
}
},
"additionalProperties": true
}
Якщо JSON Schema повідомляє:
VALID
це означає:
документ структурно відповідає схемі.
Це ще не означає:
що identifier references існують;
що assessor має authority;
що evidence підтримує claim;
що qualification має PASS.
{
"id": "decision:001",
"type": "ConformanceDecision",
"qualificationSpecification": "unknown:qualification",
"specificationVersion": "99.0",
"proof": "proof:does-not-exist",
"proofVersion": "1.0",
"decision": "PASS",
"evaluationTime": "2026-05-15T10:00:00Z",
"decisionRulesVersion": "1.0",
"engineVersion": "1.0"
}
JSON structure може бути valid.
Але semantic validation повинна виявити:
qualification specification unresolved
proof unresolved
unsupported specification version
JSON Schema сам по собі не завжди достатній для виявлення duplicate IDs у різних вкладених масивах.
Тому QWP Validator MUST додатково побудувати identifier index.
Концептуально:
seenIdentifiers = set()
for each normative object:
if object.id in seenIdentifiers:
INVALID_PROOF
add object.id
Кожне внутрішнє normative reference MUST resolve до:
об’єкта в proof;
об’єкта в canonical registry;
дозволеного external authoritative source.
Якщо critical reference не resolve:
INVALID_PROOF
або інший explicit unresolved state відповідно до type reference.
Рекомендується не дублювати один object багато разів.
Замість:
{
"assessor": {
"id": "assessor:01",
"...": "..."
}
}
у багатьох місцях можна використовувати:
{
"assessor": "assessor:01"
}
а canonical record зберігати окремо.
Embedded representation MAY використовуватися.
Але canonical identity повинна залишатися однозначною.
QWP допускає два режими structural validation.
Невідомі поля дозволені:
{
"additionalProperties": true
}
Невідомі поля заборонені:
{
"additionalProperties": false
}
Strict profile може використовуватися у conformance testing.
Domain-specific systems можуть потребувати:
clinicalPracticeHours
laboratorySafetyEvidence
softwareRepository
artisticPortfolio
Ці поля не повинні вимагати зміни core protocol.
Наприклад extension MUST NOT визначати:
{
"decision": "PASS",
"legalRecognition": true
}
лише тому, що local implementation хоче прирівняти два різні поняття.
Рекомендований pattern:
{
"extensions": {
"https://example.org/qwp/psychology": {
"clinicalSupervisionHours": 120
}
}
}
Для multilingual systems MAY використовуватися:
{
"title": {
"uk": "Магістр психології",
"en": "Master-Level Psychology Qualification"
}
}
Machine-readable semantic layer у JSON-LD буде визначений у наступній частині.
Date-time values SHOULD використовувати ISO 8601-compatible serialization.
Наприклад:
2026-09-26T21:30:00+03:00
Normative machine values використовуються англійською uppercase:
PASS
FAIL
INDETERMINATE
SUPPORTED
HUMAN_REVIEW
Human interface може перекладати їх.
Якби різні implementations зберігали:
PASS
ВІДПОВІДАЄ
ERFÜLLT
як різні machine values, interoperability погіршилася б.
Тому:
machine code = stable
human label = multilingual
Рекомендована структура:
{
"type": "QWPError",
"errorCode": "QWP_DUPLICATE_IDENTIFIER",
"message": "Знайдено дубльований нормативний ідентифікатор.",
"objectId": "evidence:001"
}
Рекомендований набір:
QWP_INVALID_JSON
QWP_SCHEMA_VALIDATION_FAILED
QWP_DUPLICATE_IDENTIFIER
QWP_DANGLING_REFERENCE
QWP_UNKNOWN_SPECIFICATION
QWP_UNSUPPORTED_VERSION
QWP_INVALID_AUTHORITY_REFERENCE
QWP_INVALID_PROOF_STATE
QWP_DECISION_RULE_ERROR
Наприклад:
QWP_DANGLING_REFERENCE
не є:
FAIL
FAIL означає academic non-conformance.
Error означає technical invalidity.
{
"id": "decision:pass-example",
"type": "ConformanceDecision",
"qualificationSpecification": "qualification:example-master",
"specificationVersion": "1.0",
"proof": "proof:example-001",
"proofVersion": "1.0",
"decision": "PASS",
"evaluationTime": "2026-09-26T18:00:00Z",
"decisionRulesVersion": "1.0",
"engineVersion": "1.0.0-rc1"
}
{
"id": "decision:fail-example",
"type": "ConformanceDecision",
"qualificationSpecification": "qualification:example-master",
"specificationVersion": "1.0",
"proof": "proof:example-002",
"proofVersion": "1.0",
"decision": "FAIL",
"evaluationTime": "2026-09-26T18:00:00Z",
"decisionRulesVersion": "1.0",
"engineVersion": "1.0.0-rc1",
"requirementResults": [
{
"requirement": "req:ethics",
"status": "NOT_SUPPORTED"
}
]
}
{
"id": "decision:indeterminate-example",
"type": "ConformanceDecision",
"qualificationSpecification": "qualification:example-master",
"specificationVersion": "1.0",
"proof": "proof:example-003",
"proofVersion": "1.0",
"decision": "INDETERMINATE",
"evaluationTime": "2026-09-26T18:00:00Z",
"decisionRulesVersion": "1.0",
"engineVersion": "1.0.0-rc1",
"requirementResults": [
{
"requirement": "req:quantitative-methods",
"status": "INSUFFICIENT_EVIDENCE"
}
]
}
{
"id": "proof:invalid-example",
"type": "QualificationProof",
"version": "1.0",
"subject": "candidate:123",
"qualificationSpecification": "qualification:example-master",
"proofStatus": "READY_FOR_EVALUATION",
"evidence": [
{
"id": "evidence:duplicate",
"type": "EvidenceObject",
"evidenceType": "ARTIFACT",
"subject": "candidate:123",
"status": "ACTIVE"
},
{
"id": "evidence:duplicate",
"type": "EvidenceObject",
"evidenceType": "PORTFOLIO",
"subject": "candidate:123",
"status": "ACTIVE"
}
]
}
Expected validator output:
INVALID_PROOF
QWP_DUPLICATE_IDENTIFIER
Канонічна послідовність:
JSON Parsing
↓
JSON Schema Validation
↓
Identifier Validation
↓
Reference Resolution
↓
Semantic Validation
↓
QCE Evaluation
V0 — Syntax
V1 — Schema
V2 — Identifier Integrity
V3 — Reference Integrity
V4 — Semantic Constraints
V5 — Qualification Evaluation
Перевіряє:
чи документ взагалі є valid JSON?
Перевіряє:
чи відповідає structure QWP JSON Schema?
Перевіряє:
uniqueness;
syntax;
canonical representation.
Перевіряє:
чи всі required references resolve?
Перевіряє:
authority relations;
cardinality;
graph constraints;
logical inconsistencies.
Лише після попередніх рівнів:
QCE evaluate
{
"valid": true,
"validationLevel": "V4",
"errors": [],
"warnings": []
}
{
"valid": false,
"validationLevel": "V2",
"errors": [
{
"code": "QWP_DUPLICATE_IDENTIFIER",
"objectId": "evidence:duplicate"
}
]
}
Warning не обов’язково робить proof invalid.
Наприклад:
{
"code": "QWP_EVIDENCE_EXPIRING",
"message": "Доказ втратить актуальність через 30 днів."
}
ConformanceDecision SHOULD підтримувати:
{
"limitations": [
{
"code": "ACADEMIC_CONFORMANCE_ONLY",
"message": "Рішення не встановлює юридичного визнання або професійного права."
}
]
}
Незалежні systems не повинні змінювати meaning:
PASS
FAIL
INDETERMINATE
на local meanings.
Система не повинна визначати:
PASS = candidate has legally recognized degree
Тому що в QWP:
PASS = academic conformance
Рекомендовано окремі поля:
{
"academicConformance": "PASS",
"awardStatus": "NOT_EVALUATED",
"recognitionStatus": "NOT_EVALUATED",
"professionalAuthorization": "NOT_EVALUATED"
}
Неправильно:
{
"status": "VALID"
}
як єдине поле для всього qualification state.
Воно не показує, що саме valid:
proof?
award?
recognition?
licence?
Proof
↓
Academic Decision
↓
[external boundary]
Award
↓
Recognition
↓
Professional Authorization
У machine model ці states повинні залишатися окремими.
QWP reader SHOULD:
ігнорувати невідомі non-critical extension fields;
не ігнорувати невідомі critical normative semantics.
Розширення MAY мати:
{
"critical": true
}
Якщо implementation не розуміє critical extension, вона SHOULD NOT видавати authoritative PASS.
{
"extensions": {
"https://example.org/qwp/medicine": {
"critical": true,
"clinicalLicenceCheck": {
"status": "REQUIRED"
}
}
}
}
System, яка не розуміє extension, повинна повернути appropriate unresolved state.
Minor version update SHOULD NOT змінювати meaning required fields existing v1 clients.
Кожен документ SHOULD мати:
{
"qwpVersion": "1.0"
}
або equivalent contextual version reference.
Рекомендований pattern:
{
"qwpVersion": "1.0",
"id": "proof:123",
"type": "QualificationProof",
"version": "1.0"
}
Reference Validator повинен уміти:
parse
validateSchema
indexIdentifiers
resolveReferences
checkSemanticPreconditions
returnValidationReport
function validateQWP(document):
parseJSON(document)
validateAgainstSchema(document)
ids = collectNormativeIdentifiers(document)
if duplicates(ids):
return INVALID_PROOF
references = collectReferences(document)
if unresolvedCriticalReferences(references):
return INVALID_PROOF
semanticResult = validateSemanticConstraints(document)
return semanticResult
Лише після:
validation = VALID
документ передається:
QCE.evaluate(...)
JSON layer відповідає на питання:
Чи можемо ми однаково передати структуру Qualification Web між різними програмами?
Він ще не відповідає повністю:
Чи однаково ці програми розуміють семантичний зміст?
Для цього потрібен наступний шар.
JSON Schema добре перевіряє:
структуру;
datatype;
required fields;
enumerations.
Але складніші відносини:
Evidence supports Claim
Claim addresses Requirement
Assessor has Authority
Decision refers to exact Specification
краще представляються через:
JSON-LD;
RDF;
SHACL;
formal semantic vocabulary.
Це визначається в наступній частині Machine-Readable Specification.
Ця частина визначила:
canonical QWP JSON objects;
QualificationSpecification;
QualificationProof;
EvidenceObject;
AssessmentEvent;
AuthorityRecord;
HumanJudgmentEvent;
ConformanceDecision;
GapReport;
RecognitionRecord;
core enumerations;
JSON Schema structure;
error model;
validation pipeline;
extension mechanism;
separation technical errors from academic outcomes.
Тобто machine representation не може спрощувати систему настільки, що зникають фундаментальні відмінності між:
Evidence
Claim
Assessment
Conformance
Award
Recognition
Authorization
QWP Machine-Readable Specification v1.0 Candidate
Part 1 — JSON Data Model and JSON Schema
готова до узгодження з:
JSON-LD context;
RDF vocabulary;
SHACL constraint model;
Reference Validator;
QCE implementation.
Версія: 1.0 Candidate
Статус: Machine-Readable Specification Candidate
Основний простір імен: https://qualificationweb.org/ns/qw#
Префікс: qw:
Семантичний шар QWP визначає машинне значення об’єктів і зв’язків між ними.
Його завдання — забезпечити, щоб різні реалізації однаково інтерпретували, наприклад:
EvidenceObject
supports
Claim
а не лише могли прочитати три текстові поля.
Qualification Web використовує чотири взаємодоповнювальні рівні:
JSON
↓
JSON Schema
↓
JSON-LD / RDF
↓
SHACL
Вони виконують різні функції.
JSON представляє дані у практичній структурованій формі.
Він відповідає на питання:
які поля та значення передано?
JSON Schema перевіряє:
типи;
required fields;
allowed values;
structural constraints.
Він відповідає:
чи правильно сформований документ?
JSON-LD додає машинну семантику.
Він дозволяє визначити, що:
supports
означає не довільне локальне поле, а конкретне відношення:
https://qualificationweb.org/ns/qw#supports
RDF представляє інформацію у формі графа:
subject
predicate
object
Наприклад:
Evidence E1
supports
Claim C1
SHACL використовується для перевірки складніших семантичних обмежень графа.
Наприклад:
QualificationProof повинен мати рівно одного subject.
або:
ConformanceDecision повинен посилатися рівно на одну конкретну версію QualificationSpecification.
Канонічний namespace:
https://qualificationweb.org/ns/qw#
Приклади:
qw:Qualification
qw:QualificationProof
qw:EvidenceObject
qw:Claim
qw:supports
qw:evaluatedAgainst
Рекомендований базовий context:
{
"@context": {
"@version": 1.1,
"qw": "https://qualificationweb.org/ns/qw#",
"id": "@id",
"type": "@type",
"Qualification": "qw:Qualification",
"QualificationSpecification": "qw:QualificationSpecification",
"QualificationRequirement": "qw:QualificationRequirement",
"Claim": "qw:Claim",
"Candidate": "qw:Candidate",
"EvidenceObject": "qw:EvidenceObject",
"AssessmentDesign": "qw:AssessmentDesign",
"AssessmentEvent": "qw:AssessmentEvent",
"ValidityArgument": "qw:ValidityArgument",
"AuthorityRecord": "qw:AuthorityRecord",
"IdentityAssurance": "qw:IdentityAssurance",
"ProcessAssurance": "qw:ProcessAssurance",
"ConflictRecord": "qw:ConflictRecord",
"HumanJudgmentEvent": "qw:HumanJudgmentEvent",
"QualificationProof": "qw:QualificationProof",
"ConformanceDecision": "qw:ConformanceDecision",
"DecisionTrace": "qw:DecisionTrace",
"GapReport": "qw:GapReport",
"RecognitionRecord": "qw:RecognitionRecord",
"hasSpecification": {
"@id": "qw:hasSpecification",
"@type": "@id"
},
"hasRequirement": {
"@id": "qw:hasRequirement",
"@type": "@id",
"@container": "@set"
},
"addressesRequirement": {
"@id": "qw:addressesRequirement",
"@type": "@id",
"@container": "@set"
},
"supports": {
"@id": "qw:supports",
"@type": "@id",
"@container": "@set"
},
"challenges": {
"@id": "qw:challenges",
"@type": "@id",
"@container": "@set"
},
"hasSubject": {
"@id": "qw:hasSubject",
"@type": "@id"
},
"evaluatedAgainst": {
"@id": "qw:evaluatedAgainst",
"@type": "@id"
},
"hasAssessmentEvent": {
"@id": "qw:hasAssessmentEvent",
"@type": "@id",
"@container": "@set"
},
"hasAssessor": {
"@id": "qw:hasAssessor",
"@type": "@id",
"@container": "@set"
},
"hasAuthority": {
"@id": "qw:hasAuthority",
"@type": "@id"
},
"hasIdentityAssurance": {
"@id": "qw:hasIdentityAssurance",
"@type": "@id"
},
"hasProcessAssurance": {
"@id": "qw:hasProcessAssurance",
"@type": "@id"
},
"hasValidityArgument": {
"@id": "qw:hasValidityArgument",
"@type": "@id",
"@container": "@set"
},
"hasHumanJudgment": {
"@id": "qw:hasHumanJudgment",
"@type": "@id",
"@container": "@set"
},
"hasDecision": {
"@id": "qw:hasDecision",
"@type": "@id"
},
"hasDecisionTrace": {
"@id": "qw:hasDecisionTrace",
"@type": "@id"
},
"hasGapReport": {
"@id": "qw:hasGapReport",
"@type": "@id"
},
"version": "qw:version",
"title": "qw:title",
"description": "qw:description",
"status": "qw:status",
"evaluationTime": "qw:evaluationTime",
"rationale": "qw:rationale"
}
}
Рекомендована адреса:
https://qualificationweb.org/context/qw-v1.jsonld
{
"@context": "https://qualificationweb.org/context/qw-v1.jsonld",
"id": "https://qualificationweb.org/id/proof/example-001",
"type": "QualificationProof",
"version": "1.0",
"hasSubject": "https://example.org/person/123",
"evaluatedAgainst":
"https://qualificationweb.org/id/qualification/example-master/1.0",
"hasAssessmentEvent": [
"https://example.org/assessment/001"
],
"hasValidityArgument": [
"https://example.org/validity/001"
]
}
Попередній документ може бути представлений як:
<proof/example-001>
rdf:type qw:QualificationProof ;
qw:hasSubject
<person/123> ;
qw:evaluatedAgainst
<qualification/example-master/1.0> ;
qw:hasAssessmentEvent
<assessment/001> ;
qw:hasValidityArgument
<validity/001> .
Канонічний vocabulary повинен визначати щонайменше:
qw:Qualification
qw:QualificationSpecification
qw:QualificationRequirement
qw:MandatoryRequirement
qw:CompensableRequirement
qw:IntegrativeRequirement
qw:Candidate
qw:Claim
qw:EvidenceObject
qw:CounterEvidence
qw:AssessmentDesign
qw:AssessmentEvent
qw:Assessor
qw:AssessmentPanel
qw:ValidityArgument
qw:Inference
qw:Assumption
qw:Limitation
qw:AuthorityRecord
qw:IdentityAssurance
qw:ProcessAssurance
qw:ConflictRecord
qw:HumanJudgmentEvent
qw:QualificationProof
qw:ConformanceDecision
qw:DecisionTrace
qw:GapReport
qw:Award
qw:RecognitionRecord
qw:ProfessionalAuthorization
qw:MandatoryRequirement
rdfs:subClassOf
qw:QualificationRequirement .
qw:CompensableRequirement
rdfs:subClassOf
qw:QualificationRequirement .
qw:IntegrativeRequirement
rdfs:subClassOf
qw:QualificationRequirement .
qw:ArtifactEvidence
qw:PerformanceEvidence
qw:ObservationEvidence
qw:AssessmentResultEvidence
qw:CredentialEvidence
qw:PublicationEvidence
qw:DatasetEvidence
qw:SoftwareEvidence
qw:PortfolioEvidence
qw:ProfessionalRecordEvidence
qw:ResearchContributionEvidence
усі можуть бути підкласами:
qw:EvidenceObject
Онтологія QWP визначає щонайменше:
qw:hasSpecification
qw:hasRequirement
qw:addressesRequirement
qw:hasSubject
qw:supports
qw:challenges
qw:evaluates
qw:produces
qw:hasAssessor
qw:hasAuthority
qw:hasIdentityAssurance
qw:hasProcessAssurance
qw:hasValidityArgument
qw:dependsOn
qw:hasHumanJudgment
qw:evaluatedAgainst
qw:evaluatesProof
qw:hasDecisionTrace
qw:hasGapReport
qw:issuedBy
qw:alignedToFramework
qw:alignedToLevel
Domain:
qw:QualificationSpecification
Range:
qw:QualificationRequirement
Семантика:
специфікація містить певну кваліфікаційну вимогу.
Domain:
qw:Claim
Range:
qw:QualificationRequirement
Семантика:
твердження використовується для представлення або перевірки певної вимоги.
Domain:
qw:EvidenceObject
Range:
qw:Claim
Семантика:
EvidenceObject пропонується як evidence, що підтримує Claim.
Це відношення саме по собі не породжує SUPPORTED.
Domain:
qw:EvidenceObject
Range:
qw:Claim
Семантика:
evidence послаблює або суперечить Claim.
Domain:
qw:AssessmentEvent
Range:
qw:Claim
Domain:
qw:AssessmentEvent
Range:
qw:EvidenceObject
Domain:
qw:AssessmentEvent
Range:
qw:Assessor
Domain:
qw:Assessor
Range:
qw:AuthorityRecord
Domain:
qw:QualificationProof
Range:
qw:QualificationSpecification
Це одна з ключових властивостей.
Proof без точної target specification не може бути повноцінно оцінений.
Domain:
qw:ConformanceDecision
Range:
qw:QualificationProof
Domain:
qw:ConformanceDecision
Range:
qw:DecisionTrace
Domain:
qw:ConformanceDecision
Range:
qw:GapReport
qw:title
qw:description
qw:version
qw:status
qw:createdAt
qw:updatedAt
qw:evaluationTime
qw:rationale
qw:decisionCode
qw:effectiveFrom
qw:effectiveUntil
Рекомендується представляти decision states як URI, а не лише plain strings.
Наприклад:
qw:PASS
qw:FAIL
qw:INDETERMINATE
qw:SUPPORTED
qw:NOT_SUPPORTED
qw:INSUFFICIENT_EVIDENCE
qw:CONTESTED
qw:HUMAN_REVIEW
qw:hasDecisionStatus
може мати range:
qw:DecisionStatus
qw:hasRequirementStatus
може мати range:
qw:RequirementStatus
qw:PASS не є RequirementStatus.
qw:SUPPORTED не є DecisionStatus.
Це два різні рівні.
Для uncertain information вводиться:
qw:EpistemicStatus
Можливі values:
qw:Verified
qw:Supported
qw:Unverified
qw:Unknown
qw:Contested
qw:Insufficient
Онтологія не повинна містити правило:
absence of property
→
negative assertion
Наприклад:
якщо немає RecognitionRecord, qualification не слід автоматично вважати NOT_RECOGNIZED.
Правильний стан може бути:
NOT_EVALUATED
або:
UNKNOWN
Якщо компетентний орган прямо відмовив у recognition, це можна представляти:
RecognitionRecord
hasRecognitionStatus
qw:NOT_RECOGNIZED
Це відрізняється від відсутності record.
Рекомендований namespace для shapes:
https://qualificationweb.org/shapes/qw-v1#
Префікс:
qws:
Концептуальний SHACL shape:
qws:QualificationProofShape
a sh:NodeShape ;
sh:targetClass qw:QualificationProof ;
sh:property [
sh:path qw:hasSubject ;
sh:minCount 1 ;
sh:maxCount 1
] ;
sh:property [
sh:path qw:evaluatedAgainst ;
sh:minCount 1 ;
sh:maxCount 1 ;
sh:class qw:QualificationSpecification
] .
qws:QualificationSpecificationShape
a sh:NodeShape ;
sh:targetClass qw:QualificationSpecification ;
sh:property [
sh:path qw:hasRequirement ;
sh:minCount 1 ;
sh:class qw:QualificationRequirement
] .
qws:ClaimShape
a sh:NodeShape ;
sh:targetClass qw:Claim ;
sh:property [
sh:path qw:addressesRequirement ;
sh:minCount 1 ;
sh:class qw:QualificationRequirement
] .
qws:EvidenceObjectShape
a sh:NodeShape ;
sh:targetClass qw:EvidenceObject ;
sh:property [
sh:path qw:hasSubject ;
sh:minCount 1 ;
sh:maxCount 1
] .
qws:AssessmentEventShape
a sh:NodeShape ;
sh:targetClass qw:AssessmentEvent ;
sh:property [
sh:path qw:hasSubject ;
sh:minCount 1 ;
sh:maxCount 1
] ;
sh:property [
sh:path qw:hasAssessor ;
sh:minCount 1
] .
Для profile, де assessor не required, може використовуватися інший shape.
qws:ConformanceDecisionShape
a sh:NodeShape ;
sh:targetClass qw:ConformanceDecision ;
sh:property [
sh:path qw:evaluatesProof ;
sh:minCount 1 ;
sh:maxCount 1 ;
sh:class qw:QualificationProof
] ;
sh:property [
sh:path qw:hasDecisionStatus ;
sh:minCount 1 ;
sh:maxCount 1 ;
sh:in (
qw:PASS
qw:FAIL
qw:INDETERMINATE
)
] .
qws:DecisionTraceShape
a sh:NodeShape ;
sh:targetClass qw:DecisionTrace ;
sh:property [
sh:path qw:referencesRequirement ;
sh:minCount 1
] .
qws:AuthorityRecordShape
a sh:NodeShape ;
sh:targetClass qw:AuthorityRecord ;
sh:property [
sh:path qw:authorityHolder ;
sh:minCount 1 ;
sh:maxCount 1
] ;
sh:property [
sh:path qw:authorityStatus ;
sh:minCount 1 ;
sh:maxCount 1
] .
qws:HumanJudgmentEventShape
a sh:NodeShape ;
sh:targetClass qw:HumanJudgmentEvent ;
sh:property [
sh:path qw:hasReviewer ;
sh:minCount 1
] ;
sh:property [
sh:path qw:rationale ;
sh:minCount 1
] .
для high-stakes profile.
qws:IdentityAssuranceShape
a sh:NodeShape ;
sh:targetClass qw:IdentityAssurance ;
sh:property [
sh:path qw:assuranceLevel ;
sh:minCount 1 ;
sh:maxCount 1 ;
sh:in (
qw:IA0
qw:IA1
qw:IA2
qw:IA3
qw:IA4
)
] .
Аналогічно:
qw:PA0
qw:PA1
qw:PA2
qw:PA3
qw:PA4
SHACL може встановити:
ConformanceDecision має один status.
Але він не повинен сам по собі вирішувати:
чи status має бути PASS.
Це робота QCE та Decision Rules.
Необхідно розрізняти:
Structural Rule
Semantic Constraint
Decision Rule
Приклад:
поле version повинно існувати.
Реалізується JSON Schema.
Приклад:
QualificationProof повинен мати рівно одного Candidate.
Може реалізовуватися SHACL.
Приклад:
якщо mandatory requirement має NOT_SUPPORTED, final decision = FAIL.
Виконується QCE.
Архітектура:
JSON Schema
↓
SHACL / semantic validation
↓
QCE Decision Rules
Приклад:
Candidate: C1
|
| subjectOf
v
QualificationProof: P1
|
| evaluatedAgainst
v
QualificationSpecification: QS1
|
| hasRequirement
+--------------------------------+
| |
v v
Requirement: R1 Requirement: R2
| |
| expressedBy | expressedBy
v v
Claim: C-R1 Claim: C-R2
| |
| supports | supports
^ ^
| |
Evidence: E1 Evidence: E2
| |
| generatedBy | generatedBy
v v
Assessment: A1 Assessment: A2
| |
| hasAssessor | hasAssessor
v v
Assessor: AS1 Assessor: AS2
| |
| hasAuthority | hasAuthority
v v
AuthorityRecord: AR1 AuthorityRecord: AR2
ValidityArgument: V1
|
| justifies
v
Claim C-R1
HumanJudgment: H1
|
| reviews
v
Requirement R2
QualificationProof P1
|
| evaluatedBy
v
ConformanceDecision D1
|
+--> DecisionTrace DT1
|
+--> GapReport G1
@prefix qw: <https://qualificationweb.org/ns/qw#> .
<https://example.org/proof/P1>
a qw:QualificationProof ;
qw:hasSubject
<https://example.org/person/C1> ;
qw:evaluatedAgainst
<https://example.org/qualification/QS1> ;
qw:containsEvidence
<https://example.org/evidence/E1> ;
qw:hasAssessmentEvent
<https://example.org/assessment/A1> ;
qw:hasValidityArgument
<https://example.org/validity/V1> .
<https://example.org/claim/C-R1>
a qw:Claim ;
qw:addressesRequirement
<https://example.org/requirement/R1> .
<https://example.org/evidence/E1>
a qw:EvidenceObject ;
qw:supports
<https://example.org/claim/C-R1> .
<https://example.org/assessment/A1>
a qw:AssessmentEvent ;
qw:evaluates
<https://example.org/claim/C-R1> ;
qw:hasAssessor
<https://example.org/assessor/AS1> .
<https://example.org/assessor/AS1>
a qw:Assessor ;
qw:hasAuthority
<https://example.org/authority/AR1> .
<https://example.org/decision/D1>
a qw:ConformanceDecision ;
qw:evaluatesProof
<https://example.org/proof/P1> ;
qw:hasDecisionStatus
qw:PASS .
Граф не вважається достатнім лише через наявність багатьох nodes.
Важливим є coverage required chains.
Наприклад:
Requirement R1
→ Claim C1
→ Evidence E1
→ Assessment A1
→ Validity V1
Якщо:
Requirement R1
→ Claim C1
→ Evidence E1
але немає required assessment або validity basis, QCE не повинен автоматично ставити:
SUPPORTED
Можна визначити:
qw:EvidenceChain
як допоміжний concept для tooling.
Він може об’єднувати:
Requirement
Claim
Evidence
Assessment
Validity
Authority
EvidenceChain лише представляє шлях у graph.
Його existence не означає, що chain достатній.
QualificationProof
↓
RequirementResults
↓
DecisionRuleSet
↓
ConformanceDecision
↓
DecisionTrace
Рекомендується окремий клас:
qw:RequirementResult
RequirementResult
forRequirement
QualificationRequirement
RequirementResult
hasRequirementStatus
SUPPORTED | NOT_SUPPORTED | ...
Він повинен дозволяти посилання на:
supportingEvidence
counterEvidence
validityArguments
humanJudgments
decisionRules
GapReport
|
+-- Gap 1
| |
| +-- affects Requirement R3
| +-- type MissingEvidence
|
+-- Gap 2
|
+-- affects Requirement R5
+-- type HumanReviewPending
qw:MissingEvidenceGap
qw:InvalidEvidenceGap
qw:AssessmentGap
qw:AuthorityGap
qw:IdentityGap
qw:ProcessAssuranceGap
qw:ValidityGap
qw:PendingHumanReviewGap
qw:ConflictGap
Recognition знаходиться після QWP academic conformance:
Qualification
↓
Award
↓
RecognitionRecord
↓
RecognitionPurpose
RecognitionRecord
issuedBy
RecognitionAuthority
Без такого basis не слід створювати authoritative recognition statement.
Award
awardsQualification
Qualification
Award
awardedTo
Candidate
Award
issuedBy
AwardingAuthority
Не допускається:
ConformanceDecision PASS
→
Award
Не допускається:
Award
→
Recognition in every jurisdiction
Не допускається:
Recognition
→
ProfessionalAuthorization
Не допускається:
Same QualificationLevel
→
EquivalentQualification
Не допускається:
VerifiedCredential
→
CompetenceSupported
без відповідного evidence/validity chain.
Machine-readable distribution SHOULD містити окремий перелік non-inference rules.
Наприклад:
semantic-safety.md
або machine-readable policy representation.
Вони особливо важливі для:
knowledge graphs;
AI agents;
automated reasoning;
third-party implementations.
Рекомендований файл:
qwp-semantic-summary.json
може містити:
{
"coreDistinctions": [
"Evidence != Claim",
"Identifier != Identity",
"Expertise != Authority",
"AcademicConformance != Award",
"Award != Recognition",
"Recognition != ProfessionalAuthorization",
"SameLevel != Equivalence"
]
}
Такий файл є допоміжним.
Канонічні semantics повинні бути представлені через:
classes;
properties;
domains;
ranges;
shapes;
decision rules.
Core ontology URI SHOULD залишатися стабільним.
Наприклад:
https://qualificationweb.org/ns/qw#QualificationProof
не повинен змінюватися через redesign website.
Ontology version може мати:
https://qualificationweb.org/ontology/1.0/
при збереженні stable term IRIs.
Рекомендовано:
ontology title
version
release date
status
maintainer
licence
previous version
Якщо property більше не рекомендується:
owl:deprecated true
може використовуватися у RDF/OWL representation.
Старий URI не слід без потреби видаляти.
Qualification Web MAY map concepts до external standards.
Типи mapping:
exact match
close match
broader match
narrower match
related match
exactMatch слід застосовувати лише тоді, коли semantics справді еквівалентні.
Подібна назва недостатня.
Для provenance доцільно використовувати compatible relations із W3C PROV.
Наприклад:
qw:generatedBy
≈
prov:wasGeneratedBy
де semantics сумісні.
Credential layer може map до W3C Verifiable Credentials.
Але:
VerifiableCredential
не повинно ставати subclass:
QualificationProof
за замовчуванням.
Це різні concepts.
External framework levels можуть бути linked resources.
Наприклад:
Qualification
alignedToLevel
ExternalFrameworkLevel
Psychology extension:
psy:ClinicalPracticeRequirement
psy:SupervisionEvidence
Computer Science extension:
cs:SoftwareArtifact
cs:CodeReviewAssessment
Business extension:
biz:StrategicDecisionSimulation
Інакше вона стане:
надто великою;
нестабільною;
важкою для governance.
Core описує спільну qualification logic.
Наприклад:
psy:SupervisionEvidence
rdfs:subClassOf
qw:EvidenceObject
Domain extension MUST NOT перевизначати core property:
qw:supports
так, щоб вона означала щось інше.
Кілька registries можуть використовувати один vocabulary:
Registry A
Registry B
Registry C
↓
Qualification Web Ontology
Для interoperability не потрібно фізично переносити всі records до одного central server.
Потрібні:
stable identifiers;
common semantics;
resolvable records;
shared validation rules.
Наприклад:
GET
https://qualificationweb.org/id/qualification/example-master/1.0
може повертати:
HTML
JSON
JSON-LD
залежно від requested representation.
HTML representation може містити:
Магістерська кваліфікація — приклад.
JSON-LD representation містить:
{
"@id": "...",
"@type": "qw:QualificationSpecification"
}
Ключовий принцип:
same resource identity
+
multiple serializations
Qualification Web Knowledge Graph може формуватися з distributed canonical records.
Приклад:
Qualification
↔ Framework
↔ Requirement
↔ Claim
↔ Evidence Type
↔ Recognition
Knowledge Graph може відповісти:
які requirements має qualification?
Але не повинен без QCE автоматично вирішувати:
чи candidate PASS?
Вхід:
{
"query": "Master-level psychology"
}
Вихід може містити canonical qualification identifiers.
{
"identifier": "https://qualificationweb.org/id/qualification/example-master/1.0"
}
{
"qualificationA": "...",
"qualificationB": "..."
}
{
"proof": { }
}
{
"proof": { },
"specification": "..."
}
Повертає Decision Trace.
Повертає Gap Report.
Agent interface MUST NOT створювати статус:
PASS
лише шляхом natural-language inference.
PASS повинен походити з:
QCE evaluation
{
"qwpDecision": "INDETERMINATE",
"interpretation": "Недостатньо доказів для завершення оцінювання.",
"source": "QCE",
"decisionId": "decision:123"
}
{
"qwpDecision": "PASS",
"reason": "AI вважає портфоліо сильним."
}
без QCE process.
Рекомендовані levels:
Violation
Warning
Info
Порушення, яке робить graph непридатним для нормального evaluation.
Наприклад:
QualificationProof не має subject.
Проблема, яка потребує уваги, але не завжди робить proof invalid.
Наприклад:
evidence наближається до expiration threshold.
Додаткова інформація.
Наприклад:
optional provenance field не заповнено.
Рекомендований формат:
{
"conforms": false,
"violations": [
{
"shape": "QualificationProofShape",
"path": "qw:hasSubject",
"message": "QualificationProof повинен мати рівно одного subject."
}
],
"warnings": []
}
SHACL conforms = true
означає:
граф семантично коректний.
Не:
candidate PASS.
Фінальна модель:
1. JSON parsing
↓
2. JSON Schema
↓
3. Identifier integrity
↓
4. Reference resolution
↓
5. JSON-LD expansion
↓
6. RDF graph construction
↓
7. SHACL validation
↓
8. QCE evaluation
↓
9. DecisionTrace
↓
10. GapReport
Результат:
INVALID_DOCUMENT
Результат:
INVALID_PROOF
із structural error details.
Може дати:
INVALID_PROOF
або:
INDETERMINATE
залежно від характеру constraint.
Лише після достатньої валідності graph:
PASS
FAIL
INDETERMINATE
Фінальний distribution layout:
qwp-machine-readable-v1/
|
+-- schemas/
| +-- qualification-specification.schema.json
| +-- qualification-proof.schema.json
| +-- evidence-object.schema.json
| +-- assessment-design.schema.json
| +-- assessment-event.schema.json
| +-- validity-argument.schema.json
| +-- authority-record.schema.json
| +-- identity-assurance.schema.json
| +-- process-assurance.schema.json
| +-- human-judgment.schema.json
| +-- conformance-decision.schema.json
| +-- decision-trace.schema.json
| +-- gap-report.schema.json
| +-- recognition-record.schema.json
|
+-- contexts/
| +-- qwp-v1.jsonld
|
+-- ontology/
| +-- qwp-v1.ttl
| +-- qwp-v1.jsonld
|
+-- shapes/
| +-- qwp-core.shacl.ttl
| +-- qwp-high-stakes.shacl.ttl
|
+-- examples/
| +-- pass/
| +-- fail/
| +-- indeterminate/
| +-- invalid/
|
+-- vocabularies/
| +-- decision-status.json
| +-- requirement-status.json
| +-- evidence-types.json
|
+-- semantic-safety/
| +-- non-inference-rules.json
|
+-- README.md
Implementation A:
створює QualificationProof;
серіалізує його як JSON-LD.
Implementation B:
читає proof;
будує той самий semantic graph;
успішно проходить shapes;
зберігає core meaning.
Дві незалежні QCE implementations отримують:
same proof
same specification
same decision rules
same external state
і повинні отримати:
same machine decision
Майбутня extension MAY визначити спосіб canonical graph normalization і hashing.
Але QWP v1.0 не робить конкретний RDF canonicalization algorithm обов’язковим core requirement.
Надмірна рання стандартизація cryptographic canonicalization:
ускладнить implementation;
не є необхідною для basic interoperability;
може бути додана окремим security profile.
Майбутній profile може визначати:
QWP-SIGNED-PROOF
із:
digital signatures;
proof integrity;
trusted issuers;
revocation.
Можливий:
QWP-SELECTIVE-DISCLOSURE
для ситуацій, де verifier отримує лише мінімальний subset proof.
Можливий:
QWP-HIGH-STAKES
з підвищеними requirements щодо:
identity;
process assurance;
authority;
human review;
audit.
QWP-RESEARCH
може додавати:
ResearchContributionObject;
novelty claims;
peer review;
defence;
contribution graph.
Наприклад:
QWP-PSYCHOLOGY
не повинен змінювати QWP core.
Він лише додає domain constraints.
Кожне core JSON field SHOULD мати documented semantic mapping.
Наприклад:
JSON:
"supports"
Ontology:
qw:supports
JSON поле
Семантичний URI
Значення
subject
qw:hasSubject
суб’єкт доказу
supports
qw:supports
доказ підтримує твердження
assessmentDesign
qw:implements
застосований дизайн
assessors
qw:hasAssessor
оцінювачі
qualificationSpecification
qw:evaluatedAgainst
target specification
decision
qw:hasDecisionStatus
результат
rationale
qw:rationale
обґрунтування
Дві serializations одного resource MUST NOT давати різне semantic meaning.
Рекомендований test:
JSON-LD
↓
RDF
↓
JSON-LD
повинен зберігати core semantic graph.
Semantic graph може бути перетворений у текст:
Кандидат надав research project, який був оцінений двома уповноваженими експертами та підтримує вимогу R1.
Це projection graph, а не окреме джерело truth.
AI MAY перетворювати DecisionTrace на зрозумілу людині мову.
Але AI explanation MUST NOT змінювати actual machine decision.
Рекомендовано:
{
"decision": "INDETERMINATE",
"causes": [
{
"requirement": "req:R5",
"status": "HUMAN_REVIEW",
"reasonCode": "EXPERT_REVIEW_PENDING"
}
]
}
Може бути:
Оцінювання ще не завершено, оскільки вимога R5 потребує експертного перегляду.
Це derivative representation.
Рекомендована hierarchy:
Normative Specification
↓
Canonical Vocabulary / Ontology
↓
Machine Schemas
↓
QCE Rules
↓
Decision Data
↓
Human / AI Presentation
Нижній рівень не повинен переписувати meaning верхнього.
Specification record може мати:
{
"specification": "QWP",
"version": "1.0",
"status": "Candidate",
"maintainer": "Qualification Web",
"previousVersion": null
}
Machine client SHOULD перевіряти:
qwpVersion
до interpretation document.
Якщо implementation підтримує QWP 1.x, але отримує:
QWP 2.0
вона MUST NOT припускати backward compatibility.
Implementation MAY обробляти compatible subset, якщо core semantics не змінилися.
API MAY дозволяти client вказувати підтримувану protocol version.
Accept-QWP-Version: 1.0
або equivalent mechanism.
Рекомендовані публічні paths:
/ns/qw#
/context/qw-v1.jsonld
/schema/v1/
/shapes/v1/
/id/qualification/
/id/framework/
/id/proof/
URLs документації MAY змінюватися.
Canonical IDs SHOULD NOT змінюватися без серйозної причини.
QWP Machine-Readable Specification v1.0 Candidate тепер визначає:
JSON data model;
JSON Schema;
JSON-LD context;
RDF vocabulary;
SHACL constraints;
canonical graph relations;
machine validation pipeline;
non-inference boundaries;
agent-safe semantics;
extension architecture.
QualificationSpecification
|
+-- hasRequirement
|
QualificationRequirement
^
|
addressesRequirement
|
Claim
^
|
supports
|
EvidenceObject
|
generatedBy / evaluatedThrough
|
AssessmentEvent
|
hasAssessor
|
Assessor
|
hasAuthority
|
AuthorityRecord
Evidence + Assessment
|
v
ValidityArgument
|
v
QualificationProof
|
v
QCE
|
v
ConformanceDecision
|
+-- DecisionTrace
+-- GapReport
Machine reasoning MUST зберігати:
Evidence != Claim
Identifier != Identity
Authenticity != Validity
Expertise != Authority
AcademicConformance != Award
Award != Recognition
Recognition != ProfessionalAuthorization
SameLevel != Equivalence
QWP Machine-Readable Specification v1.0 Candidate
Part 1: JSON Data Model and JSON Schema
Part 2: JSON-LD, RDF, SHACL and Qualification Proof Graph