|
Key
This line was removed.
This word was removed. This word was added.
This line was added.
|
Changes (49)
View Page History
h1. Introduction
TODO:
TODO: - copy more from my email to Martin
- consider checking types as early as possible to eliminate useless inferences
- Define FRs and sub-FRs usign [SPARQL Property Paths|http://www.w3.org/TR/sparql11-property-paths/#path-language]
- Define FRs and sub-FRs usign [SPARQL Property Paths|http://www.w3.org/TR/sparql11-property-paths/#path-language]
h2. OWLIM Rules and Reasoning Dialect

So we copy the relevant rules from builtin_owl2-rl.pie:
{code:title=Rules}
{code:title=Rules}
p <rdf:type> <owl:TransitiveProperty>; x p y; y p z [Cut] => x p z
p1 <owl:inverseOf> p2; x p1 y => y p2 x
p1 <owl:inverseOf> p2; x p2 y => y p1 x
p1 <owl:inverseOf> p2; x p2 y => y p1 x

- FC70_Thing := E70_Thing NOT E21_Person NOT E55_Type NOT E30_Right NOT E41_Appellation
Here we enumerate all subclasses of the negative classes, since neither OWL nor OWLIM can express "NOT subclass" (<owl:disjointWith> is used to infer a contradiction, not to define a class).
(x) TODO: This below is wrong, we must enumerate the positive subclasses
{code:title=Rule-COMMENTED OUT}
x <rdf:type> t [Constraint t!=<crm:E70_Thing>, t!=<rso:FC70_Thing>, t!=<crm:E21_Person>, t!=<crm:E55_Type>, t!=<crm:E56_Language>, t!=<crm:E57_Material>, t!=<crm:E58_Measurement_Unit>, t!=<crm:E30_Right>, t!=<crm:E41_Appellation>, t!=<crm:E35_Title>, t!=<crm:E42_Identifier>, t!=<crm:E44_Place_Appellation>, t!=<crm:E45_Address>, t!=<crm:E46_Section_Definition>, t!=<crm:E47_Spatial_Coordinates>, t!=<crm:E48_Place_Name>, t!=<crm:E49_Time_Appellation>, t!=<crm:E50_Date>, t!=<crm:E51_Contact_Point>, t!=<crm:E75_Conceptual_Object_Appellation>, t!=<crm:E82_Actor_Appellation>]
(x) TODO: This below is wrong, we must enumerate the positive subclasses
{code:title=Rule-COMMENTED OUT}
x <rdf:type> t [Constraint t!=<crm:E70_Thing>, t!=<rso:FC70_Thing>, t!=<crm:E21_Person>, t!=<crm:E55_Type>, t!=<crm:E56_Language>, t!=<crm:E57_Material>, t!=<crm:E58_Measurement_Unit>, t!=<crm:E30_Right>, t!=<crm:E41_Appellation>, t!=<crm:E35_Title>, t!=<crm:E42_Identifier>, t!=<crm:E44_Place_Appellation>, t!=<crm:E45_Address>, t!=<crm:E46_Section_Definition>, t!=<crm:E47_Spatial_Coordinates>, t!=<crm:E48_Place_Name>, t!=<crm:E49_Time_Appellation>, t!=<crm:E50_Date>, t!=<crm:E51_Contact_Point>, t!=<crm:E75_Conceptual_Object_Appellation>, t!=<crm:E82_Actor_Appellation>]
The concept of "NOT subclass" is not expressible with OWLIM rules:
- OWLIM rules can check != class, but not subclasses
- <owl:complementOf> and <owl:disjointWith> are used only for consistency checking (to infer a contradiction), not to define classes
TODO: says who? Prove this
I tried enumerating negative classes:
{code:title=Rule-WRONG}
x <rdf:type> t [Constraint t!=<crm:E21_Person>, t!=<crm:E55_Type>, t!=<crm:E30_Right>, t!=<crm:E41_Appellation>]
- OWLIM rules can check != class, but not subclasses
- <owl:complementOf> and <owl:disjointWith> are used only for consistency checking (to infer a contradiction), not to define classes
TODO: says who? Prove this
I tried enumerating negative classes:
{code:title=Rule-WRONG}
x <rdf:type> t [Constraint t!=<crm:E21_Person>, t!=<crm:E55_Type>, t!=<crm:E30_Right>, t!=<crm:E41_Appellation>]
t <rdfs:subClassOf> <crm:E70_Thing>
--------------------
x <rdf:type> <rso:FC70_Thing>
{code}
--------------------
x <rdf:type> <rso:FC70_Thing>
{code}
But that doesn't work (even if I enumerate all negative subclasses), since an E21_Person (negative) is also an E19_Physical_Object (positive), and we want E19.
Enumerating positive classes doesn't work either, for the same reason.
Enumerating positive classes doesn't work either, for the same reason.
So FC70 would need to be implemented in SPARQL, eg
{code:sql|title=SPARQL}
?x rdf:type crm:E70_Thing.
NOT (?x rdf:type crm:E21_Person, etc)
{code}
{code:sql|title=SPARQL}
?x rdf:type crm:E70_Thing.
NOT (?x rdf:type crm:E21_Person, etc)
{code}
h3. FC70_Thing for RS
In RS we search only for top-level things (eg a Painting, but not a Frame that makes part of a painting). These have type E22_Museum_Object, Man-Made Objects (MMO) so the rule is much simpler:
{code:title=Axioms}
<rso:FC70_Thing> <rdfs:subClassOf> <rso:E22_Museum_Object> <crm:E22_Man-Made_Object>
<rso:E22_Museum_Object> <crm:E22_Man-Made_Object> <rdfs:subClassOf> <rso:FC70_Thing>
{code}
TODO: in BM data, MMO are only top-level (eg Print, Painting).
But in Rembrandt data there are sub-object MMO (eg related/n is a related work, part/n is a frame that is part of a painting) that we can't display, so we introduced a special sub-type rso:E22_Museum_Object.
But in Rembrandt data there are sub-object MMO (eg related/n is a related work, part/n is a frame that is part of a painting) that we can't display, so we introduced a special sub-type rso:E22_Museum_Object.
h1. Fundamental Relations

h2. Thing-Place
h3. Thing "refers to or is about" Place: FR67_refers_to_or_is_about
{section}{column}
As defined in FRThing.docx:
!FR67_refers_to_or_is_about.png!
!FR67_refers_to_or_is_about.png!
{column}{column}
Corrected definition:
!FR67_refers_to_or_is_about-fixed.png!
{column}{section}
Corrected definition:
!FR67_refers_to_or_is_about-fixed.png!
{column}{section}
Problems:
Fixed problems:
# At beginning: does not allow paths of mixed properties (eg P130-P130i, P106-P148),
or with P46,P106,P148 preceding P130,P130i
or with P46,P106,P148 preceding P130,P130i

#- Resolved by adding the mix at E26 too
# At end: is it really appropriate to use part-transitivity for this FR? If a thing is about Knossos, is it also about every little village, house and room in Knossos?
# At end: is it really appropriate to use part-transitivity for this FR? If a thing is about Knossos, is it also about every little village, house and room in Knossos?
It was established this FR is not [co-variant|http://en.wikipedia.org/wiki/Covariance_and_contravariance_(computer_science)] (not appropriate to loop using P89*), but is it contra-variant (appropriate to loop using P89i*)?
#- (?) PENDING
#- (?) PENDING: but is it contra-variant (appropriate to loop using P89i*)?
Corrected definition:
!FR67_refers_to_or_is_about-fixed.png!
!FR67_refers_to_or_is_about-fixed.png!
Implementation
- FRT_130_46_106_148_128 := (P130 or P130i or P46 or P106 or P148 or P128)+
- FRT_46_106_148 := (P46 or P106 or P148)+
{code:title=Rules}
x <crm:P130_shows_features_of> y => x <rso:FRT_130_46_106_148_128> y
x <crm:P130i_features_are_also_found_on> y => x <rso:FRT_130_46_106_148_128> y
x <crm:P130i_features_are_also_found_on> y => x <rso:FRT_130_46_106_148_128> y
x <crm:P46_is_composed_of> y => x <rso:FRT_130_46_106_148_128> <rso:FRT_46_106_148> y
x <crm:P106_is_composed_of> y => x <rso:FRT_130_46_106_148_128> <rso:FRT_46_106_148> y
x <crm:P148_has_component> y => x <rso:FRT_130_46_106_148_128> <rso:FRT_46_106_148> y
x <crm:P128_carries> y => x <rso:FRT_130_46_106_148_128> y
{code}
{code:title=Axioms}
{code:title=Axioms}
<rso:FRT_130_46_106_148_128> <rso:FRT_46_106_148> <rdf:type> <owl:TransitiveProperty>
{code}
- FRT_46_106_148_128_130 := (FRT_46_106_148 or P128 or P130 or P130i)+
{code:title=Rules}
x <rso:FRT_46_106_148> y => x <rso:FRT_46_106_148_128_130> y
x <crm:P128_carries> y => x <rso:FRT_46_106_148_128_130> y
x <crm:P130_shows_features_of> y => x <rso:FRT_46_106_148_128_130> y
x <crm:P130i_features_are_also_found_on> y => x <rso:FRT_46_106_148_128_130> y
{code}
{code:title=Axioms}
<rso:FRT_46_106_148_128_130> <rdf:type> <owl:TransitiveProperty>
{code}
{code:title=Rules}
x <rso:FRT_46_106_148> y => x <rso:FRT_46_106_148_128_130> y
x <crm:P128_carries> y => x <rso:FRT_46_106_148_128_130> y
x <crm:P130_shows_features_of> y => x <rso:FRT_46_106_148_128_130> y
x <crm:P130i_features_are_also_found_on> y => x <rso:FRT_46_106_148_128_130> y
{code}
{code:title=Axioms}
<rso:FRT_46_106_148_128_130> <rdf:type> <owl:TransitiveProperty>
{code}
- FRX_62_67 := P62_depicts or P67_refers_to
{code:title=Rules}
{code:title=Rules}

x <rso:FRX_62_67> y => x <rso:FRX67_refers_to_or_is_about> y
x <rso:FRX_62_67_E26> y; y <crm:P53_has_former_or_current_location> z => x <rso:FRX67_refers_to_or_is_about> z
x <rso:FRX_62_67_E26> y; y <crm:P53_has_former_or_current_location> z => x <rso:FRX67_refers_to_or_is_about> z
x <rso:FRX_62_67_E26> y; y <rso:FRT_130_46_106_148_128> <rso:FRT_46_106_148_128_130> z; z <crm:P53_has_former_or_current_location> t => x <rso:FRX67_refers_to_or_is_about> t
{code}

{code:title=Rules}
x <rso:FRX67_refers_to_or_is_about> y => x <rso:FRT67_refers_to_or_is_about> y
x <rso:FRX67_refers_to_or_is_about> y => x <rso:FRT67_refers_to_or_is_about> y
x <rso:FRT_130_46_106_148_128> <rso:FRT_46_106_148_128_130> y; y <rso:FRT67_refers_to_or_is_about> z => x <rso:FRT67_refers_to_or_is_about> z
x <rso:FRT67_refers_to_or_is_about> y; y <crm:P89i_contains> z => x <rso:FRT67_refers_to_or_is_about> z
{code}
{code}

{code}
h3. Thing "is referred to at" Place: WONTDO
h3. Thing "from" Place
h3. Thing "from" Place: FR7_from_place
{section}{column}
{section}{column}
As defined in FRThing.docx (without C2.Finding which is undefined):
!FR7_from_place.png!
!FR7_from_place.png!
{column}{column}
Corrected definition:
!FR7_from_place-fixed.png!
{column}{section}
Corrected definition:
!FR7_from_place-fixed.png!
{column}{section}
Problems:
Fixed problems:
# At beginning: does not allow paths of mixed properties (eg P46i,P106i)
#- Resolved by "mixing" as FRT_46i_106i_148i
#- Resolved by "mixing" as FRT_46i_106i_148i

#- (We could even merge both E63, but then we'd have a back-link and before traversing P14 must check that the event is the production/creation of a Thing: E12, E65, E81)
!FR7_from_place-fixed.png! Implementation:
- FRT_46i_106i_148i := (P46i or P106i or P148i)+
{code:title=Rules}
{code:title=Rules}

{code}
- FRT92i_9i := P92i then / P9i*
{code:title=Rules}
x <crm:P92i_was_brought_into_existence_by> y => x <rso:FRT92i_9i> y
x <crm:P92i_was_brought_into_existence_by> y => x <rso:FRT92i_9i> y

{code}
h3. Thing "used at" Place: WONTDO
h3. Thing "created at" Place
h3. Thing "found or acquired at" Place
h3. Thing "is/was located at" Place
h3. Thing "found or acquired at" Place
h3. Thing "is/was located at" Place
No such in BM data
h3. Thing "created at" Place: WONTDO
This is very similar to "from", which in addition has a part "created by person born at".
But RKD Person thesaurus doesn't have birth details, and I don't know whether BM Person exported to SKOS has such details.
h3. Thing "found or acquired at" Place: WONTDO
C2.Finding is not defined
h3. Thing "is/was located in" Place: FR53_is_was_located_in
This is a very simple subset of FR7_from_place ([#Thing "from" Place])
!FR53_is_was_located_in.png!
Implementation:
- FRT53_is_was_located_in := FRT_46i_106i_148i* then P53 then P89*
{code:title=Rules}
x <crm:P53_has_former_or_current_location> y => x <rso:FRT53_is_was_located_in> y
x <rso:FRT_46i_106i_148i> y; y <crm:P53_has_former_or_current_location> z => x <rso:FRT53_is_was_located_in> z
x <crm:P53_has_former_or_current_location> y; y <crm:P89_falls_within> z => x <rso:FRT53_is_was_located_in> z
{code}
- FR53_is_was_located_in := add type check at start
(No need to check at end since the relation is to E53_Place)
{code:title=Rules}
x <rdf:type> <rso:FC70_Thing>; x <rso:FRT53_is_was_located_in> y => x <rso:FR53_is_was_located_in> y
{code}
This is very similar to "from", which in addition has a part "created by person born at".
But RKD Person thesaurus doesn't have birth details, and I don't know whether BM Person exported to SKOS has such details.
h3. Thing "found or acquired at" Place: WONTDO
C2.Finding is not defined
h3. Thing "is/was located in" Place: FR53_is_was_located_in
This is a very simple subset of FR7_from_place ([#Thing "from" Place])
!FR53_is_was_located_in.png!
Implementation:
- FRT53_is_was_located_in := FRT_46i_106i_148i* then P53 then P89*
{code:title=Rules}
x <crm:P53_has_former_or_current_location> y => x <rso:FRT53_is_was_located_in> y
x <rso:FRT_46i_106i_148i> y; y <crm:P53_has_former_or_current_location> z => x <rso:FRT53_is_was_located_in> z
x <crm:P53_has_former_or_current_location> y; y <crm:P89_falls_within> z => x <rso:FRT53_is_was_located_in> z
{code}
- FR53_is_was_located_in := add type check at start
(No need to check at end since the relation is to E53_Place)
{code:title=Rules}
x <rdf:type> <rso:FC70_Thing>; x <rso:FRT53_is_was_located_in> y => x <rso:FR53_is_was_located_in> y
{code}
h2. Thing-Thing
We don't have any info about top-level Thing-Thing relations in Rembrandt nor BM data.
- In Rembrandt there is part composition info, but we don't display other than top-level objects
- In one case "<painting> P130i_features_are_also_found_on <sketch>", but these relate to sub-objects, eg
{code}<obj/2926> crm:P130i_features_are_also_found_on <obj/2926/related/1>{code}
h3. Thing "has met" Thing: WONTDO
h3. Thing "refers to or is about" Thing: WONTDO
h3. Thing "is referred to by" Thing: WONTDO
h3. Thing "from" Thing: WONTDO
h3. Thing "is part of" Thing: WONTDO
h3. Thing "was made from" Thing: WONTDO
h3. Thing "has part" Thing: WONTDO
h3. Thing "is similar or same with" Thing: WONTDO
h2. Thing-Actor
h3. Thing "has met" Actor: FR12_has_met
{section}{column}
As defined in FRThing.docx:
!FR12_has_met.png!
{column}{column}
Corrected definition:
!FR12_has_met-fixed.png!
{column}{section}
Fixed Problems:
# At beginning: why consider part composition only of E18_Physical_Thing (P46i) but not of Symbolic/Propositional Objects (P106i,P148i)?
Note: P12 is applicable to any E77_Persistent_Item
#- Resolved by adding P106i,P148i: do you agree (?)
Further discussion:
- We consider carefully the directions of the "part" relations. Here's an example where we have 3 levels of nested Things, Events and Actors and the relation is made at level2:
-- Jewel1 is part of Necklace2 is part of Treasure3
-- AuctionLot1 is part of Auction2 is part of AuctionSeries3
-- Dealer1 is part of JewelSellers2 is part of Corp3
-- Necklace2 was sold at Auction2 by JewelSellers2
- I think we can infer these relations:
-- (Jewel1,Necklace2) was sold at (Auction2,AuctionSeries3) by (JewelSellers2,Corp3)
- However, FRThing.docx dismisses the "Actor member of Group" inference because "it is not so probable that the Group has also been in the same event as the Actors".
- Ok, agreed
Implementation:
We reuse [#Thing "has met" Event: FR12_was_present_at] as the initial sub-FR from FC70 to E5.
- FR12_has_met := FR12_was_present_at / P12 / E39
{code:title=Rules}
x <rso:FR12_was_present_at> y; y <crm:P12_occurred_in_the_presence_of> z; z <rdf:type> <crm:E39_Actor> => x <rso:FR12_has_met> z
{code}
h3. Thing "is referred to by" Actor: WONTDO
A related example in RKD data is: <Gertruidenberg> (Place) P67i_is_referred_to_by <Bathing Susana> which is created by <Rembrandt>,
which would map to <Gertruidenberg> "is referred to by" <Rembrandt>, except that Place is not a Thing.
h3. Thing "refers to or is about" Actor: TODO
h3. Thing "by" Actor: FR14_by
Thing was created, modified, measured, found, acquired by actor; or was used for an activity performed by actor
{section}{column}
As defined in FRThing.docx:
!FR14_by.png!
{column}{column}
Corrected definition:
!FR14_by_fixed.png!
{column}{section}
Fixed Problems:
# At beginning: allow paths of mixed properties
# At E8: allow a hierarchy of Acquisition events (not that it'll happen often)
# Note: we don't need to check the types E7, E8 since the properties P24i, P14, P22 ensure them.
Implementation:
- FRX_92_16_39_31_24i := P92i_was_brought_into_existence_by | P16i_was_used_for | P39i_was_measured_by | P31i_was_modified_by | P24i_changed_ownership_through
{code:title=Rules}
x <crm:P92i_was_brought_into_existence_by> y => x <rso:FRX_92_16_39_31_24i> y
x <crm:P16i_was_used_for> y => x <rso:FRX_92_16_39_31_24i> y
x <crm:P39i_was_measured_by> y => x <rso:FRX_92_16_39_31_24i> y
x <crm:P31i_was_modified_by> y => x <rso:FRX_92_16_39_31_24i> y
x <crm:P24i_changed_ownership_through> y => x <rso:FRX_92_16_39_31_24i> y
{code}
- FRX_14_22 := P14_carried_out_by | P22_transferred_title_to
{code:title=Rules}
x <crm:P14_carried_out_by> y => x <rso:FRX_14_22> y
x <crm:P22_transferred_title_to> y => x <rso:FRX_14_22> y
{code}
- FRX_46_106_148_92_16_39_31_24i := FRT_46_106_148* / FRX_92_16_39_31_24i
{code:title=Rules}
x <rdf:type> <rso:FC70_Thing>; x <rso:FRX_92_16_39_31_24i> y => x <rso:FRX_46_106_148_92_16_39_31_24i> y
x <rdf:type> <rso:FC70_Thing>; x <rso:FRT_46_106_148> y; y <rso:FRX_92_16_39_31_24i> z => x <rso:FRX_46_106_148_92_16_39_31_24i> z
{code}
- FRX14_by := FRX_46_106_148_92_16_39_31_24i / P9i*
{code:title=Rules}
x <rso:FRX_46_106_148_92_16_39_31_24i> y => x <rso:FRX14_by> y
x <rso:FRX_46_106_148_92_16_39_31_24i> y; y <crm:P9i_forms_part_of> z => x <rso:FRX14_by> z
{code}
- FR14_by := FRX14_by / FRX_14_22 / P107i*
{code:title=Rules}
x <rso:FRX14_by> y; y <rso:FRX_14_22> z => x <rso:FR14_by> z
x <rso:FRX14_by> y; y <rso:FRX_14_22> z; z <crm:P107i_is_current_or_former_member_of> t => x <rso:FR14_by> t
{code}
h2. Thing-Event
h3. Thing "refers to or is about" Event: FR67_about_event
Thing depicts or refers to Event, or carries information object that is about Event, or bears similarity with a thing that is about Event.
- The beginning is the same as [#Thing "refers to or is about" Place: FR67_refers_to_or_is_about] so we reuse properties FRT_46_106_148_128_130 and FRX_62_67. TODO: optimize this reuse, by carefully thinking where to put the type check
- The ending is way simpler.
- TODO: harmonize FR names (this says "_event" but "about Place" doesn't say "_place")
{section}{column}
As defined in FRThing.docx:
!FR67_about_event.png!
{column}{column}
Corrected definition:
!FR67_about_event-fixed.png!
{column}{section}
Fixed Problems:
# At beginning: does not allow paths of mixed properties
# At E73: does not allow P106,P148. Resolved by adding P128 into the mix
Implementation:
(i) We reuse a lot of properties from above, so we don't need to define any auxiliary sub-FRs here
- FR67_about_event := FC70 / FRT_46_106_148_128_130* / FRX_62_67
{code:title=Rules}
x <rdf:type> <rso:FC70_Thing>; x <rso:FRX_62_67> y => x <rso:FR67_about_event> y
x <rdf:type> <rso:FC70_Thing>; x <rso:FRT_46_106_148_128_130> y; y <rso:FRX_62_67> z => x <rso:FR67_about_event> z
{code}
h3. Thing "is referred to at" Event: WONTDO
h3. Thing "has met" Event: FR12_was_present_at
Thing was present (has metm, is from) Event.
(FRThing.docx refers to this variously as "has met" or "from", but we use FR12_has_met for Actor, so for this we use FR12_was_present_at which is derived from the key CRM property name)
{section}{column}
As defined in FRThing.docx:
!FR12_was_present_at.png!
{column}{section}
Implementation:
- FR12_was_present_at := FC70 / FRT_46i_106i_148i* / P12i / P9i*
{code:title=Rules}
x <rdf:type> <rso:FC70_Thing>; x <crm:P12i_was_present_at> y => x <rso:FR12_was_present_at> y
x <rdf:type> <rso:FC70_Thing>; x <rso:FRT_46i_106i_148i> y; y <crm:P12i_was_present_at> z => x <rso:FR12_was_present_at> z
x <rdf:type> <rso:FC70_Thing>; x <crm:P12i_was_present_at> y; y <rso:P9i_forms_part_of> z => x <rso:FR12_was_present_at> z
x <rdf:type> <rso:FC70_Thing>; x <rso:FRT_46i_106i_148i> y; y <crm:P12i_was_present_at> z; z <rso:P9i_forms_part_of> t => x <rso:FR12_was_present_at> t
{code}
h2. Thing-Concept
h3. Thing "is made of" Material: FR45_is_made_of
Thing (or its part) consists of Material.
{section}{column}
As defined in FRThing.docx:
Includes P33_used_specific_technique/P68_foresees_use_of, but I think that is far-fetched: P33 should refer to an explicitly defined procedure, and if P68 then it stands to reason the material was actually P126_employed!
{column}{column}
Corrected definition:
!FR45_is_made_of-fixed.png!
{column}{section}
Implementation
- FRX45_is_made_of := P45 | (FRT92i_9i / P126)
{code:title=Rules}
x <crm:P45_consists_of> y => x <rso:FRX45_is_made_of> y
x <rso:FRT92i_9i> y; y <crm:P126_employed> z => x <rso:FRX45_is_made_of> z
{code}
- FR45_is_made_of := (FC70) / FRT_46_106_148* / FRX45_is_made_of
{code:title=Rules}
x <rdf:type> <rso:FC70_Thing>; x <rso:FRX45_is_made_of> y => x <rso:FR45_is_made_of> y
x <rdf:type> <rso:FC70_Thing>; x <rso:FRT_46_106_148> y; y <rso:FRX45_is_made_of> y => x <rso:FR45_is_made_of> z
{code}
h3. Thing "is/has" Type: FR2_has_type
Thing has Type (or has shape, is of kind, uses material, etc)
(FRThing.docx calls this "has type" but I think "is/has" matches the general usage "is Weapon", "has shape Vertical Rectangle", etc)
This is an extension of [#Thing "is made of" Material: FR45_is_made_of]:
{section}{column}
{column}{column}
Corrected definition:
!FR2_has_type-fixed.png!
{column}{section}
Implementation:
- FR2_has_type := ((FC70) / FRT_46_106_148* / P2_has_type) | FR45_is_made_of
{code:title=Rules}
x <rdf:type> <rso:FC70_Thing>; x <crm:P2_has_type> y => x <rso:FR2_has_type> y
x <rdf:type> <rso:FC70_Thing>; x <rso:FRT_46_106_148> y; y <crm:P2_has_type> z => x <rso:FR2_has_type> z
x <rso:FR45_is_made_of> y => x <rso:FR2_has_type> y
{code}
h3. Thing "used technique": FR32_used_technique
The production of Thing (or its part) used general Technique.
{section}{column}
{column}{column}
Extension defined by me:
!FR32_used_technique-fixed.png!
{column}{section}
(I think P32_used_general_technique is more useful than P33_used_specific_technique, see [#Thing "is made of" Material: FR45_is_made_of] above)
Implementation:
- FR32_used_technique := (FC70) / FRT_46_106_148* / FRT92i_9i / P32
{code:title=Rules}
x <rdf:type> <rso:FC70_Thing>; x <rso:FRT92i_9i> y; y <crm:P32_used_general_technique> z => x <rso:FR32_used_technique> y
x <rdf:type> <rso:FC70_Thing>; x <rso:FRT_46_106_148> y; y <rso:FRT92i_9i> z; z <crm:P32_used_general_technique> t => x <rso:FR32_used_technique> t
{code}
h3. Thing "identified by" Identifier: FR1_identified_by
Thing (or its part) has Identifier (exact-match string).
{section}{column}
{column}{column}
Extension defined by me:
!FR32_used_technique-fixed.png!
{column}{section}
Implementation:
- FR1_identified_by := (FC70) / FRT_46_106_148* / P1 / P3
{code:title=Rules}
x <rdf:type> <rso:FC70_Thing>; x <crm:P1_is_identified_by> y; y <crm:P3_has_note> z => x <rso:FR1_identified_by> z
x <rdf:type> <rso:FC70_Thing>; x <rso:FRT_46_106_148> y; y <crm:P1_is_identified_by> z; z <crm:P3_has_note> t => x <rso:FR1_identified_by> t
{code}
TODO: it may be better to stop at P1 so the identifier type can also be examined