简体   繁体   English

从外部SPARQL端点填充OWL本体

[英]Populating an OWL ontology from external SPARQL endpoints

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. 我想使用sparql端点链接两个不同的数据集(比如说http://dbpedia.org/sparqlhttp://pubmed.bio2rdf.org/sparql ),我将从头创建一个OWL本体,并且然后使用这两个不同的数据集填充该本体。

I am new to semantic web and linked data concepts. 我是语义Web和链接数据概念的新手。 If you guys give me some examples/ideas about were to start this thing? 如果你们给我一些例子/想法来开始这个事情?

Do you want to take two ontologies query at a time using SPARQL? 您是否要使用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. 取两个本体(.OWL文件),然后使用SPARQL(jena-fuseki服务器)对两个OWL文件的前缀进行查询。

Can you please elaborate the question? 你能详细说明这个问题吗? Do you want example of OWL files or SPARQL query at endpoint. 您是否需要在端点上使用OWL文件或SPARQL查询的示例。

SPARQL tips are not easy to find online. 在网上很难找到SPARQL技巧。 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. 代替使用发布的sparql端点,我使用了gutenberg项目端点。 First I created an ontology using Protegé. 首先,我使用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. Followinh是有关DBPedia和Gutenberg项目上的Kafka和Twain作品的元数据的示例查询。

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 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. 然后,您可以查询新创建的本体。

Using SPARQL SERVICE, you can do something like the following: 使用SPARQL SERVICE,您可以执行以下操作:

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. 对端点的查询可能是任意复杂的(SPARQL IN在这里可能有用),但是一般的技术是查询数据并使用CONSTRUCT将这些值映射到本体中的三元组,然后保存构造的三元组。 (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 在这种情况下,请在WHERE子句中指定特定属性

<pubmed-value2> <pubmed-prop1> ?prop1value .

...then transform them in the CONSTRUCT query: ...然后在CONSTRUCT查询中对其进行转换:

<pubmed-value2> <your-prop1> ?prop1value .

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM