311 lines
6.5 KiB
XML
311 lines
6.5 KiB
XML
|
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*
|
||
|
}
|