Showcase "Using Cargo and mermaid to derive NASA's FPIP from SMW-managed semantic data"

From SMW CindyKate - Main
Component 110431
Jump to: navigation, search
SMW CindyKate Main


[edit]
Showcase "Using Cargo and mermaid to derive NASA's FPIP from SMW-managed semantic data" is constituted by properties... ...having values


The Showcase

Notice:

For the time being, it seems that Firefox is rendering mermaid graphs/charts reliably.

NASA's ISS FPIP

One of NASA's management artefacts is its ISS FPIP. Let's see how we can

  1. manage the underlying data on a SMW and
  2. visualize facets of that data in accordance to the existing ISS FPIP chart.

Draw ISS FPIP's ontology by hand

During a workshop with NASA representatives we came up with the following preliminary ontology covering some aspects of ISS FPIP.

Notice:

The tool used is mermaid's online graph editor.

graph LR CrewVehicleFlight -->|Has launch date|CrewVehicleFlightLaunchDate CrewVehicleFlight -->|Has return date|CrewVehicleFlightReturnDate CrewVehicleFlight -->|Has dock date|CrewVehicleFlightDockDate CrewVehicleFlight -->|Has undock date|CrewVehicleFlightUndockDate CrewVehicleFlight -->|Has vehicle type|VehicleType CrewVehicleFlight -->|Has docking location|DockingLocation CrewVehicleFlightDockDate -->|Defines previous|ExpEndDate CrewVehicleFlightUndockDate -->|Defines next|ExpStartDate Expedition -->|Has end date|ExpEndDate Expedition -->|Has start date|ExpStartDate Expedition -->|Has commander|Astronaut Expedition -->|Has FE 1-6|Astronaut CargoVehicleFlight -->|Has launch date|CargoVehicleFlightLaunchDate CargoVehicleFlight -->|Has return date|CargoVehicleFlightReturnDate CargoVehicleFlight -->|Has dock date|CargoVehicleFlightDockDate CargoVehicleFlight -->|Has undock date|CargoVehicleFlightUndockDate CargoVehicleFlight -->|Has vehicle type|VehicleType CargoVehicleFlight -->|Has docking location|DockingLocation CrewVehicleFlight -->|Has commander|Astronaut CrewVehicleFlight -->|Has FE 1-2|Astronaut

Based on these findings we trigger a bottom-up design process.

Assert some preliminary exemplary instances for each component type identified and implement the component types' metadata and instance templates

In this first column we
  • factorize data about exemplary instances and
  • group them in templates representing different abstraction levels.
In this second column we
  • implement the templates on the abstraction level "component type" (domain ontology)
  • using both SMW and Cargo for semantization and
  • design the instances' data presentation as a page.
Notice:

You see that we semanticize data using both SMW and Cargo. The reason for this is explained further down.

Also, the abstraction structure is not optimal yet, but remember Donald Knuth's Principle "Premature optimization is the root of all evil". :)

In this third column we implement the component types' metadata (top-level ontology).

Type "Astronaut"


See all

Type "Expedition"

See all

Type "Crew Vehicle Flight"

See all

Type "Cargo Vehicle Flight"

See all

Now that we have

  1. asserted some preliminary exemplary instances for each component type identified,
  2. implemented the component types' metadata and
  3. implemented instance templates,

let's ask the SMW to give us an overview of what we've got.

View the instances asserted

Asserted astronauts

No results

Asserted expeditions

Error: no field named "" found for any of the specified database tables.

Asserted crew vehicle flights

Error: no field named "" found for any of the specified database tables.

Asserted cargo vehicle flights

No results

So far so good. More importantly and based on the declarations and assertions made hitherto, we can ask the SMW to "explain to us" NASA's ISS FPIP.

View ISS FPIP's ontology as it is derived from assertions

Define the ISS FPIP's ontology as a facet of type "Ontology"

How do we tell SMW what to explain to us? Well, by letting it know which triple patterns determine NASA's ISS FPIP.

