sawgraph

SAWGraph PFAS KG

The Safe Agricultural Products and Water Graph (SAWGraph) PFAS KG stores data on PFAS observations and releases, describing the samples, the geospatial features they were taken from, the sampled environmental media, the specific chemical substances and the measurement values observed.

161.3M triples
416 classes
202 properties
10.9M subjects

The Safe Agricultural Products and Water Graph (SAWGraph) is an open knowledge network designed for environmental health researchers, regulatory agencies, and public health officials to help track and monitor per- and polyfluoroalkyl substances (PFAS) and other contaminants in food and water systems. The SAWGraph PFAS KG employs the ContaminOSO ontology (coso:) for standardized contamination modeling to encode the sampled features (e.g. wells, water bodies, facilities, fields), environmental media (e.g. groundwater, surface water, waste water, soil, animal or plant tissue), sample locations (Level 13 S2 cells and Level 3 administrative regions), sample type classification (based on FOODON categories like meat, dairy, produce, and seafood and NCBITaxon organisms), and tested chemical (DSSTox Substance IDs (DTXSID) and CAS numbers). Observations include measurement values, detection limits, lab qualifiers, and validation levels. Currently, the graph includes data from the national WaterQualityPortal (WQP) dataset and select state datasets, in particular from Maine's EGAD drinking water monitoring program.

samples_longchain_biota
# Retrieve 100 plant and animal (biota) sample results with the location type sampled, sample material type, observed property, substance, and detected result.  
PREFIX coso: <http://w3id.org/coso/v1/contaminoso#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX qudt: <http://qudt.org/schema/qudt/>
PREFIX pfas: <http://w3id.org/pfas/v1/>
PREFIX dsstox: <http://w3id.org/DSSTox/v1/>
PREFIX geo: <http://www.opengis.net/ont/geosparql#>

SELECT ?sample ?sampleName ?location ?coordinates (GROUP_CONCAT(DISTINCT ?materialTypeName;separator=",") as ?materialType) ?substance ?substanceName ?value ?unit ?date 
WHERE {
  ?sample rdf:type coso:BiotaSample;
            coso:sampleOfMaterialType ?sampletype;
    		coso:fromSamplePoint ?samplePoint;
      		rdfs:label ?sampleName.
  ?observation coso:analyzedSample ?sample;
            a coso:ContaminantSampleObservation;
            coso:hasFeatureOfInterest ?feature;
            coso:ofSubstance ?substance;
            coso:observedTime ?date;
            coso:hasResult ?result.
    ?substance rdf:type pfas:PerFAs; #Perfluoroalkyl substances (not poly)
              skos:altLabel ?substanceName;
              dsstox:hasCarbonChainLength ?carbonChainLength.
  	FILTER(?carbonChainLength > 6)  #carbon chain > 6
    ?result coso:measurementValue ?value.
  	OPTIONAL{?result coso:measurementUnit/qudt:symbol ?unit.}  
  	MINUS {VALUES ?value{"non-detect" "non-quantified"}} #only detect values
  	?samplePoint geo:hasGeometry/geo:asWKT ?coordinates.
  	?feature coso:ofFeatureType/rdfs:label ?location.
  	?sampletype rdf:type coso:SampleMaterialType;
            rdfs:label ?materialTypeName.
} GROUP BY ?sample ?sampleName ?location ?substance ?substanceName ?value ?unit ?date ?coordinates
LIMIT 100
graph TD
classDef projected fill:lightgreen;
classDef literal fill:orange;
classDef iri fill:yellow;
  v1("?carbonChainLength")
  v14("?coordinates"):::projected 
  v9("?date"):::projected 
  v7("?feature")
  v15("?location"):::projected 
  v17("?materialType")
  v16("?materialTypeName"):::projected 
  v6("?observation")
  v10("?result")
  v2("?sample"):::projected 
  v5("?sampleName"):::projected 
  v4("?samplePoint")
  v3("?sampletype")
  v8("?substance"):::projected 
  v11("?substanceName"):::projected 
  v13("?unit"):::projected 
  v14("?value"):::projected 
  a1((" "))
  a2((" "))
  a3((" "))
  c3([contaminoso:BiotaSample]):::iri 
  c22([contaminoso:SampleMaterialType]):::iri 
  c8([contaminoso:ContaminantSampleObservation]):::iri 
  c13([http://w3id.org/pfas/v1/PerFAs]):::iri 
  f0[["?carbonChainLength > '6^^xsd:integer'"]]
  f0 --> v1
  v2 --"a"-->  c3
  v2 --"contaminoso:sampleOfMaterialType"-->  v3
  v2 --"contaminoso:fromSamplePoint"-->  v4
  v2 --"rdfs:label"-->  v5
  v6 --"contaminoso:analyzedSample"-->  v2
  v6 --"a"-->  c8
  v6 --"contaminoso:hasFeatureOfInterest"-->  v7
  v6 --"contaminoso:ofSubstance"-->  v8
  v6 --"contaminoso:observedTime"-->  v9
  v6 --"contaminoso:hasResult"-->  v10
  v8 --"a"-->  c13
  v8 --"skos:altLabel"-->  v11
  v8 --"dsstox:hasCarbonChainLength"-->  v1
  v10 --"contaminoso:measurementValue"-->  v14
  subgraph optional0["(optional)"]
  style optional0 fill:#bbf,stroke-dasharray: 5 5;
    v10 -."contaminoso:measurementUnit".->  a1
    a1 --"qudt:symbol"-->  v13
  end
  subgraph minus1["MINUS"]
    style minus1 stroke-width:6px,fill:pink,stroke:red;
    bind2[/VALUES ?value/]
    bind2-->v14
    bind20(["non-detect"])
    bind20 --> bind2
    bind21(["non-quantified"])
    bind21 --> bind2
  end
  v4 --"geo:hasGeometry"-->  a2
  a2 --"geo:asWKT"-->  v14
  v7 --"contaminoso:ofFeatureType"-->  a3
  a3 --"rdfs:label"-->  v15
  v3 --"a"-->  c22
  v3 --"rdfs:label"-->  v16
  bind4[/"?materialTypeName"/]
  v16 --o bind4
  bind4 --as--o v17
SPARQL Endpoint https://apps.okn.us/sawgraph/sparql
Triple Pattern Fragments https://apps.okn.us/ldf/sawgraph
ClassEntities
PropertyTriples