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.
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 |
| Class | Entities |
|---|
| Property | Triples |
|---|