`# Connections

View internal connections between system components.

---
stylesheet:
  - selector: node
    style:
      stroke: red
      height: 100
      padding: 40
      layout:
        type: dagre
        ranksep: 150
        nodesep: 40
      label:
        refY: 10
        fill: vblack

  - selector: node.component
    style:
      fill: lightgreen

  - selector: node.subComponent
    style:
      fill: yellow

  - selector: edge
    style:
      stroke: red
      router:
        name: manhattan
        args:
          padding: 10
      label:
        font-size: 10
        fill: vblack
        text-anchor: middle
      label-body:
        fill: none

  - selector: port
    style:
      fill: var(--oml-static-background, #ffffff)
---
PREFIX base: <https://www.modelware.io/sierra/base#>
PREFIX component: <https://www.modelware.io/sierra/component#>
PREFIX oml: <http://opencaesar.io/oml#>
PREFIX : <http://opencaesar.io/oml/diagram#>

CONSTRUCT {
  ?component a :Node ;
             :class "component" .
   
  ?port a :Port ;
            :class "port" ;
            :parent ?component .

  ?subComponent a :Node ;
             :parent ?component ;
             :class "subComponent" .

  ?subPort a :Port ;
            :class "port" ;
            :parent ?subComponent .
 
  ?connection a :Edge ;
            :source ?srcPort ;
            :target ?tgtPort ;
            :text ?itemLabel .
}
WHERE {
  ?component component:hasPort ?port ;
     base:contains ?subComponent .

  ?subComponent component:hasPort ?subPort .

  ?connection a component:Connection ;
     oml:hasSource ?srcPort ;
     oml:hasTarget ?tgtPort ;
     component:transfers ?item .

    BIND(REPLACE(STR(?item), "^.*[#/]", "") AS ?itemLabel)
}