Как запросить человека, созданного протеже, с помощью sparql

Я использую Protege-5.0.0-beta-17 для разработки онтологии и apache-jena-fuseki-2.0.0 для размещения онтологии. У него есть следующие лица. Предыстория этого сценария заключается в том, что есть политики под http://mywebsite.com/module/ontologies/local_policy. В основном политики являются типом local_policies.

<!-- http://mywebsite.com/module/ontologies/policy1 -->

    <owl:NamedIndividual rdf:about="http://mywebsite.com/module/ontologies/policy1">
        <rdf:type rdf:resource="http://mywebsite.com/module/ontologies/local_policy"/>
        <PolicyName rdf:datatype="&xsd;string">1.1.1</PolicyName>
        <PolicyResponsibility rdf:datatype="&xsd;string">CIO</PolicyResponsibility>
        <PolicyKeyword rdf:datatype="&xsd;string">Information Security</PolicyKeyword>
        <PolicyMaturityLevel rdf:datatype="&xsd;string">Interactive-Information</PolicyMaturityLevel>
        <PolicyConsulted rdf:datatype="&xsd;string">CERT</PolicyConsulted>
        <PolicyDesc rdf:datatype="&xsd;string">The relevant sections of Information Security Policy which has been published by government should be used for classifying organizational data and information.  The particular policies have been elaborated in &quot;Information assets classification and control&quot; of the Information Security (IS) policy  (http://www.government.lk/images/secPolicy/Asset_Classification_and_Control.doc). The Assistance of Computer Emergency Readiness Team (CERT) could be obtained for this purpose.</PolicyDesc>
        <apply rdf:resource="http://mywebsite.com/module/ontologies/focusArea1"/>
    </owl:NamedIndividual>



    <!-- http://mywebsite.com/module/ontologies/policy2 -->

    <owl:NamedIndividual rdf:about="http://mywebsite.com/module/ontologies/policy2">
        <rdf:type rdf:resource="http://mywebsite.com/module/ontologies/local_policy"/>
        <PolicyName rdf:datatype="&xsd;string">2</PolicyName>
        <PolicyResponsibility rdf:datatype="&xsd;string">CIO</PolicyResponsibility>
        <PolicyKeyword rdf:datatype="&xsd;string">Information Security</PolicyKeyword>
        <PolicyMaturityLevel rdf:datatype="&xsd;string">Interactive-Information</PolicyMaturityLevel>
        <PolicyConsulted rdf:datatype="&xsd;string">CERT</PolicyConsulted>
        <PolicyDesc rdf:datatype="&xsd;string">The policies defined under the “Privacy and Citizen Information Protection” of the IS policy which have been  published by government should be implemented. The guidelines provided in the above section of IS policy could be accessed through  (http://www.government.lk/images/secPolicy/Privacy__Citizen_Information_Protection.doc). The assistance of CERT could be obtained for achieving this purpose.</PolicyDesc>
        <apply rdf:resource="http://mywebsite.com/module/ontologies/focusArea2"/>
    </owl:NamedIndividual>



    <!-- http://mywebsite.com/module/ontologies/policy3 -->

    <owl:NamedIndividual rdf:about="http://mywebsite.com/module/ontologies/policy3">
        <rdf:type rdf:resource="http://mywebsite.com/module/ontologies/local_policy"/>
        <PolicyName rdf:datatype="&xsd;string">3</PolicyName>
        <PolicyDesc rdf:datatype="&xsd;string">A matrix  could be defined for identifying all possible audience  and possible delivery channels of  organizational data/information. The template given in Annex 001 could be used for this purpose. (refer Annex 001 – Information/Data classification matrix)</PolicyDesc>
        <PolicyResponsibility rdf:datatype="&xsd;string">CIO</PolicyResponsibility>
        <PolicyConsulted rdf:datatype="&xsd;string">government</PolicyConsulted>
        <PolicyMaturityLevel rdf:datatype="&xsd;string">Initial Infomration</PolicyMaturityLevel>
        <PolicyKeyword rdf:datatype="&xsd;string">Service Delivery Channels</PolicyKeyword>
        <apply rdf:resource="http://mywebsite.com/module/ontologies/focusArea3"/>
    </owl:NamedIndividual>

Что я пытаюсь сделать, так это запросить онтологию и получить этих людей. Также обратите внимание, что есть и другие лица. Ниже приведен запрос, который я использую.

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
prefix owl: <http://www.w3.org/2002/07/owl#>

SELECT ?x
WHERE {
  ?x rdf:type "http://mywebsite.com/module/ontologies/local_policy"
}

Но это не приносит людей, как ожидалось.

  1. Как я могу исправить это, чтобы получить все политики типа local_policies?
  2. Также я хотел бы сузить поисковый запрос, в котором политики применяются к определенной области фокусировки, например <apply rdf:resource="http://mywebsite.com/module/ontologies/focusArea1"/>. Если да, то как я могу расширить эту политику запросов, которая также имеет focusArea?

person Techie    schedule 13.04.2015    source источник
comment
Что вы извлекаете и что вы ожидаете извлечь? Этот запрос в порядке. Единственное, что приходит на ум, это то, что политики, которые вы не извлекаете, имеют разные URI, чем http://mywebsite.com/module/ontologies/.   -  person Artemis    schedule 13.04.2015
comment
ничего не извлекаю. Запрос ничего не вернул. Я просто хочу извлечь вышеупомянутый набор owl:NamedIndividual(Policies)   -  person Techie    schedule 13.04.2015


Ответы (1)


Вам нужно изменить свой запрос на это:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
prefix owl: <http://www.w3.org/2002/07/owl#>
prefix : <http://mywebsite.com/module/ontologies/>

SELECT ?x
WHERE {
  ?x a :local_policy
}

Элемент, который вы ищете, - это не строка, а концепция.

Кроме того, чтобы добавить еще одно ограничение, вам просто нужно добавить эквивалент:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
prefix owl: <http://www.w3.org/2002/07/owl#>
prefix : <http://mywebsite.com/module/ontologies/>

SELECT ?x
WHERE {
  ?x a :local_policy.
  ?x ?y :focusArea1.
  ?x ?w :PolicyName.
}

Здесь вы в основном говорите, что я ищу ?x, который имеет тип :local_policy и имеет ограничения на свойства :focusArea1. Если это не работает с :focusArea1 и :PolicyName, попробуйте заменить их другой переменной, такой как ?s, и посмотрите, где появляется focusArea1. Появляется ли он вместо ?y или ?s. Тогда вы знаете, куда поместить свою переменную. Но я подозреваю, что вам нужно поставить его как последний элемент.

person Artemis    schedule 13.04.2015
comment
+1, большое спасибо, но он извлекает только заголовок, который равен http://mywebsite.com/module/ontologies/policy1, как я могу получить другие данные, такие как PolicyDesc, PolicyConsulted, PolicyMaturityLevel и т. д. - person Techie; 13.04.2015
comment
Что означает a в запросе? Пожалуйста, объясните запрос, так как я новичок в SPARQL. - person Techie; 13.04.2015
comment
a заменяет rdf:type. Чтобы получить все, что вам нужно, добавьте больше ?x ?w ?z. Для каждого замените ?z на то, что вы ищете. - person Artemis; 13.04.2015
comment
Не знаю, туплю ли я, но откуда a? И я попробовал, как вы предложили, но это работает, и я не знаю, почему. PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> prefix owl: <http://www.w3.org/2002/07/owl#> prefix : <http://dasunhegoda.com/stdi/ontologies/> SELECT ?x, ?w WHERE { ?x a :local_policy . ?w a :PolicyName } - person Techie; 13.04.2015
comment
Также я пробовал это, но тот же результат PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> prefix owl: <http://www.w3.org/2002/07/owl#> prefix : <http://dasunhegoda.com/stdi/ontologies/> SELECT ?x ?PolicyName WHERE { ?x a :local_policy . } - person Techie; 13.04.2015
comment
В основном rdf:typeи a эквивалентны. Ничто другое не может быть заменено a. Ваш ?policyName - это не тип, а ограничение. Я отредактирую свой ответ. - person Artemis; 13.04.2015
comment
Хорошо, спасибо, но почему это не работает, когда я добавляю PolicyName, как вы предложили? Где я ошибаюсь? - person Techie; 13.04.2015
comment
local_policy — это суперкласс, а PolicyName — это ограничение. - person Artemis; 13.04.2015
comment
Спасибо за обновление ответа, но у меня остался только один вопрос. Я хочу получить все данные под policy1 . Я имею в виду весь набор данных, такой как ` ‹owl:NamedIndividual rdf:about=mywebsite.com/module/ontologies/ policy1› ‹rdf:type rdf:resource=mywebsite.com/module/ontologies/local_policy› ‹PolicyName rdf:datatype=string›1.1.1‹/PolicyName› ‹PolicyResponsibility rdf:datatype=string›CIO‹/PolicyResponsibility› ‹PolicyKeyword rdf:datatype=string›Информационная безопасность‹/PolicyKeyword› `и т. д. Все узлы - person Techie; 13.04.2015
comment
Пожалуйста, смотрите комментарии выше для того, что я пробовал. Я надеюсь, что это даст вам представление о том, что я хочу сделать - person Techie; 13.04.2015
comment
Попробуйте заменить часть where на WHERE { ?subject a :local_policy. ?subject ?a ?b}. Это должно дать вам всю информацию о каждом ?subject, и если вы хотите узнать только о конкретном ?subject, попробуйте: WHERE {?subject a :local_policy. ?subject ?a ?b. filter (?subject= :policy1} - person Artemis; 13.04.2015