From b5e45d918e6e7b750bd406ec5ad44b2713f3b70d Mon Sep 17 00:00:00 2001 From: Ashley Caselli Date: Thu, 25 Jan 2024 18:07:22 +0100 Subject: [PATCH] test(py-rdfquery): add paths tests --- src/test/resources/py/tests-rdfquery/paths.py | 36 +++++++++ .../py/tests-rdfquery/paths.test.ttl | 81 +++++++++++++++++++ 2 files changed, 117 insertions(+) diff --git a/src/test/resources/py/tests-rdfquery/paths.py b/src/test/resources/py/tests-rdfquery/paths.py index 4d177db2..036cf3ae 100644 --- a/src/test/resources/py/tests-rdfquery/paths.py +++ b/src/test/resources/py/tests-rdfquery/paths.py @@ -1,2 +1,38 @@ +def inverse_path_single(): + return rdf_query(_data).path("sh:Shape", {"inverse": T("rdfs:subClassOf")}, "?subClass").get_count() + + +def one_or_more(): + return rdf_query(_data).path(py_tf.namedNode("http://datashapes.org/js/tests-rdfquery/paths.test#MergedClass"), + {"oneOrMore": T("rdfs:subClassOf")}, "?superClass").get_count() + + +def or_path_label_or_comment(): + return rdf_query(_data).path("sh:Shape", {"or": [T("rdfs:label"), T("rdfs:comment")]}, "?text").get_count() + + def predicate_path_single(): return rdf_query(_data).path("sh:Shape", "rdfs:label", "?label").get_node("?label") + + +def predicate_path_chain(): + return rdf_query(_data).path("sh:PropertyShape", "rdfs:subClassOf", "?Shape").path("?Shape", "rdfs:label", + "?label").get_node("?label") + + +def sequence_path_2(): + return rdf_query(_data).path("owl:Thing", [T("rdf:type"), T("rdfs:subClassOf")], "?Class").get_node("?Class") + + +def sequence_path_3(): + return rdf_query(_data).path("owl:Thing", [T("rdf:type"), T("rdfs:subClassOf"), T("rdf:type")], "?type").get_node( + "?type") + + +def zero_or_one(): + return rdf_query(_data).path("owl:Thing", {"zeroOrOne": T("rdf:type")}, "?type").get_count() + + +def zero_or_more(): + return rdf_query(_data).path(py_tf.namedNode("http://datashapes.org/js/tests-rdfquery/paths.test#MergedClass"), + {"zeroOrMore": T("rdfs:subClassOf")}, "?superClass").get_count() diff --git a/src/test/resources/py/tests-rdfquery/paths.test.ttl b/src/test/resources/py/tests-rdfquery/paths.test.ttl index 347eed02..056b0bbc 100644 --- a/src/test/resources/py/tests-rdfquery/paths.test.ttl +++ b/src/test/resources/py/tests-rdfquery/paths.test.ttl @@ -16,11 +16,65 @@ owl:imports ; owl:versionInfo "Created with TopBraid Composer" ; . +ex:MergedClass + rdf:type rdfs:Class ; + rdfs:label "Merged class" ; + rdfs:subClassOf ex:MiddleClass1 ; + rdfs:subClassOf ex:MiddleClass2 ; +. +ex:MiddleClass1 + rdf:type rdfs:Class ; + rdfs:label "Middle class1" ; + rdfs:subClassOf ex:RootClass ; + rdfs:subClassOf ex:SiblingClass ; +. +ex:MiddleClass2 + rdf:type rdfs:Class ; + rdfs:label "Middle class2" ; + rdfs:subClassOf ex:RootClass ; +. +ex:RootClass + rdf:type rdfs:Class ; + rdfs:label "Root class" ; + rdfs:subClassOf rdfs:Resource ; +. +ex:SiblingClass + rdf:type rdfs:Class ; + rdfs:label "Sibling class" ; + rdfs:subClassOf rdfs:Resource ; +. +ex:inversePathSingle + rdf:type dash:PyTestCase ; + dash:expectedResult 2 ; + rdfs:label "inverse path single" ; + sh:pyFunctionName "inverse_path_single" ; + sh:pyLibrary ; +. +ex:oneOrMore + rdf:type dash:PyTestCase ; + dash:expectedResult 5 ; + rdfs:label "one or more" ; + sh:pyFunctionName "one_or_more" ; + sh:pyLibrary ; +. +ex:orPathLabelOrComment + rdf:type dash:PyTestCase ; + dash:expectedResult 2 ; + rdfs:label "or path label or comment" ; + sh:pyFunctionName "or_path_label_or_comment" ; + sh:pyLibrary ; +. rdf:type sh:PyLibrary ; sh:pyLibrary dash:RDFQueryPyLibrary ; sh:pyLibraryURL "http://datashapes.org/py/tests-rdfquery/paths.py"^^xsd:anyURI ; . +ex:predicatePathChain + rdf:type dash:PyTestCase ; + dash:expectedResult "Shape"@en ; + sh:pyFunctionName "predicate_path_chain" ; + sh:pyLibrary ; +. ex:predicatePathSingle rdf:type dash:PyTestCase ; dash:expectedResult "Shape"@en ; @@ -28,3 +82,30 @@ ex:predicatePathSingle sh:pyFunctionName "predicate_path_single" ; sh:pyLibrary ; . +ex:sequencePath2 + rdf:type dash:PyTestCase ; + dash:expectedResult rdfs:Class ; + rdfs:label "sequence path2" ; + sh:pyFunctionName "sequence_path_2" ; + sh:pyLibrary ; +. +ex:sequencePath3 + rdf:type dash:PyTestCase ; + dash:expectedResult rdfs:Class ; + rdfs:label "sequence path3" ; + sh:pyFunctionName "sequence_path_3" ; + sh:pyLibrary ; +. +ex:zeroOrMore + rdf:type dash:PyTestCase ; + dash:expectedResult 6 ; + rdfs:label "zero or more" ; + sh:pyFunctionName "zero_or_more" ; + sh:pyLibrary ; +. +ex:zeroOrOne + rdf:type dash:PyTestCase ; + dash:expectedResult 2 ; + sh:pyFunctionName "zero_or_one" ; + sh:pyLibrary ; +.