UNPKG

libsbgn.js

Version:

SBGN-ML parsing and writing for JavaScript

66 lines (64 loc) 2.2 kB
var ns = {}; var xml2js = require('xml2js'); var Issue = require('./Issue').Issue; ns.doValidation = function(file) { try { var isoContent= loadXMLDoc("templatelibsbgn.xslt"); file = file.replace('libsbgn/0.3', 'libsbgn/0.2'); var xml = new DOMParser().parseFromString(file, "text/xml"); var xsltProcessor = new XSLTProcessor(); var result ; if (window.ActiveXObject || xhttp.responseType == "msxml-document") { result = xml.transformNode(xsl); } // code for Chrome, Firefox, Opera, etc. else if (document.implementation && document.implementation.createDocument) { xsltProcessor = new XSLTProcessor(); xsltProcessor.importStylesheet(isoContent); result = xsltProcessor.transformToFragment(xml, document); } var tmp = document.createElement("div"); tmp.appendChild(result); result = tmp.innerHTML; var parseString = xml2js.parseString; var parsedResult; parseString(result, function (err, data) { parsedResult = data; }); var errors = []; if(parsedResult["svrl:schematron-output"]["svrl:failed-assert"] == undefined) return errors; var errCount= parsedResult["svrl:schematron-output"]["svrl:failed-assert"].length; for(var i=0;i<errCount;i++){ var error = new Issue(); error.setText(parsedResult["svrl:schematron-output"]["svrl:failed-assert"][i]["svrl:text"]); error.setPattern(parsedResult["svrl:schematron-output"]["svrl:failed-assert"][i]["$"]["id"]); error.setRole(parsedResult["svrl:schematron-output"]["svrl:failed-assert"][i]["svrl:diagnostic-reference"][0]["_"]); errors.push(error); } //console.log(result["svrl:schematron-output"]["svrl:failed-assert"][0]); return errors; } catch(e) { console.log(e); return false; } } function loadXMLDoc(filename) { if (window.ActiveXObject) { xhttp = new ActiveXObject("Msxml2.XMLHTTP"); } else { xhttp = new XMLHttpRequest(); } xhttp.open("GET", filename, false); try {xhttp.responseType = "msxml-document"} catch(err) {} // Helping IE11 xhttp.send(""); return xhttp.responseXML; } module.exports = ns;