Reputation: 1542
I would like to link two distinct data-sets using sparql endpoints (let say http://dbpedia.org/sparql and http://pubmed.bio2rdf.org/sparql ) I am going to create an OWL ontology from scratch, and then populate this ontology with these two different datasets.
I am new to semantic web and linked data concepts. If you guys give me some examples/ideas about were to start this thing?
Upvotes: 2
Views: 1644
Reputation: 4001
Using SPARQL SERVICE, you can do something like the following:
CONSTRUCT {
<dbpedia-value1> a <your-class1> .
<dbpedia-value1> ?p1 ?o1 .
<pubmed-value2> a <your-class2> . #or perhaps also <your-class1>
<pubmed-value2> ?p2 ?o2 .
}
WHERE {
SERVICE <http://dbpedia.org/sparql> {
<dbpedia-value1> a <dbp-class1> .
<dbpedia-value1> ?p1 ?o1 .
}
SERVICE <http://pubmed.bio2rdf.org/sparql> {
<pubmed-value2> a <pubmed-class1> .
<pubmed-value2> ?p2 ?o2 .
}
}
This would get a set of instances from a class in each of the endpoints and map them to your ontology. The queries to the endpoints can be arbitrarily complex (SPARQL IN could be useful here), but the general technique is to query that data and use a CONSTRUCT to map those values to triples in your ontology, then save the constructed triples. (Or directly INSERT the data to a graph.)
You could also use this pattern to map properties between the sources and your ontology. In that case, specify the specific property in the WHERE clause
<pubmed-value2> <pubmed-prop1> ?prop1value .
...then transform them in the CONSTRUCT query:
<pubmed-value2> <your-prop1> ?prop1value .
Upvotes: 1
Reputation: 1542
SPARQL tips are not easy to find online. Using example below you can populate your ontology. This feels a little lonely that I'm answering my own question.
Instead using pubmed sparql endpoint, I used project gutenberg endpoint. First I created an ontology using Protegé. This is quite simple and straight forward. Followinh is a sample query for Kafka's and Twain's works' metadata on DBPedia and Project Gutenberg.
PREFIX gb: <yourOntologyGoesHere.owl#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
PREFIX dbpprop: <http://dbpedia.org/property/>
PREFIX dc:<http://purl.org/dc/elements/1.1/>
PREFIX foaf:<http://xmlns.com/foaf/0.1/>
PREFIX dcterms: <http://purl.org/dc/terms/>
CONSTRUCT {
?book rdf:type gb:Book .
?book gb:titled_as ?name.
gb:Title rdf:type ?name.
?book gb:written_by ?author.
?author rdf:type gb:Author.
?book gb:author_name ?authorName.
gb:Author rdf:type ?authorName.
gb:AuthorName rdf:type ?authorName.
?book gb:released ?firstPublished.
?firstPublished rdf:type gb:PublishDate.
?book gb:writtenInCountry ?country .
?country rdf:type gb:Country.
?book gb:writtenIn ?lang .
?lang rdf:type gb:Language.
?book gb:summary ?abstract.
gb:Absratct rdf:type ?abstract.
?book gb:identified_with ?isbn .
gb:ISBN rdf:type ?isbn.
?book gb:publish_tpe ?mediaType .
?mediaType rdf:type gb:Media .
?book gb:has_pagenumber ?pages.
gb:Pages rdf:type ?pages.
?book gb:genre ?genre
}WHERE{?book rdf:type dbpedia-owl:Book .
?book foaf:name ?name.
OPTIONAL {?book dbpedia-owl:author ?author}
OPTIONAL {?author dbpprop:name ?authorName}
OPTIONAL {?book dbpedia-owl:releaseDate ?firstPublished}
OPTIONAL {?book dbpedia-owl:country ?country}
OPTIONAL {?book dbpedia-owl:language ?lang}
OPTIONAL {?book dbpedia-owl:abstract ?abstract}
OPTIONAL {?book dbpedia-owl:isbn ?isbn}
OPTIONAL {?book dbpedia-owl:numberOfPages ?pages}
OPTIONAL {?book dbpedia-owl:mediaType ?mediaType}
OPTIONAL {?book dbpprop:genre ?genre}
FILTER ( regex(str(?author), "Franz_Kafka") || regex(str(?author), "Mark_Twain") )
FILTER (LANG(?abstract)="en")
}
DBPedia
PREFIX gb: <yourOntologyGoesHere.owl#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX movie: <http://data.linkedmdb.org/resource/movie/>
PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>
PREFIX dc: <http://purl.org/dc/terms/>
prefix owl: <http://www.w3.org/2002/07/owl#>
PREFIX dc:<http://purl.org/dc/elements/1.1/>
PREFIX foaf:<http://xmlns.com/foaf/0.1/>
PREFIX dcterms: <http://purl.org/dc/terms/>
CONSTRUCT {
?book rdf:type gb:Book .
?book gb:title ?bookTitle .
?book gb:written_by ?author.
?author rdf:type gb:Author.
?book gb:addedToGutenberg ?addedToCatalog.
?addedToCatalog rdf:type gb:AddedToGutenberg.
?book1 rdf:type gb:Book .
?book1 gb:title ?bookTitle1 .
?book1 gb:written_by ?author1.
?author1 rdf:type gb:Author.
?author owl:sameAs <http://dbpedia.org/resource/Franz_Kafka> .
?author1 owl:sameAs <http://dbpedia.org/resource/Mark_Twain> .
<http://wifo5-04.informatik.uni-mannheim.de/gutendata/resource/etext3176> owl:sameAs <http://dbpedia.org/resource/The_Innocents_Abroad>.
<http://wifo5-04.informatik.uni-mannheim.de/gutendata/resource/etext3177> owl:sameAs <http://dbpedia.org/resource/Roughing_It>.
<http://wifo5-04.informatik.uni-mannheim.de/gutendata/resource/etext245> owl:sameAs <http://dbpedia.org/resource/Life_on_the_Mississippi>.
<http://wifo5-04.informatik.uni-mannheim.de/gutendata/resource/etext9009> owl:sameAs <http://dbpedia.org/resource/Life_on_the_Mississippi>.
<http://wifo5-04.informatik.uni-mannheim.de/gutendata/resource/etext1086> owl:sameAs <http://dbpedia.org/resource/A_Horse's_Tale>.
<http://wifo5-04.informatik.uni-mannheim.de/gutendata/resource/etext119> owl:sameAs <http://dbpedia.org/resource/A_Tramp_Abroad>.
<http://wifo5-04.informatik.uni-mannheim.de/gutendata/resource/etext3174> owl:sameAs <http://dbpedia.org/resource/A_Dog's_Tale>.
<http://wifo5-04.informatik.uni-mannheim.de/gutendata/resource/etext3186> owl:sameAs <http://dbpedia.org/resource/The_Mysterious_Stranger>.
<http://wifo5-04.informatik.uni-mannheim.de/gutendata/resource/etext3190> owl:sameAs <http://dbpedia.org/resource/1610_(Mark_Twain)>.
<http://wifo5-04.informatik.uni-mannheim.de/gutendata/resource/etext3251> owl:sameAs <http://dbpedia.org/resource/The_Man_That_Corrupted_Hadleyburg>.
<http://wifo5-04.informatik.uni-mannheim.de/gutendata/resource/etext91> owl:sameAs <http://dbpedia.org/resource/Tom_Sawyer_Abroad>.
<http://wifo5-04.informatik.uni-mannheim.de/gutendata/resource/etext93> owl:sameAs <http://dbpedia.org/resource/Tom_Sawyer,_Detective>.
<http://dbpedia.org/resource/The_Metamorphosis> owl:sameAs <http://wifo5-04.informatik.uni-mannheim.de/gutendata/resource/etext5200> .
<http://wifo5-04.informatik.uni-mannheim.de/gutendata/resource/etext7849> owl:sameAs <http://dbpedia.org/resource/The_Trial>.
?book1 gb:addedToGutenberg ?addedToCatalog1.
?addedToCatalog1 rdf:type gb:AddedToGutenberg
}
WHERE {
?author foaf:name "Kafka, Franz, 1883-1924".
?author1 foaf:name "Twain, Mark, 1835-1910".
?book dc:creator ?author;
dc:title ?bookTitle;
dc:language ?bookLanguage;
dcterms:created ?addedToCatalog.
?book1 dc:creator ?author1;
dc:title ?bookTitle1;
dc:language ?bookLanguage1;
dcterms:created ?addedToCatalog1}
These two queries are going to populate ontology you are created. Then you can query your newly created ontology.
Upvotes: 0
Reputation: 1
Do you want to take two ontologies query at a time using SPARQL? If then it is easy way to do. Take two Ontologies (.OWL files) and query it using SPARQL(jena-fuseki server) taking the PREFIX of both OWL files.
Can you please elaborate the question? Do you want example of OWL files or SPARQL query at endpoint.
Upvotes: 0