Template:Workflow

From MaRDI portal


Available identifiers

Problem statement

Object of research and objective

Involved disciplines

    Model

    {{#sparql: SELECT ?Label ?Description ?Time ?Space WHERE {

      wd: wdt:P557 ?item .
      ?item wdt:P31 wd:Q68663;
            rdfs:label ?Label;
            schema:description ?Description;
            BIND(
                 IF(EXISTS { ?item wdt:P31 wd:Q6672091 }, "continuous",
                            IF(EXISTS { ?item wdt:P31 wd:Q6672095 }, "discrete", 
                            "independent"
                              )
                   ) AS ?Time
                )
            BIND(
                 IF(EXISTS { ?item wdt:P31 wd:Q6672089 }, "continuous",
                            IF(EXISTS { ?item wdt:P31 wd:Q6672093 }, "discrete", 
                            "independent"
                              )
                   ) AS ?Space
                )             
    

    } | chart=bordercloud.visualization.DataTable | endpoint=https://query.portal.mardi4nfdi.de/sparql }}

    Variables

    {{#sparql: SELECT ?Name ?Unit ?Symbol ?Task (?Type AS ?Dependency_Type) WHERE {

      # Starting from the central item
      wd: p:P557 ?statement.
      ?statement ps:P557 ?model.
      ?statement pq:P147 ?task.
      ?model wdt:P31 wd:Q68663.
    
      ?task rdfs:label ?Task .
           
           # Define type based on connection type (Input or Output)
           {
               ?task p:P1560 ?inner_statement .
               ?inner_statement ps:P1560 ?item.
               ?inner_statement pq:P560 ?role.
               FILTER (?role = wd:Q6480299)
               ?item rdfs:label ?Name .
               BIND("independent" AS ?Type)
           }
           UNION
           {
               ?task p:P1560 ?inner_statement .
               ?inner_statement ps:P1560 ?item.
               ?inner_statement pq:P560 ?role.
               FILTER (?role = wd:Q6480295)
               ?item rdfs:label ?Name .
               BIND("dependent" AS ?Type)
           }
           
           # Filter results to only show defining statements that match the current quantity label
           OPTIONAL {
               ?task wdt:P1560 ?formulation.
               ?formulation wdt:P31 wd:Q6481152.
               ?formulation p:P983 ?inner_inner_statement .
               ?inner_inner_statement ps:P983 ?Symbol.
               ?inner_inner_statement pq:P984 ?quantity
           }
           FILTER (?quantity = ?item)
    
       BIND("" AS ?Unit)
    

    } ORDER BY ?task ?item | chart=bordercloud.visualization.DataTable | endpoint=https://query.portal.mardi4nfdi.de/sparql }}

    Parameters

    {{#sparql: SELECT ?Name ?Unit ?Symbol ?Task WHERE {

      # Starting from the central item
      wd: p:P557 ?statement.
      ?statement ps:P557 ?model.
      ?statement pq:P147 ?task.
      ?model wdt:P31 wd:Q68663.
    
      ?task rdfs:label ?Task .
           
           # Define type based on connection type (Parameter)
           ?task p:P1560 ?inner_statement .
           ?inner_statement ps:P1560 ?item.
           ?inner_statement pq:P560 ?role.
           FILTER (?role = wd:Q6480341)
           ?item rdfs:label ?Name .
           
           # Filter results to only show defining statements that match the current quantity label
           OPTIONAL {
               ?task wdt:P1560 ?formulation.
               ?formulation wdt:P31 wd:Q6481152.
               ?formulation p:P983 ?inner_inner_statement .
               ?inner_inner_statement ps:P983 ?Symbol.
               ?inner_inner_statement pq:P984 ?quantity
           }
           FILTER (?quantity = ?item)
    
       BIND("" AS ?Unit)
    

    } ORDER BY ?task ?item| chart=bordercloud.visualization.DataTable | endpoint=https://query.portal.mardi4nfdi.de/sparql }}

    Process information

    Process steps

    {{#sparql: SELECT ?Number

          ?Name
          ?Description
          (GROUP_CONCAT(DISTINCT ?inputLink; separator=", ") AS ?Input)
          (GROUP_CONCAT(DISTINCT ?outputLink; separator=", ") AS ?Output)
          (GROUP_CONCAT(DISTINCT ?methodLink; separator=", ") AS ?Method)
          (GROUP_CONCAT(DISTINCT ?environmentLink; separator=", ") AS ?Environment)
          (GROUP_CONCAT(DISTINCT ?disciplineLink; separator=", ") AS ?Discipline)
    

    WHERE {

     # Get Step Label and Description
     wd: p:P557 ?mainStatement.
     ?mainStatement ps:P557 ?stepID. 
     ?stepID wdt:P31 wd:Q6486603.            
     ?stepID rdfs:label ?NameLabel.               
     FILTER (lang(?NameLabel) = 'en')
     BIND(replace( xsd:string(?stepID),
         'https://portal.mardi4nfdi.de/entity/',
         ) as ?qid)  
     
     BIND (CONCAT('<a href=\'/wiki/Item:',?qid,'\'>',?NameLabel,'</a>') as ?Name)
     
     ?mainStatement pq:P146 ?Number.
     
     OPTIONAL {
       ?stepID schema:description ?Description.
       FILTER (lang(?Description) = 'en')
     }
     
     # Get Step Input(s)
     OPTIONAL {
       ?stepID wdt:P1605 ?inputID.
       ?inputID rdfs:label ?inputLabel.
       FILTER (lang(?inputLabel) = 'en')
       BIND(replace( xsd:string(?inputID),
         'https://portal.mardi4nfdi.de/entity/',
         ) as ?inputQID)
       BIND (CONCAT('<a href=\'/wiki/Item:',?inputQID,'\'>',?inputLabel,'</a>') as ?inputLink)
     }
     
     # Get Step Output(s)
     OPTIONAL {
       ?stepID wdt:P1606 ?outputID.
       ?outputID rdfs:label ?outputLabel.
       FILTER (lang(?outputLabel) = 'en')
       BIND(replace( xsd:string(?outputID),
         'https://portal.mardi4nfdi.de/entity/',
         ) as ?outputQID)
       BIND (CONCAT('<a href=\'/wiki/Item:',?outputQID,'\'>',?outputLabel,'</a>') as ?outputLink)
     }
     
     # Get Step Method(s)
     OPTIONAL {
       ?stepID wdt:P557 ?methodID.
       ?methodID wdt:P31 wd:Q127020.
       ?methodID rdfs:label ?methodLabel.
       FILTER (lang(?methodLabel) = 'en')
       BIND(replace( xsd:string(?methodID),
         'https://portal.mardi4nfdi.de/entity/',
         ) as ?methodQID)
       BIND (CONCAT('<a href=\'/wiki/Item:',?methodQID,'\'>',?methodLabel,'</a>') as ?methodLink)
     }
     
     # Get Step Environment(s)
     OPTIONAL {
       ?stepID wdt:P143 ?environmentID.
       ?environmentID rdfs:label ?environmentLabel.
       FILTER (lang(?environmentLabel) = 'en')
       BIND(replace( xsd:string(?environmentID),
         'https://portal.mardi4nfdi.de/entity/',
         ) as ?environmentQID)
       BIND (CONCAT('<a href=\'/wiki/Item:',?environmentQID,'\'>',?environmentLabel,'</a>') as ?environmentLink)
     }
     
     # Get Step Discipline
     OPTIONAL {
       ?stepID wdt:P437 ?fieldID.
       ?fieldID rdfs:label ?fieldLabel.
       FILTER (lang(?fieldLabel) = 'en')
       BIND(replace( xsd:string(?fieldID),
         'https://portal.mardi4nfdi.de/entity/',
         ) as ?fieldQID)
       BIND (CONCAT('<a href=\'/wiki/Item:',?fieldQID,'\'>',?fieldLabel,'</a>') as ?fieldLink)
     }
     OPTIONAL {
       ?stepID wdt:P226 ?mscID.
     }
     BIND(COALESCE(?fieldLink, ?mscID) AS ?disciplineLink)
    

    } GROUP BY ?Name ?Description ?Number ORDER BY ASC(?Number) | chart=bordercloud.visualization.DataTable | options=width=100%! | endpoint=https://query.portal.mardi4nfdi.de/sparql }}

    Methods

    {{#sparql: SELECT ?Name

          ?Description
          (GROUP_CONCAT(DISTINCT ?stepLink; separator=", ") AS ?Process_Step)
          (GROUP_CONCAT(DISTINCT ?softwareLink; separator=", ") AS ?Implemented_By)
          
    

    WHERE {

     # Get Method Label and Description
     wd: p:P557 ?mainStatement.
     ?mainStatement ps:P557 ?methodID. 
     ?methodID wdt:P31 wd:Q127020.
     ?methodID rdfs:label ?NameLabel.               
     FILTER (lang(?NameLabel) = 'en')
     BIND(replace( xsd:string(?methodID),
         'https://portal.mardi4nfdi.de/entity/',
         ) as ?qid)
     
     BIND (CONCAT('mardi:','<a href=\'/wiki/Item:',?qid,'\'>',?qid,'</a>') as ?ID)
     BIND (CONCAT('<a href=\'/wiki/Item:',?qid,'\'>',?NameLabel,'</a>') as ?Name)
     
     OPTIONAL {
       ?methodID schema:description ?Description.
       FILTER (lang(?Description) = 'en')
     }
     
     # Get Software
     OPTIONAL {
       ?mainStatement pq:P147 ?softwareID.
       ?softwareID rdfs:label ?softwareLabel.
       FILTER (lang(?softwareLabel) = 'en')
       BIND(replace( xsd:string(?softwareID),
           'https://portal.mardi4nfdi.de/entity/',
           ) as ?softwareQID)  
     
       BIND (CONCAT('<a href=\'/wiki/Item:',?softwareQID,'\'>',?softwareLabel,'</a>') as ?softwareLink)
     }
     
     # Get Process Step
     OPTIONAL {
       ?stepID wdt:P557 ?methodID.
       ?stepID rdfs:label ?stepLabel.
       FILTER (lang(?stepLabel) = 'en')
       BIND(replace( xsd:string(?stepID),
         'https://portal.mardi4nfdi.de/entity/',
         ) as ?stepQID)
       BIND (CONCAT('<a href=\'/wiki/Item:',?stepQID,'\'>',?stepLabel,'</a>') as ?stepLink)
     }
    

    } GROUP BY ?ID ?Name ?Description | chart=bordercloud.visualization.DataTable | options=width=100%! | endpoint=https://query.portal.mardi4nfdi.de/sparql }}

    Software

    {{#sparql: SELECT ?Name

          ?Description
          ?Version
          (GROUP_CONCAT(DISTINCT ?plLink; separator=", ") AS ?Programming_Language)
          (GROUP_CONCAT(DISTINCT ?dpLink; separator=", ") AS ?Dependencies)
          ?versioned
          ?published
          ?documented
          
    

    WHERE {

     # Get Software Label and Description
     wd: p:P557 ?mainStatement.
     ?mainStatement ps:P557 ?softwareID. 
     ?softwareID wdt:P1460 wd:Q5976450.
     ?softwareID rdfs:label ?NameLabel.               
     FILTER (lang(?NameLabel) = 'en')
     BIND(replace( xsd:string(?softwareID),
         'https://portal.mardi4nfdi.de/entity/',
         ) as ?qid)
     
     BIND (CONCAT('mardi:','<a href=\'/wiki/Item:',?qid,'\'>',?qid,'</a>') as ?ID)
     BIND (CONCAT('<a href=\'/wiki/Item:',?qid,'\'>',?NameLabel,'</a>') as ?Name)
     
     OPTIONAL {
       ?softwareID schema:description ?Description.
       FILTER (lang(?Description) = 'en')
     }
     
     # Get Software Version
     OPTIONAL {
       ?mainStatement pq:P132 ?Version.
       }
       
     # Get Programming Language
     OPTIONAL {
       ?softwareID wdt:P114 ?plID.
       ?plID rdfs:label ?plLabel.
       FILTER (lang(?plLabel) = 'en')
       BIND(replace( xsd:string(?plID),
         'https://portal.mardi4nfdi.de/entity/',
         ) as ?plQID)
       BIND (CONCAT('<a href=\'/wiki/Item:',?plQID,'\'>',?plLabel,'</a>') as ?plLink)
     }  
     # Get Dependencies
     OPTIONAL {
       ?softwareID wdt:P342 ?dpID.
       ?dpID rdfs:label ?dpLabel.
       FILTER (lang(?dpLabel) = 'en')
       BIND(replace( xsd:string(?dpID),
         'https://portal.mardi4nfdi.de/entity/',
         ) as ?dpQID)
       BIND (CONCAT('<a href=\'/wiki/Item:',?dpQID,'\'>',?dpLabel,'</a>') as ?dpLink)
     }
     
     # Versioned
     BIND (IF(BOUND(?Version), "Yes", "No") AS ?versioned)
     
     # Published
     OPTIONAL {
       ?softwareID wdt:P339 ?srcREPO.
     }
     BIND (IF(BOUND(?srcREPO), CONCAT('<a href="', STR(?srcREPO), '">Yes</a>'), "No") AS ?published)
     
     # Documented
     OPTIONAL {
       ?softwareID wdt:P340 ?docu.
     }
     BIND (IF(BOUND(?docu), CONCAT('<a href="', STR(?docu), '">Yes</a>'), "No") AS ?documented)
     
    }
    

    GROUP BY ?ID ?Name ?Description ?Version ?versioned ?published ?documented | chart=bordercloud.visualization.DataTable | options=width=100%! | endpoint=https://query.portal.mardi4nfdi.de/sparql }}

    Hardware

    {{#sparql: SELECT ?Name

          ?Description
          (GROUP_CONCAT(DISTINCT ?processorLink; separator=", ") AS ?Processor)
          (GROUP_CONCAT(DISTINCT ?nodes; separator=", ") AS ?Node_Number)
          (GROUP_CONCAT(DISTINCT ?cores; separator=", ") AS ?Core_Number)
          (GROUP_CONCAT(DISTINCT ?softwareLink; separator=", ") AS ?Software)
          
    

    WHERE {

     # Get Hardware Label and Description
     wd: p:P557 ?mainStatement.
     ?mainStatement ps:P557 ?hardwareID. 
     ?hardwareID wdt:P31 wd:Q56583.
     ?hardwareID rdfs:label ?NameLabel.               
     FILTER (lang(?NameLabel) = 'en')
     BIND(replace( xsd:string(?hardwareID),
         'https://portal.mardi4nfdi.de/entity/',
         ) as ?qid)
     
     BIND (CONCAT('mardi:','<a href=\'/wiki/Item:',?qid,'\'>',?qid,'</a>') as ?ID)
     BIND (CONCAT('<a href=\'/wiki/Item:',?qid,'\'>',?NameLabel,'</a>') as ?Name)
     
     OPTIONAL {
       ?hardwareID schema:description ?Description.
       FILTER (lang(?Description) = 'en')
     }
     
       # Get Processors(s), Nodes and Cores
     OPTIONAL {
       ?hardwareID p:P1540 ?mainStatement2.
       ?mainStatement2 ps:P1540 ?processorID.
       ?processorID rdfs:label ?processorLabel.
       ?processorID wdt:P1565 ?cores.
       FILTER (lang(?processorLabel) = 'en')
       BIND(replace( xsd:string(?processorID),
         'https://portal.mardi4nfdi.de/entity/',
         ) as ?processorQID)
       BIND (CONCAT('<a href=\'/wiki/Item:',?processorQID,'\'>',?processorLabel,'</a>') as ?processorLink)
       # Get Number of Nodes
       OPTIONAL {
           ?mainStatement2 pq:P149 ?nodes.
       }
     }
     
     OPTIONAL {
       wd: p:P557 ?softwareStatement.
       ?softwareStatement ps:P557 ?softwareID; 
                          pq:P143 ?hardwareID.
       ?softwareID rdfs:label ?softwareLabel.
       FILTER (lang(?softwareLabel) = 'en')
       BIND(replace( xsd:string(?softwareID),
         'https://portal.mardi4nfdi.de/entity/',
         ) as ?softwareQID)
       BIND (CONCAT('<a href=\'/wiki/Item:',?softwareQID,'\'>',?softwareLabel,'</a>') as ?softwareLink)
     }
    

    } GROUP BY ?ID ?Name ?Description | chart=bordercloud.visualization.DataTable | options=width=100%! | endpoint=https://query.portal.mardi4nfdi.de/sparql }}

    Data Sets

    {{#sparql: SELECT ?Name

          ?Description
          ?Size
          (?DataType AS ?Data_Type) 
          (?RepresentationFormat AS ?Representation_Format)
          (?FileFormat AS ?File_Format) 
          (?BinaryOrText AS ?Binary_Text)
          ?Proprietary
          (?toPublish AS ?to_Publish)
          (?toArchive AS ?to_Archive)
          
    

    WHERE {

     # Get Step
     wd: p:P557 ?mainStatement.
     ?mainStatement ps:P557 ?stepID. 
     ?stepID wdt:P31 wd:Q6486603.            
     
     # Get Data
     OPTIONAL {
       {?stepID wdt:P1605 ?inputID.}
       UNION
       {?stepID wdt:P1606 ?inputID.}
       ?inputID rdfs:label ?NameLabel.
       FILTER (lang(?NameLabel) = 'en')
       
       BIND(replace( xsd:string(?inputID),
         'https://portal.mardi4nfdi.de/entity/',
         ) as ?qid)
       
       BIND(CONCAT('mardi:','<a href=\'/wiki/Item:',?qid,'\'>',?qid,'</a>') as ?ID)
       BIND(CONCAT('<a href=\'/wiki/Item:',?qid,'\'>',?NameLabel,'</a>') as ?Name)
    
     OPTIONAL {
       ?inputID schema:description ?Description.
       FILTER (lang(?Description) = 'en')}
    
     # Data Size (maps to Size if File etc size is provided)
     OPTIONAL {
       ?inputID p:P1542 ?statementNode.          
       ?statementNode psv:P1542 ?valueNode.      
       ?valueNode wikibase:quantityAmount ?size; 
                  wikibase:quantityUnit ?unit.
       ?unit rdfs:label ?unitlabel.
       FILTER (lang(?unitlabel) = 'en')
       BIND(CONCAT(STR(?size), ' ', STR(?unitlabel)) AS ?Size)
    

    }

     # Number of Records (maps to Size if Number of Entries in a Database etc is provided
     OPTIONAL {
       ?inputID wdt:P139 ?Sizeraw
       BIND(CONCAT(STR(?Sizeraw),' Items') as ?Size)
     }
     
     # Data Type
     OPTIONAL {
       ?inputID p:P557 ?statement_dt.
       ?statement_dt ps:P557 ?datatypeID. 
       ?statement_dt pq:P560 ?qualifier.
       FILTER (?qualifier = wd:Q78802)
       ?datatypeID rdfs:label ?datatypeLabel.   
       FILTER (lang(?datatypeLabel) = 'en')
       BIND(replace( xsd:string(?datatypeID),
           'https://portal.mardi4nfdi.de/entity/',
           ) as ?datatypeQID)  
     
       BIND (CONCAT('<a href=\'/wiki/Item:',?datatypeQID,'\'>',?datatypeLabel,'</a>') as ?DataType)
       }
       
     # Representation Format
     OPTIONAL {
       ?inputID p:P557 ?statement_rf.
       ?statement_rf ps:P557 ?representationID. 
       ?statement_rf pq:P560 ?qualifier2.
       FILTER (?qualifier2 = wd:Q6534222)
       ?representationID rdfs:label ?representationLabel.   
       FILTER (lang(?representationLabel) = 'en')
       BIND(replace( xsd:string(?representationID),
           'https://portal.mardi4nfdi.de/entity/',
           ) as ?representationQID)  
     
       BIND (CONCAT('<a href=\'/wiki/Item:',?representationQID,'\'>',?representationLabel,'</a>') as ?RepresentationFormat)
       }
       
     # File Format
     OPTIONAL {
       ?inputID wdt:P921 ?FileFormat
       }
      
     # Binary or Text
     BIND(IF(EXISTS { ?inputID wdt:P31 wd:Q6480276 }, "binary", IF(EXISTS { ?inputID wdt:P31 wd:Q6534207 }, "text", "" )) AS ?BinaryOrText)
     
     # Proprietary
     BIND(IF(EXISTS { ?inputID wdt:P31 wd:Q6480367 }, "yes", IF(EXISTS { ?inputID wdt:P31 wd:Q6480313 }, "no", "" )) AS ?Proprietary)
     
     # Bind DOI and URL if they exist
     OPTIONAL { ?inputID wdt:P23 ?doi. }
     OPTIONAL { ?inputID wdt:P188 ?url. }
     
     # Data Publishing
     BIND(
     IF(EXISTS { ?inputID wdt:P1563 wd:Q6480291 }, 
        IF(EXISTS { ?inputID wdt:P27 ?doi }, 
           CONCAT('<a href="', 'https://dx.doi.org', STR(?doi), '">yes</a>'), 
           IF(EXISTS { ?inputID wdt:P188 ?url }, 
              CONCAT('<a href="', STR(?url), '">yes</a>'), 
              "yes"
           )
        ), 
        "no"
     ) AS ?toPublish
    

    )

    1. Data Archiving
     OPTIONAL {
     ?inputID p:P1563 ?statementNode.
     ?statementNode ps:P1563 wd:Q6480370.
     OPTIONAL {
       ?statementNode pq:P411 ?endTime.
     }
    

    }

    BIND(

     IF(BOUND(?statementNode),
        IF(BOUND(?endTime),
           SUBSTR(STR(?endTime), 1, 4),
           "yes"
        ),
        "no"
     ) AS ?toArchive
    

    )

     }
    

    } GROUP BY ?ID ?Name ?Description ?Size ?DataType ?RepresentationFormat ?FileFormat ?BinaryOrText ?Proprietary ?toPublish ?toArchive

    | chart=bordercloud.visualization.DataTable | options=width=100%! | endpoint=https://query.portal.mardi4nfdi.de/sparql }}

    Reproducibility

    {{#sparql: SELECT ?Mathematically

          ?Runtime
          ?Result
          (?OriginalPlatform AS ?Original_Platform)
          (?CrossPlatform AS ?Cross_Platform)
          ?Transferability
          
    

    WHERE {

     # Mathematical Reproducibility
     OPTIONAL {
       wd: p:P31 ?math_statement.
       ?math_statement ps:P31 wd:Q6534210.
       BIND("Yes" AS ?math_hasTriple)
       OPTIONAL {
         ?math_statement pq:P8 ?math_text.
         BIND(CONCAT("Yes: ", STR(?math_text)) AS ?math_result)
         }
     }
     BIND(IF(BOUND(?math_result), ?math_result, IF(BOUND(?math_hasTriple), "Yes", "No")) AS ?Mathematically)
     
     # Runtime Reproducibility
     OPTIONAL {
       wd: p:P31 ?run_statement.
       ?run_statement ps:P31 wd:Q6534211.
       BIND("Yes" AS ?run_hasTriple)
       OPTIONAL {
         ?run_statement pq:P8 ?run_text.
         BIND(CONCAT("Yes: ", STR(?run_text)) AS ?run_result)
         }
     }
     BIND(IF(BOUND(?run_result), ?run_result, IF(BOUND(?run_hasTriple), "Yes", "No")) AS ?Runtime)
     
     # Result Reproducibility
     OPTIONAL {
       wd: p:P31 ?res_statement.
       ?res_statement ps:P31 wd:Q6534212.
       BIND("Yes" AS ?res_hasTriple)
       OPTIONAL {
         ?res_statement pq:P8 ?res_text.
         BIND(CONCAT("Yes: ", STR(?res_text)) AS ?res_result)
         }
     }
     BIND(IF(BOUND(?res_result), ?res_result, IF(BOUND(?res_hasTriple), "Yes", "No")) AS ?Result)
     
     # Original Platform Reproducibility
     OPTIONAL {
       wd: p:P31 ?plat_statement.
       ?plat_statement ps:P31 wd:Q6534213.
       BIND("Yes" AS ?plat_hasTriple)
       OPTIONAL {
         ?plat_statement pq:P8 ?plat_text.
         BIND(CONCAT("Yes: ", STR(?plat_text)) AS ?plat_result)
         }
     }
     BIND(IF(BOUND(?plat_result), ?plat_result, IF(BOUND(?plat_hasTriple), "Yes", "No")) AS ?OriginalPlatform)
     
     # Cross Platform Reproducibility
     OPTIONAL {
       wd: p:P31 ?xplat_statement.
       ?xplat_statement ps:P31 wd:Q6534214.
       BIND("Yes" AS ?xplat_hasTriple)
       OPTIONAL {
         ?xplat_statement pq:P8 ?xplat_text.
         BIND(CONCAT("Yes: ", STR(?xplat_text)) AS ?xplat_result)
         }
     }
     BIND(IF(BOUND(?xplat_result), ?xplat_result, IF(BOUND(?xplat_hasTriple), "Yes", "No")) AS ?CrossPlatform)
     
     # Transferability 
     OPTIONAL {
       wd: p:P31 ?trans_statement.
       ?trans_statement ps:P31 wd:Q6534215.
       BIND("Yes" AS ?trans_hasTriple)
       OPTIONAL {
         ?trans_statement pq:P8 ?trans_text.
         BIND(CONCAT("Yes: ", STR(?trans_text)) AS ?trans_result)
         }
     }
     BIND(IF(BOUND(?trans_result), ?trans_result, IF(BOUND(?trans_hasTriple), "Yes", "No")) AS ?Transferability)
    

    } GROUP BY ?Mathematically ?Runtime ?Result ?OriginalPlatform ?CrossPlatform ?Transferability

    | chart=bordercloud.visualization.DataTable | options=width=100%! | endpoint=https://query.portal.mardi4nfdi.de/sparql }}