This is an automated email from the ASF dual-hosted git repository.
andy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git
The following commit(s) were added to refs/heads/main by this push:
new f20761b324 CDTs disabled in strict mode
f20761b324 is described below
commit f20761b3241a70357d38ecb57ef0c63c5080fc34
Author: Andy Seaborne <[email protected]>
AuthorDate: Tue Dec 16 11:47:25 2025 +0000
CDTs disabled in strict mode
---
.../function/ARQFunctions.java => cdt/CDT.java} | 24 +++--------
.../src/main/java/org/apache/jena/query/ARQ.java | 5 +++
.../main/java/org/apache/jena/riot/RDFParser.java | 19 ++++++--
.../java/org/apache/jena/riot/system/RiotLib.java | 30 ++++++-------
.../java/org/apache/jena/sparql/ARQConstants.java | 8 +++-
.../java/org/apache/jena/sparql/SystemARQ.java | 16 +++++--
.../org/apache/jena/sparql/expr/NodeValue.java | 5 ++-
.../apache/jena/sparql/function/ARQFunctions.java | 17 +++-----
.../jena/sparql/function/FunctionRegistry.java | 10 ++++-
.../function/library/cdt/CDTLiteralFunctions.java | 34 +++++++--------
.../org/apache/jena/sparql/util/MappedLoader.java | 5 ++-
.../jena/sparql/expr/TestTripleTermFunctions.java | 50 +++-------------------
12 files changed, 105 insertions(+), 118 deletions(-)
diff --git
a/jena-arq/src/main/java/org/apache/jena/sparql/function/ARQFunctions.java
b/jena-arq/src/main/java/org/apache/jena/cdt/CDT.java
similarity index 53%
copy from
jena-arq/src/main/java/org/apache/jena/sparql/function/ARQFunctions.java
copy to jena-arq/src/main/java/org/apache/jena/cdt/CDT.java
index 9c76c03723..fd8de0e728 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/function/ARQFunctions.java
+++ b/jena-arq/src/main/java/org/apache/jena/cdt/CDT.java
@@ -14,26 +14,14 @@
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
*/
-package org.apache.jena.sparql.function;
-
-import org.apache.jena.sparql.ARQConstants;
-import org.apache.jena.sparql.function.library.cdt.CDTLiteralFunctions;
-import org.apache.jena.sparql.function.library.triple.TripleTermFunctions;
+package org.apache.jena.cdt;
-/** Load ARQ functions ().
- * The one in package {@link org.apache.jena.sparql.function.library}
- * can be invoked by afn:name without registration because afn:->java: is
built-in
- * in MappedLoader.
- *
- * @see ARQConstants#ARQFunctionLibraryURI
- * @see ARQConstants#ARQFunctionLibrary
- */
-public class ARQFunctions {
+public class CDT {
- public static void load(FunctionRegistry reg) {
- TripleTermFunctions.register(reg);
- CDTLiteralFunctions.register(reg);
- }
+ /** The CDT function library URI space */
+ public static final String CDTFunctionLibraryURI =
"http://w3id.org/awslabs/neptune/SPARQL-CDTs/" ;
}
diff --git a/jena-arq/src/main/java/org/apache/jena/query/ARQ.java
b/jena-arq/src/main/java/org/apache/jena/query/ARQ.java
index c9c7eea4e9..3998dfc9b3 100644
--- a/jena-arq/src/main/java/org/apache/jena/query/ARQ.java
+++ b/jena-arq/src/main/java/org/apache/jena/query/ARQ.java
@@ -588,6 +588,7 @@ public class ARQ
SystemARQ.StrictDateTimeFO = true;
SystemARQ.ValueExtensions = false;
SystemARQ.EnableRomanNumerals = false;
+ SystemARQ.EnableCDTs = false;
context.set(optimization, false);
context.set(hideNonDistiguishedVariables, true);
@@ -609,6 +610,7 @@ public class ARQ
SystemARQ.StrictDateTimeFO = false;
SystemARQ.ValueExtensions = true;
SystemARQ.EnableRomanNumerals = false;
+ SystemARQ.EnableCDTs = true;
setNormalMode(ARQ.getContext());
}
@@ -677,11 +679,14 @@ public class ARQ
}
}
+ // Settings for normal operation.
private static void setARQSettings() {
// This must be executable before initialization
SystemARQ.StrictDateTimeFO = false;
SystemARQ.ValueExtensions = true;
SystemARQ.EnableRomanNumerals = false;
+ SystemARQ.EnableCDTs = true;
+
// The system context is allocated in RIOT because RIOT initializes
before ARQ.
Context context = RIOT.getContext();
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/RDFParser.java
b/jena-arq/src/main/java/org/apache/jena/riot/RDFParser.java
index ee3c884f51..fa6b105b93 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/RDFParser.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/RDFParser.java
@@ -52,6 +52,7 @@ import
org.apache.jena.riot.process.normalize.StreamCanonicalLiterals;
import org.apache.jena.riot.system.*;
import org.apache.jena.riot.system.streammgr.StreamManager;
import org.apache.jena.riot.web.HttpNames;
+import org.apache.jena.sparql.SystemARQ;
import org.apache.jena.sparql.core.DatasetGraph;
import org.apache.jena.sparql.core.DatasetGraphFactory;
import org.apache.jena.sparql.graph.GraphFactory;
@@ -541,9 +542,19 @@ public class RDFParser {
? resolver
:
IRIxResolver.create().base(baseStr).resolve(resolve).allowRelative(allowRelative).build();
PrefixMap pmap = ( this.prefixMap != null ) ? this.prefixMap :
PrefixMapFactory.create();
- ParserProfileStd parserFactory = new CDTAwareParserProfile(factory,
errorHandler,
-
parserResolver, pmap,
- context,
checking$, strict);
- return parserFactory;
+ ParserProfile parserProfile = createParserProfile(factory,
errorHandler, parserResolver, pmap, context, checking$, strict);
+ return parserProfile;
+ }
+
+ private static ParserProfile createParserProfile(FactoryRDF factory,
ErrorHandler errorHandler,
+ IRIxResolver parserResolver,
PrefixMap prefixMap, Context context,
+ boolean checking, boolean strictMode)
{
+ if ( SystemARQ.EnableCDTs )
+ return new CDTAwareParserProfile(factory, errorHandler,
+ parserResolver, prefixMap,
+ context, checking, strictMode);
+ return new ParserProfileStd(factory, errorHandler,
+ parserResolver, prefixMap,
+ context, checking, strictMode);
}
}
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/system/RiotLib.java
b/jena-arq/src/main/java/org/apache/jena/riot/system/RiotLib.java
index 01c7eef99f..7a285fdd1e 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/system/RiotLib.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/system/RiotLib.java
@@ -45,6 +45,7 @@ import org.apache.jena.riot.*;
import org.apache.jena.riot.lang.LabelToNode;
import org.apache.jena.riot.writer.DirectiveStyle;
import org.apache.jena.riot.writer.WriterGraphRIOTBase;
+import org.apache.jena.sparql.SystemARQ;
import org.apache.jena.sparql.core.DatasetGraph;
import org.apache.jena.sparql.core.DatasetGraphFactory;
import org.apache.jena.sparql.core.Quad;
@@ -223,29 +224,24 @@ public class RiotLib {
}
/**
- * Create a {@link ParserProfile} with default settings, and a specific
error handler.
+ * Create a {@link ParserProfile} with a specific error handler,
+ * and otherwise default settings.
*/
public static ParserProfile createParserProfile(FactoryRDF factory,
ErrorHandler errorHandler, boolean checking) {
- return new CDTAwareParserProfile(factory,
- errorHandler,
-
IRIxResolver.create(IRIs.getSystemBase()).build(),
- PrefixMapFactory.create(),
- RIOT.getContext().copy(),
- checking,
- false);
+ IRIxResolver resolver =
IRIxResolver.create(IRIs.getSystemBase()).build();
+ return createParserProfile(factory, errorHandler, resolver, checking);
}
/**
- * Create a {@link ParserProfile}.
+ * Create a {@link ParserProfile} with a specific error handler,
+ * and a specific IRI resolver and otherwise default settings.
*/
- public static ParserProfile createParserProfile(FactoryRDF factory,
ErrorHandler errorHandler,
- IRIxResolver resolver,
boolean checking) {
- return new CDTAwareParserProfile(factory,
- errorHandler,
- resolver,
- PrefixMapFactory.create(),
- RIOT.getContext().copy(),
- checking, false);
+ public static ParserProfile createParserProfile(FactoryRDF factory,
ErrorHandler errorHandler, IRIxResolver resolver, boolean checking) {
+ PrefixMap prefixMap = PrefixMapFactory.create();
+ Context context = RIOT.getContext().copy();
+ if ( SystemARQ.EnableCDTs )
+ return new CDTAwareParserProfile(factory, errorHandler, resolver,
prefixMap, context, checking, false);
+ return new ParserProfileStd(factory, errorHandler, resolver,
prefixMap, context, checking, false);
}
/**
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/ARQConstants.java
b/jena-arq/src/main/java/org/apache/jena/sparql/ARQConstants.java
index f67b2ca63c..e3c0cf0a5b 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/ARQConstants.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/ARQConstants.java
@@ -18,6 +18,7 @@
package org.apache.jena.sparql;
+import org.apache.jena.cdt.CDT;
import org.apache.jena.shared.PrefixMapping ;
import org.apache.jena.shared.impl.PrefixMappingImpl ;
import org.apache.jena.sparql.core.Prologue;
@@ -86,9 +87,14 @@ public class ARQConstants
/** URI scheme that triggers the loader to load a java class */
public static final String javaClassURIScheme = "java:" ;
- /** The ARQ function library URI space */
+ /**
+ * The CDT function URI space
+ * @deprecated Use {@link CDT#CDTFunctionLibraryURI}
+ */
+ @Deprecated(forRemoval = true)
public static final String CDTFunctionLibraryURI =
"http://w3id.org/awslabs/neptune/SPARQL-CDTs/" ;
+
/** The ARQ function library URI space */
public static final String ARQFunctionLibraryURI =
"http://jena.apache.org/ARQ/function#" ;
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/SystemARQ.java
b/jena-arq/src/main/java/org/apache/jena/sparql/SystemARQ.java
index 52da5270c8..d4882f46a8 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/SystemARQ.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/SystemARQ.java
@@ -38,8 +38,9 @@ public class SystemARQ
// NodeValues work without the context so some things only have global
settings.
- /** Control whether addition datatypes, over and above strict, minimal
SPARQL compliance, are handled.
- * Examples include xsd:date and simple literal/xsd:string.
+ /**
+ * Control whether addition datatypes, over and above strict, minimal
SPARQL compliance, are handled.
+ * Examples include xsd:date and simple literal/xsd:string.
*/
public static boolean ValueExtensions = true ;
@@ -52,11 +53,18 @@ public class SystemARQ
*/
public static boolean StrictDateTimeFO = false ;
- /** Whether support for Roman numerals (datatype
http://rome.example.org/Numeral).
- * Mainly a test of datatype extension.
+ /**
+ * Whether support for Roman numerals (datatype
http://rome.example.org/Numeral).
+ * Mainly a test of datatype extension.
*/
public static boolean EnableRomanNumerals = true ;
+ /**
+ * Enable CDT support.
+ * <a href="https://awslabs.github.io/SPARQL-CDTs/spec/latest.html">SPARQL
CDTs: Representing and Querying Lists and Maps as RDF Literals</a>
+ */
+ public static boolean EnableCDTs = true ;
+
/**
* Sync a Model if it provides the underlying graph provides sync . Do
nothing
* otherwise.
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/expr/NodeValue.java
b/jena-arq/src/main/java/org/apache/jena/sparql/expr/NodeValue.java
index 42c860b968..26fc926e66 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/NodeValue.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/expr/NodeValue.java
@@ -96,10 +96,13 @@ public abstract class NodeValue extends ExprNode
// Before constants
public static DatatypeFactory xmlDatatypeFactory =
DatatypeFactoryInst.newDatatypeFactory();
+
private static int NODEVALUE_CACHE_SIZE = 10_000;
- private static Set<RDFDatatype> noCache =
Set.of(CompositeDatatypeList.datatype(), CompositeDatatypeMap.datatype());
private static Cache<Node, NodeValue> nodeValueCache =
CacheFactory.createCache(NODEVALUE_CACHE_SIZE);
+ // Datatypes not to cache
+ private static Set<RDFDatatype> noCache =
Set.of(CompositeDatatypeList.datatype(), CompositeDatatypeMap.datatype());
+
public static final NodeValue TRUE = NodeValue.makeNode("true",
XSDboolean);
public static final NodeValue FALSE = NodeValue.makeNode("false",
XSDboolean);
diff --git
a/jena-arq/src/main/java/org/apache/jena/sparql/function/ARQFunctions.java
b/jena-arq/src/main/java/org/apache/jena/sparql/function/ARQFunctions.java
index 9c76c03723..b63310c3ab 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/function/ARQFunctions.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/function/ARQFunctions.java
@@ -19,21 +19,18 @@
package org.apache.jena.sparql.function;
import org.apache.jena.sparql.ARQConstants;
-import org.apache.jena.sparql.function.library.cdt.CDTLiteralFunctions;
-import org.apache.jena.sparql.function.library.triple.TripleTermFunctions;
+import org.apache.jena.sparql.util.MappedLoader;
/** Load ARQ functions ().
- * The one in package {@link org.apache.jena.sparql.function.library}
- * can be invoked by afn:name without registration because afn:->java: is
built-in
- * in MappedLoader.
+ *
+ * Any additional functions from afn: that need special loading.
+ *
+ * They can be invoked by afn:name without registration because
+ * the {@link MappedLoader} maps the names to a "java:" loadable name.
*
* @see ARQConstants#ARQFunctionLibraryURI
* @see ARQConstants#ARQFunctionLibrary
*/
public class ARQFunctions {
-
- public static void load(FunctionRegistry reg) {
- TripleTermFunctions.register(reg);
- CDTLiteralFunctions.register(reg);
- }
+ public static void load(FunctionRegistry reg) {}
}
diff --git
a/jena-arq/src/main/java/org/apache/jena/sparql/function/FunctionRegistry.java
b/jena-arq/src/main/java/org/apache/jena/sparql/function/FunctionRegistry.java
index 65888b1865..f5087b3008 100644
---
a/jena-arq/src/main/java/org/apache/jena/sparql/function/FunctionRegistry.java
+++
b/jena-arq/src/main/java/org/apache/jena/sparql/function/FunctionRegistry.java
@@ -26,6 +26,7 @@ import java.util.Set;
import org.apache.jena.atlas.logging.Log;
import org.apache.jena.query.ARQ;
import org.apache.jena.sparql.ARQConstants;
+import org.apache.jena.sparql.function.library.cdt.CDTLiteralFunctions;
import org.apache.jena.sparql.util.Context;
import org.apache.jena.sparql.util.MappedLoader;
import org.apache.jena.sys.JenaSystem;
@@ -46,9 +47,16 @@ public class FunctionRegistry
public static void init() {
// Initialize if there is no registry already set
FunctionRegistry reg = new FunctionRegistry();
- ARQFunctions.load(reg);
+
StandardFunctions.loadStdDefs(reg);
StandardFunctions.loadOtherDefs(reg);
+
+ // "arq:" functions
+ ARQFunctions.load(reg);
+ // "cdt:" (Composite Datatypes) extension.
+ // The functions are always loaded.
+ CDTLiteralFunctions.register(reg);
+
set(ARQ.getContext(), reg);
}
diff --git
a/jena-arq/src/main/java/org/apache/jena/sparql/function/library/cdt/CDTLiteralFunctions.java
b/jena-arq/src/main/java/org/apache/jena/sparql/function/library/cdt/CDTLiteralFunctions.java
index 7072839688..12b77df653 100644
---
a/jena-arq/src/main/java/org/apache/jena/sparql/function/library/cdt/CDTLiteralFunctions.java
+++
b/jena-arq/src/main/java/org/apache/jena/sparql/function/library/cdt/CDTLiteralFunctions.java
@@ -18,26 +18,26 @@
package org.apache.jena.sparql.function.library.cdt;
-import org.apache.jena.sparql.ARQConstants;
+import org.apache.jena.cdt.CDT;
import org.apache.jena.sparql.function.FunctionRegistry;
public class CDTLiteralFunctions {
public static void register( final FunctionRegistry functionRegistry ) {
- functionRegistry.put( ARQConstants.CDTFunctionLibraryURI + "concat",
ConcatFct.class );
- functionRegistry.put( ARQConstants.CDTFunctionLibraryURI + "contains",
ContainsFct.class );
- functionRegistry.put( ARQConstants.CDTFunctionLibraryURI +
"containsKey", ContainsKeyFct.class );
- functionRegistry.put( ARQConstants.CDTFunctionLibraryURI +
"containsTerm", ContainsTermFct.class );
- functionRegistry.put( ARQConstants.CDTFunctionLibraryURI + "get",
GetFct.class );
- functionRegistry.put( ARQConstants.CDTFunctionLibraryURI + "head",
HeadFct.class );
- functionRegistry.put( ARQConstants.CDTFunctionLibraryURI + "keys",
KeysFct.class );
- functionRegistry.put( ARQConstants.CDTFunctionLibraryURI + "List",
ListFct.class );
- functionRegistry.put( ARQConstants.CDTFunctionLibraryURI + "Map",
MapFct.class );
- functionRegistry.put( ARQConstants.CDTFunctionLibraryURI + "merge",
MergeFct.class );
- functionRegistry.put( ARQConstants.CDTFunctionLibraryURI + "put",
PutFct.class );
- functionRegistry.put( ARQConstants.CDTFunctionLibraryURI + "remove",
RemoveFct.class );
- functionRegistry.put( ARQConstants.CDTFunctionLibraryURI + "reverse",
ReverseFct.class );
- functionRegistry.put( ARQConstants.CDTFunctionLibraryURI + "size",
SizeFct.class );
- functionRegistry.put( ARQConstants.CDTFunctionLibraryURI + "subseq",
SubSeqFct.class );
- functionRegistry.put( ARQConstants.CDTFunctionLibraryURI + "tail",
TailFct.class );
+ functionRegistry.put( CDT.CDTFunctionLibraryURI + "concat",
ConcatFct.class );
+ functionRegistry.put( CDT.CDTFunctionLibraryURI + "contains",
ContainsFct.class );
+ functionRegistry.put( CDT.CDTFunctionLibraryURI + "containsKey",
ContainsKeyFct.class );
+ functionRegistry.put( CDT.CDTFunctionLibraryURI + "containsTerm",
ContainsTermFct.class );
+ functionRegistry.put( CDT.CDTFunctionLibraryURI + "get",
GetFct.class );
+ functionRegistry.put( CDT.CDTFunctionLibraryURI + "head",
HeadFct.class );
+ functionRegistry.put( CDT.CDTFunctionLibraryURI + "keys",
KeysFct.class );
+ functionRegistry.put( CDT.CDTFunctionLibraryURI + "List",
ListFct.class );
+ functionRegistry.put( CDT.CDTFunctionLibraryURI + "Map",
MapFct.class );
+ functionRegistry.put( CDT.CDTFunctionLibraryURI + "merge",
MergeFct.class );
+ functionRegistry.put( CDT.CDTFunctionLibraryURI + "put",
PutFct.class );
+ functionRegistry.put( CDT.CDTFunctionLibraryURI + "remove",
RemoveFct.class );
+ functionRegistry.put( CDT.CDTFunctionLibraryURI + "reverse",
ReverseFct.class );
+ functionRegistry.put( CDT.CDTFunctionLibraryURI + "size",
SizeFct.class );
+ functionRegistry.put( CDT.CDTFunctionLibraryURI + "subseq",
SubSeqFct.class );
+ functionRegistry.put( CDT.CDTFunctionLibraryURI + "tail",
TailFct.class );
}
}
diff --git
a/jena-arq/src/main/java/org/apache/jena/sparql/util/MappedLoader.java
b/jena-arq/src/main/java/org/apache/jena/sparql/util/MappedLoader.java
index 7be7db83f7..d5db2cbb99 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/util/MappedLoader.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/util/MappedLoader.java
@@ -32,8 +32,9 @@ public class MappedLoader {
// java:com.hp.hpl.jena.sparql.pfunction.
static Map<String, String> uriMap = new HashMap<>();
+ static { setup(); }
- static {
+ private static void setup() {
// ARQ library
uriMap.put(ARQConstants.ARQFunctionLibraryURI,
ARQConstants.ARQFunctionLibrary);
uriMap.put(ARQConstants.ARQFunctionLibraryURI_Jena2,
ARQConstants.ARQFunctionLibrary);
@@ -64,7 +65,7 @@ public class MappedLoader {
String newURI = uri.replace("http://jena.hpl.hp.com/",
"http://jena.apache.org/") ;
Log.warnOnce(MappedLoader.class, "Loading function or property
function with old style 'jena.hpl.hp.com' used - preferred style is to use
'jena.apache.org': "+uri+ " => "+newURI, uri) ;
}
-
+
Map.Entry<String, String> e = find(uri);
if (e == null) {
if (uri.startsWith(ARQConstants.javaClassURIScheme))
diff --git
a/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestTripleTermFunctions.java
b/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestTripleTermFunctions.java
index 888a93a525..4d47b943b5 100644
---
a/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestTripleTermFunctions.java
+++
b/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestTripleTermFunctions.java
@@ -40,77 +40,41 @@ public class TestTripleTermFunctions {
static { JenaSystem.init(); }
- @Test public void tripleTermKW_Create1() {
+ @Test public void tripleTerm_Create1() {
Node r = eval("triple(:s1, :p1, :o1)");
assertNotNull(r);
}
@Test
- public void tripleTermKW_Create2() {
+ public void tripleTerm_Bad1() {
assertThrows(ExprEvalException.class, ()-> eval("triple(:s1, 'bc',
:o1)") );
}
@Test
- public void tripleTermKW_Access1() {
+ public void tripleTerm_Access1() {
test("subject(triple(:s1, :p1, :o1))", ":s1");
}
@Test
- public void tripleTermKW_Access2() {
+ public void tripleTerm_Access2() {
test("predicate(triple(:s1, :p1, :o1))", ":p1");
}
@Test
- public void tripleTermKW_Access3() {
+ public void tripleTerm_Access3() {
test("object(triple(:s1, :p1, :o1))", ":o1");
}
@Test
- public void tripleTermKW_Test1() {
+ public void tripleTerm_Test1() {
test("isTriple(triple(:s1, :p1, :o1))", "true");
}
@Test
- public void tripleTermKW_Test2() {
+ public void tripleTerm_Test2() {
test("isTriple(:x)", "false");
}
- @Test public void tripleTermURI_Create1() {
- Node r = eval("triple(:s1, :p1, :o1)");
- assertNotNull(r);
- }
-
- @Test
- public void tripleTermURI_Create2() {
- assertThrows(ExprEvalException.class, ()-> eval("afn:triple(:s1, 'bc',
:o1)") );
- }
-
- @Test
- public void tripleTermURI_Access1() {
- test("afn:subject(afn:triple(:s1, :p1, :o1))", ":s1");
- }
-
- @Test
- public void tripleTermURI_Access2() {
- test("afn:predicate(afn:triple(:s1, :p1, :o1))", ":p1");
- }
-
- @Test
- public void tripleTermURI_Access3() {
- test("afn:object(afn:triple(:s1, :p1, :o1))", ":o1");
- }
-
- @Test
- public void tripleTermURI_Test1() {
- test("afn:isTriple(afn:triple(:s1, :p1, :o1))", "true");
- }
-
- @Test
- public void tripleTermURI_Test2() {
- test("afn:isTriple(:x)", "false");
- }
-
-
private static Node eval(String string) {
Expr expr = ExprUtils.parse(string, pmap);
NodeValue nv = expr.eval(null, new FunctionEnvBase());