D3FEND API Documentation

The D3FEND REST API is used to populate the views on the D3FEND website. This is an alpha version API, please send feedback to help improve this community resource.

Endpoint for retrieving D3FEND ontology inbound bindings.
GET
/api/ontology/inference/d3fend-full-mappings.csv
Returns
Type Description
OntologyBindings 200 - success response - application/json
/api/ontology/inference/d3fend-full-mappings.csv
export interface OntologyBindings {
    message: string;
}
Endpoint for retrieving D3FEND ontology inbound bindings.
GET
/api/ontology/inference/d3fend-full-mappings.json
Returns
Type Description
OntologyBindings 200 - success response - application/json
/api/ontology/inference/d3fend-full-mappings.json
export interface OntologyBindings {
    message: string;
}
Endpoint for retrieving SPARQL DESCRIBE results for D3FEND Ontology entities.
GET
/api/ontology/describe/[subject].json
Parameters
Name Type Description
subject string Single D3FEND object/artifact id
Returns
Type Description
OntologyBindings 200 - success response - application/json
/api/ontology/describe/d3f:SystemCall.json
export interface OntologyBindings {
    "@id":                                                       string;
    "@type"?:                                                    string[];
    "http://www.w3.org/2002/07/owl#onProperty"?:                 HTTPD3FendMitreOrgOntologiesD3FendOwlAnalyzeElement[];
    "http://www.w3.org/2002/07/owl#someValuesFrom"?:             HTTPD3FendMitreOrgOntologiesD3FendOwlAnalyzeElement[];
    "http://www.w3.org/2000/01/rdf-schema#subClassOf"?:          HTTPD3FendMitreOrgOntologiesD3FendOwlAnalyzeElement[];
    "http://d3fend.mitre.org/ontologies/d3fend.owl#monitors"?:   HTTPD3FendMitreOrgOntologiesD3FendOwlAnalyzeElement[];
    "http://d3fend.mitre.org/ontologies/d3fend.owl#definition"?: HTTPD3FendMitreOrgOntologiesD3FendOwlDefinitionElement[];
    "http://d3fend.mitre.org/ontologies/d3fend.owl#executes"?:   HTTPD3FendMitreOrgOntologiesD3FendOwlAnalyzeElement[];
    "http://d3fend.mitre.org/ontologies/d3fend.owl#synonym"?:    HTTPD3FendMitreOrgOntologiesD3FendOwlDefinitionElement[];
    "http://www.w3.org/2000/01/rdf-schema#isDefinedBy"?:         HTTPD3FendMitreOrgOntologiesD3FendOwlAnalyzeElement[];
    "http://www.w3.org/2000/01/rdf-schema#label"?:               HTTPD3FendMitreOrgOntologiesD3FendOwlDefinitionElement[];
    "http://d3fend.mitre.org/ontologies/d3fend.owl#analyzes"?:   HTTPD3FendMitreOrgOntologiesD3FendOwlAnalyzeElement[];
    "http://d3fend.mitre.org/ontologies/d3fend.owl#filters"?:    HTTPD3FendMitreOrgOntologiesD3FendOwlAnalyzeElement[];
    "http://d3fend.mitre.org/ontologies/d3fend.owl#invokes"?:    HTTPD3FendMitreOrgOntologiesD3FendOwlAnalyzeElement[];
}

export interface HTTPD3FendMitreOrgOntologiesD3FendOwlAnalyzeElement {
    "@id": string;
}

export interface HTTPD3FendMitreOrgOntologiesD3FendOwlDefinitionElement {
    "@value": string;
}
Endpoint for retrieving D3FEND ontology inbound bindings.
GET
/api/ontology/describe/inbound/[subject].json
Parameters
Name Type Description
subject string Single D3FEND object/artifact id
Returns
Type Description
OntologyBindings 200 - success response - application/json
/api/ontology/describe/inbound/d3f:SystemCall.json
export interface OntologyBindings {
    head:    Head;
    results: Results;
}

export interface Head {
    vars: string[];
}

export interface Results {
    bindings: Binding[];
}

export interface Binding {
    object:    Object;
    subject:   Object;
    predicate: Object;
}

export interface Object {
    type:  Type;
    value: string;
}

