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

Difference between revisions of "Persona Data Model 2.0"

(SKOS)
m
(314 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{#eclipseproject:technology.higgins|eclipse_custom_style.css}} [[Image:Higgins logo 76Wx100H.jpg|right]]
+
{{#eclipseproject:technology.higgins|eclipse_custom_style.css}}
  
The Persona Data Model 2.0 (PDM) is builds on [[Higgins Data Model 2.0]] and a number of other models (aka schemas, vocabularies, ontologies). It used by [[Personal Data Store 2.0]] and will likely be used by future Higgins web services.
+
A data model for people and their relationships with other people and businesses. Builds on [[Higgins Data Model 2.0]].
  
 +
== Person entities, attributes, links and contexts  ==
  
 +
A natural, human person is represented as a graph of <code>p:Person</code> [[Entity|entities]] (nodes, or vertices) interconnected by links (edges). Each node represents a different facet of the user (person). Each of these facets is held in a separate (graph) container called a [[Context]] shown below as a round cornered rectangle.
  
== Introduction  ==
+
Each Person entity node is a set of attributes and values. These attributes may be ''simple'' literals (e.g. the user's first name) or they may be other entities (which we call ''complex'' attributes). These latter attributes are shown in diagrams as links to other entity nodes.
  
The [[Persona Data Model 2.0]] is an ontology about people. It is based on the [[Higgins Data Model 2.0]] which is in turn based on [[Context Data Model 2.0]] (aka CDM 2.0). This page provides an informal overview.
+
Typically each node in the person graph is located in its own context. The root node lies in a special context (for each user) called the ''root'' context.  
  
== A graph of Person nodes  ==
+
[[Image:Root 2.0.128.png|center]]
  
A person is represented as a graph of <code>p:Person</code> class [[Entity]] nodes (vertices) interconnected by links (edges). Each node represents a different facet of the user (person). Each node is an entity (i.e. a set of attributes &amp; values). These attributes may be simple literals (e.g. the user's first name) or they may be other entities. These latter ''complex'' attributes are rendered a as links (edges) to other nodes, but these edges and nodes are not considered part of the graph.
+
All of the Person entities can be reached by traversing links of the following kinds, (although other links may also exist (e.g. <code>foaf:knows</code>, etc.):
  
The graph is a logical abstraction. The data behind these nodes may be physically located anywhere on the Internet.  
+
;<code>h:correlation</code>: A link from an entity representing person A to (i) an entity that also represents person A or (ii) to an interstitial Proxy whose <code>p:resource</code> link points to an entity that also represents person A
 +
;<code>h:relation</code>: A link from an entity representing person A to (i) an entity that represents a person other than person A or (ii) to an interstitial Proxy whose <code>p:resource</code> link points to an entity that represents a person other than person A
 +
;<code>h:indeterminate</code>: A link from an entity representing person A to (i) an entity that represents a person that may or may not represent person A or (ii) to an interstitial Proxy whose <code>p:resource</code> link points to an entity that represents a person that may or may not represent person A
 +
;<code>proxy:resource</code>: A link from a Proxy to an entity in another context.
  
Typically each node in the Person graph is located in its own [[Context]]. The root node lies in a special context (for each user) called the ''root'' context.
+
== Vocabularies ==
  
All of the main persona entities can be reached by traversing links of the following kinds, (although other links may also exist (e.g. <code>p:source</code>, <code>foaf:knows</code>, etc.)):  
+
=== Vocabularies for Describing People ===
 +
Contexts describe their contents (i.e. person entity attributes) using in the [[Persona vocabulary]] which in turn imports the following well known vocabularies (aka ontologies):
 +
* [[VCard vocabulary usage]]
 +
* [[GeoLocation vocabulary usage]]
 +
* [[FOAF vocabulary usage]]
  
*<code>h:correlation</code>
+
...and the following Higgins-defined vocabularies:
*<code>h:relation</code>
+
* [[Context vocabulary]]
*<code>h:indeterminate</code>
+
* [[Proxy vocabulary]]
*<code>p:subCorrelation</code>
+
* [[Higgins Data Model 2.0]]
  
=== p:subCorrelation and Access Control  ===
+
Not imported by the [[Persona vocabulary]] but recommended where relevant to the developer's problem space:
 +
* [[OpenSocial2 vocabulary]] - additional social Person attributes, Messages, Organization etc.
 +
* [[SchemaOrg vocabulary]] - additional attributes for Person, Organization, Place, Event
 +
* [[Payment vocabulary]] - credit cards, products purchased, etc.
 +
* [[Interest vocabulary]] - general interests - subclasses of online-behavior:InterestTopic
 +
* [[I-Card vocabulary]] - OASIS IMI InfoCard cards
 +
* [[Places vocabulary]] - a database of cities, regions, countries
  
PDM adds <code>p:subCorrelation</code>, a specialized (directed) <code>h:correlation</code>. It is a relation between two Persons in different contexts that are asserted to be representing the same person and such that the value entity is used in a broader scope (with generally more relaxed access control policies). The size of the intended "audience" for the value entity is typically larger than the intended audience for the source entity. It is a ''non-symmetric'' attribute of an entity. The value of this attribute is another entity.
+
=== Supporting Vocabularies ===
  
SubCorrelation allows us to construct a directed graph of entities radiating out from the root node. The root node's attributes are the most privileged information about a person. Below is an example of a directed graph. We have displayed a reasonable "default" access control policy for each "level" (i.e. number of hops from the root) of the graph.
+
The following vocabularies are used to support the PDS application itself:
  
[[Image:Subcorr.png|center]]  
+
* [[Flat Persona vocabulary]] - a flattened, simplified subset useful for querying persona.owl-based data stores
 +
* [[Template vocabulary]] - for describing ''template'' contexts that are instantiated as ''regular'' contexts. Also uses these vocabularies:
 +
** [[View-builder vocabulary]] - for describing how to hierarchically organize the contents of a context for presentation (e.g. in a UI)
 +
** [[App-data vocabulary]] - for describing active, JavaScript content that is either stored in a template or fetched from an external service
 +
** [[Mapping vocabulary]] - a set of rules used to map between persona.owl and vocabularies used by external sites and services
 +
* [[Template-meta vocabulary]] - metadata about connection templates; used to create a registry of templates
 +
* [[Event vocabulary]] - for describing attribute changed and attribute disclosure events
  
=== More detailed example graph  ===
+
== Proxies ==
  
A more detailed example graph is shown below. In order to simplify the above diagram we follow a convention whereby the links are drawn between contexts whereas in reality the links are between the main <code>p:persona</code> objects within each of these contexts. Further, these main persona entities may well themselves have complex attributes (i.e. links to other entities). These have also been omitted.
+
A Proxy is an object that contains a link (proxy:resource) to an entity (usually a Person) in another context. A proxy allows lazy loading (e.g. by user interfaces) of the entity to which it points. The UI code can rapidly load cards and display them visually. Loading of the resource's context can be delayed and/or happen in a background process.
  
[[Image:Root 2.0.119.png|center]]
+
To simplify diagrams of the persona data model we can hide card/proxies by using the following shorthands:
  
=== Vocabularies  ===
+
[[Image:Pdm proxy 2.0.108B.png|center]]
  
In the above example all of the contexts except one express their contents using the Persona Data Model (vocabulary) (shown as purple "PDM"s above). The exception is the managed i-card from Equifax which uses attribute (aka claim) URIs defined by the OASIS IMI TC and by the ICF's (Information Card Foundation) schema working group.
+
For details about proxies see [[Proxy vocabulary]].
  
=== Linked Contexts ===
+
== Context Issuer/Authority and Access Control ==
 +
As we've described above, contexts contain person entities each of which is comprised of a set of attributes. Each context has an ''issuer'' attribute that indicates whom is authoritative over the entire contents of the context. If the user is named as the ''issuer'' of the context then the access control policy allows the user to edit and update the entire contents of the context as they see fit. Contexts for which the user is the issuer are physically located within the PDS--the ADS to be precise). The access control policy is contained within a special ''control'' context associated with each (regular) context. For more information about control contexts see the section below on supporting contexts.
  
A "consuming" persona in one context (e.g. the profile context shown below) may be linked to a "source" persona in another context. This is done by linking the personas with a <code>p:source</code> link (complex-valued attribute). When the persona nodes in two contexts are linked in this way, this is an example of "linked contexts."
+
== Connection Context Pairs ==
  
These <code>p:source</code> links allow a single ''consuming'' persona node to aggregate one or more other persona nodes (usually of differing <code>p:role</code> values) from other contexts. This promotes reuse of personas and contexts and minimizes copying and duplication. For example a "recipient" persona in one context might hold a name, address and phone number that correspond to a physical address, say the person's home. If the user uses this home address in 100 Profile Contexts (e.g. 100 eCommerce websites) each of these 100 context's main personas can have a p:source link to this shared home persona & context, rather than having 100 copies of this persona in each of the 100 contexts.
+
A connection is a relationship between the PDS user and an external site/business or a friend's account on their PDS. There are two sides to these relationships, but not in the usual sense of things. One side is the face that the user wishes to present to the other party. The other side is what the other party says about the person. Each "side" is represented as a p:Person entity. Each p:Person entity lives in its own ''connection'' context. Since both p:Person entities are about the same person, the two person entities are interconnected with h:correlation links.  
  
[[Image:Linked contexts 20.109.png|center]]
+
We refer to one of these ''connection'' contexts as the ''definer'' and the other as ''participant''. In every relationship one party is defining the ground rules for the relationship, and the other is consenting to play within these rules. In a person-to-business relationship the user plays the role of participant, and the business plays the role of definer. In a person-to-person relationship the user could play either role.  
  
Every p:source link also has an inverse link p:consumer pointing in the opposite direction. For clarity these "back" links are not shown above. Any persona with more than one "incoming" p:source link (or, said another way more than one outgoing "p:consumer" link) is essentially a "shared" persona. Updating a shared persona has the effect of altering the attribute values that will be returned by the contexts that use a shared persona as a source.
+
The definer-created template that governs the connection relationship identifies which attributes the definer provide (i.e. is authoritative over) v.s. which attributes it requests from the participant (i.e. the participant is authoritative over). However, the actor playing the definer role writes to the definer context and the actor playing the participant role writes to the participant context. As a consequence, any given attribute (whether definer-authoritative or participant-authoritative) may be written either context; or both.
  
At present these p:source and p:consumer links are used only to link persona entities, not entities in general.
+
If the user is playing the role of participant, the identifier of the person entity in the participant context is "<contextid>#me" by convention (see the Naming Conventions section below for more details). The id of the person entity in the definer context is a ''globally'' unique identifier of the form "<contextid>#localentityid" where localentityid is usually a URI-friendly normalization of the user's username on the external system.  
  
=== Access Control ===
+
At this point an example might be helpful. Let's take the example of a relationship between the user and the New York Times:
  
====Attribute-level Access Control====
+
[[Image:Connection contexts 2.0.107b.png|center]]
The rules governing access to attributes in context C1 are defined in an external ''control'' context C2 where C2 is an instance of Template Context. The access control policies in C2 are defined using the Higgins data model's [[Higgins_Data_Model_2.0#Access_Control | access control vocabulary]].
+
  
Note: This C2 template context may also contain other rules and definitions unrelated to access control.
+
The attributes of the person entity in the ''participant'' context are the set of statements that Alice makes about herself in the context of their relationship with the NYTimes. It is the face or persona that she wishes to present to that business. Examples might include her, first name, last name, email address, home delivery address, etc. Alice can make these statements by directly editing them in the ''participant'' context using her PDS client. However, she could also express the same intent by interacting with the NYTimes website directly. If she did so the NYTimes agent would write the updated values of these attributes into the ''definer'' context.  
  
====Person-level Access Control and Linked Contexts ====
+
The attributes of the Person entity in the ''definer'' context are the set of statements that the NTimes wishes to make about Alice in the context of that user's relationship with the NYTimes. Examples might include Alice's subscriber id. These two Person entities are bi-directionally linked with h:correlation links.
  
In addition to the Attribute-level Access Controls, a user agent has write access to a context if:
+
The access control policy of the participant context allows Alice to read and write attributes, and the NYTimes to read them. The access control policy of the ''definer'' context allows Alice to read attributes, and the NYTimes to read and write them.
* the user agent is the issuer of the context (i.e. it created the context in the first place)
+
* the persona to be edited is not linked to by "p:source" links from any personas in contexts whose issuer is other than the user agent
+
  
=== Representing Social Graphs  ===
+
In the user interface (in the Higgins portal) these twin contexts are integrated together and displayed as a single semi-editable view. We discuss attribute integration further in a separate section below.
  
==== h:relation ====
+
=== Attribute Integration ===
  
[[Higgins Data Model 2.0|HDM]] defines a <code>h:relation</code> complex attribute that is used in PDM to link one <code>Person</code> node to another where each <code>Person</code> node represents a different person. No symmetry is implied in this thus the statement (A <code>h:relation</code> B) is akin to saying person A "knows of" person B.  
+
Both the definer and the participant contexts contain p:Person entities with a set of attributes. These two attribute sets are not necessarily disjoint (i.e. there may be N>1 attributes that are common to both p:Persons). The integration algorithm is as follows:
 +
* For attributes that exist only on one or the other (but not both) of the two interlinked persons, take their values from whichever person entity they are found.
 +
* For attributes that exist on both persons, take the values from the person whose containing context's modified date-time is more recent.  
  
Shown below are two social graph examples. One uses <code>foaf:knows</code> links and and (unrelated to this) shows each node in its own context. The other uses <code>h:relation</code> links and (unrelated) shows all persona nodes in a single context. In the Work context we see that the user knows three colleagues but doesn't know how they know one another. In the Home &amp; Family context we see that the user knows two people and that everyone knows one another. The <code>foaf:knows</code> links are shown in both directions although logically this is redundant since <code>foaf:knows</code> is what is a called a symmetric relation.  
+
Let's examine this algorithm using an example of Alice's connection to the NYTimes website. The parameters of this connection were defined by NYTimes, specifically, by a NYTimes-minted ConnectionTemplate. The relationship involves two disjoint sets of attributes: the set of attributes for which the definer is authoritative, and the set for which the participant is authoritative. In this example Alice is authoritative over three: her first name, last name, and email address. The NYTimes is authoritative over one: Alice's subscriber id.
  
Nodes that represent the user are shown in purple. Nodes representing a person other than the user are shown in red.  
+
Alice plays the role of participant. Alice's PDS's connection viewer/editor reads attributes from both contexts, integrates them according to the algorithm above, and displays a UI showing these all four of these attributes. Since Alice is authoritative over first name, last name and email address, these are displayed using editable UI widgets. Since the NYTimes is authoritative over her subscriber id, this is displayed in a non-editable widget. If Alice updates any values of any of the three editable attributes, these updated values are written into the participant context (and the context's 'modified' timestamp is updated). As described in the next paragraph, the definer context may contain updated values for none, some or all of the attributes over which Alice is authoritative. Thus these attributes may ultimately exist in both contexts. Per the integration algorithm, the UI takes the values of the common attributes from the most recently updated context. If the definer context has been more recently updated, then it reads these Alice-authoritative attributes from the definer context and writes them into the participant context.
  
[[Image:Social graph 2.0.102.png|center]]
+
The NYTimes plays the role of definer. We ignore here the technical details (e.g. network protocols, and/or APIs.) of how this data connection works, and just look at the attribute integration logic. The NTYimes has read/write access to the definer context and read access to the participant context. It can also read the modified date-time values of each. The NYTimes is authoritative over the subscriber id value and under no circumstance (either with the PDS or on the NYTimes site) can Alice update or change this value. The NYTimes writes the value of the subscriber id value into the definer context. However, for the other three attributes over which Alice is authoritative, Alice may update their values on the NYTimes site. If she does, the NYTimes writes the updated values of these 3 attributes into the definer context (and its modified value is updated).
  
==== foaf:knows ====
+
== Website Facade Connections ==
  
To indicate that a person A "knows" person B where some level of reciprocated interaction between the parties is implied, we use foaf:knows.  
+
Until the day when businesses natively support bi-directional data connection APIs and open protocols (e.g. perhaps things built on top of OpenID Connect, etc.) we can create a connection another way. The Higgins PDS project includes an optional browser extension (aka HBX) that can fill attributes from the PDS to the site, and scrape data from the web pages of the site into the user's PDS.
  
Since foaf:knows is a broader concept than h:relation, foaf:knows is not a sub-attribute of h:relation. Thus if we had the statement "A h:relation B" then we might later add a second statement "A foaf:knows B" to add the stronger, broader (and symmetric) concept of "knowing."
+
The data model to implement this involves only one half of the participant/definer context pair described in the previous section. In this case we instantiate a single participant context of a special kind called a WebsiteFacade. The template for this website facade includes scripts, mapping rules and sometimes custom JavaScript to allow the HBX to read/write attributes from/to the site and update them in the user's ADS account. In addition to being editable using the PDS web client UI, the HBX can execute JavaScript that edits it. See [[Website Facade Connection Example]] for more details.
  
==== h:indeterminate ====
+
== Supporting Contexts  ==
  
HDM also defines <code>h:indeterminate</code> link attribute on node A to indicates that its value(s) may or may not represent the same thing as is represented by A.
+
Each regular context (e.g. each of the contexts shown above) has the following links:
  
==== Implementation Note ====
+
*0..1 ctxt:template
 +
*0..1 h:control
 +
*1..1 h:vocabulary
  
Consumers of the HDM may traverse <code>h:relation</code>, <code>h:correlation</code> and <code>h:indeterminate</code> attribute links and (despite ignoring all other links) traverse the entire graph of <code>Person</code> nodes.
+
[[Image:Supporting 2.0.117.png|center]]
  
== Persona.owl ==
+
=== Template Context  ===
  
This is the main vocabulary at the heart of the [[Persona Data Model 2.0]]
+
A template context acts as a template for a (non-template) context. It contains information common to all instances instantiated from it. Each non-template context may have up to one associated template context (pointed to by p:template attribute).  
  
=== UML Overview ===
+
''ConnectorTemplates'' are templates that describe and govern the relationship between a user and an external party such as a business or a friends's PDS. A ConnectorTemplate describes:
[[Image:Persona 2.0.109.png|center]]
+
* The set of attributes that each "end" of the relationship (e.g. participant vs. definer) agree to provide
 +
* Vocabulary/schema mapping rules to transform the "other" party's attributes into and out of the persona data model
 +
* In the case of connections to websites (as opposed to web services or other PDSes) it may include scripts (e.g. JavaScript) to read/write to/from the site
 +
* ''Future'': a legal contract (agred to by both parties) that governs how each party's attributes may be used.  
  
=== Classes===
+
For more information about templates see [[Template vocabulary]].
==== <code>Person</code> ====
+
  
A contextualized aspect (aka facet) of a person.  
+
''AppTemplates'' are templates for instantiated applets (PDS add-ons) that have read (and potentially write) access to a specific set of attributes within the PDS.
  
*subClassOf <code>h:Person</code>
+
=== Control Context  ===
*subClassOf <code>geo:SpatialThing</code>
+
  
*0..N <code>subCorrelation</code>
+
Each regular context is associated with one "control" context (linked to by h:control). A control context is associated with one regular context. The control context contains meta information including:
*0..N <code>hasAgent</code>
+
*0..N <code>source</code>
+
  
==== <code>Role</code>====
+
*date-time when the regular context was created and modified
 +
*access control lists:
 +
**list of parties (currently PDS account ids) that may read the regular context
 +
**list of parties that may write the regular context
 +
**list of parties that may append to the regular context
  
Abstract concept of a role that a <code>Person</code> plays.
+
=== Vocabulary Context  ===
  
====<code>Internal</code>====
+
Each regular context has an h:vocabulary link to a context holding the vocabulary it uses to describe its contents. Multiple regular contexts may the same vocabulary context. The value of this link is usually a reference to the context holding persona.owl (see [[Persona vocabulary]]).
Roles that a person may play
+
* subClassOf <code>Role</code>
+
Defined instances:
+
*<code>Work</code>: A work-related role.
+
*<code>Home</code>: Acting in a personal, non-professional capacity.
+
*<code>Buyer</code>: A person who is physically able to receive a bill and pay a bill. This person must be "contactable" to play this role. They must have a v:adr and v:n and optionally other information so that the bill/invoice can be physically delivered to them. Further, they must be able to pay this bill.
+
*<code>Recipient</code>: A person who is physically able to receive a letter, parcel or delivery. This person must be "contactable" to play this role. That is, they must have a v:adr and v:n and optionally other information so that the delivery can be physically routed to them.
+
  
====<code>External</code>====
+
== Social Graphs  ==
Roles defined by the context of your interaction. E.g. an eCommerce website "imposes" an eCommerce role on you, whereas a gaming site imposes broading a gaming role on you.
+
* subClassOf <code>Role</code>
+
Defined instances:
+
*<code>Ecommerce</code>: A role imposed by eCommerce interactions, e.g. with an eCommerce website
+
*<code>Gaming</code>: A role imposed by gaming-related interactions, e.g. with a gaming website like world of warcraft
+
*<code>SocialNetworking</code>: A role imposed by social interactions, e.g. with a social networking site
+
  
==== <code>RootContext</code>====
+
=== h:relation ===
A singleton context that contains the "root" Person node of the Person graph.
+
* subClassOf <code>h:Context</code>
+
  
==== <code>ProfileContext</code>====
+
[[Higgins Data Model 2.0|HDM]] defines a <code>h:relation</code> complex attribute that is used in PDM to link one <code>Person</code> node to another where each <code>Person</code> node represents a different person. No symmetry is implied in this thus the statement (A <code>h:relation</code> B) is akin to saying person A "knows of" person B.
* subClassOf <code>h:Context</code>
+
  
A context that stores the following kinds of attributes:
+
Shown below are two social graph examples. One uses <code>foaf:knows</code> links and and (unrelated to this) shows each node in its own context. The other uses <code>h:relation</code> links and (unrelated) shows all person nodes in a single context. In the Work context we see that the user knows three colleagues but doesn't know how they know one another. In the Home &amp; Family context we see that the user knows two people and that everyone knows one another. The <code>foaf:knows</code> links are shown in both directions although logically this is redundant since <code>foaf:knows</code> is what is a called a symmetric relation.
# One or more <code>p:Person</code> nodes each with RP-specific attributes
+
 
#* e.g. united.com frequent flyer number and account balance
+
Entities that represent the user are shown in purple. Nodes representing a person other than the user are shown in red.  
#* <code>foaf:OnlineAccount</code> instance (including p:password)
+
 
# <code>p:Person</code> nodes that have <code>p:source</code> attributes
+
[[Image:Social 2.0.107.png|center]]
# Disclosure events
+
 
#* Events that record what attributes have been disclosed to an RP.
+
=== foaf:knows ===
 +
 
 +
To indicate that a person A "knows" person B where some level of reciprocated interaction between the parties is implied, we use foaf:knows.
 +
 
 +
Since foaf:knows is a broader concept than h:relation, foaf:knows is not a sub-attribute of h:relation. Thus if we had the statement "A h:relation B" then we might later add a second statement "A foaf:knows B" to add the stronger, broader (and symmetric) concept of "knowing."
 +
 
 +
=== h:indeterminate ===
 +
 
 +
HDM also defines <code>h:indeterminate</code> link attribute on node A to indicates that its value(s) may or may not represent the same thing as is represented by A.
 +
 
 +
=== Implementation Note ===
 +
 
 +
Consumers of the HDM may traverse <code>h:relation</code>, <code>h:correlation</code> and <code>h:indeterminate</code> attribute links and (despite ignoring all other links) traverse the entire graph of <code>Person</code> nodes.
  
 +
== Inbox Context ==
 +
In order to bootstrap sharing, each PDS user has an inbox context that is globally append-able. This allows users to append invites to other users. See the [[Data Sharing With Alice And Bob]] scenario.
  
 +
== Naming Conventions ==
  
=== Attributes ===
+
=== Context Naming ===
  
==== <code>hasAgent</code> ====
+
==== User Context Naming ====
  
A person other than the user to whom some authority to act on the user's behalf has been delegated.
+
User contexts inside an ADS are are named according to the following pattern:
  
*domain: <code>p:Person</code>
+
  <code>http://<servername>/<username>/<context-name></code>
*value: <code>p:Person</code>
+
  
==== <code>issuer</code>  ====
+
If the context is part of a connection context pair then the ''context-name'' uniquely identifies the "other" party in the connection. If the other party is a website then ''context-name'' is the domain name of the site (e.g. "staples.com").
 +
 
 +
Examples wherein servername (PDS/ADS operator) is my.azigo.com:
  
In the [[Higgins Data Model 2.0]] all Context attributes are optional. However in the [[Persona Data Model 2.0]] we have this requirement:  
+
  <code>http://my.azigo.com/ptrevithick/awp</code> - anonymous web profile
 +
  <code>http://my.azigo.com/ptrevithick/staples.com</code> - paul's profile at staples.com
 +
  <code>http://my.azigo.com/ptrevithick/browsing</code> - browsing history
  
*All contexts that are made available by a third party (e.g. the government, a bank, etc.) MUST have a <code>p:issuer</code> attribute
+
==== Reserved Usernames ====
*The attribute value is a URI
+
*The URI is either the domain name that is the authority behind the attribute assertions or
+
*The value <code>http://!self</code> - the user has explicitly asserted entities &amp; attributes in this context
+
*The value <code>http://!derived</code> - the active client has derived entities &amp; attributes in this context based on observed behavior and/or assertions made by the user in other contexts
+
  
==== <code>neverRememberPassword</code> ====
+
Any username with 4 or less characters is reserved. Examples of reserved usernames:
Remember whether or not the person wants password managers to capture the password entered into a login form. Only used in Profile Contexts.
+
* sys
 +
* root
 +
* blog
  
* domain: <code>p:Person</code>
+
If the username is 4 or less characters this is the id of a system context (see next section)
* value: <code>xsd:boolean</code>
+
  
==== <code>password </code>  ====
+
==== System Context Naming ====
The value of the password that a person might enter into a login form. Only used in Profile Contexts
+
* domain: <code>foaf:OnlineAccount</code>
+
* value: <code>xsd:string</code>
+
  
==== <code>role</code> ====
+
  <code>http://<servername>/<reserved-username>/<meta-type>/<context-name></code>
A role played by a Person
+
* domain: <code>Person</code>
+
* value: <code>Role</code>
+
  
==== <code>source</code>  ====
+
The <meta-type> may be one of these values:
Person node in another context that describes an aspect (usually a role-specific aspect). Both <code>p:Person</code>s may or may not be representations of the same person.
+
* template
+
* ontology
* domain: <code>p:Person</code>
+
* data
* value: <code>p:Person</code>
+
  
==== <code>consumer</code>  ====
+
Example
Inverse of <code>p:source</code> link.
+
* domain: <code>p:Person</code>
+
* value: <code>p:Person</code> - consumer
+
  
==== <code>subCorrelation</code> ====
+
  <code>http://my.azigo.com/sys/template/awp</code> - the template for a user's regular "awp" context
A relation between two <code>p:Person</code> nodes in different contexts that are asserted to be representing the same person and such that the value entity is used in a broader scope (with generally more relaxed access control policies). The size of the intended "audience" for the value entity is larger than the intended audience for the source entity.
+
  <code>http://my.azigo.com/sys/ontology/tracker-catalog</code>
* domain: <code>Person</code>
+
  <code>http://my.azigo.com/sys/data/trackers</code>
* value: <code>Person</code>
+
  
=== Vocabularies Imported by persona.owl ===
+
=== Entity Naming ===
 +
The entity representing the user in most contexts has a local name of "me".
  
[[Image:Persona-imports.png|center]]
+
Example:
 +
  If the contextId is http://my.azigo.com/ptrevithick/awp and the local entityId is "me" then
 +
  the fully qualified entityId is:
 +
  http://my.azigo.com/ptrevithick/awp#me
  
==== Higgins-defined ====
+
== Examples ==
* '''onb:''' [[Online-behavior vocabulary]]
+
* '''osoc:''' [[Osoc-overlay vocabulary]]
+
* '''event:''' [[Event vocabulary]]
+
* '''pay:''' [[Payment vocabulary]]
+
* '''app-data''': [[App-data vocabulary]]
+
* '''r-card''': [[R-Card vocabulary]]
+
* '''i-card''': [[I-Card vocabulary]]
+
* '''mapping''': [[Mapping vocabulary]]
+
* '''template''': [[Template vocabulary]]
+
* '''h''': [[Higgins Data Model 2.0]]
+
  
====External====
+
Imagine a root context containing a p:Person entity locally named "me". This root node could have h:correlation links pointing to the root "me" entities in two contexts, a web profile context, and a alice-staples context.
* '''osoc''': [[OpenSocial vocabulary usage]]
+
* '''v''': [[VCard vocabulary usage]]
+
* '''geo''': [[GeoLocation vocabulary usage]]
+
* '''foaf''': [[FOAF vocabulary usage]]
+
* '''skos''': [[SKOS vocabulary usage]]
+
* '''spl''': [http://spinrdf.org/spl SPL], '''spin''': [http://spinrdf.org/spin SPIN], '''sp''': [http://spinrdf.org/sp SP]
+
* '''dc''': [http://dublincore.org/2008/01/14/dcelements.rdf# Dublin Core]
+
* '''owl''': [http://www.w3.org/TR/owl2-overview/ OWL 2], [http://www.w3.org/TR/rdf-schema/ RDFS], [http://www.w3.org/TR/rdf-syntax-grammar/ RDF]
+
  
 +
The web profile context might look like this:
  
 +
[[Image:Webprofile.png|center]]
  
== Restrictions on CDM 2.0 EntityIds  ==
+
== Attribute Metadata ==
  
The PDM 2.0 uses a restricted set of the full capabilities of CDM 2.0. The restriction is in the area of [[EntityId]]s. PDM 2.0 adds the following constraints:
+
To construct a data-driven presentation of the contents of contexts whose data is described using the Persona data model, metadata about the attributes within context are needed. See [[View-builder vocabulary#Cascading_Metadata]] for a discussion of where these metadata attributes are stored (i.e. which context) and how metadata attributes are evaluated when mapping rules are involved.
  
All entities:
+
For a given attribute, '''A''', the following metadata attributes (as described in [[Higgins Data Model 2.0#Attribute_Definitions]] (with the exception of ''categories'' which are not used in PDM 2.0)) comprise '''A''''s definition:
#All entityIds MUST be URIs
+
#All entityId values MUST be Linked Data URIs or XRI 2.0 URIs
+
#All entityIds within a given context MUST be either (a) relative to a "base" URI of the context or (b) absolute
+
#Whether or not an entityID is relative or absolute MUST be able to be determined by inspection of its syntax
+
#Absolute entityIds MAY be globally resolvable
+
#Globally resolvable entityIds resolve to an entity (resource description) within exactly one context
+
  
Context objects:
+
; UI widget label : This is stored in an internationalized string value of the skos:prefLabel metadata attribute. An example of a UI label might be the string "Zipcode" for the person's postal-code attribute.
#The entityId of the context object singleton is "_ContextSingleton"
+
; Example value : The example value is the value of the skos:example attribute. For example "name@domain.com" might be an example of an email value.
 +
; Hover/Tooltip text : The string description of the attribute is the value of the skos:description attribute.
 +
; Type : The type of an attribute is the value of the rdf:type attribute
 +
; Allowed values: The allowed values of an attribute is defined by the value of its rdfs:range metadata attribute. An rdfs:range may be an XML schema datatype such as xsd:nonNegativeInteger or it may be object valued in which the value of the rdfs:range attribute is the name of an entity class. If this class is a subclass of p:DiscreteRange, then the allowed values are the rdfs:label values of all instances/members of the class.
 +
; Cardinality : The min..max (inclusive) cardinality of an attribute is specified using owl:minCardinality and owl:maxCardinality. These two meta attributes are properties of a specific class of entity that is the domain of the attribute, not the attribute's own definition. In other words cardinality is expressed within the context of a class/set of individuals.
 +
; Syntax restrictions : We follow the latest OWL2 convensions. The value of the rdfs:range attribute may be rdfs:Datatypes augmented with owl:withRestrictions that include XML Schema facets (e.g. rdf:langRange xsd:length xsd:maxExclusive xsd:maxInclusive xsd:maxLength xsd:minExclusive xsd:minInclusive xsd:minLength xsd:pattern ) as described [http://www.w3.org/TR/owl2-rdf-based-semantics/#Facet_Names here].
  
== See Also ==
+
We have recently introduced a convention that the context id of metadata attribute M must be the same as the context id of A. If the currie form of A is ''ctxt:attname'' then the currie form of '''M''' must have a prefix (i.e. namespace) of ''ctxt''. For example if the attribute is ''fp:postalCode'' then metadata statements about ''fp:postalCode'' must be in the [[Flat Persona vocabulary]] context (fp being a prefix for this vocabulary) along with the definition of ''fp:postalCode'' itself. See also [[View-builder vocabulary]].
* [[Persona Attribute List]] - a list of all of the attribute concepts that can be represented in PDM
+
* [http://wiki.eclipse.org/images/0/0b/UnderstandingAppCards.pdf] - a developer summary of AppCard implementation issues
+
  
Use cases:
+
== Open Issues ==
 +
# To support connector contexts for which a WebsiteFacade is used for the definer side along with its associated JavaScript, it may be useful to add a "date-time-modified" timestamp to every context. This would allow sync operations via a set of N WebsiteFacade JavaScript programs to be decoupled from (and asynchronous to) real-time edit operations by the user. A more sophisticated approach would involve caching as a set of commands (transactions) the changes made to any context and allowing other contexts (well, their associated JavaScript) to subscribe to these transactions.
  
*[[Data Sharing With Alice And Bob]]
+
[[Category:Higgins 2]]
*[[Activity Streams In Persona]]
+

Revision as of 13:00, 15 August 2014

{{#eclipseproject:technology.higgins|eclipse_custom_style.css}}

A data model for people and their relationships with other people and businesses. Builds on Higgins Data Model 2.0.

Person entities, attributes, links and contexts

A natural, human person is represented as a graph of p:Person entities (nodes, or vertices) interconnected by links (edges). Each node represents a different facet of the user (person). Each of these facets is held in a separate (graph) container called a Context shown below as a round cornered rectangle.

Each Person entity node is a set of attributes and values. These attributes may be simple literals (e.g. the user's first name) or they may be other entities (which we call complex attributes). These latter attributes are shown in diagrams as links to other entity nodes.

Typically each node in the person graph is located in its own context. The root node lies in a special context (for each user) called the root context.

Root 2.0.128.png

All of the Person entities can be reached by traversing links of the following kinds, (although other links may also exist (e.g. foaf:knows, etc.):

h:correlation
A link from an entity representing person A to (i) an entity that also represents person A or (ii) to an interstitial Proxy whose p:resource link points to an entity that also represents person A
h:relation
A link from an entity representing person A to (i) an entity that represents a person other than person A or (ii) to an interstitial Proxy whose p:resource link points to an entity that represents a person other than person A
h:indeterminate
A link from an entity representing person A to (i) an entity that represents a person that may or may not represent person A or (ii) to an interstitial Proxy whose p:resource link points to an entity that represents a person that may or may not represent person A
proxy:resource
A link from a Proxy to an entity in another context.

Vocabularies

Vocabularies for Describing People

Contexts describe their contents (i.e. person entity attributes) using in the Persona vocabulary which in turn imports the following well known vocabularies (aka ontologies):

...and the following Higgins-defined vocabularies:

Not imported by the Persona vocabulary but recommended where relevant to the developer's problem space:

Supporting Vocabularies

The following vocabularies are used to support the PDS application itself:

  • Flat Persona vocabulary - a flattened, simplified subset useful for querying persona.owl-based data stores
  • Template vocabulary - for describing template contexts that are instantiated as regular contexts. Also uses these vocabularies:
    • View-builder vocabulary - for describing how to hierarchically organize the contents of a context for presentation (e.g. in a UI)
    • App-data vocabulary - for describing active, JavaScript content that is either stored in a template or fetched from an external service
    • Mapping vocabulary - a set of rules used to map between persona.owl and vocabularies used by external sites and services
  • Template-meta vocabulary - metadata about connection templates; used to create a registry of templates
  • Event vocabulary - for describing attribute changed and attribute disclosure events

Proxies

A Proxy is an object that contains a link (proxy:resource) to an entity (usually a Person) in another context. A proxy allows lazy loading (e.g. by user interfaces) of the entity to which it points. The UI code can rapidly load cards and display them visually. Loading of the resource's context can be delayed and/or happen in a background process.

To simplify diagrams of the persona data model we can hide card/proxies by using the following shorthands:

Pdm proxy 2.0.108B.png

For details about proxies see Proxy vocabulary.

Context Issuer/Authority and Access Control

As we've described above, contexts contain person entities each of which is comprised of a set of attributes. Each context has an issuer attribute that indicates whom is authoritative over the entire contents of the context. If the user is named as the issuer of the context then the access control policy allows the user to edit and update the entire contents of the context as they see fit. Contexts for which the user is the issuer are physically located within the PDS--the ADS to be precise). The access control policy is contained within a special control context associated with each (regular) context. For more information about control contexts see the section below on supporting contexts.

Connection Context Pairs

A connection is a relationship between the PDS user and an external site/business or a friend's account on their PDS. There are two sides to these relationships, but not in the usual sense of things. One side is the face that the user wishes to present to the other party. The other side is what the other party says about the person. Each "side" is represented as a p:Person entity. Each p:Person entity lives in its own connection context. Since both p:Person entities are about the same person, the two person entities are interconnected with h:correlation links.

We refer to one of these connection contexts as the definer and the other as participant. In every relationship one party is defining the ground rules for the relationship, and the other is consenting to play within these rules. In a person-to-business relationship the user plays the role of participant, and the business plays the role of definer. In a person-to-person relationship the user could play either role.

The definer-created template that governs the connection relationship identifies which attributes the definer provide (i.e. is authoritative over) v.s. which attributes it requests from the participant (i.e. the participant is authoritative over). However, the actor playing the definer role writes to the definer context and the actor playing the participant role writes to the participant context. As a consequence, any given attribute (whether definer-authoritative or participant-authoritative) may be written either context; or both.

If the user is playing the role of participant, the identifier of the person entity in the participant context is "<contextid>#me" by convention (see the Naming Conventions section below for more details). The id of the person entity in the definer context is a globally unique identifier of the form "<contextid>#localentityid" where localentityid is usually a URI-friendly normalization of the user's username on the external system.

At this point an example might be helpful. Let's take the example of a relationship between the user and the New York Times:

Connection contexts 2.0.107b.png

The attributes of the person entity in the participant context are the set of statements that Alice makes about herself in the context of their relationship with the NYTimes. It is the face or persona that she wishes to present to that business. Examples might include her, first name, last name, email address, home delivery address, etc. Alice can make these statements by directly editing them in the participant context using her PDS client. However, she could also express the same intent by interacting with the NYTimes website directly. If she did so the NYTimes agent would write the updated values of these attributes into the definer context.

The attributes of the Person entity in the definer context are the set of statements that the NTimes wishes to make about Alice in the context of that user's relationship with the NYTimes. Examples might include Alice's subscriber id. These two Person entities are bi-directionally linked with h:correlation links.

The access control policy of the participant context allows Alice to read and write attributes, and the NYTimes to read them. The access control policy of the definer context allows Alice to read attributes, and the NYTimes to read and write them.

In the user interface (in the Higgins portal) these twin contexts are integrated together and displayed as a single semi-editable view. We discuss attribute integration further in a separate section below.

Attribute Integration

Both the definer and the participant contexts contain p:Person entities with a set of attributes. These two attribute sets are not necessarily disjoint (i.e. there may be N>1 attributes that are common to both p:Persons). The integration algorithm is as follows:

  • For attributes that exist only on one or the other (but not both) of the two interlinked persons, take their values from whichever person entity they are found.
  • For attributes that exist on both persons, take the values from the person whose containing context's modified date-time is more recent.

Let's examine this algorithm using an example of Alice's connection to the NYTimes website. The parameters of this connection were defined by NYTimes, specifically, by a NYTimes-minted ConnectionTemplate. The relationship involves two disjoint sets of attributes: the set of attributes for which the definer is authoritative, and the set for which the participant is authoritative. In this example Alice is authoritative over three: her first name, last name, and email address. The NYTimes is authoritative over one: Alice's subscriber id.

Alice plays the role of participant. Alice's PDS's connection viewer/editor reads attributes from both contexts, integrates them according to the algorithm above, and displays a UI showing these all four of these attributes. Since Alice is authoritative over first name, last name and email address, these are displayed using editable UI widgets. Since the NYTimes is authoritative over her subscriber id, this is displayed in a non-editable widget. If Alice updates any values of any of the three editable attributes, these updated values are written into the participant context (and the context's 'modified' timestamp is updated). As described in the next paragraph, the definer context may contain updated values for none, some or all of the attributes over which Alice is authoritative. Thus these attributes may ultimately exist in both contexts. Per the integration algorithm, the UI takes the values of the common attributes from the most recently updated context. If the definer context has been more recently updated, then it reads these Alice-authoritative attributes from the definer context and writes them into the participant context.

The NYTimes plays the role of definer. We ignore here the technical details (e.g. network protocols, and/or APIs.) of how this data connection works, and just look at the attribute integration logic. The NTYimes has read/write access to the definer context and read access to the participant context. It can also read the modified date-time values of each. The NYTimes is authoritative over the subscriber id value and under no circumstance (either with the PDS or on the NYTimes site) can Alice update or change this value. The NYTimes writes the value of the subscriber id value into the definer context. However, for the other three attributes over which Alice is authoritative, Alice may update their values on the NYTimes site. If she does, the NYTimes writes the updated values of these 3 attributes into the definer context (and its modified value is updated).

Website Facade Connections

Until the day when businesses natively support bi-directional data connection APIs and open protocols (e.g. perhaps things built on top of OpenID Connect, etc.) we can create a connection another way. The Higgins PDS project includes an optional browser extension (aka HBX) that can fill attributes from the PDS to the site, and scrape data from the web pages of the site into the user's PDS.

The data model to implement this involves only one half of the participant/definer context pair described in the previous section. In this case we instantiate a single participant context of a special kind called a WebsiteFacade. The template for this website facade includes scripts, mapping rules and sometimes custom JavaScript to allow the HBX to read/write attributes from/to the site and update them in the user's ADS account. In addition to being editable using the PDS web client UI, the HBX can execute JavaScript that edits it. See Website Facade Connection Example for more details.

Supporting Contexts

Each regular context (e.g. each of the contexts shown above) has the following links:

  • 0..1 ctxt:template
  • 0..1 h:control
  • 1..1 h:vocabulary
Supporting 2.0.117.png

Template Context

A template context acts as a template for a (non-template) context. It contains information common to all instances instantiated from it. Each non-template context may have up to one associated template context (pointed to by p:template attribute).

ConnectorTemplates are templates that describe and govern the relationship between a user and an external party such as a business or a friends's PDS. A ConnectorTemplate describes:

  • The set of attributes that each "end" of the relationship (e.g. participant vs. definer) agree to provide
  • Vocabulary/schema mapping rules to transform the "other" party's attributes into and out of the persona data model
  • In the case of connections to websites (as opposed to web services or other PDSes) it may include scripts (e.g. JavaScript) to read/write to/from the site
  • Future: a legal contract (agred to by both parties) that governs how each party's attributes may be used.

For more information about templates see Template vocabulary.

AppTemplates are templates for instantiated applets (PDS add-ons) that have read (and potentially write) access to a specific set of attributes within the PDS.

Control Context

Each regular context is associated with one "control" context (linked to by h:control). A control context is associated with one regular context. The control context contains meta information including:

  • date-time when the regular context was created and modified
  • access control lists:
    • list of parties (currently PDS account ids) that may read the regular context
    • list of parties that may write the regular context
    • list of parties that may append to the regular context

Vocabulary Context

Each regular context has an h:vocabulary link to a context holding the vocabulary it uses to describe its contents. Multiple regular contexts may the same vocabulary context. The value of this link is usually a reference to the context holding persona.owl (see Persona vocabulary).

Social Graphs

h:relation

HDM defines a h:relation complex attribute that is used in PDM to link one Person node to another where each Person node represents a different person. No symmetry is implied in this thus the statement (A h:relation B) is akin to saying person A "knows of" person B.

Shown below are two social graph examples. One uses foaf:knows links and and (unrelated to this) shows each node in its own context. The other uses h:relation links and (unrelated) shows all person nodes in a single context. In the Work context we see that the user knows three colleagues but doesn't know how they know one another. In the Home & Family context we see that the user knows two people and that everyone knows one another. The foaf:knows links are shown in both directions although logically this is redundant since foaf:knows is what is a called a symmetric relation.

Entities that represent the user are shown in purple. Nodes representing a person other than the user are shown in red.

Social 2.0.107.png

foaf:knows

To indicate that a person A "knows" person B where some level of reciprocated interaction between the parties is implied, we use foaf:knows.

Since foaf:knows is a broader concept than h:relation, foaf:knows is not a sub-attribute of h:relation. Thus if we had the statement "A h:relation B" then we might later add a second statement "A foaf:knows B" to add the stronger, broader (and symmetric) concept of "knowing."

h:indeterminate

HDM also defines h:indeterminate link attribute on node A to indicates that its value(s) may or may not represent the same thing as is represented by A.

Implementation Note

Consumers of the HDM may traverse h:relation, h:correlation and h:indeterminate attribute links and (despite ignoring all other links) traverse the entire graph of Person nodes.

Inbox Context

In order to bootstrap sharing, each PDS user has an inbox context that is globally append-able. This allows users to append invites to other users. See the Data Sharing With Alice And Bob scenario.

Naming Conventions

Context Naming

User Context Naming

User contexts inside an ADS are are named according to the following pattern:

  http://<servername>/<username>/<context-name>

If the context is part of a connection context pair then the context-name uniquely identifies the "other" party in the connection. If the other party is a website then context-name is the domain name of the site (e.g. "staples.com").

Examples wherein servername (PDS/ADS operator) is my.azigo.com:

  http://my.azigo.com/ptrevithick/awp - anonymous web profile
  http://my.azigo.com/ptrevithick/staples.com - paul's profile at staples.com
  http://my.azigo.com/ptrevithick/browsing - browsing history

Reserved Usernames

Any username with 4 or less characters is reserved. Examples of reserved usernames:

  • sys
  • root
  • blog

If the username is 4 or less characters this is the id of a system context (see next section)

System Context Naming

  http://<servername>/<reserved-username>/<meta-type>/<context-name>

The <meta-type> may be one of these values:

  • template
  • ontology
  • data

Example

  http://my.azigo.com/sys/template/awp - the template for a user's regular "awp" context
  http://my.azigo.com/sys/ontology/tracker-catalog
  http://my.azigo.com/sys/data/trackers

Entity Naming

The entity representing the user in most contexts has a local name of "me".

Example:

 If the contextId is http://my.azigo.com/ptrevithick/awp and the local entityId is "me" then
 the fully qualified entityId is:
 http://my.azigo.com/ptrevithick/awp#me

Examples

Imagine a root context containing a p:Person entity locally named "me". This root node could have h:correlation links pointing to the root "me" entities in two contexts, a web profile context, and a alice-staples context.

The web profile context might look like this:

Webprofile.png

Attribute Metadata

To construct a data-driven presentation of the contents of contexts whose data is described using the Persona data model, metadata about the attributes within context are needed. See View-builder vocabulary#Cascading_Metadata for a discussion of where these metadata attributes are stored (i.e. which context) and how metadata attributes are evaluated when mapping rules are involved.

For a given attribute, A, the following metadata attributes (as described in Higgins Data Model 2.0#Attribute_Definitions (with the exception of categories which are not used in PDM 2.0)) comprise A's definition:

UI widget label 
This is stored in an internationalized string value of the skos:prefLabel metadata attribute. An example of a UI label might be the string "Zipcode" for the person's postal-code attribute.
Example value 
The example value is the value of the skos:example attribute. For example "name@domain.com" might be an example of an email value.
Hover/Tooltip text 
The string description of the attribute is the value of the skos:description attribute.
Type 
The type of an attribute is the value of the rdf:type attribute
Allowed values
The allowed values of an attribute is defined by the value of its rdfs:range metadata attribute. An rdfs:range may be an XML schema datatype such as xsd:nonNegativeInteger or it may be object valued in which the value of the rdfs:range attribute is the name of an entity class. If this class is a subclass of p:DiscreteRange, then the allowed values are the rdfs:label values of all instances/members of the class.
Cardinality 
The min..max (inclusive) cardinality of an attribute is specified using owl:minCardinality and owl:maxCardinality. These two meta attributes are properties of a specific class of entity that is the domain of the attribute, not the attribute's own definition. In other words cardinality is expressed within the context of a class/set of individuals.
Syntax restrictions 
We follow the latest OWL2 convensions. The value of the rdfs:range attribute may be rdfs:Datatypes augmented with owl:withRestrictions that include XML Schema facets (e.g. rdf:langRange xsd:length xsd:maxExclusive xsd:maxInclusive xsd:maxLength xsd:minExclusive xsd:minInclusive xsd:minLength xsd:pattern ) as described here.

We have recently introduced a convention that the context id of metadata attribute M must be the same as the context id of A. If the currie form of A is ctxt:attname then the currie form of M must have a prefix (i.e. namespace) of ctxt. For example if the attribute is fp:postalCode then metadata statements about fp:postalCode must be in the Flat Persona vocabulary context (fp being a prefix for this vocabulary) along with the definition of fp:postalCode itself. See also View-builder vocabulary.

Open Issues

  1. To support connector contexts for which a WebsiteFacade is used for the definer side along with its associated JavaScript, it may be useful to add a "date-time-modified" timestamp to every context. This would allow sync operations via a set of N WebsiteFacade JavaScript programs to be decoupled from (and asynchronous to) real-time edit operations by the user. A more sophisticated approach would involve caching as a set of commands (transactions) the changes made to any context and allowing other contexts (well, their associated JavaScript) to subscribe to these transactions.

Back to the top