In [1]:
from rdflib import *

data_url = 'https://raw.githubusercontent.com/DataONEorg/semantic-query/master/lib/test_corpus_E_id_list.txt'
dataset_service_url = 'https://cn.dataone.org/cn/v1/query/solr/?wt=json&fl=title,abstract,attribute&q=identifier:"%s"'
service_url = 'http://localhost:8080/annotate/annotate/'

measurement = URIRef('http://purl.dataone.org/odo/ECSO_00000039')
entity = URIRef('http://purl.dataone.org/odo/ECSO_00000525')
unit = URIRef('http://purl.obolibrary.org/obo/UO_0000000')
quality = URIRef('http://purl.obolibrary.org/obo/PATO_0000001')

oboe = Namespace('http://ecoinformatics.org/oboe/oboe.1.0/oboe-core.owl#')
cmo = Namespace('http://purl.org/twc/ontologies/cmo.owl#')
skos = Namespace('http://www.w3.org/2004/02/skos/core#')
_prefix = Namespace('http://purl.dataone.org/odo/ECSTRA_')

In [6]:
import csv, urllib, json, urllib2
import pandas as pd
from rdflib.extras.infixowl import *
import collections
import json
import base64
import random
import datetime
import requests
from rdflib.compare import to_isomorphic

datasets = urllib2.urlopen(data_url).read().split("\n")[1:]

def get_dataset_columns(identifier):
    url = dataset_service_url%identifier
    result = json.loads(urllib2.urlopen(url).read())['response']['docs'][0]['attribute']
    return result

nt_file = '/Users/jimmccusker/src/linkipedia/dataone-index/NTriple/merged.nt'
from rdflib import *

graph = ConjunctiveGraph(store='Sleepycat')
graph.open('ontology_db', create = True)

def extract_mentions(text):
    urls = collections.defaultdict(float)
    params = {
        'numResult':20,
        #'minScore':5,
        'query':text
    }
    response = requests.get(service_url, params=params).json()
    for r in response['results']:
        for annotation in r['annotations']:
            urls[annotation['url']] += float(annotation['score'])
    urls = [URIRef(url) for url, score in sorted(urls.items(), key=lambda x: x[1])]
    return urls

def create_id():
    return base64.urlsafe_b64encode(bytes(random.random()*datetime.datetime.now().toordinal())).rstrip("=")

def canonicalize(resource):
    digest = to_isomorphic(resource.graph).graph_digest()
    #canonical = list(iso[:RDFS.label:resource.label()])[0]
    #print str(canonical), '\n', iso.serialize(format='turtle')
    skolemized = _prefix[str(digest)]
    for s, p, o in resource.graph.triples((None, None, resource.identifier)):
        resource.graph.remove((s, p, o))
        resource.graph.add((s, p, skolemized))
    for s, p, o in resource.graph.triples((resource.identifier, None, None)):
        resource.graph.remove((s, p, o))
        resource.graph.add((skolemized, p, o))
    return resource.graph.resource(skolemized)
                
def create_class_uri():
    return _prefix[create_id()]

def by_super_class(resources):
    result = collections.defaultdict(list)
    for r in resources:
        for s in graph.transitive_objects(URIRef(r),RDFS.subClassOf):
            result[s].append(r)
    return result

