I want to find infer rules and rules information.
But, W3C offered examples:
http://www.w3.org/TR/2004/REC-owl-guide-20040210/#owl_sameAs
(infer rule Exam)
owl:sameAs(?a, ?b) ^ owl:sameAs(?b, ?c) ^ notEqual(?a, ?b) ^ notEqual(?b, ?c) -> owl:sameAs(?a, ?c)
If you want to perform inference, you need to use something capable of performing reasoning. You can use a dedicated reasoner, such as Pellet, Hermit, or Fact++, or an rdf database which supports reasoning such as Stardog or OWLIM.
You might also want to checkout the current version of OWL as the document you are referencing is quite old.
Related
In protege a reflexive property is assigned to all individuals relgardless of domain and range and the class to which individuals belongs.
so what is the use of this restriction?
P.S: lets say there is three individuals:
NamedIndividual( :John )
NamedIndividual( :alex )
NamedIndividual( :BMW )
and an object proeprty:
ObjectProperty( :hasFriend )
ReflexiveObjectProperty(:hasFriend)
running pellet deduce that :
BMW hasFriend BMW
This inference is conceptually meaningless
Papers like The even more irresistible SROIQ and Foundations of Description Logics point out that reflexive and irreflexive properties are closely related to the exists r.Self concept. I.e. Narcissist can be defined as Narcissist \sqsubseteq loves.Self.
The SROIQ paper actually mentions that the main use cases for reflexive and irreflexive properties are limited and only make sense when used along with cardinality restrictions. I.e. if you define PopularPerson as someone with at least 2 friends, and hasFriend is reflexive, then by asserting an individual has 1 known friend will result in that individual being classified as a PopularPerson because the individual is already assumed to be its own friend.
Interestingly, the paper also mentions that reflexive(r) is equivalent to adding the GCI top \sqsubseteq exists r.Self to the TBox. Personally for me this is more intuitive and provides the control I think you seem to want to achieve. In particular this allows you to replace \top with whatever class of your choice. A similar equivalent exists for irreflexive properties.
I'm attempting to create/implement an RDF-schema for historical data: setting up a base schema is simple, but I've run into a roadblock when trying to add a verifiable source for each claim (predicate).
For example, it's relatively easy to declare 'Alexander (subject) has a brother (predicate) Robert (object)'... but I would like that claim (that is the whole) that Robert was indeed Alexander's brother to be cited, with a link to the original source document, if possible.
The best I could come up with is a 'doubled triplet' schema:
Alexander -> has_a_brother -> Robert
Alexander -> has_a_brother_source -> 'http://sourcedocumentserver.com/blablabla'
Alexander -> has_a_brother_source -> 'http://sourcedocumentserver2.com/blablabla'
Alexander -> has_a_brother_source -> 'http://sourcedocumentserver3.com/blablabla'
Is there a better way to go about this?
PS: this problem is a bit different than a 'predicate variable' (like the question that this one was said to replicate), but in this 'citation needed' circumstance, every single predicate in the database would need a secondary description/label/name (and that's even without imagining multiple citations, attribution data, etc.).
The best I could find was transforming every 'citation needed' predicate into a named graph (with multiple RDF triplets) that would contain the object normally directly joined (if no citation were required).
How to represent a "part-of" SQL relationship in OWL ontology language?
For example:
CREATE TABLE DevelopmentTask (
DevelopmentTaskID INT,
SoftwareProjectID INT FOREIGN KEY REFERENCES SoftwareProject (SoftwareProjectID),PRIMARY KEY(DevelopmentTaskID, SoftwareProjectID))
In the above table the DevelopmentTask table is part of the SoftwareProject. How I can represent this in OWL, may be it can be represented using intersectionOf property in OWL.
Thanks,
You can simply introduce an ObjectProperty or a DataTypeProperty depending on what exactly you need to display. For example, I would introduce:
hasDevelopmentTask
And then add the following restriction:
SoftwareProject hasDevelopmentTask some DevelopmentTask
The "some" restriction also depends on your relation. If it is 1-n this relation holds, otherwise replace it with "min", "max", "exactly", or "only".
Also, since your example contains IDs, I would add them as instances or individuals of either SoftwareProject or DevelopmentTask. In this case, every instance of SoftwareProject will have "some" DevelopmentTask.
As another answer mentioned, you can simply create a property hasDevelopmentTask, or something similar. If you are going to make things a bit more complex in the future (e.g., if a software project has a development task, and a development task a (sub-)development taskā¦) you might want to take a look at the W3C Working Draft, Simple part-whole relations in OWL Ontologies.
First, some theory
OWL doesn't provide built-in primitives for defining part-whole relations (as explained in the W3C Working Draft).
However, you can represent part-of (and any other non is-a) relations using OWL's objectProperties and their restrictions.
So, in your case you want to define the concept DevelopmentTask as part of the concept SoftwareProject.
In this case, you need to:
create an owl:Class for each concept (2 classes in this example).
create an owl:ObjectProperty to represent the relation partOf and its restrictions.
extend the part class to be a subClassOf of a restriction over values from the whole class on that property.
Second, the RDF/XML syntax
So to express that as an OWL ontology in RDF/XML syntax, the final layout would look like this:
<owl:Class rdf:about="SoftwareProject"/>
<owl:ObjectProperty rdf:about="partOf"/>
<owl:Class rdf:about="DevelopmentTask">
<rdfs:subClassOf>
<owl:Restriction>
<owl:onProperty rdf:resource="partOf"/>
<owl:someValuesFrom rdf:resource="SoftwareProject"/>
</owl:Restriction>
</rdfs:subClassOf>
</owl:Class>
In OWL, is it possible to query a class that does not have a property?
Suppose I have an object property R and I want to retrieve all classes that do not have the property R. Also, suppose that I have already closed all classes with closures.
I was trying this:
suppose the propety in question is hasProperty, my query was this
hasProperty only Nothing
But it doesn't work
What do you mean by "class that does not have a property"?
Semantically, a class is a set of individuals and a property is a set of pairs of individuals. Given these two sets, what do you mean by "class has / has not a property"?
Regarding your example query
hasProperty only Nothing
lets rewrite it a bit so that we can think about it in natural language. This gives better intuition about the meaning of this query.
First lets rename hasProperty to follows (or whatever English verb), then we have:
follows only Nothing
This is semantically equivalent to
follows only (not Thing)
which is semantically equivalent to
not (follows some Thing)
Now we have gotten rid of the only which is a confusing part of OWL and is better avoided. So now we can verbalize the query in English as:
those who do not follow anything
or
who does not follow anything?
or more formally
which individuals of the ontology are known
not to have a follow relationship to any other individual
E.g. if your ontology states that
John does not follow Mary.
John does not follow himself.
Every individual in the ontology is either John or is Mary.
then John will be the answer to the above query.
You can also get a named class as the query answer if the asked restriction holds for a (named) group of individuals. In any case, the following must hold: if you asserted that the answer (or a member of it) does have a follow-relation to some individual then it would render the ontology inconsistent.
OWL does not have any means for querying the data. SPARQL is used for that. So the SPARQL query to find all class definitions that do not have the property :R would be:
SELECT ?cls
WHERE {
?cls a owl:Class .
FILTER NOT EXISTS {?cls :R ?o}
}
This is directly from a tutorial online, and I get a top down level design error, help?
employee(193,'Jones','John','173 Elm St.','Hoboken','NJ',
12345,1,'25 Jun 93',25500).
employee(181,'Doe','Betty','11 Spring St.','Paterson','NJ',
12354,3,'12 May 91',28500).
employee(198,'Smith','Al','2 Ace Ave.','Paterson','NJ',
12354,3,'12 Sep 93',27000).
Given these basic relations (also called extensional relations), we can define other relations using Prolog procedure definitions to give us answers to questions we might have about the data. For example, we can define a new relation containing the names of all employees making more than $28,000:
well_paid_emp(First,Last) :-
employee(_Num,Last,First,_Addr,_City,_St,_Zip,_Dept,_Date,Sal),
Sal > 28000.
It could be that you are using a Prolog system which shows a singleton warning for well_paid_emp/2.
Not all Prolog systems allow _<Capital><Rest> as singletons, i.e. variables that occur only once in a rule.