What is Metaforik¶
Metaforik is a specification for syndicating dynamic media across distribution channels and works by splitting intellectual property into a concept which we call an “Item” and digital assets which are used to render the concept on the screen. By abstracting content into a request for a concept, references to assets are abstracted in such a way that the consuming application is given the ability to choose which actual asset to retrieve for a given item.
Metaforik enables you to define a conceptual idea (a Metaforik "Item") with metadata that refers to specific digital assets and services. The metadata includes the purpose for these assets. A web service may use this information to control the discovery of the right asset or service for the person or purpose defined in the publisher of the Metaforik item.
As such, Metaforik is a distributed asset management specification simultaneously supporting assets and services being discovered through a unified URI where the asset or service returned suits the specific device, authorization level, key, time period, quality, language and a host of other variables, giving you unprecedented control over who can discover what asset related to your ideas.
How does it work?¶
Each Metaforik concept consists of an Item and at least one corresponding Asset. Each Item contains metadata related to the concept it represents, such as description, audience and content tags, associated URI and information on the publisher. Within that Item, there is the ability to define multiple Assets that can represent it in a number of different scenarios. Supported scenarios include:
- Device/Platform specific file formats
- Performance optimization. E.g.: low-poly and high-poly versions of the same model
- User-specific versions of a particular asset. E.g.: low-quality preview version for certain users and high-quality versions for others
- Region Specific media such as movies with the appropriate subtitles or dubbing.
Write once, run everywhere
Because there aren’t hard links to actual assets, the ability to write once, run everywhere is very much a possibility and shifts the responsibility for content availability towards the content publisher.
Metaforik has three layers. Domain (one per service), Subdomain (many per service)and Items (many per service, many different types, associated with one subdomain and one publisher)
Metaforik permission structure:
Each Item has whitelist/blacklist ACL (access control list)
Each Asset has whitelist/blacklist ACL
ACL operates on Domain (subdomain), Persona (user) and Group scopes
Users
Users exist within a common domain
May be members of multiple subdomains
Users (via Persona) may optionally be members of one or more groups
Usernames must have a unique Alias (each Persona has an alias) within each subdomain
Users can have multiple Personas
Users must have a unique name within each domain
Users can also be Metaforik items, the user information being displayed according to the nature of the request.

Items
Items must have a unique name within each subdomain
ItemA@SubdomainA is different to ItemA@SubdomainB
Permissions can be set at Alias, Group or Subdomain scope
Example Item XML
1 <Metaforik xmlns="http://schemas.vastpark.com/2009/Metaforik/">
2 <Item Name=“DocumentX" Publisher=“VendorA“ PublisherUri=“vendora.com" AudienceTags="" ContentTags="" Created="2010-09-07T13:11:32" Modified="2010-09-07T13:11:32" StartDate="0001-01-01T00:00:00" EndDate="0001-01-01T00:00:00" Uri="" Version=“1">
3 <Asset Type="Model" Culture="en-us" Created="2010-09-07T13:11:32" Modified="2010-09-07T13:11:32" DeviceRating="0" Preference="0" Source=“http://storage.usda.gov/documentx.docx" TargetDevice="PC" Size=“12130">
4 <License>Metaforik Asset License</License>
5 <Author Name="Craig Presti" Email="craig@vastpark.com" Uri="http://theparkisvast.com"/>
6 </Asset>
7 <Permissions>
8 <Whitelist Context="Global" Scope="Group" Value="privateGroup" />
9 </Permissions>
10 </Item>
11 </Metaforik>

Namespace
Every item is attached to a subdomain
A persona is an item
A group is an item
Namespace is local to each subdomain. The following is valid:
PersonaA@SubdomainA
ItemA@SubdomainA
GroupA@SubdomainA
PersonaA@SubdomainB
GroupA@SubdomainB
ItemB@SubdomainB
Permissions can exist at the Alias, Domain or Group levels
Alias governs access for the user account (ie: PersonaA@SubdomainA)
Group governs access for members of that group (ie: GroupA@SubdomainA
Domain governs access for members of that subdomain