Common Queries
Practical examples for querying P&ID graph data.
Getting Started
All queries are sent as POST requests:
curl -X POST "https://api.example.com/graph/123" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"query": "YOUR_QUERY_HERE"}'
Node Queries
Get All Nodes
{"query": ".pid_graph.nodes"}
Get Physical Components Only
{"query": ".pid_graph.nodes | filter(.node_type == \"pid_component\")"}
Get All Valves
{"query": ".pid_graph.nodes | filter(contains(.node_classification, \"valve\"))"}
Get Specific Valve Types
{"query": ".pid_graph.nodes | filter(.node_classification == \"piping_component.gate_valve\")"}
Get All Instruments
{"query": ".pid_graph.nodes | filter(contains(.node_classification, \"instrument\"))"}
Get All Equipment
{"query": ".pid_graph.nodes | filter(contains(.node_classification, \"equipment\"))"}
Get Pipe Segments (PNSG)
{"query": ".pid_graph.nodes | filter(.node_type == \"piping_network_segment\")"}
Get Pipe Systems (PNS)
{"query": ".pid_graph.nodes | filter(.node_type == \"piping_network_system\")"}
Get Control Loops
{"query": ".pid_graph.nodes | filter(.node_type == \"instrumentation_loop\")"}
Search by Tag
{"query": ".pid_graph.nodes | filter(contains(.tag, \"FV-\"))"}
Get Node Tags Only
{"query": ".pid_graph.nodes | map(.tag)"}
Get Nodes with Specific Fields
{"query": ".pid_graph.nodes | map({tag: .tag, type: .node_type, classification: .node_classification})"}
Edge Queries
Get All Edges
{"query": ".pid_graph.edges"}
Get Physical Connections
{"query": ".pid_graph.edges | filter(.edge_type == \"physically_connected_to\")"}
Get Hierarchy Relationships
{"query": ".pid_graph.edges | filter(.edge_type == \"has_a\")"}
Get PNSG Terminal Points
Start and end points of pipe segments:
{"query": ".pid_graph.edges | filter(.edge_type == \"starts_at\" or .edge_type == \"ends_at\")"}
Get Equipment-Component Relationships
{"query": ".pid_graph.edges | filter(.edge_type == \"physically_has_a\")"}
Get Edges for a Specific Node
{"query": ".pid_graph.edges | filter(.from.tag == \"FV-101\" or .to.tag == \"FV-101\")"}
Get Downstream Connections
{"query": ".pid_graph.edges | filter(.from.tag == \"FV-101\")"}
Get Upstream Connections
{"query": ".pid_graph.edges | filter(.to.tag == \"FV-101\")"}
Metadata Queries
Get Metadata
{"query": ".pid_graph.metadata"}
Get Drawing Name
{"query": ".pid_graph.metadata.drawing_name"}
Combined Queries
Get Valves with Their Connections
First, get valves:
{"query": ".pid_graph.nodes | filter(contains(.node_classification, \"valve\"))"}
Then, for each valve tag, get its connections:
{"query": ".pid_graph.edges | filter(.from.tag == \"FV-101\" or .to.tag == \"FV-101\")"}
Get Components in a Specific Pipe Segment
{"query": ".pid_graph.edges | filter(.edge_type == \"has_a\" and .from.tag == \"2-CW-001\") | map(.to)"}
Count Nodes by Type
Get all nodes and count in your application:
{"query": ".pid_graph.nodes | map(.node_type)"}
Sorting Results
Sort Nodes by Tag
{"query": ".pid_graph.nodes | sort(.tag)"}
Sort and Filter
{"query": ".pid_graph.nodes | filter(.node_type == \"pid_component\") | sort(.tag)"}