Author: lgiessmann
Date: Sun Jul 19 14:42:47 2009
New Revision: 94
Log:
finalized the JSON ebnf schema
Modified:
trunk/docs/json.ebnf
Modified: trunk/docs/json.ebnf
==============================================================================
--- trunk/docs/json.ebnf (original)
+++ trunk/docs/json.ebnf Sun Jul 19 14:42:47 2009
@@ -11,7 +11,7 @@
//+ Part 1: Basic elements
//+-----------------------------------------------------------------------------
-Char = "a" | "b" | ... | "A" | "B" | "0" | "1" | ...
+Char = "a" | "b" | ... | "A" | "B" | ... | "0" | "1" | ... | "-" | "_" | ...
String = "\"" char* "\""
Null = "\"null\""
List = "[" string ("," string)* "]"
@@ -25,6 +25,10 @@
//+-----------------------------------------------------------------------------
//+ Part 2: XTM - data model
+//+ A fragment contains a valid but incomplete topic map with one main topic
+//+ all referenced associations and all referenced topic stubs.
+//+ The schema is close to XTM 2.0 with the difference that referencing topics
+//+ is done via their PSIs, so a reference is always a list of PSIs.
//+-----------------------------------------------------------------------------
Datatype = "\"datatype\":" String
Value = "\"value\":" String
@@ -68,6 +72,10 @@
//+-----------------------------------------------------------------------------
//+ Part 3: Object summaries
+//+ These Summaries are necessary to offer information of existing topics in the
+//+ store. A PsiSummary contains a list of PSI lists, so the client is able to
+//+ find out all existing topics. The TreeView contains a hierarchical
+//+ map of the stored Topics.
//+-----------------------------------------------------------------------------
PsiSummary = DblList | Null
@@ -85,7 +93,7 @@
Instances = "\"instances\":" (("[" TreeNode "]") | Null)
TreeNode = "{" TopicList "," isType "," isInstance "," Instances "}"
-
+TreeView = ("[" TreeNode+ "]") | Null
//+-----------------------------------------------------------------------------
//+ Part 4: TMCL - data model
@@ -94,27 +102,77 @@
CardMax = "\"cardMax\":" ENumber
RegExp = "\"regexp\":" String
-ExclusiveInstance = "{\"owner\":" List ",\"exclisives\":" (DblList | Null) "}"
SimpleConstraint = "{" RegExp "," CardMin "," CardMax "}"
Constraints = "\"constraints\":[" SimpleConstraint+ "]"
-
+// Contains the owner instances and all topic types that are defined
+// es exclusives for the owner type
+ExclusiveInstances = "\"exclusiveInstances\":{\"owner\":" List
+ ",\"exclisives\":" (DblList | Null) "}"
+
+// Contains a list of constraints that offer information about
+// the regular expressions and cardinalities for subjectIdentifiers
+// or subjectLocators
+SubjectIdentifierConstraints = "\"subjectIdentifierConstraints\":" (Constraints | Null)
+SubjectLocatorConstraints = "\"subjectLocatorConstraints\":" (Constraints | Null)
+
+// Offers scope information. The ScopeType contains a representation of all
+// available scopes and their subtys. Further constructs describe the
+// cardinalities
ScopeType = "\"scopeTypes\":" TrpList
ScopeConstraint = "{" ScopeType "," CardMin "," CardMax "}"
ScopeConstraints = "\"scopeConstraints\":" (("[" scopeConstraint "]") | Null)
+// Describes a name constraint for a nametype and its subtypes.
NameTypeScope = "{\"nameType\":" List "," scopeConstraints "}"
NameTypeScopes = "\"nametypescopes\":[" NameTypeScope+ "]"
TopicNameConstraint = "{" NameTypeScopes "," Constraints "}"
+TopicNameConstraints "\"topicNameConstraints\":" (("[" TopicNameConstraint+ "]") | Null)
+// Describes an occurrence constraint for an occurencetype and its subtypes.
UniqueConstraints = "\"uniqeConstraints\":[" SimpleConstraint+ "]"
DatatypeConstraint = "\"datatypeConstraint\":" String
OccurrenceTypeScope = "{\"occurrenceType\":" List "," scopeConstraints ","
DatatypeConstraint "}"
OccurrenceTypeScopes = "\"occurrenceTypes\":[" OccurrenceTypeScope+ "]"
-TopicOccurrenceConstraint = "{" OccurrenceTyoeScopes "," Constraints ","
+TopicOccurrenceConstraint = "{" OccurrenceTypeScopes "," Constraints ","
UniqueConstraints "}"
+TopicOccurrenceConstraints = "\"topicOccurrenceConstraints\":"
+ (("[" TopicOccurrenceConstraints+ "]") | Null)
+
+// Contains all constraints that depends on a topic
+TopicConstraint = "{" ExclusiveInstances "," SubjectIdentifierConstraints ","
+ SubjectLocatorConstraints "," TopicNameConstraints ","
+ TopicOccurrenceConstraints "," AbstractConstraint "}"
+
+// Describes an associationrole-constraint
+RoleType = "\"roleType\":" DblList
+ARC = "{" RoleType "," cardMin "," cardMax "}"
+ARCs = "\"AssociationRoleConstraints\":" (("[" ARC+ "]") | Null)
+
+// Describes a roleplayer-constraint and also contains all possible
+// players.
+PlayerType = "\"playerType\":" DblList
+Players = "\"players\":" DblList
+RPC = "{" playerType "," Players "," RoleType "," cardMin "," cardMax "}"
+RPCs = "\"rolePlayerConstraints\":" (("[" RPC+ "]") | Null)
+
+// Describes an otherrole-constraint and also contains all possible
+// players and otherplayers.
+OtherRoleType = "\"otherRoleType\":" DblList
+OtherPlayerType = "\"otherPlayewrType\":" DblList
+OtherPlayers = "\"otherPlayers\":" DblList
+ORC = "{" PlayerType "," Players "," RoleType "," OtherPlayerType ","
+ OtherPlayers "," OtherRoleType "," cardMin "," cardMax "}"
+ORCs "\"otehrRoleConstraints\":" (("[" ORC+ "]") | Null)
+
+// Describes all constraints of all associations depending to the topic
+AssocType = "\"associationType\":" List
+AConstraints = "{" AssocType "," ARCs "," RPCs "," ORCs "," ScopeConstraints "}"
+AssociationsConstraints "\"associationsConstraints\":" (("[" AConstraints+ "]") | Null)
+// Contains the entire TMCL information
+FragmentConstraint ="{" TopicConstraints "," AssociationsConstraints "}"
//+-----------------------------------------------------------------------------
//+ Part 5: Server-side RESTful interface
//+-----------------------------------------------------------------------------
@@ -122,9 +180,9 @@
"/json/commit/?$" processes a Fragment as HTTP-POST or HTTP-PUT
"/json/psis/?$" returns a PsiSummary after a HTTP-GET
"/json/summary/?$" returns a TopicSummaries after A HTTP-GET
-"/json/tmcl/types/?$"
-"/json/tmcl/instances/?$"
-"/json/topicstubs/(.+)$"
-"/json/tmcl/type/?$"
-"/json/tmcl/instance/?$"
-"/json/tmcl/overview/?$"
\ No newline at end of file
+"/json/tmcl/types/?$" returns a PsiSummary after A HTTP-GET with all types
+"/json/tmcl/instances/?$" returns a PsiSummary after a HTTP-GET with all instances
+"/json/topicstubs/(.+)$" returns a topicStub after a HTTP-GET
+"/json/tmcl/type/?$" returns a FragmentConstraint after a HTTP-POST/HTTP-PUT
+"/json/tmcl/instance/?$" returns a FragmentConstraint after a HTTP-POST/HTTP-PUT
+"/json/tmcl/overview/?$" returns a TreeView after a HTTP-GET
\ No newline at end of file