예제 #1
0
  def search_records(cls, query):
    c = DemographicConnector()
    res = c.sparql(query)
    m = parse_rdf(res)

    # for each person, look up their demographics object.
    from smart.models.record_object import RecordObject
    people = m.triples((None, rdf['type'], sp.Demographics))
    pobj = RecordObject[sp.Demographics] 

    return_graph = bound_graph()
    for person in people:
      p = person[0] # subject

      # Connect to RDF Store
      pid = re.search("\/records\/(.*?)\/demographics", str(p)).group(1)
      print "matched ", p," to ", pid
      c = RecordStoreConnector(Record.objects.get(id=pid))

      # Pull out demographics
      p_uri = p.n3() # subject URI
      p_subgraph = parse_rdf(c.sparql(pobj.query_one(p_uri)))
      print "subq: " , pobj.query_one(p_uri)
      print "subgraph: ", serialize_rdf(p_subgraph)
      
      # Append to search result graph
      return_graph += p_subgraph
    print "got", serialize_rdf(return_graph)
    return serialize_rdf(return_graph)
예제 #2
0
def record_get_allergies(request, *args, **kwargs):
      record_id = kwargs['record_id']
      a = RecordObject["http://smartplatforms.org/terms#Allergy"]
      ae = RecordObject["http://smartplatforms.org/terms#AllergyException"]
      c = RecordStoreConnector(Record.objects.get(id=record_id))

      ma = c.sparql(a.query_all())
      m = parse_rdf(ma)

      mae = c.sparql(ae.query_all())
      parse_rdf(mae, model=m)

      return rdf_response(serialize_rdf(m))
예제 #3
0
  def rdf_to_objects(cls, res):
    m = parse_rdf(res)
    
    print "Got", res
    people = m.triples((None, rdf['type'], sp.Demographics))
    record_list = []
    for p in people:
        record = Record()
        print "working with person ", p
        record.id = re.search("\/records\/(.*?)\/demographics", str(p[0])).group(1)
        record.fn = str(list(m.triples((p[0], foaf['givenName'], None)))[0][2])
        record.ln = (list(m.triples((p[0], foaf['familyName'], None)))[0][2])
        print "found the snames ", record.fn, record.ln, record.id
        dob = str(list(m.triples((p[0], sp['birthday'], None)))[0][2])
        record.dob = dob

        gender = str(list(m.triples((p[0], foaf['gender'], None)))[0][2])
        record.gender = gender

        zipcode = str(list(m.triples((p[0], sp['zipcode'], None)))[0][2])
        record.zipcode = zipcode
       
        record_list.append(record)

    return record_list
예제 #4
0
  def from_rdf(cls, rdfstring, record, app):
    s = parse_rdf(rdfstring)

    q = """
    PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
    PREFIX sp: <http://smartplatforms.org/terms#>
    SELECT ?notes ?severity
    WHERE {
          ?a rdf:type sp:Alert.
          ?a sp:notes ?notes.
          ?a sp:severity ?scv.
          ?scv sp:code ?severity.
    }"""

    r = list(s.query(q))
    assert len(r) == 1, "Expected one alert in post, found %s"%len(r)
    (notes, severity) = r[0]

    assert type(notes) == Literal
    spcodes = Namespace("http://smartplatforms.org/terms/code/alertLevel#")
    assert severity in [spcodes.information, spcodes.warning, spcodes.critical]

    a = RecordAlert(record=record, 
                    alert_text=str(notes), 
                    triggering_app=app)
    a.save()
    return a
예제 #5
0
def rdf_delete(record_connector, query, save=True): 
    to_delete = parse_rdf(record_connector.sparql(query))
    deleted = bound_graph()

    for r in to_delete:
       deleted.add(r)
       record_connector.pending_removes.append(r)
       
    if (save): record_connector.execute_transaction()
       
    return rdf_response(serialize_rdf(deleted))
예제 #6
0
    def __init__(self, filename, target_id=None):            
        # 0. Read supplied data
        self.target_id = target_id
        self.data = parse_rdf(open(filename).read())

        # 1. For each known data type, extract relevant nodes
        var_bindings = {'record_id': self.target_id}
        ro = RecordObject[sp.MedicalDataElement]    
        ro.prepare_graph(self.data, None, var_bindings)
            
        # 2. Copy extracted nodes to permanent RDF store
        self.write_to_record()
예제 #7
0
    def internal_id(self, record_connector, external_id):
        idquery = """
            PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
            CONSTRUCT {%s <http://smartplatforms.org/terms#externalIDFor> ?o.}
            FROM $context
            WHERE {
                    %s <http://smartplatforms.org/terms#externalIDFor> ?o.
                  }  """%(external_id.n3(), external_id.n3())
        print "querying", idquery
        id_graph = parse_rdf(record_connector.sparql(idquery))


        l = list(id_graph)
        if len(l) > 1:
            raise Exception( "MORE THAN ONE ENTITY WITH EXTERNAL ID %s : %s"%(external_id, ", ".join([str(x[0]) for x in l])))

        try:
            s =  l[0][2]
            print "FOUND an internal id", s
            return s
        except: 
            return None