10 package de.uni_hamburg.corpora.validation;
17 import java.io.IOException;
19 import java.util.Collection;
20 import javax.xml.parsers.DocumentBuilder;
21 import javax.xml.parsers.DocumentBuilderFactory;
22 import javax.xml.parsers.ParserConfigurationException;
24 import java.net.URISyntaxException;
26 import javax.xml.transform.TransformerException;
27 import javax.xml.xpath.XPathExpressionException;
28 import org.exmaralda.partitureditor.jexmaralda.JexmaraldaException;
29 import org.jdom.JDOMException;
30 import org.xml.sax.SAXException;
31 import org.w3c.dom.Document;
32 import org.w3c.dom.Element;
33 import org.w3c.dom.NodeList;
51 throws SAXException, IOException, ParserConfigurationException, JexmaraldaException, TransformerException, XPathExpressionException, URISyntaxException {
52 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
53 DocumentBuilder db = dbf.newDocumentBuilder();
55 NodeList reffiles = doc.getElementsByTagName(
"referenced-file");
56 int reffilesFound = 0;
57 int reffilesMissing = 0;
59 for (
int i = 0; i < reffiles.getLength(); i++) {
60 Element reffile = (Element) reffiles.item(i);
61 String url = reffile.getAttribute(
"url");
63 if (url.startsWith(
"file:///C:") || url.startsWith(
"file:/C:")) {
64 stats.
addCritical(
function, cd,
"Referenced-file " + url
65 +
" points to absolute local path, fix to relative path first");
67 boolean found =
false;
68 File justFile =
new File(url);
69 if (justFile.exists()) {
72 URL referencePath = cd.getParentURL();
73 URL absPath =
new URL(referencePath +
"/" + url);
74 File absFile =
new File(absPath.toURI());
75 if (absFile.exists()) {
80 stats.
addCritical(
function, cd,
"File in referenced-file NOT found: " + url);
81 exmaError.addError(
function, cd.getURL().getFile(),
"",
"",
false,
"Error: File in referenced-file NOT found: " + url);
84 stats.
addCorrect(
function, cd,
"File in referenced-file was found: " + url);
87 stats.
addCorrect(
function, cd,
"No file was referenced in this transcription");
101 Class cl = Class.forName(
"de.uni_hamburg.corpora.BasicTranscriptionData");
103 }
catch (ClassNotFoundException ex) {
114 String description =
"This class is a validator for EXB-file's references;" 115 +
" it checks Exmaralda .exb file for file references if a referenced " 116 +
"file does not exist, issues a warning;";
121 public Report function(
Corpus c, Boolean fix)
throws SAXException, IOException, ParserConfigurationException, URISyntaxException, JDOMException, TransformerException, XPathExpressionException, JexmaraldaException {
123 for (
CorpusData cdata : c.getBasicTranscriptionData()) {
124 stats.
merge(
function(cdata, fix));
static ExmaErrorList exmaError
void addCritical(String description)
ExbFileReferenceChecker()
void addCorrect(String statId, String description)
Collection< Class<?extends CorpusData > > getIsUsableFor()
static InputStream String2InputStream(String s)
void addException(Throwable e, String description)