Changes between Version 1 and Version 2 of IdsAdiTemplateAxiomatizationTools

Show
Ignore:
Timestamp:
11/05/09 21:45:30 (15 years ago)
Author:
jowik (IP: 193.212.132.34)
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • IdsAdiTemplateAxiomatizationTools

    v1 v2  
    1616''This page provides a walkthrough of how to develop axioms (interpretation rules) for ISO 15926 templates, aided by software tools. The aim is for this page to eventually provide a useful introduction and tutorial.'' 
    1717 
     18= Basic = 
     19== Template signatures == 
     20Example: !IsCustodianOf 
     21|| Order || Role name || Role type       || 
     22||     1 || Custodian || Adult person    || 
     23||     2 || Child     || Person          || 
     24||     3 || Type      || !CustodyRelation || 
     25 
     26Example: !ClassificationOfIndividual 
     27|| Order || Role name  || Role type          || 
     28||     1 || Individual || !PossibleIndividual || 
     29||     2 || Class      || !ClassOfIndividual  || 
     30== Template axioms == 
     31 
     32For !IsCustodianOf an axiom could say, the ''Parent'' stands in a 
     33parenthood relationship of type ''CustodyRelation'' to the ''Child''. 
     34 
     35For !ClassificationOfIndividual (in Part 7), the rule is as follows. 
     36{{{ 
     37ClassificationOfIndividual(x1, x2) <-> 
     38  PossibleIndividual(x1) &             
     39  ClassOfIndividual(x2) &        
     40  ClassificationTemplate(x1, x2) . 
     41}}} 
     42(We use Prover9 syntax to express the formula, so we can use it as-is 
     43in that proof tool.) 
     44 
     45= Some reasons why we need templates = 
     46 - Simplify use of ISO 15926 representations 
     47         - Expressions in the language of ISO 15926-2 tend to be 
     48     verbose. The entity types are also hard to grasp. With templates, 
     49     the logical design work can be left to modelling experts. 
     50 - A uniform approach to knowledge capture 
     51         - Templates are always ''statement forms''. Any valid template 
     52     instance corresponds to a statement. 
     53 - Simplify use of n-ary predicates  
     54         - Due to its basis in standard Description Logic, OWL has only 
     55     unary and binary predicates 
     56         - Templates are a convenient way to introduce n-ary predicates, 
     57     without introducing too much semantic confusion (cf. W3C's 
     58     [http://www.w3.org/TR/swbp-n-aryRelations/#useCase3 Purchase] example, for which instances are purchases, not facts) 
     59 - Convenient exchange of representations 
     60         - Templates are comparable to SQL table definitions, but the most 
     61     interesting roles (columns) are typed using reference data 
     62 - Convenient data transfer 
     63         - It's easy to instantiate templates and move a payload 
     64 
     65All of the above are good, but not exactly revolutionary. Arguably, 
     66the greatest advantage of templates is found in the interpretation of 
     67template rules as logical axioms. 
     68 
     69 - Basis in precise modelling 
     70         - Templates are expressed in a clearly defined limited first-order 
     71     logic, whose properties are well known 
     72 - Definitions can be tested for compliance with ISO 15926-2 
     73         - This is much of today's topic 
     74 - Templates can be tested for mutual consistency 
     75 - Payloads of data can be tested for internal consistency 
     76 - Complex templates can be defined in terms of simpler templates 
     77 - Libraries of templates can be tested for internal consistency 
     78 - We can check that templates are well-defined in the sense of always 
     79   reducing to a unique expression in the basic, Part 2 language 
     80 
     81= Template Expander: Intro, and a minimal example = 
     82The 
     83[https://www.posccaesar.org/svn/pub/TemplateExpander/applet/template-expander.html Template Expander] is a tool for working with template design. It 
     84was written in Java by [http://heim.ifi.uio.no/martingi/ Martin Giese]. Development was funded by DNV 
     85IRM.  
     86== Java library == 
     87Using the Java library 
     88([https://www.posccaesar.org/svn/pub/TemplateExpander/cmdline/template-expander.jar template-expander.jar]), expansion of template 
     89rules can be built into ISO 15926 applications. 
     90 
     91The code is available as free software, with a BSD-type 
     92[https://www.posccaesar.org/svn/pub/TemplateExpander/LICENSE LICENSE]: 
     93{{{ 
     94Copyright (c) 2009, DNV Information Risk Management  
     95All rights reserved. 
     96 
     97Redistribution and use in source and binary forms, with or without  
     98modification, are permitted provided that the following conditions are met: 
     99   
     100  * Redistributions of source code must retain the above copyright  
     101    notice, this list of conditions and the following disclaimer. 
     102  * Redistributions in binary form must reproduce the above copyright  
     103    notice, this list of conditions and the following disclaimer in the  
     104    documentation and/or other materials provided with the distribution. 
     105  * Neither the name of DNV Information Risk Management nor the names of its  
     106    contributors may be used to endorse or promote products derived from  
     107    this software without specific prior written permission. 
     108   
     109THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"  
     110(etc etc) 
     111}}} 
     112== Java applet == 
     113At 
     114[https://www.posccaesar.org/svn/pub/TemplateExpander/applet/template-expander.html Template Expander], a Java applet has been provided with a heading, 
     115an introduction, and IDS-ADI and DNV logos. 
     116=== Window "Template Definitions" === 
     117Enter all template definitions into this window. 
     118 
     119Upon initialization, the templates defined in the 
     120[https://www.posccaesar.org/svn/projects/ISO15926/Part7-Apr-2009_delivery/ISO15926-7_TS.pdf Part 7 April 2009 draft]  
     121are loaded here, in Prover9 format. 
     122 
     123For a toy example, consider a two-place template "!SiblingOf(x, y)" for 
     124expressing that people are siblings. Intuitively, "!SiblingOf(Alfred, 
     125Betty)" should mean that Alfred and Betty are siblings. Template 
     126signature: 
     127|| Order || Role name || Role type || 
     128||     1 || Sibling A || Person    || 
     129||     2 || Sibling B || Person    || 
     130 
     131Note that the signature doesn't say anything about how role-fillers 
     132are related. For that, we assume our ontology (our reference data 
     133library) defines a relation ''hasChild'', holding between parents and 
     134their children. We use this in the template axiom. 
     135 
     136{{{ 
     137SiblingOf(x, y) <-> 
     138  Person(x) & Person (y) & 
     139  exists z ( Person(z) & 
     140             hasChild(z, x) & 
     141              hasChild(z, y)) . 
     142}}} 
     143(Note the final ".", which is required by Prover9.) 
     144 
     145(for an ISO 15926 application using reference classes, we'd have in 
     146line 2, e.g., 
     147{{{ 
     148ClassificationTemplate(x, Person) & ... 
     149}}} 
     150) 
     151=== Window "Input Formula" === 
     152This window is for entering atomic/ground statements using the 
     153template language. 
     154 
     155Enter a single formula here (without a final "."). If you wish to test 
     156more than one template instance, then express it as a conjunction, 
     157with "&". 
     158{{{ 
     159SiblingOf(Alfred, Betty) 
     160}}} 
     161 
     162We need to follow the restrictions on names of variables, individuals, 
     163and so forth given by Prover9.  
     164=== Button "Expand" === 
     165With our toy example, the ''Expand'' button returns this: 
     166{{{ 
     167  Person(Alfred) 
     168& Person(Betty) 
     169& exists z (Person(z) & hasChild(z, Alfred) & hasChild(z, Betty)) 
     170}}} 
     171==== Checkbox "Skolemize result" ==== 
     172If we choose to ''skolemize'', new terms are created to satisfy the 
     173''exists'' quantifiers: 
     174{{{ 
     175  Person(Alfred) 
     176& Person(Betty) 
     177& Person(cz0) 
     178& hasChild(cz0, Alfred) 
     179& hasChild(cz0, Betty) 
     180}}} 
     181This can be easily converted into XML or RDF, for inspection in 
     182various tools; see below ([id:b2f8cdce-0346-430a-a576-cf9ba747f356 
     183ex. 1], [id:47904671-d234-4ffa-946b-c0934b49c5ad ex. 2]). Visualized 
     184in [http://semweb.salzburgresearch.at/apps/rdf-gravity/ RDF-Gravity], 
     185an RDF file can appear follows. 
     186 
     187[[Image(AlfredBetty-tpl-instances.png)]] 
     188 
     189= Prover9: Intro, and the minimal example again = 
     190== The program == 
     191The Prover9 theorem prover, and its companion Mace4 for finding 
     192counterexamples, have a convenient graphical user interface that makes 
     193it more usable than other provers that are available. 
     194 
     195NB. Prover9 works for full first-order logic. This is much more 
     196permissive than what is allowed for templates -- we can make more 
     197expressive statements. This means that application of Prover9 can be 
     198used to test many kinds of relationships that can not be expressed in 
     199templates themselves. 
     200=== Symbol list: Logical operators === 
     201Prover9 is quite picky about symbols. 
     202|| Operator                   || Symbol || 
     203|| true                       || $T     || 
     204|| false                      || $F     || 
     205|| negation                   || -      || 
     206|| disjunction                || \mid   || 
     207|| conjunction                || &      || 
     208|| implication                || ->     || 
     209|| equivalence                || <->    || 
     210|| universal quantification   || all    || 
     211|| existential quantification || exists || 
     212|| equality                   || =      || 
     213|| negated equality           || !=     || 
     214=== Window "Assumptions" === 
     215This is where the template axioms go. We can test for well-formedness. 
     216Incidentally, this is also done in the Template Expander, so if you 
     217get expansions there, your definitions should be good for Prover9 too. 
     218 
     219Let's enter in our example from above. 
     220{{{ 
     221SiblingOf(x, y) <-> 
     222  Person(x) & Person (y) & 
     223  exists z ( Person(z) & 
     224             hasChild(z, x) & 
     225             hasChild(z, y)) . 
     226 
     227SiblingOf(Alfred, Betty) . 
     228}}} 
     229We can click the ''Well Formed?'' button to check that we haven't made a 
     230syntax error.  
     231=== Window "Goals" === 
     232==== Proof ==== 
     233With the template definition and our instance, we can prove that Betty 
     234is a sibling of Alfred -- since the order of conjuncts in the template 
     235axiom is insignificant. We click the button ''Start'' under "Proof 
     236Search". 
     237{{{ 
     238SiblingOf(Betty, Alfred) .  
     239}}} 
     240We can also show information about the role-fillers Alfred and Betty 
     241that is implied by the template definition. 
     242{{{ 
     243Person(Betty) . 
     244}}} 
     245==== Disproof ==== 
     246There's also information that ''doesn't'' follow from our assumptions. 
     247In many cases, Prover9 can explain that this is so by generating a 
     248counterexample. For the following, click the button ''Start'' under 
     249"Model/Counterexample Search". (The proof search should fail since we 
     250haven't entered any assumption to the effect that Alfred has a child.) 
     251{{{ 
     252exists x ( hasChild (Alfred, x)) . 
     253}}} 
     254The converse is of course provable. 
     255{{{ 
     256exists x ( hasChild (x, Alfred)) . 
     257}}} 
     258= Rahul's examples = 
     259== Properties of individuals. Preparation == 
     260In email 2009-11-04, Rahul Patil (Bentley) proposes templates for 
     261properties of individuals. He provides two alternatives -- "Option 1" 
     262and "Option 2". 
     263 
     264To prepare the templates for testing in the Template Expander and 
     265Prover9, we first edit the formulae to replace symbols "^" with "&", 
     266and the mirror-image existential quantifier with "exists".  
     267 
     268== Option 1 == 
     269=== Prepare axiom === 
     270The template axiom is the following. 
     271{{{ 
     272PropertyOfIndividual(x1, x2, x3) <->  
     273  PossibleIndividual(x1) & 
     274  Property(x2) &  
     275  ClassOfIndirectProperty(x3) & 
     276  exists u ( IndirectPropertyTriple(u, x1, x2) &  
     277             ClassificationTemplate(u,x3)) 
     278}}} 
     279To check that the definition is syntactically adequate, we open the 
     280Template Expander and add the definition to the end of the Template 
     281Definitions field.  
     282=== Enter sample instance === 
     283We then enter the example instance given by Rahul as an Input Formula. 
     284 
     285Note that the input needs to be slightly rewritten to conform to the 
     286Prover9 requirements on permissible terms. We replace 
     287{{{ 
     288PropertyOfIndividual( #s-101, 60bar, Maximum Working Pressure ) 
     289}}} 
     290with 
     291{{{ 
     292PropertyOfIndividual(s101, bar60, MaximumWorkingPressure) 
     293}}} 
     294This is no major issue, since we're only testing content anyway. (For 
     295a user application implementation, one would need to handle data type 
     296values. This is a different story.) 
     297=== Expand === 
     298To evaluate the input, press ''Expand''. The following result is 
     299returned. 
     300{{{ 
     301  PossibleIndividual(s101) 
     302& Property(bar60) 
     303& ClassOfIndirectProperty(MaximumWorkingPressure) 
     304& exists u 
     305     (  (IndirectProperty(u) & hasPossessor(u, s101) & hasProperty(u, bar60)) 
     306      & exists z 
     307           (  Classification(z) 
     308            & hasClassified(z, u) 
     309            & hasClassifier(z, MaximumWorkingPressure))) 
     310}}} 
     311During the expansion, the templates IndirectPropertyTriple and 
     312ClassificationTemplate, defined in Part 7, were expanded. The result 
     313makes perfectly good sense as an ISO 15926-2 pattern. The fact that 
     314the Expander applies the extension demonstrates that the syntactic 
     315structure is sound. 
     316 
     317We can easily see that the expanded results makes no reference to 
     318predicates not defined in ISO 15926-2.  
     319=== Triples view of example === 
     320If we wish to look at the result in a "triples" format, we can check 
     321the ''Skolemize result'' box before expansion. The result is as 
     322follows.  
     323==== Prover9 format ==== 
     324{{{ 
     325  PossibleIndividual(s101) 
     326& Property(bar60) 
     327& ClassOfIndirectProperty(MaximumWorkingPressure) 
     328& (IndirectProperty(cu0) & hasPo.sessor(cu0, s101) & hasProperty(cu0, bar60)) 
     329& Classification(cz0) 
     330& hasClassified(cz0, cu0) 
     331& hasClassifier(cz0, MaximumWorkingPressure) 
     332}}} 
     333With this, we have found a fully explicit expression, in terms of Part 
     3342 and individual terms, of the template statement. We have reduced a 
     335compact template statement to statements in the Part 2 language -- the 
     336basic language of ISO 15926. 
     337==== XML format ==== 
     338A trivial search/replace macro can convert this into XML, for instance 
     339as follows. 
     340{{{ 
     341<?xml version="1.0" encoding="UTF-8"?> 
     342<expandedtemplates>    
     343  <node type="PossibleIndividual" name="s101"/> 
     344  <node type="Property" name="bar60"/> 
     345  <node type="ClassOfIndirectProperty" name="MaximumWorkingPressure"/> 
     346  <node type="IndirectProperty" name="cu0"/> 
     347  <edge type="hasPossessor" from="cu0" to="s101"/> 
     348  <edge type="hasProperty" from="cu0" to="bar60"/> 
     349  <node type="Classification" name="cz0"/> 
     350  <edge type="hasClassified" from="cz0" to="cu0"/> 
     351  <edge type="hasClassifier" from="cz0" to="MaximumWorkingPressure"/> 
     352</expandedtemplates>  
     353}}} 
     354==== RDF format ==== 
     355The following is a custom-made RDF representation that can be useful 
     356for visualization of the Part 2 structure of expanded template 
     357instances. 
     358{{{ 
     359<?xml version="1.0" encoding="UTF-8"?> 
     360<rdf:RDF xmlns="http://test.org/Data#" xmlns:rdl="test.org/Data#" 
     361         xmlns:owl="http://www.w3.org/2002/07/owl#" 
     362         xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" 
     363         xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> 
     364   <rdl:PossibleIndividual rdf:about="s101"/> 
     365   <rdl:Property rdf:about="bar60"/> 
     366   <rdl:ClassOfIndirectProperty rdf:about="MaximumWorkingPressure"/> 
     367   <rdl:IndirectProperty rdf:about="cu0"/> 
     368   <rdf:Description rdf:about="cu0"> 
     369      <rdl:hasPossessor rdf:resource="s101"/> 
     370   </rdf:Description> 
     371   <rdf:Description rdf:about="cu0"> 
     372      <rdl:hasProperty rdf:resource="bar60"/> 
     373   </rdf:Description> 
     374   <rdf:Description rdf:about="cu0"> 
     375      <rdf:type rdf:resource="MaximumWorkingPressure"/> 
     376   </rdf:Description> 
     377</rdf:RDF> 
     378}}} 
     379Visualized in [http://semweb.salzburgresearch.at/apps/rdf-gravity/ RDF-Gravity], this RDF file appears as follows. 
     380 
     381[[Image(PropertyOfIndividual-tpl-instances.png)]] 
     382== Option 2 == 
     383=== Prepare axiom === 
     384The template axiom is the following. 
     385{{{ 
     386PropertyOfIndividual(x1, x2, x3, x4) <->  
     387  PossibleIndividual(x1) & 
     388  ArithmeticNumber(x2) & 
     389  Scale (x3) & 
     390  ClassOfIndirectProperty (x4) & 
     391  exists y1 exists y2 (MagnitudeOfProperty(y1, x2, x3) & 
     392    IndirectPropertyTriple(y2, x1, y1) & 
     393    ClassificationTemplate(y2,x4)) 
     394}}} 
     395Notable corrections made vs. PDF version:  
     396 - The fourth argument (x4) was missing 
     397 - "ArithmeticNumber" was misspelt as "ArithmaticNumber". This kind of 
     398   mistake can be tricky to spot in larger cases. As far as the 
     399   Expander is concerned, this introduces a new primitive concept 
     400   named "ArithmaticNumber". 
     401 - "Эy1, y2" needs rewriting as "exists y1 exists y2". 
     402 - Remember to add a final dot "." (very confusing in practice!) 
     403 
     404We replace the Option 1 formula in the Template Definitions frame by 
     405this one. 
     406=== Enter sample instance === 
     407We need to enter the value "60" as an individual term that Prover9 can 
     408accept. I have written "d60" here. 
     409{{{ 
     410PropertyOfIndividual(s101, d60, bar, MaximumWorkingPressure) 
     411}}} 
     412=== Expand === 
     413The following result is returned. 
     414{{{ 
     415  PossibleIndividual(s101) 
     416& ArithmeticNumber(d60) 
     417& Scale(bar) 
     418& ClassOfIndirectProperty(MaximumWorkingPressure) 
     419& exists y1 
     420     exists y2 
     421        (  (  Property(y1) 
     422            & ArithmeticNumber(d60) 
     423            & Scale(bar) 
     424            & exists u 
     425                 (  (  PropertyQuantification(u) 
     426                     & hasInput(u, y1) 
     427                     & hasResult(u, d60)) 
     428                  & exists z 
     429                       (  Classification(z) 
     430                        & hasClassified(z, u) 
     431                        & hasClassifier(z, bar)))) 
     432         & (IndirectProperty(y2) & hasPossessor(y2, s101) & hasProperty(y2, y1)) 
     433         & exists z 
     434              (  Classification(z) 
     435               & hasClassified(z, y2) 
     436               & hasClassifier(z, MaximumWorkingPressure))) 
     437}}} 
     438This template applies MagnitudeOfProperty, one of the "Initial Set" 
     439templates of Part 7. Accordingly, the result is more complex. The 
     440difference is that the quantification of the property is here 
     441represented explicitly -- the property is explicitly stated to refer 
     442by way of the ''bar'' scale to the value 60. 
     443 
     444Once again, the successful expansion indicates that the template 
     445definition is sound. We can see by manual inspection that no reference 
     446is made to predicates not defined in Part 2. (But for the latter, we 
     447should really have a tool to make that check automatically. This 
     448shouldn't be difficult to write.) 
     449=== Triples view of example === 
     450==== Prover9 format ==== 
     451We select ''Skolemize result'' to produce the following. 
     452{{{ 
     453  PossibleIndividual(s101) 
     454& ArithmeticNumber(d60) 
     455& Scale(bar) 
     456& ClassOfIndirectProperty(MaximumWorkingPressure) 
     457& (  Property(cy11) 
     458   & ArithmeticNumber(d60) 
     459   & Scale(bar) 
     460   & (PropertyQuantification(cu6) & hasInput(cu6, cy11) & hasResult(cu6, d60)) 
     461   & Classification(cz8) 
     462   & hasClassified(cz8, cu6) 
     463   & hasClassifier(cz8, bar)) 
     464& (IndirectProperty(cy21) & hasPossessor(cy21, s101) & hasProperty(cy21, cy11)) 
     465& Classification(cz9) 
     466& hasClassified(cz9, cy21) 
     467& hasClassifier(cz9, MaximumWorkingPressure) 
     468}}} 
     469==== XML format ==== 
     470Converted into XML, this can look as follows. 
     471{{{ 
     472<?xml version="1.0" encoding="UTF-8"?> 
     473<expandedtemplates>    
     474<node type="PossibleIndividual" name="s101"/> 
     475  <node type="ArithmeticNumber" name="d60"/> 
     476  <node type="Scale" name="bar"/> 
     477  <node type="ClassOfIndirectProperty" name="MaximumWorkingPressure"/> 
     478  <node type="Property" name="cy11"/> 
     479  <node type="ArithmeticNumber" name="d60"/> 
     480  <node type="Scale" name="bar"/> 
     481  <node type="PropertyQuantification" name="cu6"/> 
     482  <edge type="hasInput" from="cu6" to="cy11"/> 
     483  <edge type="hasResult" from="cu6" to="d60"/> 
     484  <node type="Classification" name="cz8"/> 
     485  <edge type="hasClassified" from="cz8" to="cu6"/> 
     486  <edge type="hasClassifier" from="cz8" to="bar"/> 
     487  <node type="IndirectProperty" name="cy21"/> 
     488  <edge type="hasPossessor" from="cy21" to="s101"/> 
     489  <edge type="hasProperty" from="cy21" to="cy11"/> 
     490  <node type="Classification" name="cz9"/> 
     491  <edge type="hasClassified" from="cz9" to="cy21"/> 
     492  <edge type="hasClassifier" from="cz9" to="MaximumWorkingPressure"/> 
     493</expandedtemplates> 
     494}}} 
     495==== RDF format ==== 
     496The following is a custom-made RDF representation that can be useful 
     497for visualization of the Part 2 structure of expanded template 
     498instances. 
     499{{{ 
     500<?xml version="1.0" encoding="UTF-8"?> 
     501<rdf:RDF xmlns="http://test.org/Data#" xmlns:rdl="test.org/Data#" 
     502         xmlns:owl="http://www.w3.org/2002/07/owl#" 
     503         xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" 
     504         xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> 
     505   <rdl:PossibleIndividual rdf:about="s101"/> 
     506   <rdl:ArithmeticNumber rdf:about="d60"/> 
     507   <rdl:Scale rdf:about="bar"/> 
     508   <rdl:ClassOfIndirectProperty rdf:about="MaximumWorkingPressure"/> 
     509   <rdl:Property rdf:about="cy11"/> 
     510   <rdl:ArithmeticNumber rdf:about="d60"/> 
     511   <rdl:Scale rdf:about="bar"/> 
     512   <rdl:PropertyQuantification rdf:about="cu6"/> 
     513   <rdl:IndirectProperty rdf:about="cy21"/> 
     514   <rdf:Description rdf:about="cu6"> 
     515      <rdl:hasInput rdf:resource="cy11"/> 
     516   </rdf:Description> 
     517   <rdf:Description rdf:about="cu6"> 
     518      <rdl:hasResult rdf:resource="d60"/> 
     519   </rdf:Description> 
     520   <rdf:Description rdf:about="cy21"> 
     521      <rdl:hasPossessor rdf:resource="s101"/> 
     522   </rdf:Description> 
     523   <rdf:Description rdf:about="cy21"> 
     524      <rdl:hasProperty rdf:resource="cy11"/> 
     525   </rdf:Description> 
     526   <rdf:Description rdf:about="cu6"> 
     527      <rdf:type rdf:resource="bar"/> 
     528   </rdf:Description> 
     529   <rdf:Description rdf:about="cy21"> 
     530      <rdf:type rdf:resource="MaximumWorkingPressure"/> 
     531   </rdf:Description> 
     532</rdf:RDF> 
     533}}} 
     534Visualized in [http://semweb.salzburgresearch.at/apps/rdf-gravity/ RDF-Gravity], this RDF file appears as follows. 
     535 
     536[[Image(PropertyOfIndividual2-tpl-instances.png)]] 
     537         
    18538 
    19539 
Home
About PCA
Reference Data Services
Projects
Workgroups