Search code examples
sparql

Extract all the child nodes for a parent node from turtle file using SPARQL


I have following concepts in turtle file. I would like to extract preferred label and ids for parent node (DOID_4159) and all its child from below concepts. I have written following SPARQL query to fetch the information, but it will not give all the child nodes.

qres = g.query(
    """
    SELECT *
    WHERE {
    {?s skos:prefLabel ?prefLabel .
    ?s skos:broader  <http://purl.obolibrary.org/obo/DOID_4159>  . 
    }
    UNION
    {?s skos:prefLabel "skin cancer"@en .
    ?s skos:prefLabel ?prefLabel .
    }
    }
    """)
<http://purl.obolibrary.org/obo/DOID_8923>
      a       skos:Concept ;
      skos:altLabel "malignant scalp melanoma"@en , "malignant lip melanoma"@en , "malignant melanoma of skin of upper limb"@en , "cutaneous melanoma"@en , "malignant melanoma of ear and/or external auricular canal"@en , "malignant trunk melanoma"@en , "malignant melanoma of skin of trunk except scrotum"@en , "malignant lower limb melanoma"@en , "malignant melanoma of skin of lower limb"@en , "malignant upper limb melanoma"@en , "malignant ear melanoma"@en , "malignant neck melanoma"@en ;
      skos:broader <http://purl.obolibrary.org/obo/DOID_4159> ;
      skos:definition "A skin cancer that has_material_basis_in melanocytes." ;
      skos:inScheme <https://localhost:8443/ontology/Applicanttest/APPLICANTTEST> ;

<http://purl.obolibrary.org/obo/DOID_3451>
      a       skos:Concept ;
      skos:altLabel "carcinoma of skin"@en ;
      skos:broader <http://purl.obolibrary.org/obo/DOID_4159> ;
      skos:definition "A skin cancer that is located_in tissues of the skin and develops from epithelial cells." ;
      skos:inScheme <https://localhost:8443/ontology/Applicanttest/APPLICANTTEST> ;
      skos:prefLabel "skin carcinoma"@en .
<http://purl.obolibrary.org/obo/DOID_6944>
      a       skos:Concept ;
      skos:altLabel "Seborrheic Keratosis of Vulva"@en ;
      skos:broader <http://purl.obolibrary.org/obo/DOID_6498> , <http://purl.obolibrary.org/obo/DOID_4159> ;
      skos:inScheme <https://localhost:8443/ontology/Applicanttest/APPLICANTTEST> ;
      skos:prefLabel "vulvar seborrheic keratosis"@en .
<http://purl.obolibrary.org/obo/DOID_4159>
      a       skos:Concept ;
      skos:altLabel "malignant neoplasm of skin"@en , "CA - skin cancer"@en , "melanoma and Non-melanoma skin cancer"@en ;
      skos:broader <http://purl.obolibrary.org/obo/DOID_37> ;
      skos:definition "An integumentary system cancer located_in the skin that is the uncontrolled growth of abnormal skin cells." ;
      skos:inScheme <https://localhost:8443/ontology/Applicanttest/APPLICANTTEST> ;
      skos:prefLabel "skin cancer"@en .
<http://purl.obolibrary.org/obo/DOID_11684>
      a       skos:Concept ;
      skos:broader <http://purl.obolibrary.org/obo/DOID_6498> ;
      skos:inScheme <https://localhost:8443/ontology/Applicanttest/APPLICANTTEST> ;
      skos:prefLabel "melanoacanthoma"@en .
Following is the desired output:
id        label
DOID_8923 skin melanoma
DOID_3451 skin carcinoma
DOID_6944 vulvar seborrheic keratosis
DOID_4159 skin cancer
DOID_6498 seborrheic keratosis
DOID_11684 melanoacanthoma

If I would like to fetch this information for parent (DOID_4159) and all its associated nodes, how can I achieve this? I am new to SPARQL, any help is highly appreciated.


