2014-06-06 7 views
5

मैं डीबीपीडिया का उपयोग किसी दिए गए आईएटीए कोड के साथ हवाई अड्डों के बारे में जानकारी निकालने के लिए करता हूं। मैं जिस प्रश्न का उपयोग कर रहा हूं वह निम्नानुसार है। जिन परिणामों में मुझे मिल रहा है उनमें एक हवाई अड्डे के लिए दो पंक्तियां शामिल हैं; एक शहर में स्थान है, और दूसरी तरफ, देश स्थान है। मैं स्थान के प्रकार को कैसे प्राप्त कर सकता हूं (चाहे वह कोई शहर या देश हो)? इस क्वेरी मैं उपयोग कर रहा हूँ है:यह निर्धारित करना कि डीबीपीडिया संसाधन शहर या देश

PREFIX dbpprop: <http://dbpedia.org/property/> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/> 
PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#> 
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 

SELECT * WHERE { 
    ?subject rdf:type dbpedia-owl:Airport; 
      rdfs:label ?label; 
      dbpedia-owl:location ?location; 
      dbpedia-owl:iataLocationIdentifier ?iata; 
      geo:lat ?latitude; 
      geo:long ?longitude. 
    FILTER (lang(?label) = 'en' and regex(?iata, "MGQ")) 
} 

SPARQL results

उत्तर

4

सामान्य में, संसाधनों बहुत सारे प्रकार के क्योंकि चीजें विधेय rdf:type के लिए मूल्यों की बहुत सारी है हो सकता है,। इस मामले में, ऐसा लगता है कि यदि कोई मौजूद है, तो आप संबंधित शहर या देश के प्रकार को पुनः प्राप्त करना चाहते हैं। यदि आप संसाधन http://dbpedia.org/resource/Somalia देखते हैं, तो आप देख सकते हैं कि इसका प्रकार dbpedia-owl:Country है। http://dbpedia.org/resource/Mogadishu के लिए, कोई शहर का प्रकार नहीं है, लेकिन निपटान है, और यह शहरों की पहचान के लिए सबसे उपयुक्त हो सकता है।

आप चर के लिए अनुमत मानों का एक सेट निर्दिष्ट करने के लिए values का उपयोग कर सकते हैं, और यदि वे मौजूद हैं, तो कुछ मिलान प्राप्त करने के लिए optional का उपयोग करें। जैसे,

select * where { 
    ?subject rdf:type dbpedia-owl:Airport; 
      rdfs:label ?label; 
      dbpedia-owl:location ?location; 
      dbpedia-owl:iataLocationIdentifier ?iata; 
      geo:lat ?latitude; 
      geo:long ?longitude. 
    FILTER (langMatches(lang(?label),'en') && contains(?iata, "MGQ")) 

    optional { 
    values ?locationType { dbpedia-owl:Settlement dbpedia-owl:Country } 
    ?location a ?locationType 
    } 
} 

SPARQL results

भी ध्यान रखें कि मैं langMatches का उपयोग किया है भाषा टैग्स की जाँच करने के लिए; ऐसा करने का यह सही तरीका है। चूंकि नियमित अभिव्यक्ति ने स्ट्रिंग में एक सबस्ट्रिंग होने की जांच करने से कुछ और नहीं किया है, इसलिए मैंने इसे contains में बदल दिया है।

इसके लायक होने के लिए, मुझे नहीं पता कि मैंने values का उपयोग optional पैटर्न के अंदर किया है, लेकिन मुझे यह पसंद है, और मुझे उम्मीद है कि यह भविष्य में उपयोगी हो सकता है। अगर आपको लगता है कि, तो ?locationType हमेशा एक मूल्य हो जाता है करते हैं, यह है कि अभी optional हिस्सा मेल नहीं खा सकते है, क्योंकि यह values बाहर optional डाल करने के लिए एक ही प्रभाव नहीं है। यही है, यदि आप valuesoptional के बाहर लेते हैं, तो आपको चार परिणाम पंक्तियां मिलेंगी: 2 स्थान × 2 स्थान प्रकार = 4 संयोजन।

संबंधित मुद्दे