Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
Org.eclipse.higgins.js.pds.client API usage example
{{#eclipseproject:technology.higgins|eclipse_custom_style.css}}
We show an example of calling getAttributes and then calling setAttributes. In all cases we read/write the same two attributes in the nytimes.com namespace, bFirstName and phone.
Contents
Initial State
Contexts
NYTimes template
The template context http://azigo.com/sys/templates/nytimes.com contains (among other things) a class named "http://nytimes.com" that has the following mapping rules:
:NYTimesPerson a owl:Class ; rdfs:subClassOf <http://www.eclipse.org/higgins/ontologies/2010/6/higgins#Person> ;
rule #1:
map:nameRule [ rdf:type map:rolePathLiteral ; map:mappedAtt <http://www.w3.org/2006/vcard/ns#given-name> ; map:path <http://www.w3.org/2006/vcard/ns#n> ; map:predicate :bFirstName ; map:role <http://www.eclipse.org/higgins/ontologies/2010/6/persona#Buyer> ] ;
rule #2:
map:relationshipsRule [ rdf:type map:roleSameAs ; map:equivalentAttribute fp:gender ; map:predicate :gender ; map:role <http://www.eclipse.org/higgins/ontologies/2010/6/persona#Ecommerce> ] ;
FlatPersonaPerson (relevant sections only)
rule #3:
map:relationshipsRule [ rdf:type map:roleLiteral ; map:mappedAtt <http://xmlns.com/foaf/0.1/gender> ; map:predicate :gender ; map:role map:roleParam ] .
call getAttributes()
Call
Example call to getAttributes (domain, attributes[], where[], future)
- atts[0] := (http://nytimes#gender, false, nil) // a phone number
- atts[1] := (http://nytimes#bFirstName, false, nil) // "billing first name"
- getAttributes ("nytimes.com", atts, nil, nil)
Execution
- context := getConnectionContext ()
- result: context == http://azigo.com/ptrevithick/nytimes.com)
- call findRoles()
- result:
- ((p:eCommerce, (nytimes.com#gender, nil, nil))
- (p:Buyer, (nytimes.com#gender, nil, nil)))
- result:
- call sortByRole()
- result:
- ((p:eCommerce, (nytimes.com#gender, nil, nil))
- (p:Buyer, (nytimes.com#bFirstName, nil, nil)))
- result:
- Try to pull attributes from #me person in the nytimes.com
- result: no result: the nytimes.com context doesn't yet exist
- Try to pull attributes from #me person in root context
- call findPersonByRole()
- result: nil (no persons found that match role)
- result: no attribute/values found
call setAttributes()
Call
Example call to setAttributes (domain, attributes[])
- attVals[0] := (http://nytimes#gender, "female")
- attVals[1] := (http://nytimes#bFirstName, "Alice") // "billing first name"
- setAttributes ("nytimes.com", attvals[])
Execution
- context := getConnectionContext ()
- result: context == http://azigo.com/ptrevithick/nytimes.com
- template := getConnectionTemplate ()
- result: template == http://azigo.com/sys/template/nytimes.com
- Since context doesn't exist, create it from template
- newPersonRole := value of role attribute of Participant ContextPrototype
- result: newPersonRole == p:Ecommerce
- attributes[] := extractAttributes ()
- result: attributes[] == (http://nytimes.com#gender, http://nytimes.com#bFirstName)
- rolesAtts[] := findRoles()
- result: rolesAtts[] == ((p:Ecommerce, http://nytimes.com#gender), (p:Buyer, http://nytimes.com#bFirstName))
- sortByRole
- result: rolesAtts[] == ((p:Ecommerce, http://nytimes.com#gender), (p:Buyer, http://nytimes.com#bFirstName))
- person := http://azigo.com/ptrevithick/nytimes.com#me
- Since person doesn't exist we create the statements:
- (subj=:me pred=rdf:type obj=persona:Person) in context
- (subj=:me pred=p:role obj=(newPersonRole==persona:Ecommerce)) in context
- Loop[0] ra==(p:Ecommerce, http://nytimes.com#gender) // Loop: For every pair ra in rolesAtts...
- targetPersons[] := findPersonsByRole (person, p:Ecommerce)
- result: targetPersons[0] == <the :me person created above>; targetPersons[] is of size == 1
- person == targetPersons[0]
- partialAttVals[] := subsetAttVals ()
- result: partialAttVals[] == (http://nytimes.com#gender, "female")
- Loop: av==(http://nytimes.com#gender, "female")
- class := getNamespace()
- result: class=="http://nytimes.com"
- latt : getLocalAtt()
- result: latt=="phone"
- rule := getRule (template=http://azigo.com/sys/template/nytimes.com, class=http://nytimes.com, att="gender")
- result rule==(see "rule #2" in Initial State section above)
- 0:pushEvalRule(person=:me, rule #2 above, value[0]="female")
- class := getNamespace()
- EndLoop
- targetPersons[] := findPersonsByRole (person, p:Ecommerce)
- Loop[1] ra==(p:Buyer, http://nytimes.com#bFirstName)
- targetPersons[] := findPersonsByRole (person, p:Buyer)
- result: targetPersons[] is of size == 0
- create new person and set the value of its role to p:Buyer
- new person is :7643
- add new person :7643 to newPersons[]
- partialAttVals[] := subsetAttVals ()
- result: partialAttVals[] == (http://nytimes.com#bFirstName, "Alice")
- Loop: av==(http://nytimes.com#bFirstName, "Alice")
- class := getNamespace()
- result: class=="http://nytimes.com"
- latt : getLocalAtt()
- result: latt=="phone"
- rule := getRule (template=http://azigo.com/sys/template/nytimes.com, class=http://nytimes.com, att="bFirstName")
- result rule==(see "rule #1" in Initial State section above)
- 1:pushEvalRule(person=:7643, rule #1 above, value[0]="Alice")
- class := getNamespace()
- EndLoop
- targetPersons[] := findPersonsByRole (person, p:Buyer)
- EndLoop
- Loop for every person np in newPersons[]
- result: add an h:correlation link from :me to <new person>
0:pushEvalRule (:me, rule #2 above, "female")
- mappingRule := getRuleName()
- result: mappingRule == "roleSameAs" so call pushRoleSameAs (person=:me, rule #2 above, "female")
pushRuleSameAs (template, person=:me, rule, value)
- equivAtt := getRuleField (rule, map:equivalentAttribute)
- result: equivAtt == fp:gender
- newRule := findRule (template, eqivAtt)
- result: returns rule #3 above!
- pushEvalRule (person=:me, newRule, "Alice") // recursion
0:0: pushEvalRule (:me, rule #3 above, "female")
- mappingRule := getRuleName()
- result: mappingRule == "roleLiteral" so call pushRoleLiteral (person=:me, rule #3 above, "female")
pushRoleLiteral (person=:me, rule #3, "female")
- mappedAtt := getruleField()
- result: mappedAtt == foaf:gender
- add new foaf:gender attribute to :me and sets value to "female"
1:pushEvalRule (person= :7643, rule #1 above, "Alice")
- mappingRule := getRuleField()
- result: mappingRule == rolePathLiteral
- call pushRoleLiteral(template, 7643, rule #1, "Alice")
pushRulePathLiteral(template, 7643, rule #1, "Alice")
- path := getRuleField ()
- result: path == "v:n"
- since :7643 doesn't have a v:n attribute then we create a v:Name object
- result obj:= new v:Name
- mappedAtt := getRuleField ()
- result: mappedAtt == v:given-name
- since obj is new it doesn't have a v:given-name so we add v:given-name to it
Final State
Red is newly created context