Solution

  • here we have some issues

    • The .ttl file you posted is not correct. There is an error on the definition of the 1st entity which is missing of the . at the end. So you have to update the definition from:
    <http://purl.obolibrary.org/obo/DOID_8923>
          a       skos:Concept ;
          skos:altLabel "malignant scalp melanoma"@en , "malignant lip melanoma"@en , "malignant melanoma of skin of upper limb"@en , "cutaneous melanoma"@en , "malignant melanoma of ear and/or external auricular canal"@en , "malignant trunk melanoma"@en , "malignant melanoma of skin of trunk except scrotum"@en , "malignant lower limb melanoma"@en , "malignant melanoma of skin of lower limb"@en , "malignant upper limb melanoma"@en , "malignant ear melanoma"@en , "malignant neck melanoma"@en ;
          skos:broader <http://purl.obolibrary.org/obo/DOID_4159> ;
          skos:definition "A skin cancer that has_material_basis_in melanocytes." ;
          skos:inScheme <https://localhost:8443/ontology/Applicanttest/APPLICANTTEST> ;
    

    To:

    <http://purl.obolibrary.org/obo/DOID_8923>
          a       skos:Concept ;
          skos:altLabel "malignant scalp melanoma"@en , "malignant lip melanoma"@en , "malignant melanoma of skin of upper limb"@en , "cutaneous melanoma"@en , "malignant melanoma of ear and/or external auricular canal"@en , "malignant trunk melanoma"@en , "malignant melanoma of skin of trunk except scrotum"@en , "malignant lower limb melanoma"@en , "malignant melanoma of skin of lower limb"@en , "malignant upper limb melanoma"@en , "malignant ear melanoma"@en , "malignant neck melanoma"@en ;
          skos:broader <http://purl.obolibrary.org/obo/DOID_4159> ;
          skos:definition "A skin cancer that has_material_basis_in melanocytes." ;
          skos:inScheme <https://localhost:8443/ontology/Applicanttest/APPLICANTTEST> .
    

    The . at the end, it means that the definition of your entity is complete. While the ; is used when you need to add other relationships.

    • The record DOID_8923 has no skos:prefLabel so, you are not able to retrieve the prefLabel from DOID_8923. You need to add the skos:prefLabel also to this entity

    • As already pointed out by UninformedUser you have to specify the relation between DOID_11684 and DOID_4159 also in your schema

    Here you can find your .ttl file updated and the transitive SPARQL query

    @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
    @prefix skos: <http://www.w3.org/2004/02/skos/core#> .
    
    <http://purl.obolibrary.org/obo/DOID_8923>
          a       skos:Concept ;
          skos:altLabel "malignant scalp melanoma"@en , "malignant lip melanoma"@en , "malignant melanoma of skin of upper limb"@en , "cutaneous melanoma"@en , "malignant melanoma of ear and/or external auricular canal"@en , "malignant trunk melanoma"@en , "malignant melanoma of skin of trunk except scrotum"@en , "malignant lower limb melanoma"@en , "malignant melanoma of skin of lower limb"@en , "malignant upper limb melanoma"@en , "malignant ear melanoma"@en , "malignant neck melanoma"@en ;
          skos:broader <http://purl.obolibrary.org/obo/DOID_4159> ;
          skos:definition "A skin cancer that has_material_basis_in melanocytes." ;
          skos:inScheme <https://localhost:8443/ontology/Applicanttest/APPLICANTTEST> .
    
    <http://purl.obolibrary.org/obo/DOID_3451>
          a       skos:Concept ;
          skos:altLabel "carcinoma of skin"@en ;
          skos:broader <http://purl.obolibrary.org/obo/DOID_4159> ;
          skos:definition "A skin cancer that is located_in tissues of the skin and develops from epithelial cells." ;
          skos:inScheme <https://localhost:8443/ontology/Applicanttest/APPLICANTTEST> ;
          skos:prefLabel "skin carcinoma"@en .
    <http://purl.obolibrary.org/obo/DOID_6944>
          a       skos:Concept ;
          skos:altLabel "Seborrheic Keratosis of Vulva"@en ;
          skos:broader <http://purl.obolibrary.org/obo/DOID_6498> , <http://purl.obolibrary.org/obo/DOID_4159> ;
          skos:inScheme <https://localhost:8443/ontology/Applicanttest/APPLICANTTEST> ;
          skos:prefLabel "vulvar seborrheic keratosis"@en .
    <http://purl.obolibrary.org/obo/DOID_4159>
          a       skos:Concept ;
          skos:altLabel "malignant neoplasm of skin"@en , "CA - skin cancer"@en , "melanoma and Non-melanoma skin cancer"@en ;
          skos:broader <http://purl.obolibrary.org/obo/DOID_37> ;
          skos:definition "An integumentary system cancer located_in the skin that is the uncontrolled growth of abnormal skin cells." ;
          skos:inScheme <https://localhost:8443/ontology/Applicanttest/APPLICANTTEST> ;
          skos:prefLabel "skin cancer"@en .
    <http://purl.obolibrary.org/obo/DOID_11684>
          a       skos:Concept ;
          skos:broader <http://purl.obolibrary.org/obo/DOID_6498> ;
          skos:inScheme <https://localhost:8443/ontology/Applicanttest/APPLICANTTEST> ;
          skos:prefLabel "melanoacanthoma"@en .
    

    SPARQL

    prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
    prefix skos: <http://www.w3.org/2004/02/skos/core#> 
    
    SELECT *
    
    WHERE {?s skos:broader*  <http://purl.obolibrary.org/obo/DOID_4159>;
              
              skos:prefLabel ?prefLabel 
             }
       
    
    s                                           prefLabel
    <http://purl.obolibrary.org/obo/DOID_4159>  skin cancer
    <http://purl.obolibrary.org/obo/DOID_3451>  skin carcinoma
    <http://purl.obolibrary.org/obo/DOID_6944>  vulvar seborrheic keratosis