This is a test version of Biostars. For the public version, visit https://www.biostars.org.
How To Get A Dbsnp Data From Java?

Hi,

Is there a way to get chrName, chrPosition and observed alleles of a given dbSNP rsId in java program?

and

Is there a way to get observed alleles of a SNP given with chrName and chrPosition in java program?

Thanks, Burçak

dbsnp java

I have two questions: 1. question input dbSNP rsId output: chrName, chrPosition, observedAlleles 2. question input chrName, chrPosition output: observedAlleles, dnSNP rsId

I just edited the tags.

1 answer

EDIT: You changed the original question

from

Is there a way to get chrName, chrPosition and observed alleles of a given dbSNP rsId in java program?

to

Is there a way to get observed alleles of a SNP given with chrName and chrPosition in java program?

=> This is not the same problem = I wasted my time.


use xjc to generate classes from the XML schema spec:

xjc "ftp://ftp.ncbi.nlm.nih.gov/snp/specs/docsum_3.3.xsd"

compile the following program: (it calls NCBI E-Efetch , parses the SNP structure and loop over the mapping components )

import gov.nih.nlm.ncbi.snp.docsum.*;

import java.util.ArrayList;
import java.io.InputStream;
import java.util.List;


import javax.xml.bind.*;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.events.StartElement;
import javax.xml.stream.events.XMLEvent;
import javax.xml.transform.stream.StreamSource;

public class Biostar95284
    {
    private Unmarshaller unmarshaller;
    private static gov.nih.nlm.ncbi.snp.docsum.ObjectFactory _fool_javac=null;
    private  XMLInputFactory xmlInputFactory=null;
    private Biostar95284() throws Exception
        {
        this.xmlInputFactory = XMLInputFactory.newInstance();
        xmlInputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, Boolean.FALSE);
        xmlInputFactory.setProperty(XMLInputFactory.IS_COALESCING, Boolean.TRUE);
        xmlInputFactory.setProperty(XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES, Boolean.TRUE);
        xmlInputFactory.setXMLResolver(new javax.xml.stream.XMLResolver()
                {
                @Override
                public Object     resolveEntity(String publicID, String systemID, String baseURI, String namespace)
                    {

                    return new java.io.ByteArrayInputStream(new byte[0]);
                    }
                });

        JAXBContext jaxbCtxt=JAXBContext.newInstance("gov.nih.nlm.ncbi.snp.docsum");
        this.unmarshaller=jaxbCtxt.createUnmarshaller();


        }
    private void run(String rsId) throws Exception
        {
    if(rsId.startsWith("rs")) rsId=rsId.substring(2);
        String uri="http://www.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=snp&id="+rsId+"&retmode=xml";
            XMLEventReader reader= xmlInputFactory.createXMLEventReader(new StreamSource(uri)); 


            while(reader.hasNext())
                {
                XMLEvent evt=reader.peek();

                if(!evt.isStartElement())
                    {
                    reader.nextEvent();
                    continue;
                    }

                StartElement start=evt.asStartElement();
                String localName=start.getName().getLocalPart();

                if(!localName.equals("Rs"))
                    {
                    reader.nextEvent();
                    continue;
                    }

               Rs rs=unmarshaller.unmarshal(reader, Rs.class).getValue();

               for(Assembly as:rs.getAssembly())
                       {  
                        for(Component comp:as.getComponent())
                       {
                       for(MapLoc maploc: comp.getMapLoc())
                           {
                           System.out.print("rs"+rsId);
                           System.out.print("\t");
                           System.out.print(as.getGenomeBuild());
                           System.out.print("\t");
                           System.out.print(as.getGroupLabel());
                           System.out.print("\t");
                           System.out.print(comp.getChromosome());
                           System.out.print("\t");
                           System.out.print(maploc.getPhysMapInt());
                           System.out.println();
                           }
                           }
                           }
               }
            reader.close();
        }

    public static void main(String[] args)
        {
        try
            {
            Biostar95284 app=new Biostar95284();
            for(String arg:args)
                {
                app.run(arg);
                }
            }
        catch (Exception e)
            {
            e.printStackTrace();
            }
        }
    }

with :

javac Biostar95284.java

execute:

java Biostar95284 rs25 rs26
rs25    37.5    GRCh37.p10    7    11584141
rs25    37.5    HuRef    7    11442496
rs25    37.5    CRA_TCAGchr7v2    7    11637562
rs25    37.5    CHM1_1.0    7    11559989
rs26    37.5    GRCh37.p10    7    11583470
rs26    37.5    HuRef    7    11441825
rs26    37.5    CRA_TCAGchr7v2    7    11636891
rs26    37.5    CHM1_1.0    7    11559318

Dear Pierre Lindenbaum,

Thanks for your answer. Although I have created the classes from the given xml schema using xjb successfully, the running the class Biostar95284 with given input data or any other data didn't give any output.

I have debugged the code and There are no found assembly. So it leaves the for loops. Any idea?

Thank you very much, Burcak

check your proxy. And sometimes, xjc is strange. In xmlInputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, Boolean.FALSE); try to replace Boolean.FALSE with Boolean.TRUE

Replacing Boolean.FALSE with Boolean.TRUE works! Thank you. Burcak

Is there a way to retrieve observed Alleles?

One of my trial with a attribute having allele in it.

List<rs.alleleorigin> alleleOrigin = rs.getAlleleOrigin(); if(alleleOrigin.isEmpty()){ System.out.println("empty"); }else{ for(Rs.AlleleOrigin allele: alleleOrigin){ System.out.println(allele.toString()); }

            }

I have tried

System.out.println(rs.getSequence().getObserved());

in order to get observed alleles which seems to work.

I have the same problem but replacing FALSE with TRUE doesn't solve the problem.

Log in to answer this question.