Property... ...having values... ...constitutes facet
Has FE 1 Any value(s) Ontology "NASA ISS FPIP (Flight Planning Integration Panel)"
Has end date Any value(s) Ontology "NASA ISS FPIP (Flight Planning Integration Panel)"
Has FE 2 Any value(s) Ontology "NASA ISS FPIP (Flight Planning Integration Panel)"
Has launch date Any value(s) Ontology "NASA ISS FPIP (Flight Planning Integration Panel)"
Has FE 3 Any value(s) Ontology "NASA ISS FPIP (Flight Planning Integration Panel)"
Has return date Any value(s) Ontology "NASA ISS FPIP (Flight Planning Integration Panel)"
Has FE 4 Any value(s) Ontology "NASA ISS FPIP (Flight Planning Integration Panel)"
Has start date Any value(s) Ontology "NASA ISS FPIP (Flight Planning Integration Panel)"
Has FE 5 Any value(s) Ontology "NASA ISS FPIP (Flight Planning Integration Panel)"
Has commander Any value(s) Ontology "NASA ISS FPIP (Flight Planning Integration Panel)"
Has FE 6 Any value(s) Ontology "NASA ISS FPIP (Flight Planning Integration Panel)"

This is why, in spite of using Cargo for semantization, we still need in order to reify the property and make assertions about it. For example:

Property:Has FE 3 (edit)
{{Property}}