export enum Type {
    Bnode = "bnode",
    URI = "uri",
}
Endpoint for retrieving single artifact properties
GET
/api/dao/artifact/[artifact].json
Parameters
Name Type Description
artifact string Name of D3FEND Artifact
Returns
Type Description
DAOArtifact 200 - success response - application/json
/api/dao/artifact/d3f:AccessToken.json
export interface DAOArtifact {
    da_to_off:   DaToOff;
    da_to_def:   DaToDef;
    neighbors:   Neighbors;
    da_to_weak:  Artifactld;
    artifactld:  Artifactld;
    da_graph:    DaGraph;
    description: Artifactld;
}

export interface Artifactld {
    "@context": Context;
    "@graph":   ArtifactldGraph[];
}

export interface Context {
    rdfs: string;
    owl:  string;
    d3f:  string;
    skos: string;
}

export interface ArtifactldGraph {
    "@id":              string;
    "@type"?:           string[];
    "d3f:definition"?:  string;
    "rdfs:label"?:      string;
    "rdfs:seeAlso"?:    RdfsSeeAlso;
    "rdfs:subClassOf"?: RdfsSeeAlso;
    "skos:altLabel"?:   string[];
}

export interface RdfsSeeAlso {
    "@id": string;
}

export interface DaGraph {
    "@context": Context;
    "@graph":   DaGraphGraph[];
}

export interface DaGraphGraph {
    "@id":               string;
    "rdfs:hasSubClass"?: RdfsSeeAlso[] | RdfsSeeAlso;
    "rdfs:label":        string;
}

export interface DaToDef {
    head:    Head;
    results: DaToDefResults;
}

export interface Head {
    vars: string[];
}

export interface DaToDefResults {
    bindings: Binding[];
}

export interface Binding {
    def_tactic_label:            DefArtifact;
    def_tactic_rel_label:        DefArtifact;
    def_tech_parent_is_toplevel: DefTechParentIsToplevel;
    def_tech_parent_label:       DefArtifact;
    def_tech_label:              DefArtifact;
    def_artifact_rel_label:      DefArtifact;
    def_artifact_label:          DefArtifact;
    def_tactic:                  DefArtifact;
    def_tactic_rel:              DefArtifact;
    def_tech:                    DefArtifact;
    def_artifact_rel:            DefArtifact;
    def_artifact:                DefArtifact;
}

export interface DefArtifact {
    type:  Type;
    value: string;
}

export enum Type {
    Literal = "literal",
    URI = "uri",
}

export interface DefTechParentIsToplevel {
    datatype: string;
    type:     Type;
    value:    string;
}

export interface DaToOff {
    head:    Head;
    results: DaToOffResults;
}

export interface DaToOffResults {
    bindings: { [key: string]: DefArtifact }[];
}

export interface Neighbors {
    "@context": Context;
    "@graph":   NeighborsGraph[];
}

export interface NeighborsGraph {
    "@id":           string;
    "rdfs:label":    string[];
    "d3f:copies"?:   RdfsSeeAlso[];
    "d3f:outbound"?: RdfsSeeAlso[];
    "d3f:contains"?: RdfsSeeAlso[];
}
Endpoint for retrieving all D3FEND artifacts.
GET
/api/dao/artifacts.json
Returns
Type Description
ArtifactsGraph 200 - success response - application/json
/api/dao/artifacts.json
export interface ArtifactsGraph {
    "@context": Context;
    "@graph":   Graph[];
}

export interface Context {
    rdfs: string;
    owl:  string;
    d3f:  string;
    skos: string;
}

export interface Graph {
    "@id":               string;
    "rdfs:hasSubClass"?: RdfsHasSubClass[];
    "rdfs:label":        string[];
    "skos:altLabel"?:    string[];
}

export interface RdfsHasSubClass {
    "@id": string;
}
Endpoint for retrieving D3FEND Matrix in JSON-LD format.
GET
/api/matrix-graph.json
Returns
Type Description
Taxonomy 200 - success response - application/json
/api/matrix-graph.json
export interface Taxonomy {
    "@context": Context;
    "@graph":   Graph[];
}

export interface Context {
    rdfs: string;
    owl:  string;
    d3f:  string;
    skos: string;
}

