Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

View-builder vocabulary

Revision as of 21:41, 14 August 2011 by Ptrevithick.gmail.com (Talk | contribs) (viewRoot)

{{#eclipseproject:technology.higgins|eclipse_custom_style.css}}
Higgins logo 76Wx100H.jpg

Vocabulary to describe a view of a context. A view is a tree structure of groups of attributes to be displayed/edited. Part of the Persona Data Model 2.0.

Files

UML Overview

View-builder 2.0.0103d.png

Classes

Group

A logical group of Slots and/or sub-Groups

  • subClassOf: ViewNode
  • 0..N field
  • 0..N subgroup

Slot

Metadata about how an attribute from the Persona vocabulary (or one of its imports) or from the Flat Persona vocabulary or from the rdf (e.g. rdf:class) should be presented

  • subClassOf: ViewNode
  • 1..1 attribute

ViewNode

Metadata about how an attribute from the Persona vocabulary (or one of its imports) or from the Flat Persona vocabulary or from the rdf (e.g. rdf:class) should be presented

  • 1..1 attribute
  • 1..1 displayOrder
  • 1..1 skos:prefLabel
  • 0..1 layout

Attributes

attribute

The attribute that should be displayed in this field. The attribute may be in the Flat Persona vocabulary or in the Persona vocabulary (or one of its imported sub-vocabularies).

  • domain: Slot or Frame
  • value: rdf:Property

child

A frame child of a Group

  • domain: Group or Frame
  • value: ViewNode

displayOrder

A number that indicates the relative position with respect to the displayOrder of sibling objects with this same attribute. Lower numbers indicate precedence. The displayOrder values of all child nodes of a given node in the tree should be considered together irrespective of the class of the child (i.e. Slot, Group or Frame).

  • domain: Slot, Frame or Group
  • value: xsd:Integer

layout

An optional URL of an html/javascript template sub-page of a web app

  • domain: ViewNode
  • value: URI

settingsViewRoot

Link to the (settings) root of the tree of Groups, Frames and Slots (aka ViewNodes)

  • domain: ctxt:Context
  • range: Group


Value range constraints

In some cases the UI/presentation needs to restrict the possible values of an attribute further than how the attribute class constrains its values (if it does at all). The view-builder context is a convenient place to add these additional constraints. For example whereas fp:gender does not constraint its values (because it is just an alias for foaf:gender which doesn't constraint its values), we might in a UI wish to add this statement:

fp:gender
     rdfs:range
             [ rdf:type rdfs:Datatype ;
               owl:oneOf ("female"^^xsd:string "male"^^xsd:string "unspecified"^^xsd:string)
             ] .

Example

Here is an example of a view-builder:

:AgeRange
     rdf:type view:Slot ;
     view:attribute fp:ageRange ;
     view:displayOrder 1 ;
     skos:prefLabel "Age range"^^xsd:string .

:DemographicsGroup
     rdf:type view:Group ;
     view:child :PostalCode , :AgeRange , :Gender ;
     view:displayOrder 1 ;
     skos:prefLabel "Demographics"^^xsd:string .

:Gender
     rdf:type view:Slot ;
     view:attribute fp:gender ;
     view:displayOrder 2 ;
     skos:prefLabel "Gender"^^xsd:string .

:Interest
     rdf:type view:Slot ;
     view:attribute <http://www.eclipse.org/higgins/ontologies/2010/6/online-behavior#interest> ;
     view:displayOrder 1 ;
     skos:prefLabel "Interest"^^xsd:string .

:InterestsGroup
     rdf:type view:Group ;
     view:child :Interest ;
     view:displayOrder 2 ;
     skos:prefLabel "Interests"^^xsd:string .

:PostalCode
     rdf:type view:Slot ;
     view:attribute fp:postalCode ;
     view:displayOrder 10 ;
     skos:prefLabel "Zip code"^^xsd:string .

:ViewRoot
     rdf:type view:Group ;
     view:child :InterestsGroup , :DemographicsGroup ;
     view:displayOrder 1 ;
     skos:prefLabel "Advertising Profile"^^xsd:string .

fp:gender
     rdfs:range
             [ rdf:type rdfs:Datatype ;
               owl:oneOf ("female"^^xsd:string "male"^^xsd:string "unspecified"^^xsd:string)
             ] .

view:ViewNode
     rdfs:subClassOf
             [ rdf:type owl:Restriction ;
               owl:cardinality "1"^^xsd:nonNegativeInteger ;
               owl:onProperty skos:prefLabel
             ] .


Here is a visual representation:

View-builder-example.png

The demographics group shown above has slots whose attributes, fp:gender, fp:ageRange, fp:postalCode, are all from the Flat Persona vocabulary.

The interests group shown above has a slot whose attribute is the complex valued attribute, online-behavior:interest. In this rather special case the presentation logic should render the name of the class of the instance (e.g. "Humor > Satire" or "World Destinations > Africa > East Africa > Nigeria") as opposed to rendering the value of an attribute of the instance as is done in the usual case.

A few additional notes on the above example

The FlatPersona namespace is only useful when either (a) there are not multiple entity values of the same attribute being requested, or, (b) there are just a few alternative entities and the "right" one can be figured out by matching using the role tags (e.g. "home" vCard entity vs. "work" vCard entity). Flattening, a simplification. It is an attempt to hide some complexity. But there are times when we can't hide the complexity. Multiple non-role-tagged entity values of an attribute is one of those times.

Displaying the "interests" of a user is a case where the flat persona approach won't work because a single p:Person node has a multi-valued (multi-entity-valued) "online-behavior:interest" attribute. You'll notice in the view hierarchy under the interests Group there is a Slot whose view:attribute attribute whose value is <http://www.eclipse.org/higgins/ontologies/2010/6/online-behavior#interest>--a value that is from the persona vocabulary (well, the online-behavior sub-vocabulary) and NOT from the flat persona vocabulary. We have to get all of the values of this attribute. These values are (multiple) online-behavior:InterestTopic-class entities. The specific class of this InterestTopic might be "Satire", but of course we probably want to display something like "Humor > Satire" --in other words rendering not just the "leaf" class name but where it sits in relation to the (up to 6 levels) of super-classes ("Humor" being the super-class of "Satire" in this case).

Back to the top