{{Property Constitution
|Property Constitution Constitutes=Component 160430
}}
{{#set:Has type=Page}}


This allows us to specify any facet and its visualization(s) in a YAML profile. In this example it's Ontology "NASA ISS FPIP (Flight Planning Integration Panel)".

Let SMW pan out the ISS FPIP ontology

Notice:

I am aware of the fact that the usefulnes of this kind of graph is debated, since it can get cluttered up quickly if many assertional, and even terminological triples, are involved. However, making sure that the facets visualized remain small and to the point, their visualization is priceless as a picture is worth a thousand words, as long as some knowledge and information management principles are heeded:

From an abstract/terminological point of view

This is a tag extension call <mermaid2 profile="Component 160430" abstraction="typetype"/>.

Ontology "NASA ISS FPIP (Flight Planning Integration Panel)" (typetype)

graph LR classDef default fill:#ccc,stroke:#333,stroke-width:2px; classDef computerNode fill:#33d4ff,stroke:#333,stroke-width:2px; classDef relation fill:#ffffff,stroke-width:0px;

From a concrete/assertional point of view

This is a tag extension call <mermaid2 profile="Component 160430" abstraction="instinst"/>

Ontology "NASA ISS FPIP (Flight Planning Integration Panel)" (instinst)

graph LR classDef default fill:#ccc,stroke:#333,stroke-width:2px; classDef computerNode fill:#33d4ff,stroke:#333,stroke-width:2px; classDef relation fill:#ffffff,stroke-width:0px;

Now, in the same way, we can finally let SMW create the Gantt charts, which represent the pursued goal of the entire effort in the first place. Note that the Gantt charts' underlying data and its visualization are again specified as YAML profiles, see Discuss UseCase "Manage MediaWiki-centric enterprise knowledge management".

Constitute useful facets, i.e. charts and/or graphs, and run them against the asserted instances

Gantt Chart "ISS Flights and Expeditions by Astronaut"

This is a tag extension call <mermaid2 profile="Component 160437"/>.

INVESTIGATE: #0 /var/www/html/m/extensions/SMWCindyKate/src/SMWProfile.php(18): SMWCK_Profile->getFacetProfileYAML() #1 /var/www/html/m/extensions/SMWCindyKate/src/SMWProfile.php(13): SMWCK_Profile->getFacetProfileArray() #2 /var/www/html/m/extensions/SMWCindyKate/SMWCindyKate_body.php(53): SMWCK_Profile->__construct('Component 16043...') #3 /var/www/html/m/extensions/SMWCindyKate/SMWCindyKate_body.php(29): SMWCindyKate::renderTagExtensionFromProfile(Array) #4 /var/www/html/m/includes/parser/Parser.php(4279): SMWCindyKate::SMWCindyKateRender(NULL, Array, Object(Parser), Object(PPFrame_DOM)) #5 /var/www/html/m/includes/parser/Preprocessor_DOM.php(1260): Parser->extensionSubstitution(Array, Object(PPFrame_DOM)) #6 /var/www/html/m/includes/parser/Parser.php(3380): PPFrame_DOM->expand(Object(DOMElement), 0) #7 /var/www/html/m/includes/parser/Parser.php(1261): Parser->replaceVariables('{{Component\n|Co...') #8 /var/www/html/m/includes/parser/Parser.php(452): Parser->internalParse('{{Component\n|Co...') #9 /var/www/html/m/includes/content/WikitextContent.php(331): Parser->parse('{{Component\n|Co...', Object(Title), Object(ParserOptions), true, true, 2706) #10 /var/www/html/m/includes/content/AbstractContent.php(497): WikitextContent->fillParserOutput(Object(Title), 2706, Object(ParserOptions), true, Object(ParserOutput)) #11 /var/www/html/m/includes/poolcounter/PoolWorkArticleView.php(139): AbstractContent->getParserOutput(Object(Title), 2706, Object(ParserOptions)) #12 /var/www/html/m/includes/poolcounter/PoolCounterWork.php(123): PoolWorkArticleView->doWork() #13 /var/www/html/m/includes/page/Article.php(666): PoolCounterWork->execute() #14 /var/www/html/m/includes/actions/ViewAction.php(44): Article->view() #15 /var/www/html/m/includes/MediaWiki.php(493): ViewAction->show() #16 /var/www/html/m/includes/MediaWiki.php(288): MediaWiki->performAction(Object(Article), Object(Title)) #17 /var/www/html/m/includes/MediaWiki.php(735): MediaWiki->performRequest() #18 /var/www/html/m/includes/MediaWiki.php(509): MediaWiki->main() #19 /var/www/html/m/index.php(47): MediaWiki->run() #20 {main}

Gantt Chart "ISS Flights by Astronaut"

This is a tag extension call <mermaid2 profile="Component 160438"/>.

INVESTIGATE: #0 /var/www/html/m/extensions/SMWCindyKate/src/SMWProfile.php(18): SMWCK_Profile->getFacetProfileYAML() #1 /var/www/html/m/extensions/SMWCindyKate/src/SMWProfile.php(13): SMWCK_Profile->getFacetProfileArray() #2 /var/www/html/m/extensions/SMWCindyKate/SMWCindyKate_body.php(53): SMWCK_Profile->__construct('Component 16043...') #3 /var/www/html/m/extensions/SMWCindyKate/SMWCindyKate_body.php(29): SMWCindyKate::renderTagExtensionFromProfile(Array) #4 /var/www/html/m/includes/parser/Parser.php(4279): SMWCindyKate::SMWCindyKateRender(NULL, Array, Object(Parser), Object(PPFrame_DOM)) #5 /var/www/html/m/includes/parser/Preprocessor_DOM.php(1260): Parser->extensionSubstitution(Array, Object(PPFrame_DOM)) #6 /var/www/html/m/includes/parser/Parser.php(3380): PPFrame_DOM->expand(Object(DOMElement), 0) #7 /var/www/html/m/includes/parser/Parser.php(1261): Parser->replaceVariables('{{Component\n|Co...') #8 /var/www/html/m/includes/parser/Parser.php(452): Parser->internalParse('{{Component\n|Co...') #9 /var/www/html/m/includes/content/WikitextContent.php(331): Parser->parse('{{Component\n|Co...', Object(Title), Object(ParserOptions), true, true, 2706) #10 /var/www/html/m/includes/content/AbstractContent.php(497): WikitextContent->fillParserOutput(Object(Title), 2706, Object(ParserOptions), true, Object(ParserOutput)) #11 /var/www/html/m/includes/poolcounter/PoolWorkArticleView.php(139): AbstractContent->getParserOutput(Object(Title), 2706, Object(ParserOptions)) #12 /var/www/html/m/includes/poolcounter/PoolCounterWork.php(123): PoolWorkArticleView->doWork() #13 /var/www/html/m/includes/page/Article.php(666): PoolCounterWork->execute() #14 /var/www/html/m/includes/actions/ViewAction.php(44): Article->view() #15 /var/www/html/m/includes/MediaWiki.php(493): ViewAction->show() #16 /var/www/html/m/includes/MediaWiki.php(288): MediaWiki->performAction(Object(Article), Object(Title)) #17 /var/www/html/m/includes/MediaWiki.php(735): MediaWiki->performRequest() #18 /var/www/html/m/includes/MediaWiki.php(509): MediaWiki->main() #19 /var/www/html/m/index.php(47): MediaWiki->run() #20 {main}

Gantt Chart "ISS Expeditions by Astronaut"

This is a tag extension call <mermaid2 profile="Component 160439"/>.

INVESTIGATE: #0 /var/www/html/m/extensions/SMWCindyKate/src/SMWProfile.php(18): SMWCK_Profile->getFacetProfileYAML() #1 /var/www/html/m/extensions/SMWCindyKate/src/SMWProfile.php(13): SMWCK_Profile->getFacetProfileArray() #2 /var/www/html/m/extensions/SMWCindyKate/SMWCindyKate_body.php(53): SMWCK_Profile->__construct('Component 16043...') #3 /var/www/html/m/extensions/SMWCindyKate/SMWCindyKate_body.php(29): SMWCindyKate::renderTagExtensionFromProfile(Array) #4 /var/www/html/m/includes/parser/Parser.php(4279): SMWCindyKate::SMWCindyKateRender(NULL, Array, Object(Parser), Object(PPFrame_DOM)) #5 /var/www/html/m/includes/parser/Preprocessor_DOM.php(1260): Parser->extensionSubstitution(Array, Object(PPFrame_DOM)) #6 /var/www/html/m/includes/parser/Parser.php(3380): PPFrame_DOM->expand(Object(DOMElement), 0) #7 /var/www/html/m/includes/parser/Parser.php(1261): Parser->replaceVariables('{{Component\n|Co...') #8 /var/www/html/m/includes/parser/Parser.php(452): Parser->internalParse('{{Component\n|Co...') #9 /var/www/html/m/includes/content/WikitextContent.php(331): Parser->parse('{{Component\n|Co...', Object(Title), Object(ParserOptions), true, true, 2706) #10 /var/www/html/m/includes/content/AbstractContent.php(497): WikitextContent->fillParserOutput(Object(Title), 2706, Object(ParserOptions), true, Object(ParserOutput)) #11 /var/www/html/m/includes/poolcounter/PoolWorkArticleView.php(139): AbstractContent->getParserOutput(Object(Title), 2706, Object(ParserOptions)) #12 /var/www/html/m/includes/poolcounter/PoolCounterWork.php(123): PoolWorkArticleView->doWork() #13 /var/www/html/m/includes/page/Article.php(666): PoolCounterWork->execute() #14 /var/www/html/m/includes/actions/ViewAction.php(44): Article->view() #15 /var/www/html/m/includes/MediaWiki.php(493): ViewAction->show() #16 /var/www/html/m/includes/MediaWiki.php(288): MediaWiki->performAction(Object(Article), Object(Title)) #17 /var/www/html/m/includes/MediaWiki.php(735): MediaWiki->performRequest() #18 /var/www/html/m/includes/MediaWiki.php(509): MediaWiki->main() #19 /var/www/html/m/index.php(47): MediaWiki->run() #20 {main}