Hi Dave, Thanks for your support, for now I am working with the rules as it is triggering, my use of rules is because of customer requirements. I will test with sparql this first stage of my work in order to make performance comparison.
Bets regards Luis Ramos El lun., 16 mar. 2020 a las 16:59, Dave Reynolds (<[email protected]>) escribió: > Hi Luis, > > On 16/03/2020 09:41, Luis Enrique Ramos García wrote: > > Hi again Dave, > > > > sorry if I have not explained appropriately, > > > > let me tell you at first my goal: I am inspecting a dataset of 1,5 > millions > > individuals, againts another dataset with 5k *search_ID *values, where I > > have to get an individual with a given value in a property. I use rule 2 > > with search_ID in *registration_Authority_entity_ID* property, in order > to > > identify individuals with search_ID value. I think rule 2 could be > > rewritten as follows: > > > > rule 2= (?b rdf_ns:type Entity) (?b registration_Authority_entity_ID > " > > *search_ID'*) -> (?b has_ord ?ord) > > > > rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns" > > rdf_ns = rdf+"#" > > Unclear why you are using rules for rather than simply a Sparql query. > > That example is *still* not a legal rule syntax. > > > In my experience with owl api, when a rule is triggered, no change > occurred > > in the original data, that means rule does not affect original model, and > > an inferred model is generated, and this model can be store separated. > > Um, this is Jena not the OWL API. It is true that if a forward rule > fires the result of the rule will be asserted in the deductions model. > > > When > > I trigger rule 2, I obtained this inferred model, and when I inspect it, > I > > can see the individual with the property value, but wrong, > > Not sure what you mean by "wrong". It's doing what it is supposed to do. > You haven't bound ?ord so it can't assert a value for it in the > deductions model. > > > in the same way, > > when I execute rule 1, I do not obtain any result, and model holds > blank. I > > code the necessary control element to verify that inferred model of rule > 1 > > holds blank, in other words I confirm that there is not triggering. > > I repeat, if you can't get your rule 1 to fire and you still need help > then show us actual minimal test data (need only be a few statements, > sufficient to match the rule) and actual rule syntax not isolated > fragments of your source code with key values missing. The chances are > you have a namespace/URI error somewhere. > > Dave > > > Currently I am executing the following rule: > > > > rule_3 = (?b rdf_ns:type Entity) (?b registration_Authority_entity_ID > > *search_ID*) -> (?b rdf_ns:type Entity) > > > > So, I obtain all ?b individuals with value search_ID, however I require > > extra work to obtain the target property value, that will let me identify > > my individual later, and I think I should be able to get it with the > rule. > > > > > > Hope this could clarify a little more my use case. > > > > > > Luis Ramos > > > > > > > > > > > > > > > > > > > > > > > > El lun., 16 mar. 2020 a las 10:04, Dave Reynolds (< > [email protected]>) > > escribió: > > > >> > >> On 16/03/2020 08:49, Luis Enrique Ramos García wrote: > >>> Hi Dave, > >>> > >>> thanks for your quick response, > >>> > >>> I though that was the cause of the problem, however when I add the bind > >> to > >>> ?ord in the body, then the rule is not triggered , I changed as in > rule > >> 1: > >>> > >>> > >>> String rule 1= (?b rdf_ns:type GLEIF1_NS Entity) (?b GLEIF1_NS > has_ord > >>> ?ord) (?b GLEIF1_NS registration_Authority_entity_ID "search_ID') -> > (?b > >>> GLEIF1_NS has_ord ?ord) > >> > >> What's that supposed to do? You seem to be binding ?ord then asserting > >> the same value back again. So that will have no effect on the data. > >> > >>> String rule 2= (?b rdf_ns:type GLEIF1_NS Entity) (?b GLEIF1_NS > >>> registration_Authority_entity_ID "search_ID') -> (?b GLEIF1_NS has_ord > >> ?ord) > >> > >> What's that supposed to do? There's no binding for ?ord so why would you > >> expect it to have a specific value? > >> > >>> as shown above the rule 1 does not trigger, rule 2 does trigger as > >>> expected, but the output value does not corresponds to the value of > >> ?ord. I > >>> obtained this value > *ae791d81-7538-49ac-9436-898ede09d7b5*], and > should > >>> have been > > >> ord:urn:iso:std:iso:17442:2019:ed-1:v2:en:[097900BHID0000080614] > >> > >> Sorry I can't follow what you are attempting to do. Tou aren't showing > >> us the actual data (with namespaces) or actual rules (with all these > >> variables expanded) so it's hard to spot the details. Also unclear what > >> you mean by "output", whether you are looking at a dump of the whole > >> model, just the deductions graph or something else. > >> > >> How you do you know the first rule isn't firing? Since it makes no > >> change to the data it's going to be hard to tell. Use the print builtin > >> to help debug. > >> > >> If you can't work it out then generate a minimal complete test case with > >> just minimal test data (ideally in turtle with all prefixes defined) and > >> minimal rule example (actual rule, not source code snippet that > >> generates the rule) then post that. Then maybe someone can spot what's > >> happening. > >> > >> Dave > >> > >>> El lun., 16 mar. 2020 a las 9:13, Dave Reynolds (< > >> [email protected]>) > >>> escribió: > >>> > >>>> > >>>> On 16/03/2020 06:58, Luis Enrique Ramos García wrote: > >>>>> Dear friends, > >>>>> > >>>>> I am running a rule in a data set, which has the following format: > >>>>> > >>>>> <j.0:Entity rdf:about=" > >>>>> http://www.example.com/onto/gleif1.owl#097900BHID0000080614"> > >>>>> <rdfs:label > >>>>> > >>>> > >> > xml:lang="ia">ord:urn:iso:std:iso:17442:2019:ed-1:v2:en:[097900BHID0000080614]</rdfs:label> > >>>>> <rdfs:label xml:lang="en">scope s.r.o.</rdfs:label> > >>>>> > >>>>> > >>>> > >> > <j.0:registration_Authority_entity_ID>search_ID</j.0:registration_Authority_entity_ID> > >>>>> > >>>> > <j.0:registration_Authority_ID>RA000526</j.0:registration_Authority_ID> > >>>>> <j.0:legal_Name>scope s.r.o.</j.0:legal_Name> > >>>>> * > >>>>> > >>>> > >> > <j.0:has_ord>ord:urn:iso:std:iso:17442:2019:ed-1:v2:en:[097900BHID0000080614]</j.0:has_ord>* > >>>>> <owl:versionInfo>1</owl:versionInfo> > >>>>> > >>>>> > >>>>> where I want to obtain the *has_ord* property value with the rule: > >>>>> > >>>>> String rule_rid= "[rule1: (?b "+rdf_ns+"type > "+GLEIF1_NS+"Entity) " > >>>>> + "(?b "+GLEIF1_NS+"registration_Authority_entity_ID > >>>>> "+"'"+search_ID+"')"//get all gleif entities ID > >>>>> + "-> (?b "+GLEIF1_NS+"has_ord ?ord)]";//put the output > >>>> > >>>> That's very hard to read but unless I'm missing something there's > >>>> nothing in the body of the rule to bind ?ord. > >>>> > >>>> Dave > >>>> > >>>>> > >>>>> The rule is triggered as expected, however the value in the output > does > >>>> not > >>>>> corresponds to the real value: > >>>>> > >>>>> output: > >>>>> > >>>>> http://www.example.com/onto/gleif1.owl#has_ord, > >>>>> *ae791d81-7538-49ac-9436-898ede09d7b5*] > >>>>> > >>>>> but, it should be: > >>>>> > >>>>> http://www.example.com/onto/gleif1.owl#has_ord,* > >>>>> ord:urn:iso:std:iso:17442:2019:ed-1:v2:en:[097900BHID0000080614] > >>>>> ]* > >>>>> > >>>>> > >>>>> I am running the jena rule against a model stored in a tdb database. > >>>>> > >>>>> Thanks in advanced for your support. > >>>>> > >>>>> > >>>>> Luis Ramos > >>>>> > >>>> > >>> > >> > > >
