add extra handling of titlePhrase/titleComplete for CQL->RPN
This commit is contained in:
parent
2bd1d28c21
commit
736c4c4f65
4 changed files with 41 additions and 3 deletions
|
@ -1,5 +1,5 @@
|
||||||
group = org.xbib
|
group = org.xbib
|
||||||
name = z3950
|
name = z3950
|
||||||
version = 5.1.7
|
version = 5.1.8
|
||||||
|
|
||||||
org.gradle.warning.mode = ALL
|
org.gradle.warning.mode = ALL
|
||||||
|
|
|
@ -59,7 +59,7 @@ public final class CQLRPNGenerator implements Visitor {
|
||||||
|
|
||||||
private RPNQuery rpnQuery;
|
private RPNQuery rpnQuery;
|
||||||
|
|
||||||
private final boolean wordListSupported;
|
private boolean wordListSupported;
|
||||||
|
|
||||||
public CQLRPNGenerator() {
|
public CQLRPNGenerator() {
|
||||||
this(StandardCharsets.ISO_8859_1, null, true);
|
this(StandardCharsets.ISO_8859_1, null, true);
|
||||||
|
@ -243,8 +243,9 @@ public final class CQLRPNGenerator implements Visitor {
|
||||||
push(attributeElements, createAttributeElement(2, 5));
|
push(attributeElements, createAttributeElement(2, 5));
|
||||||
case NOT_EQUALS ->
|
case NOT_EQUALS ->
|
||||||
push(attributeElements, createAttributeElement(2, 6));
|
push(attributeElements, createAttributeElement(2, 6));
|
||||||
case ALL, ANY -> { // 4=6 word list
|
case ALL, ANY -> {
|
||||||
push(attributeElements, createAttributeElement(2, 3));
|
push(attributeElements, createAttributeElement(2, 3));
|
||||||
|
// 4=6 word list
|
||||||
if (wordListSupported) {
|
if (wordListSupported) {
|
||||||
replace(attributeElements, createAttributeElement(4, 6));
|
replace(attributeElements, createAttributeElement(4, 6));
|
||||||
}
|
}
|
||||||
|
@ -304,6 +305,19 @@ public final class CQLRPNGenerator implements Visitor {
|
||||||
if (attributeValue == 31) {
|
if (attributeValue == 31) {
|
||||||
replace(attributeElements, createAttributeElement(4, 5));
|
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));
|
push(attributeElements, createAttributeElement(attributeType, attributeValue));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -266,6 +266,8 @@ timePeriod=1125
|
||||||
timePeriodStructured=1127
|
timePeriodStructured=1127
|
||||||
timePeriodTextual=1126
|
timePeriodTextual=1126
|
||||||
title=4
|
title=4
|
||||||
|
titlePhrase=4
|
||||||
|
titleComplete=4
|
||||||
titleAbbreviated=43
|
titleAbbreviated=43
|
||||||
titleAddedTitlePage=37
|
titleAddedTitlePage=37
|
||||||
titleCaption=38
|
titleCaption=38
|
||||||
|
|
|
@ -92,4 +92,26 @@ class CQL2RPNTest {
|
||||||
String q = generator.getQueryResult().toString();
|
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);
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue