SPARQL Query возвращает 0 - PullRequest
       16

SPARQL Query возвращает 0

1 голос
/ 06 сентября 2011

У меня есть эти люди в моей онтологии:

 <!-- http://127.0.0.1/Public_Contracting.owl#CPV1 -->

<owl:NamedIndividual rdf:about="&Public_Contracting;CPV1">
    <rdf:type rdf:resource="&Public_Contracting;CPV"/>
    <isCPVOf rdf:resource="&Public_Contracting;Procedure_1"/>
</owl:NamedIndividual>


<!-- http://127.0.0.1/Public_Contracting.owl#CPV2 -->

<owl:NamedIndividual rdf:about="&Public_Contracting;CPV2">
    <rdf:type rdf:resource="&Public_Contracting;CPV"/>
    <isCPVOf rdf:resource="&Public_Contracting;Procedure_2"/>
</owl:NamedIndividual>


<!-- http://127.0.0.1/Public_Contracting.owl#Procedure_1 -->

<owl:NamedIndividual rdf:about="&Public_Contracting;Procedure_1">
    <rdf:type rdf:resource="&Public_Contracting;Procedure"/>
    <hasCPV rdf:resource="&Public_Contracting;CPV1"/>
</owl:NamedIndividual>


<!-- http://127.0.0.1/Public_Contracting.owl#Procedure_2 -->

<owl:NamedIndividual rdf:about="&Public_Contracting;Procedure_2">
    <rdf:type rdf:resource="&Public_Contracting;Procedure"/>
    <hasCPV rdf:resource="&Public_Contracting;CPV2"/>
</owl:NamedIndividual>

И я пытаюсь получить все процедуры, содержащие CPV1.

Как мне это сделать с помощью SPARQL?

Я пробовал это:

PREFIX ns: <http://127.0.0.1/Public_Contracting.owl#>
SELECT ?proc 
WHERE {
    ?proc a ns:Procedure ; 
          ns:hasCPV ?cpv.
    ?cpv ns:CPV ?cpvp 
    FILTER regex (?cpvp, "^CPV1")
}

но я не получаю результатов.

Это моя онтология:

