- public static Iterable<QName> parseXPath(StmtContext<?, ?, ?> ctx, String path) {
-
- validateXPath(path);
-
- List<String> nodeNames = splitPathToNodeNames(path);
- List<QName> qNames = new ArrayList<>();
+ /**
+ *
+ * Based on identifier read from source and collections of relevant prefixes and statement definitions mappings
+ * provided for actual phase, method resolves and returns valid QName for declared statement to be written.
+ * This applies to any declared statement, including unknown statements.
+ *
+ * @param prefixes - collection of all relevant prefix mappings supplied for actual parsing phase
+ * @param stmtDef - collection of all relevant statement definition mappings provided for actual parsing phase
+ * @param identifier - statement to parse from source
+ * @return valid QName for declared statement to be written
+ *
+ */
+ public static QName getValidStatementDefinition(final PrefixToModule prefixes, final QNameToStatementDefinition
+ stmtDef, final QName identifier) {
+ if (stmtDef.get(identifier) != null) {
+ return stmtDef.get(identifier).getStatementName();
+ } else {
+ String prefixedLocalName = identifier.getLocalName();
+ String[] namesParts = prefixedLocalName.split(":");
+
+ if (namesParts.length == 2) {
+ String prefix = namesParts[0];
+ String localName = namesParts[1];
+ if (prefixes != null && prefixes.get(prefix) != null
+ && stmtDef.get(QName.create(prefixes.get(prefix), localName)) != null) {
+ return QName.create(prefixes.get(prefix), localName);
+ }
+ }
+ }
+ return null;
+ }