Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HELP: Creating New Ontology Classes with Constructors #12

Closed
callahantiff opened this issue Sep 1, 2019 · 13 comments
Closed

HELP: Creating New Ontology Classes with Constructors #12

callahantiff opened this issue Sep 1, 2019 · 13 comments

Comments

@callahantiff
Copy link
Owner

callahantiff commented Sep 1, 2019

@bill-baumgartner

I was hoping I could ask for your advice on how to go about adding new terms, which reflect my many hp concepts:1 clinical concept mappings, to an existing ontology. I understand that I will create a new class, give it an identifier (making sure that identifier does not already exist in HP), a label, and then create the connection between it and existing terms using an equivalent class. This equivalent class would be constructed using the and (owl:intersectionOf), or (owl:unionOf), and not (owl:complementOf) operators.

OK, so with that in mind, I’m not entirely clear if I fully understand how to do this. Still permits me to close my knowledge graph. Below I include 3 examples I found in HP/CL along with my attempt at applying this logic to my examples. Note I reuse the anonymous nodes from the examples for ease.

Would you mind taking a look and letting me know if this is correct?




EXAMPLE 1: owl:intersectionOf
Class: http://purl.obolibrary.org/obo/HP_0040261

class `has part`
  some (`increased size`
    and ('inheres in’ some 'pharyngeal tonsil’)
    and ('has modifier’ some `abnormal`))
# class has_part
http://purl.obolibrary.org/obo/HP_0040261, http://www.w3.org/2002/07/owl#equivalentClass, Nf8a96b7801764cb7859eb8289ee641e4
Nf8a96b7801764cb7859eb8289ee641e4, http://www.w3.org/1999/02/22-rdf-syntax-ns#type, http://www.w3.org/2002/07/owl#Restriction
Nf8a96b7801764cb7859eb8289ee641e4, http://www.w3.org/2002/07/owl#onProperty, http://purl.obolibrary.org/obo/BFO_0000051

# some
Nf8a96b7801764cb7859eb8289ee641e4, http://www.w3.org/2002/07/owl#someValuesFrom, N21ee3aecd67e44f3a64920531702a4a7
N21ee3aecd67e44f3a64920531702a4a7, http://www.w3.org/1999/02/22-rdf-syntax-ns#type, http://www.w3.org/2002/07/owl#Class

# and  
N21ee3aecd67e44f3a64920531702a4a7, http://www.w3.org/2002/07/owl#intersectionOf, Nb60bf88cd2554c9d8ee95d3bd8d7caf5
Nb60bf88cd2554c9d8ee95d3bd8d7caf5, http://www.w3.org/1999/02/22-rdf-syntax-ns#rest, Nc5e5c1d339564599a1824bbc4d35b0ec

# increased size
Nb60bf88cd2554c9d8ee95d3bd8d7caf5, http://www.w3.org/1999/02/22-rdf-syntax-ns#first, http://purl.obolibrary.org/obo/PATO_0000586
Nb60bf88cd2554c9d8ee95d3bd8d7caf5, http://www.w3.org/1999/02/22-rdf-syntax-ns#rest, Nca0ddadf8e974e9a91db380d88cd5ad7

# inheres in 
Nca0ddadf8e974e9a91db380d88cd5ad7, http://www.w3.org/1999/02/22-rdf-syntax-ns#first, Nfca2a5a88bc44e5da8ff8a38601fd834
Nca0ddadf8e974e9a91db380d88cd5ad7, http://www.w3.org/1999/02/22-rdf-syntax-ns#rest, N3a404d2e114e46da98d369033e6ee7c0
Nfca2a5a88bc44e5da8ff8a38601fd834, http://www.w3.org/2002/07/owl#onProperty, http://purl.obolibrary.org/obo/RO_0000052
Nfca2a5a88bc44e5da8ff8a38601fd834, http://www.w3.org/1999/02/22-rdf-syntax-ns#type, http://www.w3.org/2002/07/owl#Restriction

# some pharyngeal tonsil
Nfca2a5a88bc44e5da8ff8a38601fd834, http://www.w3.org/2002/07/owl#someValuesFrom, http://purl.obolibrary.org/obo/UBERON_0001732

# and
N3a404d2e114e46da98d369033e6ee7c0, http://www.w3.org/1999/02/22-rdf-syntax-ns#first, Nc5e5c1d339564599a1824bbc4d35b0ec
N3a404d2e114e46da98d369033e6ee7c0, http://www.w3.org/1999/02/22-rdf-syntax-ns#rest, http://www.w3.org/1999/02/22-rdf-syntax-ns#nil

# has modifier abnormal
Nc5e5c1d339564599a1824bbc4d35b0ec, http://www.w3.org/1999/02/22-rdf-syntax-ns#type, http://www.w3.org/2002/07/owl#Restriction
Nc5e5c1d339564599a1824bbc4d35b0ec, http://www.w3.org/2002/07/owl#onProperty,, http://purl.obolibrary.org/obo/RO_0002573
Nc5e5c1d339564599a1824bbc4d35b0ec, http://www.w3.org/2002/07/owl#someValuesFrom, http://purl.obolibrary.org/obo/PATO_0000460

My Example
The OMOP_4128371 concept (Acute rejection of renal transplant) maps to AND(Acute, Renal insufficiency, Status post organ transplantation)

Class: https://github.com/callahantiff/PheKnowLator/obo/ext/OMOP_4128371 (Or does this need to be a NEW HP term?)

class `has part`
  some ('acute'
    and (`renal insufficiency` some `status post organ transplantation`)
# class has_part
https://github.com/callahantiff/PheKnowLator/obo/ext/OMOP_4128371, http://www.w3.org/2002/07/owl#equivalentClass, Nf8a96b7801764cb7859eb8289ee641e4 . Nf8a96b7801764cb7859eb8289ee641e4, http://www.w3.org/1999/02/22-rdf-syntax-ns#type, http://www.w3.org/2002/07/owl#Restriction  
Nf8a96b7801764cb7859eb8289ee641e4, http://www.w3.org/2002/07/owl#onProperty, http://purl.obolibrary.org/obo/BFO_0000051

# some
Nf8a96b7801764cb7859eb8289ee641e4, http://www.w3.org/2002/07/owl#someValuesFrom, N21ee3aecd67e44f3a64920531702a4a7 
N21ee3aecd67e44f3a64920531702a4a7, http://www.w3.org/1999/02/22-rdf-syntax-ns#type, http://www.w3.org/2002/07/owl#Class

# and  
N21ee3aecd67e44f3a64920531702a4a7, http://www.w3.org/2002/07/owl#intersectionOf, Nb60bf88cd2554c9d8ee95d3bd8d7caf5
Nb60bf88cd2554c9d8ee95d3bd8d7caf5, http://www.w3.org/1999/02/22-rdf-syntax-ns#rest, Nc5e5c1d339564599a1824bbc4d35b0ec

# acute
Nb60bf88cd2554c9d8ee95d3bd8d7caf5, http://www.w3.org/1999/02/22-rdf-syntax-ns#first, http://purl.obolibrary.org/obo/HP_0011009
Nb60bf88cd2554c9d8ee95d3bd8d7caf5, http://www.w3.org/1999/02/22-rdf-syntax-ns#rest, Nca0ddadf8e974e9a91db380d88cd5ad7

# and
Nca0ddadf8e974e9a91db380d88cd5ad7, http://www.w3.org/1999/02/22-rdf-syntax-ns#first, Nfca2a5a88bc44e5da8ff8a38601fd834
Nca0ddadf8e974e9a91db380d88cd5ad7, http://www.w3.org/1999/02/22-rdf-syntax-ns#rest, http://www.w3.org/1999/02/22-rdf-syntax-ns#nil

# renal insufficiency
Nfca2a5a88bc44e5da8ff8a38601fd834, http://www.w3.org/1999/02/22-rdf-syntax-ns#first, http://purl.obolibrary.org/obo/HP_0000083	 
Nfca2a5a88bc44e5da8ff8a38601fd834	http://www.w3.org/1999/02/22-rdf-syntax-ns#rest	http://www.w3.org/1999/02/22-rdf-syntax-ns#nil

# and
Nc5e5c1d339564599a1824bbc4d35b0ec http://www.w3.org/1999/02/22-rdf-syntax-ns#first N3a404d2e114e46da98d369033e6ee7c0
Nc5e5c1d339564599a1824bbc4d35b0ec, http://www.w3.org/1999/02/22-rdf-syntax-ns#rest, http://www.w3.org/1999/02/22-rdf-syntax-ns#nil

# status post organ transplantation
N3a404d2e114e46da98d369033e6ee7c0, http://www.w3.org/1999/02/22-rdf-syntax-ns#first, http://purl.obolibrary.org/obo/HP_0032444
N3a404d2e114e46da98d369033e6ee7c, 0http://www.w3.org/1999/02/22-rdf-syntax-ns#rest, http://www.w3.org/1999/02/22-rdf-syntax-ns#nil



EXAMPLE 2: owl:unionOf
Class: http://purl.obolibrary.org/obo/HP_0100258

class `has part`
  some (`Preaxial hand polydactyly` 
    or `Preaxial foot polydactyly`)
# some
http://purl.obolibrary.org/obo/HP_0100258, http://www.w3.org/2002/07/owl#equivalentClass, N26938016efc64d77800b84e87e7ec4f9
N26938016efc64d77800b84e87e7ec4f9, http://www.w3.org/1999/02/22-rdf-syntax-ns#type, http://www.w3.org/2002/07/owl#Restriction
N26938016efc64d77800b84e87e7ec4f9, http://www.w3.org/2002/07/owl#onProperty, http://purl.obolibrary.org/obo/BFO_0000051
N26938016efc64d77800b84e87e7ec4f9, http://www.w3.org/2002/07/owl#someValuesFrom, N1619f38e707c466db37a30fc78b91db5

# or
N1619f38e707c466db37a30fc78b91db5, http://www.w3.org/1999/02/22-rdf-syntax-ns#type, http://www.w3.org/2002/07/owl#Class
N1619f38e707c466db37a30fc78b91db5, http://www.w3.org/2002/07/owl#unionOf, N931ca444e1c84f1ea3e1250819f9f47d

# preaxial hand polydactyly
N931ca444e1c84f1ea3e1250819f9f47d, http://www.w3.org/1999/02/22-rdf-syntax-ns#first, http://purl.obolibrary.org/obo/HP_0001177
N931ca444e1c84f1ea3e1250819f9f47d, http://www.w3.org/1999/02/22-rdf-syntax-ns#rest, Nd5c2d15afbda49e89f803d0a426523f2

# preaxial foot polydactyly
Nd5c2d15afbda49e89f803d0a426523f2, http://www.w3.org/1999/02/22-rdf-syntax-ns#first, http://purl.obolibrary.org/obo/HP_0001841
Nd5c2d15afbda49e89f803d0a426523f2, http://www.w3.org/1999/02/22-rdf-syntax-ns#rest, http://www.w3.org/1999/02/22-rdf-syntax-ns#nil

My Example
The OMOP_4048191 concept (Enlargement of tonsil or adenoid) maps to OR(Enlarged tonsils, Increased size of nasopharyngeal adenoids)

Class: https://github.com/callahantiff/PheKnowLator/obo/ext/OMOP_4048191 (Or does this need to be a NEW HP term?)

class 'has part’
  some ('Enlarged tonsils’ 
    or 'Increased size of nasopharyngeal adenoids’)
# some
https://github.com/callahantiff/PheKnowLator/obo/ext/OMOP_4048191, http://www.w3.org/2002/07/owl#equivalentClass, N26938016efc64d77800b84e87e7ec4f9
N26938016efc64d77800b84e87e7ec4f9, http://www.w3.org/1999/02/22-rdf-syntax-ns#type, http://www.w3.org/2002/07/owl#Restriction
N26938016efc64d77800b84e87e7ec4f9, http://www.w3.org/2002/07/owl#onProperty, http://purl.obolibrary.org/obo/BFO_0000051
N26938016efc64d77800b84e87e7ec4f9, http://www.w3.org/2002/07/owl#someValuesFrom, N1619f38e707c466db37a30fc78b91db5

# or
N1619f38e707c466db37a30fc78b91db5, http://www.w3.org/1999/02/22-rdf-syntax-ns#type, http://www.w3.org/2002/07/owl#Class
N1619f38e707c466db37a30fc78b91db5, http://www.w3.org/2002/07/owl#unionOf, N931ca444e1c84f1ea3e1250819f9f47d

# enlarged tonsils
N931ca444e1c84f1ea3e1250819f9f47d, http://www.w3.org/1999/02/22-rdf-syntax-ns#first, http://purl.obolibrary.org/obo/HP_0030812
N931ca444e1c84f1ea3e1250819f9f47d, http://www.w3.org/1999/02/22-rdf-syntax-ns#rest, Nd5c2d15afbda49e89f803d0a426523f2

# increased size of nasopharyngeal adenoids
Nd5c2d15afbda49e89f803d0a426523f2, http://www.w3.org/1999/02/22-rdf-syntax-ns#first, http://purl.obolibrary.org/obo/HP_0040261
Nd5c2d15afbda49e89f803d0a426523f2, http://www.w3.org/1999/02/22-rdf-syntax-ns#rest, http://www.w3.org/1999/02/22-rdf-syntax-ns#nil



EXAMPLE 3: owl:complementOf
Class: http://purl.obolibrary.org/obo/CL_0001068

class 'group 1 innate lymphoid cell’
  and(not('capable of’
    some 'leukocyte mediated cytotoxicity’))
# and group 1 innate lymphoid cell
http://purl.obolibrary.org/obo/CL_0001068, http://www.w3.org/2002/07/owl#equivalentClass, N3b65c766ed0b4fa5a5a8cca6d1371af9
N3b65c766ed0b4fa5a5a8cca6d1371af9, http://www.w3.org/1999/02/22-rdf-syntax-ns#type, http://www.w3.org/2002/07/owl#Class
N3b65c766ed0b4fa5a5a8cca6d1371af9, http://www.w3.org/2002/07/owl#intersectionOf, N00ff83ae947d44fba9c2a2ec4c4a443b
N00ff83ae947d44fba9c2a2ec4c4a443b, http://www.w3.org/1999/02/22-rdf-syntax-ns#first, http://purl.obolibrary.org/obo/CL_0001067
N00ff83ae947d44fba9c2a2ec4c4a443b, http://www.w3.org/1999/02/22-rdf-syntax-ns#rest, N5332defaa8f149d28d5ea2b137ea6315

# not
N5332defaa8f149d28d5ea2b137ea6315, http://www.w3.org/1999/02/22-rdf-syntax-ns#first, N0e9ef34e56a7491eae04492497dcf34d
N5332defaa8f149d28d5ea2b137ea6315, http://www.w3.org/1999/02/22-rdf-syntax-ns#rest, http://www.w3.org/1999/02/22-rdf-syntax-ns#nil
N0e9ef34e56a7491eae04492497dcf34d, http://www.w3.org/1999/02/22-rdf-syntax-ns#type, http://www.w3.org/2002/07/owl#Class
N0e9ef34e56a7491eae04492497dcf34d, http://www.w3.org/2002/07/owl#complementOf, N9df33997e3d14fea8be760c624beae89

# capable of some leukocyte mediated cytotoxicity
N9df33997e3d14fea8be760c624beae89, http://www.w3.org/2002/07/owl#onProperty, http://purl.obolibrary.org/obo/RO_0002215
N9df33997e3d14fea8be760c624beae89, http://www.w3.org/1999/02/22-rdf-syntax-ns#type, http://www.w3.org/2002/07/owl#Restriction
N9df33997e3d14fea8be760c624beae89, http://www.w3.org/2002/07/owl#someValuesFrom, http://purl.obolibrary.org/obo/GO_0001909

My Example
The OMOP_4021760 concept (Non-infectious pneumonia) maps to AND(pneumonia(NOT(disease by infectious agent))

Class: https://github.com/callahantiff/PheKnowLator/obo/ext/OMOP_4021760 (Or does this need to be a NEW DOID term?)

class 'pneumonia’
  and (not(
    some 'disease by infectious agent’))
# and pneumonia
https://github.com/callahantiff/PheKnowLator/obo/ext/OMOP_4021760, http://www.w3.org/2002/07/owl#equivalentClass, N3b65c766ed0b4fa5a5a8cca6d1371af9  
N3b65c766ed0b4fa5a5a8cca6d1371af9, http://www.w3.org/1999/02/22-rdf-syntax-ns#type, http://www.w3.org/2002/07/owl#Class
N3b65c766ed0b4fa5a5a8cca6d1371af9, http://www.w3.org/2002/07/owl#intersectionOf, N00ff83ae947d44fba9c2a2ec4c4a443b
N00ff83ae947d44fba9c2a2ec4c4a443b, http://www.w3.org/1999/02/22-rdf-syntax-ns#first, http://purl.obolibrary.org/obo/DOID_552
N00ff83ae947d44fba9c2a2ec4c4a443b, http://www.w3.org/1999/02/22-rdf-syntax-ns#rest, N5332defaa8f149d28d5ea2b137ea6315

# not
N5332defaa8f149d28d5ea2b137ea6315, http://www.w3.org/1999/02/22-rdf-syntax-ns#first, N0e9ef34e56a7491eae04492497dcf34d
N5332defaa8f149d28d5ea2b137ea6315, http://www.w3.org/1999/02/22-rdf-syntax-ns#rest, http://www.w3.org/1999/02/22-rdf-syntax-ns#nil
N0e9ef34e56a7491eae04492497dcf34d, http://www.w3.org/1999/02/22-rdf-syntax-ns#type, http://www.w3.org/2002/07/owl#Class
N0e9ef34e56a7491eae04492497dcf34d, http://www.w3.org/2002/07/owl#complementOf, N9df33997e3d14fea8be760c624beae89

# disease by infectious agent
N9df33997e3d14fea8be760c624beae89, http://www.w3.org/1999/02/22-rdf-syntax-ns#type, http://www.w3.org/2002/07/owl#Restriction
N9df33997e3d14fea8be760c624beae89, http://www.w3.org/2002/07/owl#someValuesFrom, http://purl.obolibrary.org/obo/DOID_0050117
@callahantiff callahantiff self-assigned this Sep 1, 2019
@bill-baumgartner
Copy link
Collaborator

One general question:
Have you been in contact with the HP folks about adding your concepts? Their instructions for suggesting new concepts imply a new GitHub issue for each new concept, but if I recall correctly you have 1000s of concepts to suggest, right? So, an individual GitHub issue for each would not be feasible. They also want labels, synonyms, definitions, and references for each concept. Do you have those? Also, it may make sense to keep your concepts separate given their statement on desired level of granularity (see their instructions).

One general comment:
You should probably get Bada's input on these as he can probably provide better answers than I can to some of your KR questions.

A couple of thoughts about your first example: OMOP_4128371

  1. The use of HP_0032444 and HP_0000083 don't match your comments. This is probably just a cut/paste error for the example but just wanted you to be aware.

  2. Be sure that the owl:onProperty filler is in fact a property. In your example, you have HP_0032444 as the object in an owl:onProperty triple.

  3. I think you have a list that branches. Node Nb60bf88cd2554c9d8ee95d3bd8d7caf5 appears in two rdf:rest triples. If you need to branch a list, then I think you need to start another list using owl:intersectionOf.

I'll think about this example some more and will try to provide an alternative representation.

@callahantiff
Copy link
Owner Author

callahantiff commented Sep 2, 2019

Thanks Bill!


One general question:
Have you been in contact with the HP folks about adding your concepts? Their instructions for suggesting new concepts imply a new GitHub issue for each new concept, but if I recall correctly you have 1000s of concepts to suggest, right? So, an individual GitHub issue for each would not be feasible. They also want labels, synonyms, definitions, and references for each concept. Do you have those? Also, it may make sense to keep your concepts separate given their statement on desired level of granularity (see their instructions).

I initially thought about this, butt after talking to Nicole and Peter am not going to pursue the route of formally suggesting new terms. The reason being that they are not interested in this level of specificity. So, the next best approach is create new edges myself. A few questions for your feedback:

  • There are two approaches (generally) I could take and I think the second approach is what we want, although I certainly could compare the two:
    1. Don't explicitly add new terms, just create mappings and aggregate terms (sort of what I have shown you).
    2. Explicitly add new edges to an extended HP (what I am asking for feedback on).

These different approaches matter when thinking about what I will do with them downstream. For example, with Med2Mech, I will create path embeddings for each node in my KG:

  • If I take approach 1, then this means I would be averaging or summing the embeddings for each HP term that maps to my OMOP term.

  • If I take approach 2, then I would have 1 embedding. To me, approach 2 has the most potential because we can reason over the KG and potentially derive new edges.

  • Do you agree?


Thinking about this more, what I really want is a way to add new terms that are aggregates or combinations of existing concepts. I'm wondering if there is a template-based approach we could apply. The different combinations I would use (with an example) would be:

  • NOT: owl:complementOf(osteomyelitis)

  • OR: owl:unionOf(lung cancer, bronchus cancer)

  • AND: owl:intersectionOf(acute, abnormality of face, cutaneous abscess)

  • AND/OR: `owl:intersecttionOf(owl:unionOf(autosomal dominant disease, autosomal recessive disease), neuropathy, hereditary ataxia)

  • AND/NOT: owl:intersectionOf(epididymitis, owl:complementOf(bacterial infectious disease))

  • AND/NOT: owl:intersectionOf(abnormality of the uterus, owl:complementOf(cervicitis))

  • AND/OR/NOT: owl:intersectionOf(periostitis, owl:unionOf(abnormality of femur morphology, abnormality of pelvic girdle bone morphology), owl:complementOf(osteomyelitis))

  • Do you think it is possible to do something like that?



One general comment:
You should probably get Bada's input on these as he can probably provide better answers than I can to some of your KR questions.
Totally agree, but with a paper due on the 13th I won't have time.

  • Perhaps there is an intermediary approach I could take?


A couple of thoughts about your first example: OMOP_4128371

  1. The use of HP_0032444 and HP_0000083 don't match your comments. This is probably just a cut/paste error for the example but just wanted you to be aware.
    Yep, just a typo. Thanks for pointing it out. I have fixed it.


  1. Be sure that the owl:onProperty filler is in fact a property. In your example, you have HP_0032444 as the object in an owl:onProperty triple.
  2. I think you have a list that branches. Node Nb60bf88cd2554c9d8ee95d3bd8d7caf5 appears in two rdf:rest triples. If you need to branch a list, then I think you need to start another list using owl:intersectionOf.
    Also a typo (sorry). I . think this is what I actually wanted:
# class has_part
https://github.com/callahantiff/PheKnowLator/obo/ext/OMOP_4128371, http://www.w3.org/2002/07/owl#equivalentClass, Nf8a96b7801764cb7859eb8289ee641e4 . Nf8a96b7801764cb7859eb8289ee641e4, http://www.w3.org/1999/02/22-rdf-syntax-ns#type, http://www.w3.org/2002/07/owl#Restriction  
Nf8a96b7801764cb7859eb8289ee641e4, http://www.w3.org/2002/07/owl#onProperty, http://purl.obolibrary.org/obo/BFO_0000051

# some
Nf8a96b7801764cb7859eb8289ee641e4, http://www.w3.org/2002/07/owl#someValuesFrom, N21ee3aecd67e44f3a64920531702a4a7 
N21ee3aecd67e44f3a64920531702a4a7, http://www.w3.org/1999/02/22-rdf-syntax-ns#type, http://www.w3.org/2002/07/owl#Class

# and  
N21ee3aecd67e44f3a64920531702a4a7, http://www.w3.org/2002/07/owl#intersectionOf, Nb60bf88cd2554c9d8ee95d3bd8d7caf5
Nb60bf88cd2554c9d8ee95d3bd8d7caf5, http://www.w3.org/1999/02/22-rdf-syntax-ns#rest, Nc5e5c1d339564599a1824bbc4d35b0ec

# acute
Nb60bf88cd2554c9d8ee95d3bd8d7caf5, http://www.w3.org/1999/02/22-rdf-syntax-ns#first, http://purl.obolibrary.org/obo/HP_0011009
Nb60bf88cd2554c9d8ee95d3bd8d7caf5, http://www.w3.org/1999/02/22-rdf-syntax-ns#rest, Nca0ddadf8e974e9a91db380d88cd5ad7

# and
Nca0ddadf8e974e9a91db380d88cd5ad7, http://www.w3.org/1999/02/22-rdf-syntax-ns#first, Nfca2a5a88bc44e5da8ff8a38601fd834
Nca0ddadf8e974e9a91db380d88cd5ad7, http://www.w3.org/1999/02/22-rdf-syntax-ns#rest, http://www.w3.org/1999/02/22-rdf-syntax-ns#nil

# renal insufficiency
Nfca2a5a88bc44e5da8ff8a38601fd834, http://www.w3.org/1999/02/22-rdf-syntax-ns#first, http://purl.obolibrary.org/obo/HP_0000083	 
Nfca2a5a88bc44e5da8ff8a38601fd834	http://www.w3.org/1999/02/22-rdf-syntax-ns#rest	http://www.w3.org/1999/02/22-rdf-syntax-ns#nil

# and
Nc5e5c1d339564599a1824bbc4d35b0ec http://www.w3.org/1999/02/22-rdf-syntax-ns#first N3a404d2e114e46da98d369033e6ee7c0
Nc5e5c1d339564599a1824bbc4d35b0ec, http://www.w3.org/1999/02/22-rdf-syntax-ns#rest, http://www.w3.org/1999/02/22-rdf-syntax-ns#nil

# status post organ transplantation
N3a404d2e114e46da98d369033e6ee7c0, http://www.w3.org/1999/02/22-rdf-syntax-ns#first, http://purl.obolibrary.org/obo/HP_0032444
N3a404d2e114e46da98d369033e6ee7c, 0http://www.w3.org/1999/02/22-rdf-syntax-ns#rest, http://www.w3.org/1999/02/22-rdf-syntax-ns#nil
  • Is that more accurate?


I'll think about this example some more and will try to provide an alternative representation.

Awesome! Thank you! 😄

@callahantiff callahantiff changed the title HELP: Creating new onttologyclasses with constructors HELP: Creating New Ontology Classes with Constructors Sep 3, 2019
@callahantiff
Copy link
Owner Author

@bill-baumgartner - any chance you are on campus tomorrow and willing to have a quick chat about this?

@callahantiff
Copy link
Owner Author

callahantiff commented Sep 5, 2019

OK, @bill-baumgartner here are some quick examples given what we talked about today that I created in Protége:

NOT()
Operator: owl:complementOf()
Details: Only occurs within the HP and only for Measurement and Drug domains
Relation: has phenotype
class_IRI: https://github.com/callahantiff/PheKnowLator/obo/ext/OMOP_4021360
Class_Name: 'Skin appearance normal'
Class Expression Syntax: not('has phenotype' some 'Abnormality of the skin')

New Triples:

PheKnowLator:OMOP_4021360, rdfs:label, 'Skin appearance normal'
PheKnowLator:OMOP_4021360, rdf:type, owl:Class
PheKnowLator:OMOP_4021360, owl:equivalentClass, ec1
ec1, rdf:type, owl:Class
ec1, owl:complementOf, ec1_restriction

ec1_restriction, rdf:type, owl:Restriction
ec1_restriction, owl:onProperty, obo:RO_0002200
ec1_restriction, owl:someValuesFrom, obo:HP_0000951


OR()
Operator: owl:unionOf()
Details: Only occurs within DOID and HP and only for the Condition domain
Relation: has part
class_IRI: https://github.com/callahantiff/PheKnowLator/obo/ext/OMOP_434473
Class_Name: 'Longitudinal deficiency of tibia AND/OR fibula'
Class Expression Syntax:
```('Abnormality of fibula morphology' or 'Abnormality of tibia morphology')`

New Triples:

PheKnowLator:OMOP_434473, rdfs:label, "Longitudinal deficiency of tibia AND/OR fibula"
PheKnowLator:OMOP_434473, rdfs:type, owl:Class
PheKnowLator:OMOP_434473, owl:equivalentClass,	ec1

ec1, rdfs:type, owl:Class
ec1, owl:unionOf _ec1_union1
ec1_union1, rdfs:first, obo:HP_0002991

ec1_union1, rdfs:rest,  ec1_union2
ec1_union2 , rdfs:first, obo:HP_0002992
ec1_union2, rdfs:rest, rdfs:nil


AND()
Operator: owl:intersectionOf()
Details: Occurs within all ontologies and domains
Relation: has part
class_IRI: https://github.com/callahantiff/PheKnowLator/obo/ext/OMOP_434165
Class_Name: 'Abnormal cervical smear'
Class Expression Syntax:

('Abnormal cell morphology' and 'Abnormality of the uterine cervix')

New Triples:

PheKnowLator:OMOP_434165, rdfs:label, "Abnormal cervical smear"
PheKnowLator:OMOP_434165, rdfs:type, owl:Class
PheKnowLator:OMOP_434165, owl:equivalentClass, ec1

ec1, rdfs:type, owl:Class
ec1, owl:intersectionOf, ec_intersection1
ec_intersection1,  rdfs:first, obo: HP_0012888
ec_intersection1, rdfs:rest,  ec_intersection2

ec_intersection1,  rdfs:first, obo:HP_0025461
ec_intersection2, rdfs:rest, rdfs:nil


AND()/OR()
Operators: owl:intersectionOf() and owl:unionOf()
Details: Only occurs within DOID and HP and only for the Condition domain
Relation: has part
class_IRI: https://github.com/callahantiff/PheKnowLator/obo/ext/OMOP_77072
Class_Name: 'Joint effusion of ankle AND/OR foot'
Class Expression Syntax:

('Joint swelling'
 and ('has part' some 'Abnormality of the ankles'))
or
('Joint swelling'
  and ('has part' some 'Abnormality of the foot'))

New Triples:

PheKnowLator:OMOP_77072,rdfs:label, "Joint effusion of ankle AND/OR foot"@en
PheKnowLator:OMOP_77072, rdfs:type, owl:Class, 
PheKnowLator:OMOP_77072, owl:equivalentClass, ec1

ec1, rdfs:type, owl:Class
ec1, owl:unionOf, ec_union1

ec_union1, rdfs:first, ec_union_member_1
ec_union_member_1, rdfs:type, owl:Class
ec_union_member_1, owl:intersectionOf, ec_intersection1

ec_intersection1, rdfs:first, obo:HP_0001386
ec_intersection1, rdfs:rest,  ec_intersection1a

ec_intersection1a, rdfs:first,  ec_intersection1a_restriction
ec_intersection1a, rdfs:rest, rdfs:nil

ec_intersection1a_restriction rdfs:type, owl:Restriction
ec_intersection1a_restriction, owl:onProperty, obo:BFO_0000051
ec_intersection1a_restriction, owl:someValuesFrom, obo:HP_0001760

ec_union1, rdfs:rest, ec_union_2
ec_union_2, rdfs:rest, rdfs:nil

ec_union_2, rdfs:first, ec_union_member_2
ec_union_member_2, rdfs:type, owl:Class
ec_union_member_2, owl:intersectionOf, ec_intersection2

ec_intersection2, rdfs:first, obo:HP_0001386
ec_intersection2, rdfs:rest, ec_intersection2a

ec_intersection2a, rdfs:first, ec_intersection2a_restriction
ec_intersection2a, rdfs:rest, rdfs:nil

ec_intersection2a_restriction, rdfs:type, owl:Restriction
ec_intersection2a_restriction, owl:onProperty, obo:BFO_0000051
ec_intersection2a_restriction, owl:someValuesFrom, obo:HP_0003028



AND()/NOT()
Operators: owl:intersectionOf() and owl:complementOf()
Details: Only occurs within DOID and HP and only for the Condition domain
Relation: has part and causes condition
class_IRI: https://github.com/callahantiff/PheKnowLator/obo/ext/OMOP_4120313
Class_Name: 'Non-diabetic disorder of endocrine pancreas'
Class Expression Syntax:

'has part' some 
  ( 'Abnormality of the pancreas'
    and 
  not('has phenotype' some 'Diabetes mellitus'))

New Triples:

PheKnowLator:OMOP_4120313, rdfs:label, "Non-diabetic disorder of endocrine pancreas"
PheKnowLator:OMOP_4120313, rdfs:type, owl:Class
PheKnowLator:OMOP_4120313, owl:equivalentClass, ec1

ec1, rdfs:type, owl:Restriction
ec1, owl:onProperty, obo:BFO_0000051
ec1, owl:someValuesFrom, ec1_intersection1

ec1_intersection1, rdfs:type, owl:Class
ec1_intersection1, owl:intersectionOf,  ec1_intersection_member1 
ec1_intersection_member1 , rdfs:first, obo:HP_0001732

ec1_intersection_member1 , rdfs:rest, ec1_intersection_member2
ec1_intersection_member2, rdfs:first,  ec1_complement
ec1_intersection_member2, rdfs:rest, rdfs:nil

ec1_complement, owl:complementOf, ec1_complement_restricion
ec1_complement_restricion, rdfs:type, owl:Restriction
ec1_complement_restricion, owl:onProperty, obo:RO_0002200
ec1_complement_restricion, owl:someValuesFrom, obo:HP_0000819


AND()/OR()/NOT()
Operators: owl:intersectionOf(), owl:unionOf() , and owl:complementOf()
Details: Only occurs within DOID and HP and only for the Condition domain
Relation: has part and has phenotype
class_IRI: https://github.com/callahantiff/PheKnowLator/obo/ext/OMOP_435352
Class_Name: 'Periostitis without osteomyelitis, of the pelvic region and/or thigh'
Class Expression Syntax:

(Periostitis 
  and('has part' some 'Abnormality of femur morphology')
    and not('has phenotype' some Osteomyelitis and('has part' some 'Abnormality of femur morphology')))
or 
(Periostitis 
  and('has part' some 'Abnormality of pelvic girdle bone morphology') 
    and not('has phenotype' some Osteomyelitis and('has part' some 'Abnormality of pelvic girdle bone morphology')))

New Triples:

PheKnowLator:OMOP_435352, rdfs:label, "Periostitis without osteomyelitis, of the pelvic region and/or thigh"
PheKnowLator:OMOP_435352, rdfs:type, owl:Class
PheKnowLator:OMOP_435352, owl:equivalentClass, Nbfbf69225f534ead842b77fa482f3c35

Nbfbf69225f534ead842b77fa482f3c35, rdfs:type, owl:Class
Nbfbf69225f534ead842b77fa482f3c35, owl:unionOf, N176753efa57b46dba7a0279a0f8c79a4

N176753efa57b46dba7a0279a0f8c79a4, rdfs:first, N50081221be6d451689c823b7b3c79109
N50081221be6d451689c823b7b3c79109, rdfs:type, owl:Class
N50081221be6d451689c823b7b3c79109, owl:intersectionOf, Nb7da00ddb21b45d2ae1f289d1b7b395d
Nb7da00ddb21b45d2ae1f289d1b7b395d, rdfs:first, obo:HP_0040165

Nb7da00ddb21b45d2ae1f289d1b7b395d, rdfs:rest, N1a032077da634b288fdd2efa4f39e741
N1a032077da634b288fdd2efa4f39e741, rdfs:first, N9af560ce3bd94247b872119e5348d5d1

N9af560ce3bd94247b872119e5348d5d1, rdfs:type, owl:Class
N9af560ce3bd94247b872119e5348d5d1 ,  owl:complementOf, N569e42935f7b4a5f9e94140861d4af4a
N569e42935f7b4a5f9e94140861d4af4a, rdfs:type, owl:Class
N569e42935f7b4a5f9e94140861d4af4a, owl:intersectionOf, N35d8ded42ed6434f8f0de95f055f1039

N35d8ded42ed6434f8f0de95f055f1039, rdfs:first, Na74e77590e2941999932aa66e5ebfc83
Na74e77590e2941999932aa66e5ebfc83, rdfs:type, owl:Restriction
Na74e77590e2941999932aa66e5ebfc83, owl:onProperty, obo:BFO_0000051
Na74e77590e2941999932aa66e5ebfc83, owl:someValuesFrom, obo:HP_0002644

N35d8ded42ed6434f8f0de95f055f1039, rdfs:rest, N951c4760c4f04cad88891f073277e1cc
N951c4760c4f04cad88891f073277e1cc, rdfs:first, Nc18daaa611ab4a2d90055ecc371aadbb
Nc18daaa611ab4a2d90055ecc371aadbb, rdfs:type, owl:Restriction
Nc18daaa611ab4a2d90055ecc371aadbb, owl:onProperty, obo:RO_0002200
Nc18daaa611ab4a2d90055ecc371aadbb, owl:someValuesFrom, obo:HP_0002754

N951c4760c4f04cad88891f073277e1cc, rdfs:rest,rdfs:nil
N951c4760c4f04cad88891f073277e1cc, rdfs:first, Nc18daaa611ab4a2d90055ecc371aadbb
Nc18daaa611ab4a2d90055ecc371aadbb, rdfs:type, owl:Restriction
Nc18daaa611ab4a2d90055ecc371aadbb, owl:onProperty, obo:RO_0002200
Nc18daaa611ab4a2d90055ecc371aadbb, owl:someValuesFrom, obo:HP_0002754

N1a032077da634b288fdd2efa4f39e741, rdfs:rest, N2f0838eeeb554204a8775b76b94c9b6f
N2f0838eeeb554204a8775b76b94c9b6f, rdfs:first, N248db595085a4be6a003fa4c62822338
N2f0838eeeb554204a8775b76b94c9b6f, rdfs:rest, rdfs:nil
N248db595085a4be6a003fa4c62822338, rdfs:type, owl:Restriction
N248db595085a4be6a003fa4c62822338, owl:onProperty, obo:BFO_0000051
N248db595085a4be6a003fa4c62822338, owl:someValuesFrom, obo:HP_0002644

N176753efa57b46dba7a0279a0f8c79a4, rdfs:rest, Na5129c9d07ab42a7b8b78b59d4054dd4
Na5129c9d07ab42a7b8b78b59d4054dd4, rdfs:first, N9b394c0f05694647828da67f09d86f51
N9b394c0f05694647828da67f09d86f51, rdfs:type, owl:Class
Na5129c9d07ab42a7b8b78b59d4054dd4, rdfs:rest, rdfs:nil

N9b394c0f05694647828da67f09d86f51, owl:intersectionOf, N11d5ec2c882d4c0984f8936e7696a4df
N11d5ec2c882d4c0984f8936e7696a4df, rdfs:first, obo:HP_0040165
N11d5ec2c882d4c0984f8936e7696a4df, rdfs:rest, Na76c2cd5d9224882b3e9823c07609216

Na76c2cd5d9224882b3e9823c07609216, rdfs:first, Nd0a89b1ccfb842f79103ec2c41ab823b
Nd0a89b1ccfb842f79103ec2c41ab823b, rdfs:type, owl:Class
Nd0a89b1ccfb842f79103ec2c41ab823b ,  owl:complementOf, Nc866d2c3d8c94080a5e3226c34a93930
Nc866d2c3d8c94080a5e3226c34a93930, owl:intersectionOf, Nba66babedc08497780e7611148c35a0e

Nba66babedc08497780e7611148c35a0e, rdfs:first, Nde99e5e229034301a6cc35a2d18900ec
Nde99e5e229034301a6cc35a2d18900ec, rdfs:type, owl:Restriction
Nde99e5e229034301a6cc35a2d18900ec, owl:onProperty, obo:BFO_0000051
Nde99e5e229034301a6cc35a2d18900ec, owl:someValuesFrom, obo:HP_0002823

Nba66babedc08497780e7611148c35a0e, rdfs:rest, Nee4b76ec521149b8a8814aa6aa1ccab9
Nee4b76ec521149b8a8814aa6aa1ccab9, rdfs:first, Nbbcc590908bd48118301a3fe4c767811
Nbbcc590908bd48118301a3fe4c767811, rdfs:type, owl:Restriction
Nbbcc590908bd48118301a3fe4c767811, owl:onProperty, obo:RO_0002200
Nbbcc590908bd48118301a3fe4c767811, owl:someValuesFrom, obo:HP_0002754
Nee4b76ec521149b8a8814aa6aa1ccab9, rdfs:rest, rdfs:nil

Na76c2cd5d9224882b3e9823c07609216, rdfs:rest, N935a9a7c6f444423a72ad7514b2e06bc
N935a9a7c6f444423a72ad7514b2e06bc, rdfs:first, N722fbd34a2ee444cb954e7542c1b6859
N722fbd34a2ee444cb954e7542c1b6859, rdfs:type, owl:Restriction
N722fbd34a2ee444cb954e7542c1b6859, owl:onProperty, obo:BFO_0000051
N722fbd34a2ee444cb954e7542c1b6859, owl:someValuesFrom, obo:HP_0002823
N935a9a7c6f444423a72ad7514b2e06bc, rdfs:rest, rdfs:nil

@bill-baumgartner
Copy link
Collaborator

Looks good overall. A couple of comments:

  • For the NOT() example:
    • there are some extra classes (diabetes, pancreas) that are not needed for the example
  • For the OR() example:
    • Because you are not modifying the abnormal tibia and abnormal fibula classes, I think you can simplify the representations by removing the restrictions and instead just represent unionOf(abnormal tibia, abnormal fibula)
  • For the AND()/OR() example:
    • I read the label as being swelling of the ankle and/or swelling of the foot but I think the representation is swelling of the ankle or abnormality of the foot. I'm wondering if you could simplify things such that and/or just becomes or. Do you think that would have downstream effects to your methodology?
    • There are some extra classes (femur, bone infection, pelvis) that are not needed for the example
  • For the AND()/OR()/NOT() example
    • Similar to the AND()/OR() example, the second class (in this case the femur) is not being properly restricted, i.e. the pelvis is restricted to not(osteomyelitis) but the femur is not.
    • Also, Periostitis is missing from the representation.
    • I think for this one it might make sense to represent all conditions individually, and then combine them with unionOf and intersectionOf and complementOf, so you would need:
      • Periostitis of the pelvic region
      • Periostitis of the femur
      • Osteomyelitis of the pelvic region
      • Osteomyelitis of the femur
    • Also, same question as above: can and/or be replaced by or?

@callahantiff
Copy link
Owner Author

OK, ignore my prior comments. I see what happened in those weird triples. I left something as an equivalence class that should have been removed. The above examples have been updated.

In general, I agree with converting all AND/OR to OR(). I have made those changes below.


Looks good overall. A couple of comments:

  • For the NOT() example:
    • there are some extra classes (diabetes, pancreas) that are not needed for the example

Sorry, those are removed now.


  • For the OR() example:
    • Because you are not modifying the abnormal tibia and abnormal fibula classes, I think you can simplify the representations by removing the restrictions and instead just represent unionOf(abnormal tibia, abnormal fibula)

Perfect, see above.


  • For the AND()/OR() example:
    • I read the label as being swelling of the ankle and/or swelling of the foot but I think the representation is swelling of the ankle or abnormality of the foot. I'm wondering if you could simplify things such that and/or just becomes or. Do you think that would have downstream effects to your methodology?
    • There are some extra classes (femur, bone infection, pelvis) that are not needed for the example

Like this?

('Joint swelling'
 and ('has part' some 'Abnormality of the ankles'))
or
('Joint swelling'
  and ('has part' some 'Abnormality of the foot'))

  • For the AND()/OR()/NOT() example
    • Similar to the AND()/OR() example, the second class (in this case the femur) is not being properly restricted, i.e. the pelvis is restricted to not(osteomyelitis) but the femur is not.
    • Also, Periostitis is missing from the representation.
    • I think for this one it might make sense to represent all conditions individually, and then combine them with unionOf and intersectionOf and complementOf, so you would need:
      • Periostitis of the pelvic region
      • Periostitis of the femur
      • Osteomyelitis of the pelvic region
      • Osteomyelitis of the femur
    • Also, same question as above: can and/or be replaced by or?
      So, they removed Periostitis from the HPO since I did the mapping, which is a bummer. I am guess that this then

OK, so something like this:

(Periostitis 
  and('has part' some 'Abnormality of femur morphology')
    and not('has phenotype' some Osteomyelitis and('has part' some 'Abnormality of femur morphology')))
or 
(Periostitis 
  and('has part' some 'Abnormality of pelvic girdle bone morphology') 
    and not('has phenotype' some Osteomyelitis and('has part' some 'Abnormality of pelvic girdle bone morphology')))

@callahantiff
Copy link
Owner Author

callahantiff commented Sep 6, 2019

OK, what about these for now? Just check the [ ] next to each if you agree.


  • NOT()
    Operator: owl:complementOf()
    Details: Only occurs within the HP and only for Measurement and Drug domains
    class_IRI: https://github.com/callahantiff/PheKnowLator/obo/ext/OMOP_4021360
    Class_Name: 'Skin appearance normal'
    Class Expression Syntax: not('Abnormality of the skin')

New Triples:

PheKnowLator:OMOP_4021360, rdfs:label, 'Skin appearance normal'
PheKnowLator:OMOP_4021360, rdf:type, owl:Class
PheKnowLator:OMOP_4021360, owl:equivalentClass, ec1
ec1, rdf:type, owl:Class
ec1, owl:complementOf, obo:HP_0000951


  • OR()
    Operator: owl:unionOf()
    Details: Only occurs within DOID and HP and only for the Condition domain
    class_IRI: https://github.com/callahantiff/PheKnowLator/obo/ext/OMOP_434473
    Class_Name: 'Longitudinal deficiency of tibia AND/OR fibula'
    Class Expression Syntax:
    ('Abnormality of fibula morphology' or 'Abnormality of tibia morphology')`

New Triples:

PheKnowLator:OMOP_434473, rdfs:label, "Longitudinal deficiency of tibia AND/OR fibula"
PheKnowLator:OMOP_434473, rdf:type, owl:Class
PheKnowLator:OMOP_434473, owl:equivalentClass, ec1

ec1, rdf:type, owl:Class
ec1, owl:unionOf _ec1_union1
ec1_union1, rdf:first, obo:HP_0002991

ec1_union1, rdf:rest,  ec1_union2
ec1_union2 , rdf:first, obo:HP_0002992
ec1_union2, rdf:rest, rdf:nil


  • AND()
    Details: Occurs within all ontologies and domains
    class_IRI: https://github.com/callahantiff/PheKnowLator/obo/ext/OMOP_434165
    Class_Name: 'Abnormal cervical smear'
    Class Expression Syntax:
('Abnormal cell morphology' and 'Abnormality of the uterine cervix')

New Triples:

PheKnowLator:OMOP_434165, rdfs:label, "Abnormal cervical smear"
PheKnowLator:OMOP_434165, rdf:type, owl:Class
PheKnowLator:OMOP_434165, owl:equivalentClass, ec1

ec1, rdf:type, owl:Class
ec1, owl:intersectionOf, ec_intersection1
ec_intersection1,  rdf:first, obo: HP_0012888
ec_intersection1, rdf:rest,  ec_intersection2

ec_intersection1,  rdf:first, obo:HP_0025461
ec_intersection2, rdf:rest, rdf:nil


  • AND()/OR()
    Details: Only occurs within DOID and HP and only for the Condition domain
    class_IRI: https://github.com/callahantiff/PheKnowLator/obo/ext/OMOP_77072
    Class_Name: 'Joint effusion of ankle AND/OR foot'
    Class Expression Syntax:
('Joint swelling' and 'Abnormality of the ankles')
or
('Joint swelling' and 'Abnormality of the foot')

Triples:

PheKnowLator:OMOP_77072,rdfs:label, "Joint effusion of ankle AND/OR foot"
PheKnowLator:OMOP_77072, rdf:type, owl:Class, 
PheKnowLator:OMOP_77072, owl:equivalentClass, ec1

ec1, rdf:type, owl:Class
ec1, owl:unionOf, ec_union1

ec_union1, rdf:first, ec_union_member_1
ec_union_member_1, rdf:type, owl:Class
ec_union_member_1, owl:intersectionOf, ec_intersection1

ec_intersection1, rdf:first, obo:HP_0001386
ec_intersection1, rdf:rest,  obo:HP_0001760

ec_union1, rdf:rest, ec_union_2
ec_union_2, rdf:rest, rdf:nil

ec_union_2, rdf:first, ec_union_member_2
ec_union_member_2, rdf:type, owl:Class
ec_union_member_2, owl:intersectionOf, ec_intersection2

ec_intersection2, rdf:first, obo:HP_0001386
ec_intersection2, rdf:rest, obo:HP_0003028


  • AND()/NOT()
    Details: Only occurs within DOID and HP and only for the Condition domain
    class_IRI: https://github.com/callahantiff/PheKnowLator/obo/ext/OMOP_4120313
    Class_Name: 'Non-diabetic disorder of endocrine pancreas'
    Class Expression Syntax:
'Abnormality of the pancreas' and not('has phenotype' some 'Diabetes mellitus')

New Triples:

PheKnowLator:OMOP_4120313, rdfs:label, "Non-diabetic disorder of endocrine pancreas"
PheKnowLator:OMOP_4120313, rdf:type, owl:Class
PheKnowLator:OMOP_4120313, owl:equivalentClass, ec1

ec1, owl:someValuesFrom, ec1_intersection1
ec1_intersection1, rdf:type, owl:Class
ec1_intersection1, owl:intersectionOf,  ec1_intersection_member1 
ec1_intersection_member1 , rdf:first, obo:HP_0001732

ec1_intersection_member1 , rdf:rest, ec1_intersection_member2
ec1_intersection_member2, rdf:first,  ec1_complement
ec1_intersection_member2, rdf:rest, rdf:nil
ec1_complement, owl:complementOf, obo:HP_0000819



  • AND()/OR()/NOT()
    Details: Only occurs within DOID and HP and only for the Condition domain
    class_IRI: https://github.com/callahantiff/PheKnowLator/obo/ext/OMOP_435352
    Class_Name: 'Periostitis without osteomyelitis, of the pelvic region and/or thigh'
    Class Expression Syntax:
((Periostitis and 'Abnormality of femur morphology')
    and not(Osteomyelitis and 'Abnormality of femur morphology'))
or 
((Periostitis and 'Abnormality of pelvic girdle bone morphology')
    and not(Osteomyelitis and 'Abnormality of pelvic girdle bone morphology'))

New Triples:

PheKnowLator:OMOP_435352, rdfs:label, "Periostitis without osteomyelitis, of the pelvic region and/or thigh"
PheKnowLator:OMOP_435352, rdf:type, owl:Class
PheKnowLator:OMOP_435352, owl:equivalentClass, ec1

ec1, owl:unionOf, ec2
ec2, rdf:first, ec3
ec3,  rdf:type, owl:Class

ec3, owl:intersectionOf, ec4
ec4, rdf:first, ec5
ec4, rdf:rest, ec8
ec5,  rdf:type, owl:Class

ec5, owl:intersectionOf, ec6
ec6, rdf:first, obo:HP_0002644 
ec6, rdf:rest, ec7

ec7, rdf:first, obo:HP_0040165
ec7, rdf:rest, rdf:nil

ec8, rdf:first, ec9
ec8, rdf:rest, rdf:nil
ec9, owl:complementOf, ec10
ec9,  rdf:type, owl:Class

ec10, owl:intersectionOf, ec11
ec10,  rdf:type, owl:Class

ec11, rdf:first, obo:HP_0002644
ec11, rdf:rest, ec12

ec12, rdf:first, obo:HP_0002754
ec2, rdf:rest, ec12
ec12, rdf:rest, rdf:nil

@bill-baumgartner
Copy link
Collaborator

NOT()

  • not(abnormal) = normal
    • I think this is fine for this task. Alternatively, there is a concept for normal in PATO that could be used instead and wouldn't need the use of complementOf but would likely require digging into the representation of the abnormal concept, and thus, might be difficult to do on an automated basis.

OR()

  • looks good. Just missing ec1_union1 rdf:type rdf:List

AND()/OR()

  • lists need to end in rdf:nil I think, and list members need to be rdf:type rdf:List
PheKnowLator:OMOP_77072,rdfs:label, "Joint effusion of ankle AND/OR foot"
PheKnowLator:OMOP_77072, rdf:type, owl:Class, 
PheKnowLator:OMOP_77072, owl:equivalentClass, ec1

ec1, rdf:type, owl:Class
ec1, owl:unionOf, ec_union1
ec_union1, rdf:type, rdf:List

ec_union1, rdf:first, ec_union_member_1
ec_union_member_1, rdf:type, owl:Class
ec_union_member_1, owl:intersectionOf, ec_intersection1
ec_intersection1, rdf:type, rdf:List

ec_intersection1, rdf:first, obo:HP_0001386
ec_intersection1, rdf:rest, ec_intersection1b
ec_intersection1b, rdf:type, rdf:List
ec_intersection1b, rdf:first,  obo:HP_0001760
ec_intersection1b, rdf:rest, rdf:nil

ec_union1, rdf:rest, ec_union_2
ec_union_2, rdf:type, rdf:List
ec_union_2, rdf:rest, rdf:nil

ec_union_2, rdf:first, ec_union_member_2
ec_union_member_2, rdf:type, owl:Class
ec_union_member_2, owl:intersectionOf, ec_intersection2
ec_intersection2, rdf:type, rdf:List

ec_intersection2, rdf:first, obo:HP_0001386
ec_intersection2, rdf:rest, ec_intersection2b
ec_intersection2b, rdf:type, rdf:List
ec_intersection2b, rdf:first, obo:HP_0003028
ec_intersection2b, rdf:rest, rdf:nil

AND()/NOT()

  • missing:
ec1_intersection_member1 rdf:type rdf:List
ec1_intersection_member2 rdf:type rdf:List

AND()/OR()/NOT()

  • here's my take on it. See what you think.
_:pelvic rdf:label "Periostitis without osteomyelitis, of the pelvic region"
_:pelvic rdf:type owl:Class
_:pelvic owl:equivalentClass _:ecp
_:ecp owl:intersectionOf _:ecp1
_:ecp1 rdf:type rdf:List
_:ecp1 rdf:first obo:HP_0002644 # abnormality of pelvic region
_:ecp1 rdf:rest _:ecp2
_:ecp2 rdf:type rdf:List
_:ecp2 rdf:first HP_0040165 # periostitis
_:ecp2 rdf:rest _:ecp3
_:ecp3 rdf:type rdf:List
_:ecp3 rdf:first _:ecp4
_:ecp4 rdf:type owl:Class
_:ecp4 owl:complementOf obo:HP_0002754 # osteomyelitis
_:ecp3 rdf:rest rdf:nil

_:thigh rdf:label "Periostitis without osteomyelitis, of the thigh"
_:thigh rdf:type owl:Class
_:thigh owl:equivalentClass _:ect
_:ect owl:intersectionOf _:ect1
_:ect1 rdf:type rdf:List
_:ect1 rdf:first obo:HP_0002823 # abnormality of femur morphology
_:ect1 rdf:rest _:ect2
_:ect2 rdf:type rdf:List
_:ect2 rdf:first HP_0040165 # periostitis
_:ect2 rdf:rest _:ect3
_:ect3 rdf:type rdf:List
_:ect3 rdf:first _:ect4
_:ect4 rdf:type owl:Class
_:ect4 owl:complementOf obo:HP_0002754 # osteomyelitis
_:ect3 rdf:rest rdf:nil

PheKnowLator:OMOP_435352, rdfs:label, "Periostitis without osteomyelitis, of the pelvic region and/or thigh"
PheKnowLator:OMOP_435352, rdf:type, owl:Class
PheKnowLator:OMOP_435352, owl:equivalentClass, ec1

ec1 rdf:type owl:Class
ec1, owl:unionOf, ec2
ec2 rdf:type rdf:List
ec2, rdf:first, _:pelvic
ec2 rdf:rest ec3
ec3 rdf:type rdf:List
ec3 rdf:first _:thigh
ec3 rdf:rest rdf:nil

@callahantiff
Copy link
Owner Author

Thanks @bill-baumgartner!

  • Interesting note about rdf:type rdf:List edges. When I created the triples in Protége and exported them, those edges were not included. I also did not see those for examples in HPO. I wonder why?

@callahantiff
Copy link
Owner Author

@bill-baumgartner - unfortunately, this is not going to make it into the NIPS paper, but I'd like to try and get it to a good place for an ISMB submission (we've been invited to submit something and I think that this would be good). Would you be willing to set-up semi-regular meetings with me (after Friday) to dive into this further?

@bill-baumgartner
Copy link
Collaborator

definitely, let's do Wednesdays if that works for you.

@callahantiff
Copy link
Owner Author

callahantiff commented Nov 22, 2019

@bill-baumgartner - clinical mappings are officially complete. I will plan to incorporate them into the v3.0.0 build. I have mocked up a new Wiki page to document how we will do this here.

Would you mind taking a look to verify that you are still in agreement with the proposed approach? Once you confirm, I will mock-up the code.

@callahantiff
Copy link
Owner Author

Closing this issue here since this work has been moved to the OMOP2OBO Project - here

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants