Question Set
https://meta.linked.archi/archimate3/questions#
Questions ArchiMate 3.2 stakeholders ask of a model — impact of change, application dependencies, data access, responsibilities, realisation and traceability — and the findings that show where a concern the ArchiMate 3.2 viewpoints frame is not met. Each is executable SPARQL (see arch:ModelQuestion).
19 model questions: questions the model answers, each with the SPARQL that answers it, bound to the concerns it informs. A finding question's rows are problems against those concerns: none means they are met.
notation/archimate/elements-by-layer
?model (optional) — The model to count. A modelling tool binds the open model; a deliverable, the model it is produced from.SELECT ?layer (COUNT(DISTINCT ?element) AS ?elements)
WHERE {
# Each layer's types, read once.
{
SELECT DISTINCT ?layer ?type
WHERE {
VALUES ?layer {
am:StrategyLayerElement am:MotivationElement am:BusinessLayerElement am:ApplicationLayerElement
am:TechnologyLayerElement am:PhysicalLayerElement am:ImplementationAndMigrationLayerElement
}
{ ?layerType rdfs:subClassOf* ?layer } UNION { GRAPH ?ontologyGraph { ?layerType rdfs:subClassOf* ?layer } }
{ ?type rdfs:subClassOf* ?layerType } UNION { GRAPH ?specialisationGraph { ?type rdfs:subClassOf* ?layerType } }
}
}
?element rdf:type ?type ;
arch:inModel ?model .
}
GROUP BY ?layer
ORDER BY DESC(?elements)
notation/archimate/requirement-traceability
SELECT DISTINCT ?requirement ?requirementLabel ?direction ?predicate ?other ?otherLabel ?otherType
WHERE {
{
SELECT DISTINCT ?requirementType
WHERE {
{ ?asked rdfs:subClassOf* am:Requirement } UNION { GRAPH ?ontologyGraph { ?asked rdfs:subClassOf* am:Requirement } }
{ ?requirementType rdfs:subClassOf* ?asked } UNION { GRAPH ?specialisationGraph { ?requirementType rdfs:subClassOf* ?asked } }
}
}
?requirement rdf:type ?requirementType .
{
?other am:realizes ?requirement .
BIND(am:realizes AS ?predicate)
BIND("realised by" AS ?direction)
}
UNION
{
VALUES ?predicate { am:realizes am:influences }
?requirement ?predicate ?other .
BIND("contributes to" AS ?direction)
}
?other rdf:type ?otherType .
FILTER(?otherType NOT IN (arch:ModelConcept, arch:Element, arch:QualifiedRelationship))
MINUS { SELECT DISTINCT ?otherType WHERE { { ?otherType arch:isAbstractClass true }
UNION { GRAPH ?abstractClassGraph { ?otherType arch:isAbstractClass true } } } }
OPTIONAL { ?requirement skos:prefLabel ?requirementLabel . FILTER(lang(?requirementLabel) = "" || langMatches(lang(?requirementLabel), "en")) }
OPTIONAL { ?other skos:prefLabel ?otherLabel . FILTER(lang(?otherLabel) = "" || langMatches(lang(?otherLabel), "en")) }
}
ORDER BY ?requirementLabel ?direction ?otherLabel
notation/archimate/plateau-difference
?from — The earlier plateau, such as the baseline.?to — The later plateau, such as the target.SELECT DISTINCT ?change ?element ?label ?type
WHERE {
# Both are plateaus, or a specialisation of one.
FILTER EXISTS {
?from rdf:type ?fromType .
{ ?fromType rdfs:subClassOf* am:Plateau } UNION { GRAPH ?fromGraph { ?fromType rdfs:subClassOf* am:Plateau } }
}
FILTER EXISTS {
?to rdf:type ?toType .
{ ?toType rdfs:subClassOf* am:Plateau } UNION { GRAPH ?toGraph { ?toType rdfs:subClassOf* am:Plateau } }
}
FILTER(?from != ?to)
{ ?to am:aggregates|am:composedOf ?element . BIND("added" AS ?change) }
UNION
{ ?from am:aggregates|am:composedOf ?element . BIND("removed" AS ?change) }
# Here, where both are bound: in the other plateau it is not.
FILTER(IF(?change = "added",
NOT EXISTS { ?from am:aggregates|am:composedOf ?element },
NOT EXISTS { ?to am:aggregates|am:composedOf ?element }))
?element rdf:type ?type .
FILTER(?type NOT IN (arch:ModelConcept, arch:Element, arch:QualifiedRelationship))
MINUS { SELECT DISTINCT ?type WHERE { { ?type arch:isAbstractClass true }
UNION { GRAPH ?abstractClassGraph { ?type arch:isAbstractClass true } } } }
OPTIONAL { ?element skos:prefLabel ?label . FILTER(lang(?label) = "" || langMatches(lang(?label), "en")) }
}
ORDER BY ?change ?type ?label
notation/archimate/stakeholder-motivation
SELECT DISTINCT ?stakeholder ?stakeholderLabel ?direction ?predicate ?motivation ?motivationLabel ?motivationType
WHERE {
{
SELECT DISTINCT ?stakeholderType
WHERE {
{ ?asked rdfs:subClassOf* am:Stakeholder } UNION { GRAPH ?ontologyGraph { ?asked rdfs:subClassOf* am:Stakeholder } }
{ ?stakeholderType rdfs:subClassOf* ?asked } UNION { GRAPH ?specialisationGraph { ?stakeholderType rdfs:subClassOf* ?asked } }
}
}
{
SELECT DISTINCT ?motivationType
WHERE {
{ ?motivationLayerType rdfs:subClassOf* am:MotivationElement } UNION { GRAPH ?motivationGraph { ?motivationLayerType rdfs:subClassOf* am:MotivationElement } }
{ ?motivationType rdfs:subClassOf* ?motivationLayerType } UNION { GRAPH ?motivationSpecialisationGraph { ?motivationType rdfs:subClassOf* ?motivationLayerType } }
}
}
VALUES ?predicate { am:associatedWith am:influences am:realizes am:aggregates am:composedOf }
?stakeholder rdf:type ?stakeholderType .
{ ?stakeholder ?predicate ?motivation . BIND("outgoing" AS ?direction) }
UNION
{ ?motivation ?predicate ?stakeholder . BIND("incoming" AS ?direction) }
?motivation rdf:type ?motivationType .
MINUS { SELECT DISTINCT ?motivationType WHERE { { ?motivationType arch:isAbstractClass true }
UNION { GRAPH ?abstractClassGraph { ?motivationType arch:isAbstractClass true } } } }
OPTIONAL { ?stakeholder skos:prefLabel ?stakeholderLabel . FILTER(lang(?stakeholderLabel) = "" || langMatches(lang(?stakeholderLabel), "en")) }
OPTIONAL { ?motivation skos:prefLabel ?motivationLabel . FILTER(lang(?motivationLabel) = "" || langMatches(lang(?motivationLabel), "en")) }
}
ORDER BY ?stakeholderLabel ?direction ?motivationLabel
notation/archimate/work-package-deliverables
SELECT DISTINCT ?workPackage ?workPackageLabel ?deliverable ?deliverableLabel ?realized ?realizedLabel ?realizedType
WHERE {
{
SELECT DISTINCT ?workPackageType
WHERE {
{ ?asked rdfs:subClassOf* am:WorkPackage } UNION { GRAPH ?ontologyGraph { ?asked rdfs:subClassOf* am:WorkPackage } }
{ ?workPackageType rdfs:subClassOf* ?asked } UNION { GRAPH ?specialisationGraph { ?workPackageType rdfs:subClassOf* ?asked } }
}
}
{
SELECT DISTINCT ?deliverableType
WHERE {
{ ?askedDeliverable rdfs:subClassOf* am:Deliverable } UNION { GRAPH ?deliverableGraph { ?askedDeliverable rdfs:subClassOf* am:Deliverable } }
{ ?deliverableType rdfs:subClassOf* ?askedDeliverable } UNION { GRAPH ?deliverableSpecialisationGraph { ?deliverableType rdfs:subClassOf* ?askedDeliverable } }
}
}
?workPackage rdf:type ?workPackageType ;
am:realizes ?deliverable .
?deliverable rdf:type ?deliverableType .
OPTIONAL {
?deliverable am:realizes ?realized .
?realized rdf:type ?realizedType .
FILTER(?realizedType NOT IN (arch:ModelConcept, arch:Element, arch:QualifiedRelationship))
MINUS { SELECT DISTINCT ?realizedType WHERE { { ?realizedType arch:isAbstractClass true }
UNION { GRAPH ?abstractClassGraph { ?realizedType arch:isAbstractClass true } } } }
OPTIONAL { ?realized skos:prefLabel ?realizedLabel . FILTER(lang(?realizedLabel) = "" || langMatches(lang(?realizedLabel), "en")) }
}
OPTIONAL { ?workPackage skos:prefLabel ?workPackageLabel . FILTER(lang(?workPackageLabel) = "" || langMatches(lang(?workPackageLabel), "en")) }
OPTIONAL { ?deliverable skos:prefLabel ?deliverableLabel . FILTER(lang(?deliverableLabel) = "" || langMatches(lang(?deliverableLabel), "en")) }
}
ORDER BY ?workPackageLabel ?deliverableLabel
notation/archimate/impact-of-change
?focus — The element that changes. A modelling tool binds the selected element; a deliverable, the element it is produced for.SELECT DISTINCT ?impacted ?label ?type
WHERE {
?focus (am:serves|am:realizes|am:assignedTo|^am:accesses)+ ?impacted .
FILTER(?impacted != ?focus)
FILTER NOT EXISTS { ?impacted arch:source ?anySource }
?impacted rdf:type ?type .
FILTER(?type NOT IN (arch:ModelConcept, arch:Element, arch:QualifiedRelationship))
MINUS { SELECT DISTINCT ?type WHERE { { ?type arch:isAbstractClass true }
UNION { GRAPH ?abstractClassGraph { ?type arch:isAbstractClass true } } } }
OPTIONAL { ?impacted skos:prefLabel ?label . FILTER(lang(?label) = "" || langMatches(lang(?label), "en")) }
}
ORDER BY ?type ?label
notation/archimate/principle-rationale
SELECT DISTINCT ?principle ?principleLabel ?direction ?predicate ?other ?otherLabel ?otherType
WHERE {
{
SELECT DISTINCT ?principleType
WHERE {
{ ?asked rdfs:subClassOf* am:Principle } UNION { GRAPH ?ontologyGraph { ?asked rdfs:subClassOf* am:Principle } }
{ ?principleType rdfs:subClassOf* ?asked } UNION { GRAPH ?specialisationGraph { ?principleType rdfs:subClassOf* ?asked } }
}
}
VALUES ?predicate { am:realizes am:influences am:associatedWith }
?principle rdf:type ?principleType .
{ ?principle ?predicate ?other . BIND("outgoing" AS ?direction) }
UNION
{ ?other ?predicate ?principle . BIND("incoming" AS ?direction) }
?other rdf:type ?otherType .
FILTER(?otherType NOT IN (arch:ModelConcept, arch:Element, arch:QualifiedRelationship))
MINUS { SELECT DISTINCT ?otherType WHERE { { ?otherType arch:isAbstractClass true }
UNION { GRAPH ?abstractClassGraph { ?otherType arch:isAbstractClass true } } } }
OPTIONAL { ?principle skos:prefLabel ?principleLabel . FILTER(lang(?principleLabel) = "" || langMatches(lang(?principleLabel), "en")) }
OPTIONAL { ?other skos:prefLabel ?otherLabel . FILTER(lang(?otherLabel) = "" || langMatches(lang(?otherLabel), "en")) }
}
ORDER BY ?principleLabel ?direction ?otherLabel
notation/archimate/capability-realisation
SELECT DISTINCT ?capability ?capabilityLabel ?realizer ?realizerLabel ?realizerType
WHERE {
{
SELECT DISTINCT ?capabilityType
WHERE {
{ ?asked rdfs:subClassOf* am:Capability } UNION { GRAPH ?ontologyGraph { ?asked rdfs:subClassOf* am:Capability } }
{ ?capabilityType rdfs:subClassOf* ?asked } UNION { GRAPH ?specialisationGraph { ?capabilityType rdfs:subClassOf* ?asked } }
}
}
?capability rdf:type ?capabilityType .
OPTIONAL {
?realizer am:realizes ?capability ;
rdf:type ?realizerType .
FILTER(?realizerType NOT IN (arch:ModelConcept, arch:Element, arch:QualifiedRelationship))
MINUS { SELECT DISTINCT ?realizerType WHERE { { ?realizerType arch:isAbstractClass true }
UNION { GRAPH ?abstractClassGraph { ?realizerType arch:isAbstractClass true } } } }
OPTIONAL { ?realizer skos:prefLabel ?realizerLabel . FILTER(lang(?realizerLabel) = "" || langMatches(lang(?realizerLabel), "en")) }
}
OPTIONAL { ?capability skos:prefLabel ?capabilityLabel . FILTER(lang(?capabilityLabel) = "" || langMatches(lang(?capabilityLabel), "en")) }
}
ORDER BY ?capabilityLabel ?realizerLabel
notation/archimate/application-dependencies
SELECT DISTINCT ?provider ?providerLabel ?how ?via ?consumer ?consumerLabel
WHERE {
# From the relationships to their ends, each branch anchored on its relationships: never every pair of
# components. Both ends are then checked against the component types, read once each.
{
VALUES ?linkType { am:Serving am:Flow am:Triggering }
?via rdf:type ?linkType ;
arch:source ?provider ;
arch:target ?consumer .
BIND(REPLACE(STR(?linkType), "^.*[#/]", "") AS ?how)
}
UNION
{
{
SELECT DISTINCT ?serviceType
WHERE {
{ ?askedService rdfs:subClassOf* am:ApplicationService } UNION { GRAPH ?serviceOntologyGraph { ?askedService rdfs:subClassOf* am:ApplicationService } }
{ ?serviceType rdfs:subClassOf* ?askedService } UNION { GRAPH ?serviceSpecialisationGraph { ?serviceType rdfs:subClassOf* ?askedService } }
}
}
?via rdf:type ?serviceType ;
am:serves ?consumer .
?provider am:realizes|(am:assignedTo/am:realizes) ?via .
BIND("realises a service serving" AS ?how)
}
?provider rdf:type ?providerType .
?consumer rdf:type ?consumerType .
{
SELECT DISTINCT ?providerType
WHERE {
{ ?askedProvider rdfs:subClassOf* am:ApplicationComponent } UNION { GRAPH ?providerGraph { ?askedProvider rdfs:subClassOf* am:ApplicationComponent } }
{ ?providerType rdfs:subClassOf* ?askedProvider } UNION { GRAPH ?providerSpecialisationGraph { ?providerType rdfs:subClassOf* ?askedProvider } }
}
}
{
SELECT DISTINCT ?consumerType
WHERE {
{ ?askedConsumer rdfs:subClassOf* am:ApplicationComponent } UNION { GRAPH ?consumerGraph { ?askedConsumer rdfs:subClassOf* am:ApplicationComponent } }
{ ?consumerType rdfs:subClassOf* ?askedConsumer } UNION { GRAPH ?consumerSpecialisationGraph { ?consumerType rdfs:subClassOf* ?askedConsumer } }
}
}
FILTER(?provider != ?consumer)
OPTIONAL { ?provider skos:prefLabel ?providerLabel . FILTER(lang(?providerLabel) = "" || langMatches(lang(?providerLabel), "en")) }
OPTIONAL { ?consumer skos:prefLabel ?consumerLabel . FILTER(lang(?consumerLabel) = "" || langMatches(lang(?consumerLabel), "en")) }
}
ORDER BY ?providerLabel ?consumerLabel
notation/archimate/layer-crossing
SELECT ?sourceLayer ?relationshipType ?targetLayer (COUNT(DISTINCT ?relationship) AS ?relationships)
WHERE {
?relationship arch:source ?source ;
arch:target ?target ;
rdf:type ?relationshipType .
FILTER(?relationshipType NOT IN (arch:ModelConcept, arch:Element, arch:QualifiedRelationship))
MINUS { SELECT DISTINCT ?relationshipType WHERE { { ?relationshipType arch:isAbstractClass true }
UNION { GRAPH ?abstractClassGraph { ?relationshipType arch:isAbstractClass true } } } }
?source rdf:type ?sourceType .
?target rdf:type ?targetType .
{
SELECT DISTINCT ?sourceLayer ?sourceType
WHERE {
VALUES ?sourceLayer {
am:StrategyLayerElement am:MotivationElement am:BusinessLayerElement am:ApplicationLayerElement
am:TechnologyLayerElement am:PhysicalLayerElement am:ImplementationAndMigrationLayerElement
}
{ ?sourceLayerType rdfs:subClassOf* ?sourceLayer } UNION { GRAPH ?sourceOntologyGraph { ?sourceLayerType rdfs:subClassOf* ?sourceLayer } }
{ ?sourceType rdfs:subClassOf* ?sourceLayerType } UNION { GRAPH ?sourceSpecialisationGraph { ?sourceType rdfs:subClassOf* ?sourceLayerType } }
}
}
{
SELECT DISTINCT ?targetLayer ?targetType
WHERE {
VALUES ?targetLayer {
am:StrategyLayerElement am:MotivationElement am:BusinessLayerElement am:ApplicationLayerElement
am:TechnologyLayerElement am:PhysicalLayerElement am:ImplementationAndMigrationLayerElement
}
{ ?targetLayerType rdfs:subClassOf* ?targetLayer } UNION { GRAPH ?targetOntologyGraph { ?targetLayerType rdfs:subClassOf* ?targetLayer } }
{ ?targetType rdfs:subClassOf* ?targetLayerType } UNION { GRAPH ?targetSpecialisationGraph { ?targetType rdfs:subClassOf* ?targetLayerType } }
}
}
FILTER(?sourceLayer != ?targetLayer)
}
GROUP BY ?sourceLayer ?relationshipType ?targetLayer
ORDER BY DESC(?relationships)
notation/archimate/responsibility-assignments
SELECT DISTINCT ?performer ?performerLabel ?performerType ?assignment ?assigned ?assignedLabel ?assignedType
WHERE {
{
SELECT DISTINCT ?assignmentType
WHERE {
{ ?asked rdfs:subClassOf* am:Assignment } UNION { GRAPH ?ontologyGraph { ?asked rdfs:subClassOf* am:Assignment } }
{ ?assignmentType rdfs:subClassOf* ?asked } UNION { GRAPH ?specialisationGraph { ?assignmentType rdfs:subClassOf* ?asked } }
}
}
?assignment rdf:type ?assignmentType ;
arch:source ?performer ;
arch:target ?assigned .
?performer rdf:type ?performerType .
?assigned rdf:type ?assignedType .
FILTER(?performerType NOT IN (arch:ModelConcept, arch:Element, arch:QualifiedRelationship))
FILTER(?assignedType NOT IN (arch:ModelConcept, arch:Element, arch:QualifiedRelationship))
MINUS { SELECT DISTINCT ?performerType WHERE { { ?performerType arch:isAbstractClass true }
UNION { GRAPH ?abstractClassGraph { ?performerType arch:isAbstractClass true } } } }
MINUS { SELECT DISTINCT ?assignedType WHERE { { ?assignedType arch:isAbstractClass true }
UNION { GRAPH ?abstractClassGraph { ?assignedType arch:isAbstractClass true } } } }
OPTIONAL { ?performer skos:prefLabel ?performerLabel . FILTER(lang(?performerLabel) = "" || langMatches(lang(?performerLabel), "en")) }
OPTIONAL { ?assigned skos:prefLabel ?assignedLabel . FILTER(lang(?assignedLabel) = "" || langMatches(lang(?assignedLabel), "en")) }
}
ORDER BY ?performerLabel ?assignedLabel
notation/archimate/data-access
SELECT DISTINCT ?accessor ?accessorLabel ?access ?accessKind ?object ?objectLabel ?objectType
WHERE {
VALUES ?accessKind { am:Access am:ReadAccess am:WriteAccess am:ReadWriteAccess }
?access rdf:type ?accessKind ;
arch:source ?accessor ;
arch:target ?object .
# am:Access only when no kind is stated: the kinds are its subclasses.
FILTER(?accessKind != am:Access || NOT EXISTS {
?access rdf:type ?statedKind .
FILTER(?statedKind IN (am:ReadAccess, am:WriteAccess, am:ReadWriteAccess))
})
?object rdf:type ?objectType .
FILTER(?objectType NOT IN (arch:ModelConcept, arch:Element, arch:QualifiedRelationship))
MINUS { SELECT DISTINCT ?objectType WHERE { { ?objectType arch:isAbstractClass true }
UNION { GRAPH ?abstractClassGraph { ?objectType arch:isAbstractClass true } } } }
OPTIONAL { ?accessor skos:prefLabel ?accessorLabel . FILTER(lang(?accessorLabel) = "" || langMatches(lang(?accessorLabel), "en")) }
OPTIONAL { ?object skos:prefLabel ?objectLabel . FILTER(lang(?objectLabel) = "" || langMatches(lang(?objectLabel), "en")) }
}
ORDER BY ?objectLabel ?accessKind ?accessorLabel
notation/archimate/applications-without-technology
?application
?model (optional) — The model to look in. A modelling tool binds the open model; a deliverable, the model it is produced from.SELECT DISTINCT ?application ?label
WHERE {
{
SELECT DISTINCT ?componentType
WHERE {
{ ?asked rdfs:subClassOf* am:ApplicationComponent } UNION { GRAPH ?ontologyGraph { ?asked rdfs:subClassOf* am:ApplicationComponent } }
{ ?componentType rdfs:subClassOf* ?asked } UNION { GRAPH ?specialisationGraph { ?componentType rdfs:subClassOf* ?asked } }
}
}
?application rdf:type ?componentType ;
arch:inModel ?model .
MINUS {
# The technology layer's types, read once.
{
SELECT DISTINCT ?technologyType
WHERE {
{ ?layerType rdfs:subClassOf* am:TechnologyLayerElement }
UNION { GRAPH ?layerGraph { ?layerType rdfs:subClassOf* am:TechnologyLayerElement } }
{ ?technologyType rdfs:subClassOf* ?layerType }
UNION { GRAPH ?layerSpecialisationGraph { ?technologyType rdfs:subClassOf* ?layerType } }
}
}
?technology rdf:type ?technologyType ;
am:serves|am:realizes|(am:realizes/am:serves) ?application .
}
OPTIONAL { ?application skos:prefLabel ?label . FILTER(lang(?label) = "" || langMatches(lang(?label), "en")) }
}
ORDER BY ?label
notation/archimate/unrealised-capabilities
?capability
?model (optional) — The model to look in. A modelling tool binds the open model; a deliverable, the model it is produced from.SELECT DISTINCT ?capability ?label
WHERE {
{
SELECT DISTINCT ?capabilityType
WHERE {
{ ?asked rdfs:subClassOf* am:Capability } UNION { GRAPH ?ontologyGraph { ?asked rdfs:subClassOf* am:Capability } }
{ ?capabilityType rdfs:subClassOf* ?asked } UNION { GRAPH ?specialisationGraph { ?capabilityType rdfs:subClassOf* ?asked } }
}
}
?capability rdf:type ?capabilityType ;
arch:inModel ?model .
FILTER NOT EXISTS {
?capability (am:composedOf|am:aggregates)* ?part .
?realizer am:realizes ?part .
}
OPTIONAL { ?capability skos:prefLabel ?label . FILTER(lang(?label) = "" || langMatches(lang(?label), "en")) }
}
ORDER BY ?label
notation/archimate/data-never-written
?object
SELECT ?object ?label ?readers
WHERE {
{
SELECT ?object (COUNT(DISTINCT ?reader) AS ?readers)
WHERE {
{
SELECT DISTINCT ?objectType
WHERE {
VALUES ?askedObject { am:DataObject am:BusinessObject am:Artifact }
{ ?asked rdfs:subClassOf* ?askedObject } UNION { GRAPH ?ontologyGraph { ?asked rdfs:subClassOf* ?askedObject } }
{ ?objectType rdfs:subClassOf* ?asked } UNION { GRAPH ?specialisationGraph { ?objectType rdfs:subClassOf* ?asked } }
}
}
?read rdf:type am:ReadAccess ;
arch:source ?reader ;
arch:target ?object .
?object rdf:type ?objectType .
}
GROUP BY ?object
}
# Written: a write, a read-write, or an access whose kind is not stated.
FILTER NOT EXISTS {
VALUES ?writeKind { am:WriteAccess am:ReadWriteAccess am:Access }
?write rdf:type ?writeKind ;
arch:target ?object .
FILTER NOT EXISTS { ?write rdf:type am:ReadAccess }
}
OPTIONAL { ?object skos:prefLabel ?label . FILTER(lang(?label) = "" || langMatches(lang(?label), "en")) }
}
ORDER BY DESC(?readers) ?label
notation/archimate/principles-without-requirements
?principle
?model (optional) — The model to look in. A modelling tool binds the open model; a deliverable, the model it is produced from.SELECT DISTINCT ?principle ?label
WHERE {
{
SELECT DISTINCT ?principleType
WHERE {
{ ?asked rdfs:subClassOf* am:Principle } UNION { GRAPH ?ontologyGraph { ?asked rdfs:subClassOf* am:Principle } }
{ ?principleType rdfs:subClassOf* ?asked } UNION { GRAPH ?specialisationGraph { ?principleType rdfs:subClassOf* ?asked } }
}
}
?principle rdf:type ?principleType ;
arch:inModel ?model .
FILTER NOT EXISTS {
{
SELECT DISTINCT ?requirementType
WHERE {
{ ?askedRequirement rdfs:subClassOf* am:Requirement } UNION { GRAPH ?requirementGraph { ?askedRequirement rdfs:subClassOf* am:Requirement } }
{ ?requirementType rdfs:subClassOf* ?askedRequirement } UNION { GRAPH ?requirementSpecialisationGraph { ?requirementType rdfs:subClassOf* ?askedRequirement } }
}
}
?requirement am:realizes ?principle ;
rdf:type ?requirementType .
}
OPTIONAL { ?principle skos:prefLabel ?label . FILTER(lang(?label) = "" || langMatches(lang(?label), "en")) }
}
ORDER BY ?label
notation/archimate/unassigned-behaviour
?behaviour
?model (optional) — The model to look in. A modelling tool binds the open model; a deliverable, the model it is produced from.SELECT DISTINCT ?behaviour ?label ?type
WHERE {
{
SELECT DISTINCT ?type ?behaviourType
WHERE {
VALUES ?type {
am:BusinessProcess am:BusinessFunction am:ApplicationProcess am:ApplicationFunction
am:TechnologyProcess am:TechnologyFunction
}
{ ?asked rdfs:subClassOf* ?type } UNION { GRAPH ?ontologyGraph { ?asked rdfs:subClassOf* ?type } }
{ ?behaviourType rdfs:subClassOf* ?asked } UNION { GRAPH ?specialisationGraph { ?behaviourType rdfs:subClassOf* ?asked } }
}
}
?behaviour rdf:type ?behaviourType ;
arch:inModel ?model .
FILTER NOT EXISTS { ?performer am:assignedTo ?behaviour }
OPTIONAL { ?behaviour skos:prefLabel ?label . FILTER(lang(?label) = "" || langMatches(lang(?label), "en")) }
}
ORDER BY ?type ?label
notation/archimate/unrealised-requirements
?requirement
?model (optional) — The model to look in. A modelling tool binds the open model; a deliverable, the model it is produced from.SELECT DISTINCT ?requirement ?label
WHERE {
{
SELECT DISTINCT ?requirementType
WHERE {
{ ?asked rdfs:subClassOf* am:Requirement } UNION { GRAPH ?ontologyGraph { ?asked rdfs:subClassOf* am:Requirement } }
{ ?requirementType rdfs:subClassOf* ?asked } UNION { GRAPH ?specialisationGraph { ?requirementType rdfs:subClassOf* ?asked } }
}
}
?requirement rdf:type ?requirementType ;
arch:inModel ?model .
# Realised by a design element: one whose own type is not a motivation element.
MINUS {
?realizer am:realizes ?requirement ;
rdf:type ?realizerType .
FILTER(?realizerType NOT IN (arch:ModelConcept, arch:Element, arch:QualifiedRelationship))
MINUS { SELECT DISTINCT ?realizerType WHERE { { ?realizerType arch:isAbstractClass true }
UNION { GRAPH ?abstractClassGraph { ?realizerType arch:isAbstractClass true } } } }
MINUS {
SELECT DISTINCT ?realizerType
WHERE {
{ ?motivationType rdfs:subClassOf* am:MotivationElement }
UNION { GRAPH ?motivationGraph { ?motivationType rdfs:subClassOf* am:MotivationElement } }
{ ?realizerType rdfs:subClassOf* ?motivationType }
UNION { GRAPH ?motivationSpecialisationGraph { ?realizerType rdfs:subClassOf* ?motivationType } }
}
}
}
OPTIONAL { ?requirement skos:prefLabel ?label . FILTER(lang(?label) = "" || langMatches(lang(?label), "en")) }
}
ORDER BY ?label
notation/archimate/unrealised-services
?service
?model (optional) — The model to look in. A modelling tool binds the open model; a deliverable, the model it is produced from.SELECT DISTINCT ?service ?label ?type
WHERE {
{
SELECT DISTINCT ?type ?serviceType
WHERE {
VALUES ?type { am:BusinessService am:ApplicationService am:TechnologyService }
{ ?asked rdfs:subClassOf* ?type } UNION { GRAPH ?ontologyGraph { ?asked rdfs:subClassOf* ?type } }
{ ?serviceType rdfs:subClassOf* ?asked } UNION { GRAPH ?specialisationGraph { ?serviceType rdfs:subClassOf* ?asked } }
}
}
?service rdf:type ?serviceType ;
arch:inModel ?model .
FILTER NOT EXISTS { ?realizer am:realizes ?service }
OPTIONAL { ?service skos:prefLabel ?label . FILTER(lang(?label) = "" || langMatches(lang(?label), "en")) }
}
ORDER BY ?type ?label