export interface Graph {
    "@id":                   string;
    "@type"?:                string[];
    "d3f:d3fend-id"?:        string[];
    "d3f:definition"?:       string[];
    "d3f:kb-reference"?:     D3FAnalyze[];
    "d3f:maps"?:             D3FAnalyze[];
    "rdfs:label"?:           string[];
    "rdfs:subClassOf"?:      D3FAnalyze[];
    "d3f:created"?:          D3F[];
    "d3f:disables"?:         D3FAnalyze[];
    "d3f:kb-article"?:       string[];
    "d3f:may-query"?:        D3FAnalyze[];
    "d3f:synonym"?:          string[];
    "owl:disjointWith"?:     D3FAnalyze[];
    "d3f:analyzes"?:         D3FAnalyze[];
    "d3f:hardens"?:          D3FAnalyze[];
    "d3f:children"?:         D3FAnalyze[];
    "d3f:enables"?:          D3FAnalyze[];
    "d3f:display-order"?:    D3F[];
    "d3f:evaluates"?:        D3FAnalyze[];
    "d3f:identifies"?:       D3FAnalyze[];
    "d3f:deletes"?:          D3FAnalyze[];
    "d3f:authenticates"?:    D3FAnalyze[];
    "d3f:filters"?:          D3FAnalyze[];
    "d3f:reads"?:            D3FAnalyze[];
    "d3f:inventories"?:      D3FAnalyze[];
    "d3f:spoofs"?:           D3FAnalyze[];
    "d3f:regenerates"?:      D3FAnalyze[];
    "d3f:restricts"?:        D3FAnalyze[];
    "rdfs:seeAlso"?:         D3FAnalyze[];
    "d3f:blocks"?:           D3FAnalyze[];
    "d3f:may-contain"?:      D3FAnalyze[];
    "d3f:display-priority"?: D3F[];
    "d3f:manages"?:          D3FAnalyze[];
    "d3f:display-baseurl"?:  string[];
    "d3f:encrypts"?:         D3FAnalyze[];
    "d3f:monitors"?:         D3FAnalyze[];
    "d3f:may-access"?:       D3FAnalyze[];
    "d3f:isolates"?:         D3FAnalyze[];
    "d3f:validates"?:        D3FAnalyze[];
    "d3f:verifies"?:         D3FAnalyze[];
    "d3f:terminates"?:       D3FAnalyze[];
    "d3f:queries"?:          D3FAnalyze[];
    "d3f:use-limits"?:       D3FAnalyze[];
    "d3f:may-map"?:          D3FAnalyze[];
    "d3f:neutralizes"?:      D3FAnalyze[];
    "d3f:suspends"?:         D3FAnalyze[];
    "d3f:restores"?:         D3FAnalyze[];
    "d3f:obfuscates"?:       D3FAnalyze[];
    "d3f:updates"?:          D3FAnalyze[];
    "d3f:strengthens"?:      D3FAnalyze[];
    "skos:altLabel"?:        string[];
    "rdfs:isDefinedBy"?:     D3FAnalyze[];
}

export interface D3FAnalyze {
    "@id": string;
}

export interface D3F {
    "@type":  string;
    "@value": string;
}
Endpoint for retrieving D3FEND Matrix in a custom json structure.
GET
/api/matrix.json
Returns
Type Description
DAOMatrix[] 200 - success response - application/json
/api/matrix.json
export interface DAOMatrix {
    "@id":                  string;
    children:               DAOMatrixChild[];
    "d3f:display-order":    D3F;
    "d3f:display-priority": D3F;
    "d3f:type":             string;
    "rdfs:label":           string;
}

export interface DAOMatrixChild {
    "@id":            string;
    children:         ChildChild[];
    "d3f:d3fend-id":  string;
    "d3f:definition": string;
    "rdfs:label":     string;
    "d3f:ref-count"?: D3F;
}

export interface ChildChild {
    "@id":            string;
    "d3f:d3fend-id":  string;
    "d3f:definition": string;
    "d3f:ref-count"?: D3F;
    "rdfs:label":     string;
    children?:        ChildChild[];
}

export interface D3F {
    "@type":  string;
    "@value": string;
}
Endpoint for retrieving all ATT&CK-techniques in the D3FEND Ontology.
GET
/api/offensive-technique/all.json
Returns
Type Description
ATTACKTechniques 200 - success response - application/json
/api/offensive-technique/all.json
export interface ATTACKTechniques {
    "@context": Context;
    "@graph":   Graph[];
}

export interface Context {
    rdfs: string;
    owl:  string;
    d3f:  string;
    skos: string;
}

export interface Graph {
    "@id":            string;
    "d3f:attack-id":  string;
    "d3f:definition": string;
    "rdfs:label":     string;
}
Endpoint for retrieving single ATT&CK technique properties.
GET
/api/offensive-technique/attack/[technique].json
Returns
Type Description
OffensiveTechnique 200 - success response - application/json
/api/offensive-technique/attack/T1571.json
export interface OffensiveTechnique {
    off_to_def:    OffToDef;
    description:   Description;
    subtechniques: Description;
}

export interface Description {
    "@context": Context;
    "@graph":   Graph[];
}

export interface Context {
    rdfs: string;
    owl:  string;
    d3f:  string;
    skos: string;
}

export interface Graph {
    "@id":             string;
    "@type":           string[];
    "d3f:attack-id":   string;
    "d3f:definition":  string;
    "d3f:produces":    D3FProduces;
    "rdfs:label":      string;
    "rdfs:subClassOf": D3FProduces;
}

export interface D3FProduces {
    "@id": string;
}

export interface OffToDef {
    head:    Head;
    results: Results;
}

export interface Head {
    vars: string[];
}

export interface Results {
    bindings: Binding[];
}

export interface Binding {
    sc:                           DefArtifact;
    off_artifact_label:           DefArtifact;
    off_artifact_rel_label:       DefArtifact;
    off_tech_label:               DefArtifact;
    off_tactic_rel_label:         DefArtifact;
    off_tactic_label:             DefArtifact;
    off_artifact:                 DefArtifact;
    off_artifact_rel:             DefArtifact;
    off_tech:                     DefArtifact;
    off_tech_id:                  DefArtifact;
    off_tactic_rel:               DefArtifact;
    off_tactic:                   DefArtifact;
    def_tactic_label?:            DefArtifact;
    def_tactic_rel_label?:        DefArtifact;
    def_tech_parent_is_toplevel?: DefTechParentIsToplevel;
    def_tech_parent_label?:       DefArtifact;
    def_tech_label?:              DefArtifact;
    def_artifact_rel_label?:      DefArtifact;
    def_artifact_label?:          DefArtifact;
    def_tactic?:                  DefArtifact;
    def_tactic_rel?:              DefArtifact;
    def_tech?:                    DefArtifact;
    def_artifact_rel?:            DefArtifact;
    def_artifact?:                DefArtifact;
}

export interface DefArtifact {
    type:  Type;
    value: string;
}

export enum Type {
    Literal = "literal",
    URI = "uri",
}

export interface DefTechParentIsToplevel {
    datatype: string;
    type:     Type;
    value:    string;
}
Endpoint for retrieving single tactic properties.
GET
/api/tactic/[tactic].json
Parameters
Name Type Description
tactic string Name of D3FEND tactic Artifact
Returns
Type Description
Tactic 200 - success response - application/json
/api/tactic/d3f:Harden.json
export interface Tactic {
    techniques: Techniques;
    group:      Group;
}

export interface Group {
    "@context": Context;
    "@graph":   GroupGraph[];
}

export interface Context {
    rdfs: string;
    owl:  string;
    d3f:  string;
    skos: string;
}

export interface GroupGraph {
    "@id":                  string;
    "@type":                string[];
    "d3f:definition":       string;
    "d3f:display-order":    D3FDisplay;
    "d3f:display-priority": D3FDisplay;
    "rdfs:label":           string;
    "rdfs:subClassOf":      Rdfs;
}

export interface D3FDisplay {
    "@type":  string;
    "@value": string;
}

export interface Rdfs {
    "@id": string;
}

export interface Techniques {
    "@context": Context;
    "@graph":   TechniquesGraph[];
}

export interface TechniquesGraph {
    "@id":               string;
    "d3f:d3fend-id":     string;
    "d3f:definition":    string;
    "rdfs:label":        string;
    "rdfs:subClassOf"?:  Rdfs;
    "d3f:synonym"?:      string[] | string;
    "d3f:top-level"?:    string;
    "rdfs:hasSubClass"?: Rdfs[];
}
Endpoint for retrieving all D3FEND Tactics.
GET
/api/tactic/all.json
Returns
Type Description
Tactics 200 - success response - application/json
/api/tactic/all.json
export interface Tactics {
    "@context": Context;
    "@graph":   Graph[];
}

export interface Context {
    rdfs: string;
    owl:  string;
    d3f:  string;
    skos: string;
}

export interface Graph {
    "@id":                  string;
    "@type":                Type[];
    "d3f:definition":       string;
    "d3f:display-order":    D3FDisplay;
    "d3f:display-priority": D3FDisplay;
    "rdfs:label":           string;
    "rdfs:subClassOf":      RdfsSubClassOf;
}

