Patent ID: 9589022
Date: 2017-03-07
CPC Classifications: G06F

Claim:
1. A method for traversing a SPARQL query and translating the SPARQL query to a semantically equivalent SQL query, the method comprising: selecting, by one or more processors, a first node of a SPARQL query; identifying, by the one or more processors, a parent node of the first node; determining, by the one or more processors, that a value of the first node is unknown; responsive to determining that the value of the first node is unknown, annotating, by the one or more processors, the first node to indicate that the first node is at least partially unknown; identifying, by the one or more processors, a common table expression of the first node; determining, by the one or more processors, that the common table expression of the first node matches, within a first predetermined threshold, a common table expression of a second node; determining, by the one or more processors, that the common table expression of the first node matches, within a second predetermined threshold, the common table expression of the second node and a common table expression of a third node concurrently; merging, by the one or more processors, information from the common table expression of the first node with information from the common table expression of the second node and information from the common table expression of the third node concurrently; merging, by the one or more processors, information from the common table expression of the second node with the common table expression of the first node; determining, by the one or more processors, that the value of the first node can be relocated to a third node; merging, by the one or more processors, the value of the first node with the third node; identifying, by the one or more processors, a common table expression of the third node; determining, by the one or more processors, that the common table expression of the third node matches, within a third predetermined threshold, a common table expression of a fourth node; merging, by the one or more processors, information from the common table expression of the third node with the common table expression of the first node; determining, by the one or more processors, the value of the first node can be relocated to the second node and the third node concurrently; responsive to merging the information from the common table expression of the second node with the common table expression of the first node, annotating, by the one or more processors, the common table expression of the first node to indicate that the information from the common table expression of the second node has been merged with the common table expression of the first node; determining, by the one or more processors, whether a triple associated with the first node is evaluated; responsive to determining, whether the triple associated with the first node is evaluated, merging, by the one or more processors, at least a portion of the triple associated with the first node with at least a portion of the second node; creating, by the one or more processors, an SQL query based on the merged common table expressions; and retrieving, by the one or more processors, data from a database using the SQL query.