Author: lgiessmann Date: Sun Jul 19 13:07:23 2009 New Revision: 93
Log: added a ebnf schema for the used json model
Added: trunk/docs/json.ebnf Removed: trunk/docs/JSON_model.pdf
Added: trunk/docs/json.ebnf ============================================================================== --- (empty file) +++ trunk/docs/json.ebnf Sun Jul 19 13:07:23 2009 @@ -0,0 +1,130 @@ +//+----------------------------------------------------------------------------- +//+ Overview: +//+ *Part 1: Basic elements +//+ *Part 2: XTM - data model +//+ *Part 3: Object summaries +//+ *Part 4: TMCL - data model +//+ *Part 5: Server-side RESTful interface +//+----------------------------------------------------------------------------- + +//+----------------------------------------------------------------------------- +//+ Part 1: Basic elements +//+----------------------------------------------------------------------------- + +Char = "a" | "b" | ... | "A" | "B" | "0" | "1" | ... +String = """ char* """ +Null = ""null"" +List = "[" string ("," string)* "]" +DblList = ("[" List ("," List)* "]") +TrpList = ("[" DblList ("," DblList)* "]") +Bool = ""true"" | ""false"" +Cipher = "1" | "2" | ... +Number = ""0"" | """ (Cipher (Cipher | "0")*) """ +ENumber = Number | ""MAX_INT"" + + +//+----------------------------------------------------------------------------- +//+ Part 2: XTM - data model +//+----------------------------------------------------------------------------- +Datatype = ""datatype":" String +Value = ""value":" String +Data = ""resourceData":{" Datatype "," Value "}" +RData = ""resourceRef":" ((string ","resourceData":null") | (Null "," Data)) + +ItemIdentity = ""itemIdentities":" (List | Null) +SubjectLocator = ""subjectLocators":" (List | Null) +SubjectIdentifier = ""subjectItentifers":" (List | Null) +Scope = ""scopes":" (DblList | Null) +InstanceOf = ""instanceOfs":" (DblList | Null) +Type = ""type":" List +ID = "\id":" string +TopicRef = ""topicRef":" List + +Variant = "{" ItemIdentity "," Scope "," RData "}" +Variants = ""variants":" (("[" Variant+ "]") | Null) + +Name = "{" ItemIdentity "," Type "," Scope "," Value "," Variants "}" +Names = ""names":" ("[" Name+ "]") | Null + +Occurrence = "{" ItemIdentity "," Type "," Scope "," RData "}" +Occurrences = ""occurrences":" (("[" Occurrence+ "]") | Null) + +Topic = ""topic":{" ID "," ItemIdentity "," SubjectLocator "," + SubjectIdentifier "," InstanceOf "," Names "," Occurences "}" + +Role = "{" ItemIdentity "," Type "," TopicRef "}" +Roles = ""roles":" (("[" Role+ "]") | Null) + +Association = "{" ItemIdentity "," Type "," Scope "," Roles "}" +Associations ""associations":" (("[" Association "]") | Null) + +TopicStub = "{" ID "," ItemIdentity "," SubjectLocator "," SubjectIdentifier "}" +TopicStubs = ""topicStubs":" (("[" TopicStub+ "]") | Null) + +TmIDs = ""tmIds":" List + +Fragment = "{" Topic "," TopicStubs "," Associations "," TmIDs "}" + + +//+----------------------------------------------------------------------------- +//+ Part 3: Object summaries +//+----------------------------------------------------------------------------- +PsiSummary = DblList | Null + +NameSummary = ""names":" (List | Null) +OccurrenceSummary = ""occurrences":" (List | Null) + +TopicSummary = "{" ID "," ItemIdentity "," SubjectLocator "," + SubjectIdentifier "," InstanceOf "," NameSummary "," + OccurrenceSummary "}" +TopicSummaries = ("[" TopicSummary+ "]") | Null + +TopicList = ""topic":" List +IsType = "\isType":" Bool +IsInstance = ""isInstance":" Bool +Instances = ""instances":" (("[" TreeNode "]") | Null) + +TreeNode = "{" TopicList "," isType "," isInstance "," Instances "}" + + +//+----------------------------------------------------------------------------- +//+ Part 4: TMCL - data model +//+----------------------------------------------------------------------------- +CardMin = ""cardMin":" Number +CardMax = ""cardMax":" ENumber +RegExp = ""regexp":" String + +ExclusiveInstance = "{"owner":" List ","exclisives":" (DblList | Null) "}" +SimpleConstraint = "{" RegExp "," CardMin "," CardMax "}" +Constraints = ""constraints":[" SimpleConstraint+ "]" + + +ScopeType = ""scopeTypes":" TrpList +ScopeConstraint = "{" ScopeType "," CardMin "," CardMax "}" +ScopeConstraints = ""scopeConstraints":" (("[" scopeConstraint "]") | Null) + +NameTypeScope = "{"nameType":" List "," scopeConstraints "}" +NameTypeScopes = ""nametypescopes":[" NameTypeScope+ "]" +TopicNameConstraint = "{" NameTypeScopes "," Constraints "}" + +UniqueConstraints = ""uniqeConstraints":[" SimpleConstraint+ "]" +DatatypeConstraint = ""datatypeConstraint":" String +OccurrenceTypeScope = "{"occurrenceType":" List "," scopeConstraints "," + DatatypeConstraint "}" +OccurrenceTypeScopes = ""occurrenceTypes":[" OccurrenceTypeScope+ "]" +TopicOccurrenceConstraint = "{" OccurrenceTyoeScopes "," Constraints "," + UniqueConstraints "}" + +//+----------------------------------------------------------------------------- +//+ Part 5: Server-side RESTful interface +//+----------------------------------------------------------------------------- +"/json/get/(.+)$" returns a Fragment after a HTTP-GET +"/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