diff --git a/basex-core/src/main/java/org/basex/query/expr/path/NameTest.java b/basex-core/src/main/java/org/basex/query/expr/path/NameTest.java index 9fd07adad9..bd9aed87f9 100644 --- a/basex-core/src/main/java/org/basex/query/expr/path/NameTest.java +++ b/basex-core/src/main/java/org/basex/query/expr/path/NameTest.java @@ -1,5 +1,6 @@ package org.basex.query.expr.path; +import org.basex.index.name.*; import org.basex.data.*; import org.basex.query.*; import org.basex.query.value.item.*; @@ -103,9 +104,9 @@ public Test optimize(final Kind kn, final Data data) { } // check if local element/attribute names occur in database - if(!kind.oneOf(Kind.GNODE, Kind.PROCESSING_INSTRUCTION) && name != null && - !(kind == Kind.ELEMENT ? data.elemNames : data.attrNames).contains(name)) { - return null; + if(!kind.oneOf(Kind.GNODE, Kind.PROCESSING_INSTRUCTION) && name != null) { + final Names names = kind == Kind.ELEMENT ? data.elemNames : data.attrNames; + if(!names.contains(name) && !names.contains(Token.concat(Token.XML, ':', name))) return null; } return this; } diff --git a/basex-core/src/test/java/org/basex/query/NamespaceTest.java b/basex-core/src/test/java/org/basex/query/NamespaceTest.java index 32c9db6f2c..783daccee3 100644 --- a/basex-core/src/test/java/org/basex/query/NamespaceTest.java +++ b/basex-core/src/test/java/org/basex/query/NamespaceTest.java @@ -896,6 +896,15 @@ public void copyPreserveNoInheritPersistent() { query("db:get('db')/*:B", ""); } + /** Wildcard name test with xml namespace on database content (GH-2642). */ + @Test public void gh2642() { + final String doc = ""; + execute(new CreateDB("db", doc)); + query("/x[@xml:a]", doc); + query("/x[@*:a]", doc); + query("/x[*:a]", doc); + } + /** Tests fixed default element namespaces. */ @Test public void fixed() { // non-fixed: constructor xmlns="" changes the default namespace seen by enclosed expressions