@prefix lex: . @prefix rdfs: . @prefix owl: . # ************************************************************************** # ***** This reduces to Turtle a model of phosphorylation Joanne Luciano and # ***** Dan Corwin jointly posted following the 7/15/05 Boston BioPAX meeting. # ***** It uses the core association model below (very general). 5/23/06 # ************************************************************************** lex:thing rdfs:subClassOf owl:thing. lex:association rdfs:subClassOf lex:thing. lex:topic rdfs:subClassOf lex:thing; owl:disjointFrom lex:association. lex:role rdfs:subPropertyOf owl:objectProperty; rdfs:domain lex:association; rdfs:range lex:topic. # ***** Below, extend it, so anything can attach to anything # ***** at a location (which properly should be part of the attachee). lex:attachment rdfs:subClassOf lex:association. lex:attachee rdfs:subPropertyOf lex:role; rdfs:domain lex:attachment. lex:attached rdfs:subPropertyOf lex:role; rdfs:domain lex:attachment. lex:location rdfs:subPropertyOf lex:role; rdfs:domain lex:attachment. # ***** UNSOLVED PROBLEM: ignored here for now: how to require # ***** attachment.location aPartOf attachment.attachee? lex:aPartOf rdfs:subPropertyOf owl:objectProperty. # **************************************************** # ***** METHOD 1: specialize the general attachment model, # ***** by extending some of its over-general properties # **************************************************** lex:phosphorylation rdfs:subClassOf lex:attachment. # ***** this model is property-centric, but we need to have # ***** a few classes around for the range constraints. lex:substance rdfs:subClassOf lex:topic. lex:protein rdfs:subClassOf lex:substance. # to become a range of attachee-1 lex:small-molecule rdfs:subClassOf lex:substance. lex:phosphate rdfs:subClassOf lex:small-molecule. # to become a range of attached-1 lex:binding-location rdfs:subPropertyOf lex:location; rdfs:domain lex:phosphorylation. # ***** PARTIAL SOLUTION: restrict binding-spot values to protein parts lex:binding-spot rdfs:subClassOf lex:thing; # to become a range below rdfs:subClassOf [ a owl:Restriction ; owl:AllValuesFrom lex:protein ; owl:cardinality 1 ; owl:onProperty lex:aPartOf ] . lex:binding-location rdfs:range lex:binding-spot. # added it to binding-location? # ***** range constraints are domain-specific (RDFS blows this badly!!) # ***** so one must subclass properties to narrow their constraints lex:attached-1 rdfs:subPropertyOf lex:attached; rdfs:domain lex:phosphorylation; rdfs:range lex:phospate. lex:attachee-1 rdfs:subPropertyOf lex:attachee; # AKA, the phosporylated rdfs:domain lex:phosphorylation; rdfs:range lex:protein. # **** And finally, here is typical instance - an association in which # **** Pxyz may be involved. But is the association really part of its # **** state? Or is BEING ASSOCIATED the core of its state change? lex:Pxyz a lex:protein. lex:S-44 a lex:binding-spot. [ a lex:phosphorylation; lex:attachee-1 lex:Pxyz; lex:attached-1 [ a lex:phospate ]; lex:binding-location lex:s-44 ]. # **************************************************** # ***** METHOD 2: Now consider another attachment model for # ***** macroscopic objects, not sub-microscopic substances... # **************************************************** # ***** NEW APPROACH: I have learned since 7/05 of class restrictions. # ***** They replace what I did for a Topic Map: "scoping" constraints # ***** to a particular domain. So I now use restrictions below. This # ***** works better, as I restrict, not redefine, the original roles lex:person rdfs:subClassOf lex:thing. lex:medicalDevice rdfs:subClassOf lex:thing. lex:plasterCast rdfs:subClassOf lex:medicalDevice. # like the phospate lex:wearMedicalDevice rdfs:subClassOf lex:attachment; # like phosphorylation rdfs:subClassOf [ a owl:Restriction ; owl:allValuesFrom lex:medicalDevice ; owl:cardinality 1 ; owl:onProperty lex:attached ] ; rdfs:subClassOf [ a owl:Restriction ; owl:allValuesFrom lex:person ; owl:cardinality 1 ; owl:onProperty lex:attachee ] . lex:Joe a lex:thing. # like a protein lex:leftArm a lex:thing; lex:aPartOf lex:Joe. # suitable locations lex:rightLeg a lex:thing; lex:aPartOf lex:Joe. # ***** and finally, here is Joe's association with his cast, unnamed. # ***** If UNSOLVED PROBLEM were fixed, a reasoner should infer rightLeg # ***** to be aPartOf Joe without being explicitly told above. [ a lex:wearMedicalDevice; lex:attachee lex:Joe; lex:attached [ a lex:plasterCast ]; lex:location lex:rightLeg ]. # **************************************************** # ***** METHOD 1' (redone with METHOD 2 technique). Now a # ***** pattern appears - the association base pattern has # ***** made the attachment model easy to adapt and reuse. # ***** Very few terms differ from the macro scale model. # **************************************************** [ a lex:phosphorylation; lex:attachee lex:Pxyz; lex:attached [ a lex:phosphate ]; lex:location lex:s-44 ]. # ***** To get it, I'd need to change no role definitions, only the # ***** top level attachment class's role restrictions lex:phosphorylation rdfs:subClassOf lex:attachment; # like wearsMedicalDevice rdfs:subClassOf [ a owl:Restriction ; owl:allValuesFrom lex:phosphate ; owl:cardinality 1 ; owl:onProperty lex:attached ] ; rdfs:subClassOf [ a owl:Restriction ; owl:allValuesFrom lex:protein ; owl:cardinality 1 ; owl:onProperty lex:attachee ] ; rdfs:subClassOf [ a owl:Restriction ; owl:allValuesFrom lex:binding-spot ; owl:cardinality 1 ; owl:onProperty lex:location ] . # ***** Note the solution is flawed, though, because s-44 need not # ***** be part of Pxyz. It could be aPartOf another protein, and # ***** if so, the association of Pxyz as now stated would be untrue.