export enum Type {
    D3FDefensiveTactic = "d3f:DefensiveTactic",
    OwlClass = "owl:Class",
    OwlNamedIndividual = "owl:NamedIndividual",
}

export interface D3FDisplay {
    "@type":  string;
    "@value": string;
}

export interface RdfsSubClassOf {
    "@id": Type;
}
Endpoint for retrieving single technique properties.
GET
/api/technique/[technique].json
Parameters
Name Type Description
technique string Name of D3FEND technique Artifact
Returns
Type Description
Technique 200 - success response - application/json
/api/technique/d3f:DataInventory.json
export interface Technique {
    def_to_off:               DefToOff;
    description:              Description;
    digital_artifacts:        DigitalArtifacts;
    subtechniques:            Description;
    related_offensive_matrix: RelatedOffensiveMatrix;
    references:               References;
    references_meta:          ReferencesMeta;
}

export interface DefToOff {
    head:    Head;
    results: DefToOffResults;
}

export interface Head {
    vars: string[];
}

export interface DefToOffResults {
    bindings: Binding[];
}

export interface Binding {
    query_def_tech_label:        DefArtifact;
    top_def_tech_label:          DefArtifact;
    def_tactic_label:            DefArtifact;
    def_tactic_rel_label:        DefArtifact;
    def_tech_label:              DefArtifact;
    def_artifact_rel_label:      DefArtifact;
    def_artifact_label:          DefArtifact;
    off_artifact_label:          DefArtifact;
    off_artifact_rel_label:      DefArtifact;
    off_tech_label:              DefArtifact;
    off_tech_id:                 DefArtifact;
    off_tech_parent_label:       DefArtifact;
    off_tech_parent_is_toplevel: OffTechParentIsToplevel;
    off_tactic_rel_label:        DefArtifact;
    off_tactic_label:            DefArtifact;
    def_tactic:                  DefArtifact;
    def_tactic_rel:              DefArtifact;
    def_tech:                    DefArtifact;
    def_artifact_rel:            DefArtifact;
    def_artifact:                DefArtifact;
    off_artifact:                DefArtifact;
    off_artifact_rel:            DefArtifact;
    off_tech:                    DefArtifact;
    off_tech_parent:             DefArtifact;
    off_tactic_rel:              DefArtifact;
    off_tactic:                  DefArtifact;
}

export interface DefArtifact {
    type:  Type;
    value: string;
}

export enum Type {
    Literal = "literal",
    URI = "uri",
}

export interface OffTechParentIsToplevel {
    datatype: string;
    type:     Type;
    value:    string;
}

export interface Description {
    "@context": DescriptionContext;
    "@graph":   DescriptionGraph[];
}

export interface DescriptionContext {
    rdfs: string;
    owl:  string;
    d3f:  string;
    skos: string;
}

export interface DescriptionGraph {
    "@id":              string;
    "@type":            string[];
    "d3f:d3fend-id":    string;
    "d3f:definition":   string;
    "d3f:inventories":  D3FKBReference[];
    "d3f:kb-reference": D3FKBReference;
    "d3f:synonym":      string[];
    "rdfs:label":       string;
    "rdfs:subClassOf":  D3FKBReference;
}

export interface D3FKBReference {
    "@id": string;
}

export interface DigitalArtifacts {
    head:    Head;
    results: DigitalArtifactsResults;
}

export interface DigitalArtifactsResults {
    bindings: { [key: string]: DefArtifact }[];
}

export interface References {
    "@context": ReferencesContext;
    "@graph":   ReferencesGraph[];
}

export interface ReferencesContext {
    rdfs: string;
    d3f:  string;
}

export interface ReferencesGraph {
    "@id":                      string;
    "@type":                    string[];
    "d3f:has-link":             D3FHasLink;
    "d3f:kb-abstract":          string;
    "d3f:kb-author":            string;
    "d3f:kb-organization":      string;
    "d3f:kb-reference-of":      D3FKBReference;
    "d3f:kb-reference-title":   string;
    "d3f:reference-type-label": string;
    "rdfs:label":               string;
}

export interface D3FHasLink {
    "@type":  string;
    "@value": string;
}

export interface ReferencesMeta {
    Patent: number;
}

export interface RelatedOffensiveMatrix {
    "Defense Evasion":      Array<Array<Binding[] | string>>;
    "Credential Access":    Array<Array<Binding[] | string>>;
    Discovery:              Array<Array<Binding[] | string>>;
    "Lateral Movement":     Array<Array<Binding[] | string>>;
    Collection:             Array<Array<Binding[] | string>>;
    "Privilege Escalation": Array<Array<Binding[] | string>>;
    Execution:              Array<Array<Binding[] | string>>;
    "Initial Access":       Array<Array<Binding[] | string>>;
    Persistence:            Array<Array<Binding[] | string>>;
}
Endpoint for retrieving all D3FEND Techniques.
GET
/api/technique/all.json
Returns
Type Description
Techniques 200 - success response - application/json
/api/technique/all.json
export interface Techniques {
    "@context": Context;
    "@graph":   Graph[];
}

export interface Context {
    rdfs: string;
    owl:  string;
    d3f:  string;
    skos: string;
}

export interface Graph {
    "@id":           string;
    "@type":         Type;
    "d3f:d3fend-id": string;
    "rdfs:label":    string;
    "d3f:synonym"?:  string[] | string;
}

export enum Type {
    OwlClass = "owl:Class",
}
Endpoint for retrieving version and release date of D3FEND.
GET
/api/version.json
Returns
Type Description
VersionData 200 - success response - application/json
/api/version.json
export interface VersionData {
    version:      string;
    release_date: Date;
}
Endpoint for retrieving all CWE Weaknesses in D3FEND Ontology.
GET
/api/weakness/all.json
Returns
Type Description
Weaknesses 200 - success response - application/json
/api/weakness/all.json
export interface Weaknesses {
    "@context": Context;
    "@graph":   Graph[];
}

export interface Context {
    rdfs: string;
    owl:  string;
    d3f:  string;
    skos: string;
}

export interface Graph {
    "@id":                     string;
    "@type":                   TypeElement[] | TypeElement;
    "d3f:cwe-id":              string[];
    "rdfs:label":              string[];
    "rdfs:subClassOf":         SsOf[];
    "d3f:weakness-of"?:        SsOf[];
    "d3f:may-be-weakness-of"?: SsOf[];
    "rdfs:comment"?:           string[];
}

export enum TypeElement {
    OwlClass = "owl:Class",
    OwlNamedIndividual = "owl:NamedIndividual",
}

export interface SsOf {
    "@id": string;
}
Endpoint for retrieving Taxonomies.
GET
/api/weakness/cwe/[weakness_id].json
Parameters
Name Type Description
weakness_id string CWE Identifier
Returns
Type Description
Weakness 200 - success response - application/json
/api/weakness/cwe/CWE-78.json
export interface Weakness {
    weak_to_def: WeakToDef;
    description: Description;
}

export interface Description {
    "@context": Context;
    "@graph":   Graph[];
}

export interface Context {
    rdfs: string;
    owl:  string;
    d3f:  string;
    skos: string;
}

export interface Graph {
    "@id":                    string;
    "@type":                  string[];
    "d3f:cwe-id":             string;
    "d3f:may-be-weakness-of": SsOf[];
    "rdfs:label":             string;
    "rdfs:subClassOf":        SsOf;
}

export interface SsOf {
    "@id": string;
}

export interface WeakToDef {
    head:    Head;
    results: Results;
}

export interface Head {
    vars: string[];
}

export interface Results {
    bindings: Binding[];
}

export interface Binding {
    sc:                           DefArtifact;
    weak_artifact_label:          DefArtifact;
    weak_artifact_rel_label:      DefArtifact;
    weak_label:                   DefArtifact;
    weak_artifact:                DefArtifact;
    weak_artifact_rel:            DefArtifact;
    weak:                         DefArtifact;
    weak_id:                      DefArtifact;
    def_tactic_label?:            DefArtifact;
    def_tactic_rel_label?:        DefArtifact;
    def_tech_parent_is_toplevel?: DefTechParentIsToplevel;
    def_tech_parent_label?:       DefArtifact;
    def_tech_label?:              DefArtifact;
    def_artifact_rel_label?:      DefArtifact;
    def_artifact_label?:          DefArtifact;
    def_tactic?:                  DefArtifact;
    def_tactic_rel?:              DefArtifact;
    def_tech?:                    DefArtifact;
    def_artifact_rel?:            DefArtifact;
    def_artifact?:                DefArtifact;
}

export interface DefArtifact {
    type:  Type;
    value: string;
}

export enum Type {
    Literal = "literal",
    URI = "uri",
}

export interface DefTechParentIsToplevel {
    datatype: string;
    type:     Type;
    value:    string;
}