diff --git a/src/main/java/de/uni_hamburg/corpora/validation/quest/EXMARaLDATranscriptionChecker.java b/src/main/java/de/uni_hamburg/corpora/validation/quest/EXMARaLDATranscriptionChecker.java index 1f061c01132b2a51905e5822ac5dd55b8a2b8218..f1a612964c1e5c8abe3d733ab91edb7cc0699b0f 100644 --- a/src/main/java/de/uni_hamburg/corpora/validation/quest/EXMARaLDATranscriptionChecker.java +++ b/src/main/java/de/uni_hamburg/corpora/validation/quest/EXMARaLDATranscriptionChecker.java @@ -1,19 +1,55 @@ package de.uni_hamburg.corpora.validation.quest; -import de.uni_hamburg.corpora.CorpusData; -import de.uni_hamburg.corpora.EXMARaLDATranscriptionData; +import de.uni_hamburg.corpora.*; +import org.exmaralda.partitureditor.fsm.FSMException; +import org.exmaralda.partitureditor.jexmaralda.JexmaraldaException; +import org.jdom.Document; import org.jdom.Element; +import org.jdom.JDOMException; +import org.jdom.xpath.XPath; +import org.xml.sax.SAXException; -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.Properties; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.TransformerException; +import javax.xml.xpath.XPathExpressionException; +import java.io.IOException; +import java.net.URISyntaxException; +import java.security.NoSuchAlgorithmException; +import java.util.*; +import java.util.logging.Logger; +/** + * Checker for transcription data in an EXMARaLDA file + * @author bba1792, Dr. Herbert Lange + * @version 20220516 + */ public class EXMARaLDATranscriptionChecker extends TranscriptionChecker { + + private final Logger logger = Logger.getLogger(getFunction()); + public EXMARaLDATranscriptionChecker(Properties properties) { super(properties); } + @Override + public Report function(Corpus c, Boolean fix) throws NoSuchAlgorithmException, ClassNotFoundException, FSMException, URISyntaxException, SAXException, IOException, ParserConfigurationException, JexmaraldaException, TransformerException, XPathExpressionException, JDOMException { + Report report = new Report(); + // Check if we have a tier pattern. if yes we use the tier finder to get all tier ids + if (props.containsKey("transcription-tier-pattern")) { + // Copy old properties + Properties newProperties = new Properties(); + newProperties.putAll(props); + // convert tier pattern + newProperties.put("tier-pattern", props.getProperty("transcription-tier-pattern")); + // run tier finder + EXMARaLDATierFinder etf = new EXMARaLDATierFinder(newProperties); + report.merge(etf.function(c, fix)); + tierIds.addAll(etf.getTierList()); + } + report.merge(super.function(c, fix)); + return report; + } + @Override public String getDescription() { return "Checker for the transcription in an EXMARaLDA transcription file"; @@ -25,12 +61,27 @@ public class EXMARaLDATranscriptionChecker extends TranscriptionChecker { } @Override - List<Element> getTranscriptionTiers(CorpusData cd) { - return null; - } + List<Element> getTranscriptionTiers(CorpusData cd) throws JDOMException { + List<Element> tiers = new ArrayList<>(); + Document dom = ((EXMARaLDATranscriptionData) cd).getJdom(); + // Explicit list of tiers + if (!tierIds.isEmpty()) + for (String id : tierIds) { + Element tier = + (Element) XPath.newInstance(String.format("//tier[@id=\"%s\"]",id)).selectSingleNode(dom); + if (tier != null) + tiers.add(tier); + } + // HIAT tiers of category v (verbal) + else if (props.containsKey("transcription-method") && + props.getProperty("transcription-method").equalsIgnoreCase("hiat")) { + logger.info("HIAT"); + tiers.addAll(Collections.checkedList(XPath.newInstance("//tier[@category=\"v\"]").selectNodes(dom), + Element.class)); + } + return tiers; + - @Override - String getTranscriptionText(Element tier) { - return null; } + }