summaryrefslogtreecommitdiffstats
path: root/schemas/lost1.xsd
diff options
context:
space:
mode:
Diffstat (limited to 'schemas/lost1.xsd')
-rw-r--r--schemas/lost1.xsd311
1 files changed, 311 insertions, 0 deletions
diff --git a/schemas/lost1.xsd b/schemas/lost1.xsd
new file mode 100644
index 0000000..353063a
--- /dev/null
+++ b/schemas/lost1.xsd
@@ -0,0 +1,311 @@
+default namespace ns1 = "urn:ietf:params:xml:ns:lost1"
+
+
+##
+## Location-to-Service Translation Protocol (LoST)
+##
+## A LoST XML instance has three request types, each with
+## a cooresponding response type: find service, list services,
+## and get service boundary.
+##
+start =
+ findService
+ | listServices
+ | listServicesByLocation
+ | getServiceBoundary
+ | findServiceResponse
+ | listServicesResponse
+ | listServicesByLocationResponse
+ | getServiceBoundaryResponse
+ | errors
+ | redirect
+
+##
+## The queries.
+##
+div {
+ findService =
+ element findService {
+ requestLocation,
+ commonRequestPattern,
+ attribute validateLocation {
+ xsd:boolean >> a:defaultValue [ "false" ]
+ }?,
+ attribute serviceBoundary {
+ ("reference" | "value") >> a:defaultValue [ "reference" ]
+ }?,
+ attribute recursive { xsd:boolean >> a:defaultValue [ "false" ] }?
+ }
+ listServices = element listServices { commonRequestPattern }
+ listServicesByLocation =
+ element listServicesByLocation {
+ requestLocation,
+ commonRequestPattern,
+ attribute recursive { xsd:boolean >> a:defaultValue [ "true" ] }?
+ }
+ getServiceBoundary =
+ element getServiceBoundary { serviceBoundaryKey, extensionPoint }
+}
+
+##
+## The responses.
+##
+div {
+ findServiceResponse =
+ element findServiceResponse {
+ mapping+, locationValidation?, commonResponsePattern, locationUsed
+ }
+ listServicesResponse =
+ element listServicesResponse { serviceList, commonResponsePattern }
+ listServicesByLocationResponse =
+ element listServicesByLocationResponse {
+ serviceList, commonResponsePattern, locationUsed
+ }
+ getServiceBoundaryResponse =
+ element getServiceBoundaryResponse {
+ serviceBoundary, commonResponsePattern
+ }
+}
+
+##
+## A pattern common to some of the queries.
+##
+div {
+ commonRequestPattern = service, path?, extensionPoint
+}
+
+##
+## A pattern common to responses.
+##
+div {
+ commonResponsePattern = warnings*, path, extensionPoint
+}
+
+##
+## Location in Requests
+##
+div {
+ requestLocation =
+ element location {
+ attribute id { xsd:token },
+ locationInformation
+ }+
+}
+
+##
+## Location Information
+##
+div {
+ locationInformation =
+ extensionPoint+,
+ attribute profile { xsd:NMTOKEN }?
+}
+
+##
+## Service Boundary
+##
+div {
+ serviceBoundary = element serviceBoundary { locationInformation }+
+}
+
+##
+## Service Boundary Reference
+##
+div {
+ serviceBoundaryReference =
+ element serviceBoundaryReference {
+ source, serviceBoundaryKey, extensionPoint
+ }
+ serviceBoundaryKey = attribute key { xsd:token }
+}
+
+##
+## Path -
+## Contains a list of via elements -
+## places through which information flowed
+##
+div {
+ path =
+ element path {
+ element via { source, extensionPoint }+
+ }
+}
+
+##
+## Location Used
+##
+div {
+ locationUsed =
+ element locationUsed {
+ attribute id { xsd:token }
+ }?
+}
+
+##
+## Expires pattern
+##
+div {
+ expires =
+ attribute expires { xsd:dateTime | "NO-CACHE" | "NO-EXPIRATION" }
+}
+
+##
+## A QName list
+##
+div {
+ qnameList = list { xsd:QName* }
+}
+
+##
+## A location-to-service mapping.
+##
+div {
+ mapping =
+ element mapping {
+ element displayName {
+ xsd:string,
+ attribute xml:lang { xsd:language }
+ }*,
+ service,
+ (serviceBoundary | serviceBoundaryReference)?,
+ element uri { xsd:anyURI }*,
+ element serviceNumber {
+ xsd:token { pattern = "[0-9*#]+" }
+ }?,
+ extensionPoint,
+ expires,
+ attribute lastUpdated { xsd:dateTime },
+ source,
+ attribute sourceId { xsd:token },
+ message
+ }
+}
+
+##
+## Location validation
+##
+div {
+ locationValidation =
+ element locationValidation {
+ element valid { qnameList }?,
+ element invalid { qnameList }?,
+ element unchecked { qnameList }?,
+ extensionPoint
+ }
+}
+
+##
+## Errors and Warnings Container.
+##
+div {
+ exceptionContainer =
+ (badRequest?
+ & internalError?
+ & serviceSubstitution?
+ & defaultMappingReturned?
+ & forbidden?
+ & notFound?
+ & loop?
+ & serviceNotImplemented?
+ & serverTimeout?
+ & serverError?
+ & locationInvalid?
+ & locationProfileUnrecognized?),
+ extensionPoint,
+ source
+ errors = element errors { exceptionContainer }
+ warnings = element warnings { exceptionContainer }
+}
+
+##
+## Basic Exceptions
+##
+div {
+
+ ##
+ ## Exception pattern.
+ ##
+ basicException = message, extensionPoint
+ badRequest = element badRequest { basicException }
+ internalError = element internalError { basicException }
+ serviceSubstitution = element serviceSubstitution { basicException }
+ defaultMappingReturned =
+ element defaultMappingReturned { basicException }
+ forbidden = element forbidden { basicException }
+ notFound = element notFound { basicException }
+ loop = element loop { basicException }
+ serviceNotImplemented =
+ element serviceNotImplemented { basicException }
+ serverTimeout = element serverTimeout { basicException }
+ serverError = element serverError { basicException }
+ locationInvalid = element locationInvalid { basicException }
+ locationValidationUnavailable =
+ element locationValidationUnavailable { basicException }
+ locationProfileUnrecognized =
+ element locationProfileUnrecognized {
+ attribute unsupportedProfiles { xsd:NMTOKENS },
+ basicException
+ }
+}
+
+##
+## Redirect.
+##
+div {
+
+ ##
+ ## Redirect pattern
+ ##
+ redirect =
+ element redirect {
+ attribute target { appUniqueString },
+ source,
+ message,
+ extensionPoint
+ }
+}
+
+##
+## Some common patterns.
+##
+div {
+ message =
+ (attribute message { xsd:token },
+ attribute xml:lang { xsd:language })?
+ service = element service { xsd:anyURI }?
+ appUniqueString =
+ xsd:token { pattern = "([a-zA-Z0-9\-]+\.)+[a-zA-Z0-9]+" }
+ source = attribute source { appUniqueString }
+ serviceList =
+ element serviceList {
+ list { xsd:anyURI* }
+ }
+}
+
+##
+## Patterns for inclusion of elements from schemas in
+## other namespaces.
+##
+div {
+
+ ##
+ ## Any element not in the LoST namespace.
+ ##
+ notLost = element * - (ns1:* | ns1:*) { anyElement }
+
+ ##
+ ## A wildcard pattern for including any element
+ ## from any other namespace.
+ ##
+ anyElement =
+ (element * { anyElement }
+ | attribute * { text }
+ | text)*
+
+ ##
+ ## A point where future extensions
+ ## (elements from other namespaces)
+ ## can be added.
+ ##
+ extensionPoint = notLost*
+} \ No newline at end of file
OpenPOWER on IntegriCloud