Semantic VistA

Wrap VistA in a SPARQL endpoint and the most popular EMR in America becomes a patient-knowledgeable member of the Semantic Web

FMQL

VistA is built around a MUMPS-based data repository called FileMan which follows a network model very like a Semantic Web graph. Natively, FileMan has no remote query mechanism.

FileMan Query Language (FMQL) is a subset or profile of SPARQL suitable for this repository.

The FMQL Specification describes this SPARQL profile and relevant information on FileMan.

Current Release

The current version of FMQL, v0.6, supports reliable, linked-data access to all FileMan schema and instance data. It includes:

  1. FMQL Endpoint: Apache-hosted, it implements FMQL’s “Linked Data” level
  2. FileMan Rambler: walk through the over 5000 files in FileMan with a web browser.
  3. VistA Patient Browser: what does FileMan record about patients. It’s here, in your browser.
  4. Report Utilities: see how easy it is to generate VistA reports once you have FMQL

Download, unzip and follow the install instructions.

Caregraf’s VistA

No time to install? Use Caregraf’s VistA system at vista.caregraf.org. Go anywhere with its Rambler, focus in on patients through its Patient Browser (the unfortunate Christopher Jones has a full story to tell) or … write your own client.

Need pointers? Both Rambler and Patient Browser are FMQL endpoint clients – view page source in your browser. So are the Report Utilities. Here’s some Python that gets a description of all patients in a VistA …

        FMQLEP = "http://vista.caregraf.org/fmqlEP"
        queryURL = FMQLEP + "?" + "op=SelectAllOfType&typeId=2" # get all patients ("2")
        reply = eval(urllib2.urlopen(queryURL).read())
        print "There are %d patients\r" % len(reply["results"])
        for result in reply["results"]:
                print "\r----- Details on patient %s -----\r" % result["URI"]["fmqlLabel"]
                queryURL = FMQLEP + "?" + "op=Describe&url=" + result["URI"]["value"]
                reply = eval(urllib2.urlopen(queryURL).read())
                for field in reply["fields"]:
                        typedValue = reply["results"][0][field]
                        print "\t%s: %s\r" % (field, typedValue["value"])

Prefer Java? Javascript? It’s the same. With FMQL, VistA’s only an endpoint away.