def create_class(text, g, prefix=_prefix):
    try:
        resources = list(extract_mentions(text))
    except:
        print 'Error processing "', text, '".'
        return
    by_super = by_super_class(resources)
    result = graph.resource(measurement)
    used = set()
        
    if measurement in by_super:
        result = graph.resource(by_super[measurement][0])
        used.add(result.identifier)
    elif quality in by_super:
        subgraph = Graph()
        characteristic = by_super[quality][0]
        used.add(characteristic)
        super_classes = [Class(result.identifier, graph=subgraph)]
        c = Class(BNode(), graph=subgraph)
        c.subClassOf = super_classes
        equiv = Class(result.identifier, graph=subgraph) & (Property(oboe.ofCharacteristic, graph=subgraph) | only | 
                                          Class(characteristic, graph=subgraph))
        label = graph.label(characteristic)
        subgraph.add((c.identifier, RDFS.label, Literal(label)))
        c.equivalentClass = [equiv]
        skolemized = canonicalize(subgraph.resource(c.identifier))
        g += subgraph
        result = g.resource(skolemized.identifier)        

    if unit in by_super:
        subgraph = Graph()
        uom = by_super[unit][0]
        used.add(uom)
        super_classes = [Class(result.identifier, graph=subgraph)]
        c = Class(BNode(), graph=subgraph)
        c.subClassOf = super_classes
        equiv = Class(result.identifier, graph=subgraph) & (Property(oboe.hasUnit, graph=subgraph) | only | 
                                          Class(uom, graph=subgraph))
        label = '%s in %s' % (result.label(), graph.label(uom))
        subgraph.add((c.identifier, RDFS.label, Literal(label)))
        c.equivalentClass = [equiv]
        skolemized = canonicalize(subgraph.resource(c.identifier))
        g += subgraph
        result = g.resource(skolemized.identifier)
        
    if entity in by_super:
        subgraph = Graph()
        entity_class = by_super[entity][0]
        used.add(entity_class)
        super_classes = [Class(result.identifier, graph=subgraph)]
        c = Class(BNode(), graph=subgraph)
        c.subClassOf = super_classes
        equiv = Class(result.identifier, graph=subgraph) & (Property(oboe.measurementFor, graph=subgraph) | only | 
                                          (Property(oboe.ofEntity, graph=subgraph) | only | 
                                           Class(entity_class, graph=subgraph)))
        label = '%s %s' % (graph.label(entity_class), result.label())
        subgraph.add((c.identifier, RDFS.label, Literal(label)))
        c.equivalentClass = [equiv]
        skolemized = canonicalize(subgraph.resource(c.identifier))
        g += subgraph
        result = g.resource(skolemized.identifier)

    result.add(skos.example, Literal(text))
    return g.resource(result.identifier)    

import ipywidgets 
from IPython.display import display

def extract(datasets):
    f = ipywidgets.FloatProgress(min=0, max=len(datasets))
    ftext = ipywidgets.Text(value='0', description='%')
    display(f)
    display(ftext)
    result_graph = Graph()
    result_graph.parse(data='''
    @prefix owl: <http://www.w3.org/2002/07/owl#>.
    <https://purl.org/dataone/ontologies/observation/ecstra.owl> a owl:Ontology;
        owl:imports <https://purl.org/dataone/ontologies/observation/d1-ECSO.owl>.''', format="turtle")
    i = 0
    for dataset in datasets:
        try:
            columns = get_dataset_columns(dataset)
        except:
            print "Problem processing the dataset '", dataset, "'."
            continue
        for column in columns:
            create_class(column, result_graph)
        i += 1
        ftext.value = str(100 * float(i)/len(datasets))
        f.value = i
    return result_graph

def extract_frequencies(datasets):
    frequencies = collections.defaultdict(int)
    f = ipywidgets.FloatProgress(min=0, max=len(datasets))
    ftext = ipywidgets.Text(value='0', description='%')
    display(f)
    display(ftext)
    i = 0
    for dataset in datasets:
        try:
            columns = get_dataset_columns(dataset)
        except:
            print "Problem processing the dataset '", dataset, "'."
            continue
        for column in columns:
            try:
                resources = list(extract_mentions(column))
                for resource in resources:
                    frequencies[resource] += 1
            except:
                print 'Error processing "', column, '".'
        i += 1
        ftext.value = str(100 * float(i)/len(datasets))
        f.value = i
    
    result = [(uri, r, graph.label(uri)) for uri, r in frequencies.items()]
    result = sorted(result, key=lambda x: x[1], reverse=True)
    return result

In [4]:
graph.remove((None,None,None))
graph.load(nt_file, format="n3")
graph.commit()

In [7]:
print len(datasets)
extracted_graph = extract(datasets[:10])
with open("/Users/jimmccusker/Dropbox/Public/ecstra.ttl",'wb') as out:
    out.write(extracted_graph.serialize(format='turtle'))


1217

In [34]:
x = {}

In [35]:
x.items()


Out[35]:
[]

In [50]:
datasets[0]


Out[50]:
'https://pasta.lternet.edu/package/metadata/eml/ecotrends/5853/2'

In [17]:
entity_frequency = extract_frequencies(datasets)