<!DOCTYPE rdf:RDF [
<!ENTITY owl "http://www.w3.org/2002/07/owl#" >
<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#" >
<!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" >
<!ENTITY Public_Contracting "http://127.0.0.1/Public_Contracting.owl#" >
<!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" >]>


<rdf:RDF xmlns="http://127.0.0.1/Public_Contracting.owl#"
     xml:base="http://127.0.0.1/Public_Contracting.owl"
     xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
     xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
     xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
     xmlns:Public_Contracting="http://127.0.0.1/Public_Contracting.owl#"
     xmlns:owl="http://www.w3.org/2002/07/owl#">
    <owl:Ontology rdf:about="http://127.0.0.1/Public_Contracting.owl"/>


<!-- http://127.0.0.1/Public_Contracting.owl#Procedure -->

    <owl:Class rdf:about="&Public_Contracting;Procedure">
        <rdfs:subClassOf>
            <owl:Restriction>
                <owl:onProperty rdf:resource="&Public_Contracting;hasSupplier"/>
                <owl:someValuesFrom rdf:resource="&Public_Contracting;Supplier"/>
            </owl:Restriction>
        </rdfs:subClassOf>
        <rdfs:subClassOf>
            <owl:Restriction>
                <owl:onProperty rdf:resource="&Public_Contracting;hasBuyer"/>
                <owl:onClass rdf:resource="&Public_Contracting;Buyer"/>
                <owl:qualifiedCardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:qualifiedCardinality>
            </owl:Restriction>
        </rdfs:subClassOf>
        <rdfs:subClassOf>
            <owl:Restriction>
                <owl:onProperty rdf:resource="&Public_Contracting;hasProposal"/>
                <owl:someValuesFrom rdf:resource="&Public_Contracting;Proposal"/>
            </owl:Restriction>
        </rdfs:subClassOf>
        <rdfs:subClassOf>
            <owl:Restriction>
                <owl:onProperty rdf:resource="&Public_Contracting;hasProcedureTeam"/>
                <owl:onClass rdf:resource="&Public_Contracting;Procedure_Team"/>
                <owl:qualifiedCardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:qualifiedCardinality>
            </owl:Restriction>
        </rdfs:subClassOf>
        <rdfs:subClassOf>
            <owl:Restriction>
                <owl:onProperty rdf:resource="&Public_Contracting;hasStatus"/>
                <owl:onClass rdf:resource="&Public_Contracting;Procedure_Status"/>
                <owl:qualifiedCardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:qualifiedCardinality>
            </owl:Restriction>
        </rdfs:subClassOf>
        <rdfs:subClassOf>
            <owl:Restriction>
                <owl:onProperty rdf:resource="&Public_Contracting;hasAdjudicationCriterion"/>
                <owl:someValuesFrom rdf:resource="&Public_Contracting;Adjudication_Criterion"/>
            </owl:Restriction>
        </rdfs:subClassOf>
        <rdfs:subClassOf>
            <owl:Restriction>
                <owl:onProperty rdf:resource="&Public_Contracting;hasCPV"/>
                <owl:someValuesFrom rdf:resource="&Public_Contracting;CPV"/>
            </owl:Restriction>
        </rdfs:subClassOf>
        <owl:disjointWith rdf:resource="&Public_Contracting;Procedure_Team"/>
        <owl:disjointWith rdf:resource="&Public_Contracting;Proposal"/>
    </owl:Class>

 <!-- http://127.0.0.1/Public_Contracting.owl#CPV -->

    <owl:Class rdf:about="&Public_Contracting;CPV">
        <owl:disjointWith rdf:resource="&Public_Contracting;Candidature"/>
        <owl:disjointWith rdf:resource="&Public_Contracting;Clarifications"/>
        <owl:disjointWith rdf:resource="&Public_Contracting;Entity"/>
        <owl:disjointWith rdf:resource="&Public_Contracting;Person"/>
        <owl:disjointWith rdf:resource="&Public_Contracting;Procedure"/>
        <owl:disjointWith rdf:resource="&Public_Contracting;Procedure_Team"/>
        <owl:disjointWith rdf:resource="&Public_Contracting;Proposal"/>
    </owl:Class>

Ответы [ 2 ]

2 голосов
/ 06 сентября 2011

FILTER regex (?cpvp, "^CPV1") имеет значение true, ?cpvp начинается с CPV1, но, если я не ошибаюсь, значения ?cpvp будут начинаться со строки пространства имен &Public_Contracting;. Попробуйте выполнить свой запрос без фильтра и посмотрите, как выглядят значения для ?cpvp. Может быть, вы хотите проверить, заканчиваются ли эти значения CPV1: в этом случае вы должны использовать FILTER regex (?cpvp, "CPV1$").


Глядя на ваши комментарии, кажется, что вы действительно хотите связать всех людей типа Procedure со свойством hasCPV с ресурсом, содержащим "CPV1". Тогда вам, вероятно, понадобится этот запрос (не проверенный):

PREFIX ns: <http://127.0.0.1/Public_Contracting.owl#>
SELECT ?proc 
WHERE {
    ?proc a ns:Procedure ; 
          ns:hasCPV ?cpv.
    FILTER regex (STR(?cpv), "CPV1$")
}
0 голосов
/ 12 января 2013

Кажется, вы хотите сопоставить определенный ресурс, идентифицируемый URI http://127.0.0.1/Public_Contracting.owl#CPV1.Тогда ответ (или, скорее, запрос) будет проще:

PREFIX ns: <http://127.0.0.1/Public_Contracting.owl#>
SELECT ?proc 
WHERE {
  ?proc a ns:Procedure ; 
        ns:hasCPV ns:CPV1.
}

Это выбирает каждую процедуру, которая hasCPV <http://127.0.0.1/Public_Contracting.owl#CPV1>.

...