コード例 #1
0
    def test_list_where(self):
        definition = {
            "where": """
                ?subj vivo:relatedBy ?pos .
                ?pos a vivo:Position .
                ?pos vivo:relates ?obj .
             """,
            "list_definition": {
            }
        }
        q, _, _ = generate_sparql_list_construct(definition, "http://test/", "123")
        self.assertTrue("""CONSTRUCT
{
    ?v0 :result ?v1 .
    ?v1 :type ?v2 .
}
WHERE
{
    {
        SELECT DISTINCT ?v0 ?v1 ?v2
        WHERE
        {
            BIND ((subj-ns:123)  AS ?v0 )
            {
                ?v0 vivo:relatedBy ?pos .
                ?pos a vivo:Position .
                ?pos vivo:relates ?v1 .
                ?v1 vitro:mostSpecificType ?v2 .
            }
        }
    }
}""" in q)
コード例 #2
0
    def test_list_definition(self):
        definition = {
            "list_definition": {
                "where": "?subj a foaf:Person .",
                "fields": {
                    "name": {
                        "where": "?subj rdfs:label ?obj ."
                    }
                }
            }
        }
        q, _, _ = generate_sparql_list_construct(definition, "http://test/", "123")
        self.assertTrue("""CONSTRUCT
{
    ?v0 :result ?v1 .
    ?v1 :type ?v2 .
    ?v1 :name ?v3 .
}
WHERE
{
    {
        SELECT DISTINCT ?v0 ?v1 ?v2 ?v3
        WHERE
        {
            BIND ((subj-ns:123)  AS ?v0 )
            {
                ?v1 a foaf:Person .
                ?v1 vitro:mostSpecificType ?v2 .
                ?v1 rdfs:label ?v3 .
            }
        }
    }
}""" in q)
コード例 #3
0
ファイル: utility.py プロジェクト: gwu-libraries/vivo2notld
def execute_list(
    definition,
    subject_namespace,
    subject_identifier,
    endpoint,
    username,
    password,
    serialization_format="json",
    indent_size=4,
    offset=None,
    limit=None,
):
    q, select_q, count_q = generate_sparql_list_construct(
        definition, subject_namespace, subject_identifier, indent_size=indent_size, offset=offset, limit=limit
    )
    log.debug("Construct query: %s", q)
    log.debug("Select query: %s", select_q)
    log.debug("Count query: %s", count_q)
    g = query(endpoint, username, password, q)
    select_results = select_query(endpoint, username, password, select_q)
    result_list = []
    for result in select_results["results"]["bindings"]:
        result_list.append(transform_graph(g, result["v1"]["value"]))
    count_results = select_query(endpoint, username, password, count_q)
    result = {"list": result_list, "count": int(count_results["results"]["bindings"][0]["count"]["value"])}
    if offset:
        result["offset"] = offset
    if limit:
        result["limit"] = limit

    o = _serialize(result, serialization_format, indent_size)
    return o, result, g, q, select_q, count_q
コード例 #4
0
 def test_limit_and_offset(self):
     definition = {
         "list_definition": {
             "where": "?subj a foaf:Person .",
             "fields": {
                 "name": {
                     "where": "?subj rdfs:label ?obj ."
                 }
             }
         }
     }
     q, _, _ = generate_sparql_list_construct(definition, "http://test/", "123", limit=5, offset=10)
     self.assertTrue("""
     LIMIT 6
     OFFSET 10""" in q)
コード例 #5
0
    def test_select_and_count_queries(self):
        definition = {
            "where": """
                        ?subj vivo:relatedBy ?obj .
                     """,
            "list_definition": {
                "where": "?subj a foaf:Person .",
                "fields": {
                    "name": {
                        "where": "?subj rdfs:label ?obj .",
                        "order": 1,
                    }
                }
            }
        }
        q, select_q, count_q = generate_sparql_list_construct(definition, "http://test/", "123", limit=5, offset=10)
        print select_q
        self.assertTrue("""SELECT DISTINCT ?v1
WHERE
{
    BIND ((subj-ns:123)  AS ?v0 )
    {
        ?v0 vivo:relatedBy ?v1 .
        ?v1 a foaf:Person .
        ?v1 vitro:mostSpecificType ?v2 .
        ?v1 rdfs:label ?v3 .
    }
}
ORDER BY ASC(?v3)
LIMIT 5
OFFSET 10""" in select_q)

        self.assertTrue("""SELECT (COUNT(DISTINCT ?v1) as ?count)
WHERE
{
    BIND ((subj-ns:123)  AS ?v0 )
    {
        ?v0 vivo:relatedBy ?v1 .
        ?v1 a foaf:Person .
        ?v1 vitro:mostSpecificType ?v2 .
        ?v1 rdfs:label ?v3 .
    }
}""" in count_q)
コード例 #6
0
 def test_list_order_by(self):
     definition = {
         "list_definition": {
             "where": "?subj a foaf:Person .",
             "fields": {
                 "name": {
                     "where": "?subj rdfs:label ?obj .",
                     "order": 2,
                     "order_asc": False
                 },
                 "researchArea": {
                     "where": "?subj vivo:hasResearchArea ?obj .",
                     "order": 1
                 }
             }
         }
     }
     q, _, _ = generate_sparql_list_construct(definition, "http://test/", "123")
     self.assertTrue("ORDER BY ASC(?v3) DESC(?v4)" in q)