Problem processing the dataset ' 7f0ae582-586f-4ff9-a027-b5aa6053d435-20140826_15_PBR1.xml '.
Problem processing the dataset ' f513f938-8547-4738-a31c-024d265b3ce3-CLM4VIC_SG1_Monthly_SWnet.nc4.fgdc.xml '.
Problem processing the dataset ' 83318869-55b8-46d3-bd71-c42e29c69098-ISAM_SG1_Monthly_SWE.nc4.fgdc.xml '.
Problem processing the dataset ' e2543d1b-c3f1-43e8-91d3-70bf5f4df85d-DLEM_SG2_Monthly_TotalResp.nc4.fgdc.xml '.
Problem processing the dataset ' 0da25041-0bf6-4b0e-99dd-a999ff8bcbf8-BIOME-BGC_BG1_Monthly_TotLivBiom.nc4.fgdc.xml '.
Problem processing the dataset ' 1e1649b8-2c43-4947-afda-c2ccdc54229d-CLM4_SG2_Monthly_NPP.nc4.fgdc.xml '.
Problem processing the dataset ' 27221852-3258-4018-8ee3-eb11a9874adc-CLASS-CTEM-N_SG2_Monthly_AbvGrndWood.nc4.fgdc.xml '.
Problem processing the dataset ' 6e5a0065-dd8c-44de-9946-fb2cf67326bd-SiB3_SG1_Monthly_HeteroResp.nc4.fgdc.xml '.
Problem processing the dataset ' d51b3a7e-a957-42be-aa6c-7cad4506fa12-VISIT_SG3_Monthly_HeteroResp.nc4.fgdc.xml '.
Problem processing the dataset ' 6522a1d1-ab4c-4878-b9cb-4ec485348dd8-CLASS-CTEM-N_SG1_Monthly_Veg.nc4.fgdc.xml '.
Problem processing the dataset ' e4ee5353-045a-4368-a4c9-8913e3b8102d-BIOME-BGC_RG1_Monthly_Fire_flux.nc4.fgdc.xml '.
Problem processing the dataset ' b9a73d04-40d4-418b-bf81-efec3011c6ec-ORCHIDEE-LSCE_SG3_Monthly_NEE.nc4.fgdc.xml '.
Problem processing the dataset ' c89a94e8-58b0-48cb-8561-d0c0f2a85cce-CLM4VIC_SG3_Monthly_TotLivBiom.nc4.fgdc.xml '.
Problem processing the dataset ' 87d2840f-f829-4a84-8a1f-45e19ff030d9-TRIPLEX-GHG_RG1_Annual_CarbPools.nc4.fgdc.xml '.
Problem processing the dataset ' 3924fe87-1ae8-45ac-bd0d-7325326d726d-ISAM_BG1_Monthly_Qh.nc4.fgdc.xml '.
Problem processing the dataset ' 326c9132-594e-4331-b83c-9265c60dbdd2-ORCHIDEE-LSCE_SG3_Monthly_SWdown.nc4.fgdc.xml '.
Problem processing the dataset ' 63e607e8-ddd7-46ce-95c9-71abe86c84e6-BIOME-BGC_BG1_Monthly_TotalResp.nc4.fgdc.xml '.
Problem processing the dataset ' 375cc75c-d1ba-4898-9f0c-d6128155202c-DLEM_SG1_Monthly_NEE.nc4.fgdc.xml '.
Problem processing the dataset ' 9db99240-74d4-4f6b-92e6-671f12363e8d-CLASS-CTEM-N_SG1_Monthly_AutoResp.nc4.fgdc.xml '.
Problem processing the dataset ' 771f9ff9-c6f9-4d15-8575-f6f6a3419064-LPJ-wsl_SG2_Monthly_NEP.nc4.fgdc.xml '.
Problem processing the dataset ' 61bc100d-2b31-4760-bf4a-29e96cef008a-CLASS-CTEM-N_SG3_Monthly_Qle.nc4.fgdc.xml '.
Problem processing the dataset ' 8068a48c-77f3-4949-8b8a-8c104c688ffa-CLM4VIC_SG1_Monthly_Fire_flux.nc4.fgdc.xml '.
Problem processing the dataset ' 9aa1663d-64f3-4313-8330-800907947496-GTEC_RG1_Monthly_TotalResp.nc4.fgdc.xml '.
Problem processing the dataset ' 79daedd1-f749-4305-81a5-9eb11b37e8bd-CLM4VIC_RG1_Monthly_SWdown.nc4.fgdc.xml '.
Problem processing the dataset ' ea9ac67f-e814-4ccc-bf74-8fc89e93fe97-CLM4VIC_RG1_Monthly_SnowDepth.nc4.fgdc.xml '.
Problem processing the dataset ' 191487f4-a639-44d2-b736-0bd7e609ada5-GTEC_SG2_Monthly_SoilMoist.nc4.fgdc.xml '.
Problem processing the dataset ' 35b0d442-f8af-4319-a464-3741937a0abe-ISAM_SG1_Monthly_Veg.nc4.fgdc.xml '.
Problem processing the dataset ' 20cc0ffb-0fb2-4b26-bbcc-9b21f192fad4-BIOME-BGC_SG1_Monthly_HeteroResp.nc4.fgdc.xml '.
Problem processing the dataset ' b0b06031-1fe6-4ef1-8a07-244b3016b694-ORCHIDEE-LSCE_SG2_Monthly_CarbPools03_cLeaf.nc4.fgdc.xml '.
Problem processing the dataset ' 629671d7-aebe-4851-bc33-91288eec33a9-ORCHIDEE-LSCE_RG1_Monthly_SWdown.nc4.fgdc.xml '.
Problem processing the dataset ' 16ac381b-0e5d-4931-a775-424feff3f697-CLM4_BG1_Monthly_Fire_flux.nc4.fgdc.xml '.
Problem processing the dataset ' 594510a9-04c0-4dd3-9c4b-c108c29a644a-CLASS-CTEM-N_SG3_Monthly_GPP.nc4.fgdc.xml '.
Problem processing the dataset ' 3f9ff403-b6a3-4b98-a899-d4f1bdf73ce5-SiB3_SG3_Monthly_NEE.nc4.fgdc.xml '.
Problem processing the dataset ' 1234c8b8-eaea-4fb6-b526-2220249b5cda-CLM4_SG2_Monthly_GPP.nc4.fgdc.xml '.
Problem processing the dataset ' 2043c01f-f3f0-4bd7-ad3a-bb3c8074df57-VEGAS2.1_RG1_Monthly_NEP.nc4.fgdc.xml '.
Problem processing the dataset ' ed7dcc59-93ed-461e-a2a1-ad8f7738837c-VISIT_SG1_Monthly_TotalResp.nc4.fgdc.xml '.
Problem processing the dataset ' 450ec7eb-8e8a-447f-b420-83f535503e3d-CLM4_SG1_Monthly_AutoResp.nc4.fgdc.xml '.
Problem processing the dataset ' 8bda695c-723b-4955-af43-fd3e45215dff-TRIPLEX-GHG_BG1_Monthly_Qair.nc4.fgdc.xml '.
Problem processing the dataset ' cc4d50de-1176-4919-bad0-750dabb6aa5f-ORCHIDEE-LSCE_SG1_Monthly_CarbPools04_cLitter_Wood_AB.nc4.fgdc.xml '.
Problem processing the dataset ' 88605b26-4cf9-4288-8c0b-b9bb34fb5c3b-SiB3_SG2_Monthly_HeteroResp.nc4.fgdc.xml '.
Problem processing the dataset ' bdaaa397-d923-4747-9a49-0edb604660c4-VEGAS2.1_RG1_Monthly_TotalResp.nc4.fgdc.xml '.
Problem processing the dataset ' fc8d0e2b-2865-4ccf-b2f8-567470a1483b-LPJ-wsl_SG1_Monthly_LAI_BONE.nc4.fgdc.xml '.
Problem processing the dataset ' de16e966-cd3e-4e2f-a82e-00ac9eae5cf2-CLASS-CTEM-N_BG1_Monthly_Evap.nc4.fgdc.xml '.
Problem processing the dataset ' a54683b9-1a2e-4d5a-b49a-e645b44ecbae-CLASS-CTEM-N_SG1_Monthly_Evap.nc4.fgdc.xml '.
Problem processing the dataset ' a8697633-9256-4439-9718-c80e19ee8ca6-CLM4_BG1_Monthly_z_node.nc4.fgdc.xml '.
Problem processing the dataset ' a0195a73-5014-4547-82fe-9720e56e7fea-SiBCASA_RG1_Monthly_CarbPools.nc4.fgdc.xml '.
Problem processing the dataset ' 50dac12e-013b-4d8e-a2be-e16a87ad9481-CLM4_SG3_Monthly_SnowDepth.nc4.fgdc.xml '.
Problem processing the dataset ' f2fc28f6-f635-451e-8fc6-9495d89b2f81-CLASS-CTEM-N_SG1_Monthly_SW_albedo.nc4.fgdc.xml '.
Problem processing the dataset ' 17b01bcf-2ba5-4772-96de-36a84d1b321c-ORCHIDEE-LSCE_SG2_Monthly_SoilWet_Lower.nc4.fgdc.xml '.
Problem processing the dataset ' c8230444-5394-4b53-84d0-6356364f22fd-CLASS-CTEM-N_RG1_Monthly_SWnet.nc4.fgdc.xml '.
Problem processing the dataset ' bc215ace-4f46-48fb-9c66-db00212be8cd-LPJ-wsl_SG3_Monthly_Qs.nc4.fgdc.xml '.
Problem processing the dataset ' 0c15c345-98f3-4777-8719-4b8a6920c597-SiBCASA_SG3_Monthly_Lwnet.nc4.fgdc.xml '.
Problem processing the dataset ' 6826baa7-2dbf-4453-abbd-e4e8627181dd-CLM4_SG1_Monthly_LWdown.nc4.fgdc.xml '.
Problem processing the dataset ' 1d3c1875-52b8-47f0-8903-1144ca986b2a-ISAM_SG2_Monthly_NPP.nc4.fgdc.xml '.
Problem processing the dataset ' d077e5d7-d624-439c-948c-ae910f9e5b3e-GTEC_SG3_Monthly_SoilWet.nc4.fgdc.xml '.
Problem processing the dataset ' 5fce98e1-1ef9-4255-945a-3c4834ccfe11-CLM4VIC_SG2_Monthly_SoilTemp.nc4.fgdc.xml '.
Problem processing the dataset ' 7826f1b1-47ad-4d07-b373-eb285899980e-CLM4_RG1_Monthly_Qsb.nc4.fgdc.xml '.
Problem processing the dataset ' 869fa7ec-18e5-4eec-9597-0b41ee7352a7-SiB3_SG2_Monthly_Qs.nc4.fgdc.xml '.
Problem processing the dataset ' 37d0d77a-51fd-4021-a559-06fa363c682a-CLM4VIC_BG1_Monthly_NEE.nc4.fgdc.xml '.
Problem processing the dataset ' ef34a4ee-7ef0-44b7-bc59-cfcebe34be49-CLASS-CTEM-N_RG1_Monthly_NEP.nc4.fgdc.xml '.
Problem processing the dataset ' ff8e1551-2365-4546-9e17-2226a127bed3-CLASS-CTEM-N_SG1_Monthly_LW_albedo.nc4.fgdc.xml '.
Problem processing the dataset ' 8c2615b4-4049-4dd1-83b9-3e3c019a4743-VEGAS2.1_RG1_Monthly_Evap.nc4.fgdc.xml '.
Problem processing the dataset ' d6396488-8738-4303-be11-5c39930d1b18-CLASS-CTEM-N_BG1_Monthly_NEE.nc4.fgdc.xml '.
Problem processing the dataset ' 32433442-d13e-4549-adec-1e7dd9089d96-CLM4VIC_SG2_Monthly_TotSoilCarb.nc4.fgdc.xml '.
Problem processing the dataset ' 6677c567-07c9-4df0-b491-a0389033a7c7-CLASS-CTEM-N_SG2_Monthly_Lwnet.nc4.fgdc.xml '.
Problem processing the dataset ' d75372f3-41e4-4239-b00d-ea70e301255f-BIOME-BGC_SG1_Monthly_Veg.nc4.fgdc.xml '.
Problem processing the dataset ' 720dc493-df22-4dc8-a4a5-8147f1f06111-CLM4_SG2_Monthly_Qsb.nc4.fgdc.xml '.
Problem processing the dataset ' b3590504-2f96-4e09-9d0d-4093757d3921-DLEM_RG1_Monthly_GPP.nc4.fgdc.xml '.
Problem processing the dataset ' d4a410b2-9be7-4422-b04a-106fd4a7fdaf-VISIT_SG2_Monthly_SWE.nc4.fgdc.xml '.
Problem processing the dataset ' 923857b3-5263-4474-bf97-43994b8ed7b1-CLM4_RG1_Monthly_Fire_flux.nc4.fgdc.xml '.
Problem processing the dataset ' https://pasta.lternet.edu/package/metadata/eml/knb-lter-sbc/55/2 '.
Problem processing the dataset ' https://pasta.lternet.edu/package/metadata/eml/knb-lter-arc/10151/4 '.
Problem processing the dataset ' https://pasta.lternet.edu/package/metadata/eml/knb-lter-arc/10150/5 '.
Problem processing the dataset ' https://pasta.lternet.edu/package/metadata/eml/knb-lter-arc/1602/8 '.
Problem processing the dataset '  '.

