diff --git a/gradle.properties b/gradle.properties index a154171..4bc172e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ group = org.xbib name = z3950 -version = 5.1.7 +version = 5.1.8 org.gradle.warning.mode = ALL diff --git a/z3950-common/src/main/java/org/xbib/z3950/common/cql/CQLRPNGenerator.java b/z3950-common/src/main/java/org/xbib/z3950/common/cql/CQLRPNGenerator.java index 023125a..6b7b602 100644 --- a/z3950-common/src/main/java/org/xbib/z3950/common/cql/CQLRPNGenerator.java +++ b/z3950-common/src/main/java/org/xbib/z3950/common/cql/CQLRPNGenerator.java @@ -59,7 +59,7 @@ public final class CQLRPNGenerator implements Visitor { private RPNQuery rpnQuery; - private final boolean wordListSupported; + private boolean wordListSupported; public CQLRPNGenerator() { this(StandardCharsets.ISO_8859_1, null, true); @@ -243,8 +243,9 @@ public final class CQLRPNGenerator implements Visitor { push(attributeElements, createAttributeElement(2, 5)); case NOT_EQUALS -> push(attributeElements, createAttributeElement(2, 6)); - case ALL, ANY -> { // 4=6 word list + case ALL, ANY -> { push(attributeElements, createAttributeElement(2, 3)); + // 4=6 word list if (wordListSupported) { replace(attributeElements, createAttributeElement(4, 6)); } @@ -304,6 +305,19 @@ public final class CQLRPNGenerator implements Visitor { if (attributeValue == 31) { replace(attributeElements, createAttributeElement(4, 5)); } + // titlePhrase --> use phrase attribute + if ("titlePhrase".equals(index.getName())) { + replace(attributeElements, createAttributeElement(4, 1)); + replace(attributeElements, createAttributeElement(6, 1)); + wordListSupported = false; + } + // titleComplete --> use phrase attribute and use structure completeness + if ("titleComplete".equals(index.getName())) { + replace(attributeElements, createAttributeElement(4, 1)); + replace(attributeElements, createAttributeElement(6, 3)); + wordListSupported = false; + } + push(attributeElements, createAttributeElement(attributeType, attributeValue)); } diff --git a/z3950-common/src/main/resources/org/xbib/z3950/common/cql/bib-1.properties b/z3950-common/src/main/resources/org/xbib/z3950/common/cql/bib-1.properties index 45b7d3f..872e18a 100644 --- a/z3950-common/src/main/resources/org/xbib/z3950/common/cql/bib-1.properties +++ b/z3950-common/src/main/resources/org/xbib/z3950/common/cql/bib-1.properties @@ -266,6 +266,8 @@ timePeriod=1125 timePeriodStructured=1127 timePeriodTextual=1126 title=4 +titlePhrase=4 +titleComplete=4 titleAbbreviated=43 titleAddedTitlePage=37 titleCaption=38 diff --git a/z3950-common/src/test/java/org/xbib/z3950/common/cql/CQL2RPNTest.java b/z3950-common/src/test/java/org/xbib/z3950/common/cql/CQL2RPNTest.java index 1767551..1c73793 100644 --- a/z3950-common/src/test/java/org/xbib/z3950/common/cql/CQL2RPNTest.java +++ b/z3950-common/src/test/java/org/xbib/z3950/common/cql/CQL2RPNTest.java @@ -92,4 +92,26 @@ class CQL2RPNTest { String q = generator.getQueryResult().toString(); assertEquals("{attributeSetId 1.2.840.10003.3.1, rpn {op {attrTerm {attributes {{attributeType 3, attributeValue {numeric 3}}{attributeType 4, attributeValue {numeric 2}}{attributeType 5, attributeValue {numeric 100}}{attributeType 6, attributeValue {numeric 1}}{attributeType 1, attributeValue {numeric 4}}{attributeType 2, attributeValue {numeric 3}}}, term {general \"K\\703\\666ln\"}}}}}", q); } + + @Test + void testTitlePhrase() { + String cql = "bib.titlePhrase = \"Die Berufsfreiheit\""; + CQLParser parser = new CQLParser(cql); + parser.parse(); + CQLRPNGenerator generator = new CQLRPNGenerator(StandardCharsets.UTF_8); + parser.getCQLQuery().accept(generator); + String q = generator.getQueryResult().toString(); + assertEquals("{attributeSetId 1.2.840.10003.3.1, rpn {op {attrTerm {attributes {{attributeType 3, attributeValue {numeric 3}}{attributeType 5, attributeValue {numeric 100}}{attributeType 4, attributeValue {numeric 1}}{attributeType 6, attributeValue {numeric 1}}{attributeType 1, attributeValue {numeric 4}}{attributeType 2, attributeValue {numeric 3}}}, term {general \"Die Berufsfreiheit\"}}}}}", q); + } + + @Test + void testTitleComplete() { + String cql = "bib.titleComplete all \"Die Berufsfreiheit\""; + CQLParser parser = new CQLParser(cql); + parser.parse(); + CQLRPNGenerator generator = new CQLRPNGenerator(StandardCharsets.UTF_8); + parser.getCQLQuery().accept(generator); + String q = generator.getQueryResult().toString(); + assertEquals("{attributeSetId 1.2.840.10003.3.1, rpn {op {attrTerm {attributes {{attributeType 3, attributeValue {numeric 3}}{attributeType 5, attributeValue {numeric 100}}{attributeType 4, attributeValue {numeric 1}}{attributeType 6, attributeValue {numeric 3}}{attributeType 1, attributeValue {numeric 4}}{attributeType 2, attributeValue {numeric 3}}}, term {general \"Die Berufsfreiheit\"}}}}}", q); + } }