In [21]:
print '\n'.join(['%s,%s,%s'%(str(uri), str(frequency), str(label)) for uri, frequency, label in entity_frequency[:100]])


http://purl.obolibrary.org/obo/UO_0000008,2318,meter
http://purl.obolibrary.org/obo/ENVO_00002006,1780,water
http://purl.dataone.org/odo/ECSO_00000515,1706,depth
https://purl.org/dataone/ontologies/provenance/ProvONE/v1/owl/provone.owl#Data,1513,Data
http://ecoinformatics.org/oboe/oboe.1.0/oboe-ecology.owl#Sample,1478,Sample
http://purl.obolibrary.org/obo/ENVO_00000264,1163,seamount
http://purl.obolibrary.org/obo/ENVO_00000100,1136,valley
http://purl.obolibrary.org/obo/UO_0000036,1121,year
http://ecoinformatics.org/oboe/oboe.1.0/oboe-core.owl#Name,944,Name
http://purl.org/dc/terms/date,936,Date
http://purl.obolibrary.org/obo/PATO_0000146,931,temperature
http://purl.obolibrary.org/obo/UBERON_0000020,816,sense organ
http://ecoinformatics.org/oboe/oboe.1.0/oboe-core.owl#Measurement,747,Measurement
http://ecoinformatics.org/oboe/oboe.1.0/oboe-core.owl#Standard,731,Standard
http://purl.obolibrary.org/obo/ENVO_00000020,693,lake
http://purl.obolibrary.org/obo/UO_0000033,684,day
http://purl.dataone.org/odo/ECSO_00000313,656,Species
http://purl.obolibrary.org/obo/ENVO_00000033,621,pond
http://www.w3.org/ns/prov#used,594,used
http://purl.obolibrary.org/obo/UO_0000099,569,liter
http://purl.dataone.org/odo/ECSO_00000518,554,temperature
http://purl.obolibrary.org/obo/PATO_0000165,552,time
http://purl.obolibrary.org/obo/ENVO_00000109,543,woodland
http://purl.obolibrary.org/obo/UO_0000035,509,month
http://ecoinformatics.org/oboe/oboe.1.0/oboe-spatial.owl#Within,499,Within
http://purl.org/dc/terms/Location,496,Location
http://purl.obolibrary.org/obo/UO_0000010,488,second
http://purl.obolibrary.org/obo/ENVO_00000167,484,bar
http://purl.obolibrary.org/obo/ENVO_00000309,477,depression
http://ecoinformatics.org/oboe/oboe.1.0/oboe-core.owl#Decimal,475,Decimal
http://purl.obolibrary.org/obo/UO_0000009,461,kilogram
http://purl.obolibrary.org/obo/UO_0000003,455,time unit
http://www.w3.org/ns/prov#value,454,value
http://purl.obolibrary.org/obo/PATO_0001025,441,pressure
http://ecoinformatics.org/oboe/oboe.1.0/oboe-core.owl#Observation,437,Observation
http://ecoinformatics.org/oboe/oboe.1.0/oboe-spatial.owl#Plot,435,Plot
http://purl.obolibrary.org/obo/ENVO_00000106,397,grassland
http://purl.dataone.org/odo/ECSO_00000512,389,concentration
http://ecoinformatics.org/oboe/oboe.1.0/oboe-temporal.owl#During,386,During
http://www.w3.org/ns/prov#Collection,384,Collection
http://purl.obolibrary.org/obo/ENVO_00000114,365,agricultural field
http://purl.obolibrary.org/obo/UO_0000021,361,gram
http://purl.dataone.org/odo/ECSO_00000523,353,pressure
http://purl.obolibrary.org/obo/PCO_0000018,347,collection of organisms of the same species
http://purl.obolibrary.org/obo/UO_0000096,343,cubic meter
http://purl.obolibrary.org/obo/UO_0000089,317,cubic meter per mole
http://ecoinformatics.org/oboe/oboe.1.0/oboe-core.owl#Type,315,Type
http://purl.obolibrary.org/obo/ENVO_01000635,308,land
http://purl.obolibrary.org/obo/UO_0000022,307,milligram
http://purl.obolibrary.org/obo/UO_0000080,300,square meter
https://code.ecoinformatics.org/code/semtools/trunk/dev/oboe/oboe-sbc.owl#Plant,300,Plant
http://purl.obolibrary.org/obo/ENVO_00001998,289,soil
http://purl.dataone.org/odo/ECSO_00000511,272,height
http://purl.obolibrary.org/obo/ENVO_00000087,266,cliff
http://purl.obolibrary.org/obo/UO_0000032,265,hour
http://purl.obolibrary.org/obo/UO_0000309,260,milligram per square meter
http://purl.obolibrary.org/obo/UO_0000093,254,cubic meter per kilogram
http://ecoinformatics.org/oboe/oboe.1.0/oboe-spatial.owl#Transect,253,Transect
http://purl.obolibrary.org/obo/PATO_0001323,251,area
http://purl.obolibrary.org/obo/UO_0000063,240,millimolar
http://purl.obolibrary.org/obo/UBERON_0002416,239,integumental system
http://purl.obolibrary.org/obo/UO_0000031,236,minute
http://purl.org/spar/datacite/Identifier,236,identifier
http://purl.obolibrary.org/obo/NCBITaxon_1,234,root
http://purl.obolibrary.org/obo/ENVO_01000584,232,table
http://purl.obolibrary.org/obo/ENVO_00000475,230,inlet
http://purl.obolibrary.org/obo/ENVO_00000098,221,island
http://www.w3.org/ns/prov#End,220,End
http://purl.org/dc/terms/description,219,Description
http://purl.obolibrary.org/obo/ENVO_01000155,218,organic material
http://purl.obolibrary.org/obo/UO_0000299,213,micro
http://purl.obolibrary.org/obo/ENVO_00002874,210,air conditioning unit
http://purl.obolibrary.org/obo/ENVO_00000040,208,waterfall
http://purl.obolibrary.org/obo/ENVO_00000477,202,mount
http://purl.obolibrary.org/obo/PATO_0000573,187,increased length
http://purl.dataone.org/odo/ECSO_00000501,187,Tree
http://purl.obolibrary.org/obo/PATO_0001824,184,dry
http://purl.obolibrary.org/obo/ENVO_00000176,184,elevation
http://ecoinformatics.org/oboe/oboe.1.0/oboe-chemistry.owl#Oxygen,184,Oxygen
http://purl.obolibrary.org/obo/ENVO_00002010,168,saline water
http://purl.obolibrary.org/obo/ENVO_00000305,160,peninsula
http://purl.obolibrary.org/obo/PATO_0001986,159,dissolved
http://purl.obolibrary.org/obo/CHEBI_15377,158,water
http://ecoinformatics.org/oboe/oboe.1.0/oboe-temporal.owl#After,156,After
http://purl.obolibrary.org/obo/ENVO_00002000,155,slope
http://purl.obolibrary.org/obo/ENVO_00000015,152,ocean
http://purl.obolibrary.org/obo/UO_0000000,151,unit
http://www.w3.org/ns/prov#Person,147,Person
http://purl.obolibrary.org/obo/ENVO_00000122,141,track
http://purl.obolibrary.org/obo/RO_0002577,136,system
http://purl.obolibrary.org/obo/PATO_0000001,133,quality
http://purl.org/dc/terms/,130,
http://purl.obolibrary.org/obo/UBERON_0001474,130,bone element
http://ecoinformatics.org/oboe/oboe.1.0/oboe-chemistry.owl#Carbon,128,Carbon
http://ecoinformatics.org/oboe/oboe.1.0/oboe-chemistry.owl#Nitrogen,121,Nitrogen
http://purl.obolibrary.org/obo/PATO_0000122,120,length
http://ecoinformatics.org/oboe/oboe.1.0/oboe-anatomy.owl#Cell,118,Cell
http://purl.dataone.org/odo/ECSO_00000526,115,group
http://purl.obolibrary.org/obo/ENVO_00000268,114,lake bed
http://purl.dataone.org/odo/ECSO_00000323,113,Carbon Dioxide

In [ ]: