Modified RelaxNG Mapping

        namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0"
	namespace llup = "http://www.x2x2x.org/projects/llup"
        
	start =
        llupSubscribe
        | llupSubscription
        | llupCancelSubscription
        | llupSubscriptionCancelled
        | llupFilter
        | llupMessage
        | llupReceived
        | llupCreateBlip
        | llupCreateStandingBlip
        | llupCancelStandingBlip
        | llupCancelStandingBlip
        | llupStandingBlipCancelled
        | llupAddBlipConsumer
        | llupRemoveBlipConsumer
        | llupBlipConsumerRemoved
        | llupAddPublicationService
        | llupPublicationServiceAdded
        | llupRemovePublicationService
        | llupPublicationServiceRemoved
        | llupBlipConsumerAdded
        # llup elements
        llupSubscribe = element llup:subscribe { llupSender, llupRecipients, llupTimeSpan }
        llupSubscription = element llup:subscription { llupSender, llupHome }
        llupCancelSubscription = element llup:cancelsubscription { llupSender, llupHome }
        llupSubscriptionCancelled = element llup:subscriptioncancelled { llupSender, llupAdmin }
        llupFilter = element llup:filter { llupSender, llupTimeSpan, llupKeywords }
        llupMessage =
        element llup:message {
                attribute origin { text },
                attribute id { text },
                llupSender,
                llupHistory,
                llupRecipients,
                llupTimeSpan,
                llupLink,
                llupSubject,
                llupKeywords
        }
        llupReceived = element llup:received { llupSender, llupHome }
        llupCreateBlip =
        element llup:createblip {
                attribute origin { text },
                attribute id { text },
                llupSender,
                llupRecipients,
                llupLink,
                llupSubject,
                llupTimeSpan,
                llupKeywords
        }
        llupCreateStandingBlip =
        element llup:createstandingblip {
                attribute origin { text },
                attribute id { text },
                llupSender,
                llupRecipients,
                llupLink,
                llupSubject,
                llupTimeSpan,
                llupKeywords
        }
        llupCancelStandingBlip =
        element llupcancelstandingblip {
                attribute origin { text },
                attribute id { text },
                llupSender,
                llupStandingBlip
        }
        llupStandingBlipCancelled = element llup:standingblipcancelled { llupSender, llupAdmin }
        llupAddBlipConsumer = element addblipconsumer { llupSender, llupTimeSpan, llupReceiveBlipEndPoint }
        llupRemoveBlipConsumer =
        element llup:removeblipconsumer {
                attribute id { text },
                llupSender,
                llupBlipConsumer
        }
        llupBlipConsumerRemoved = element llup:blipconsumerremoved { llupSender, llupAdmin }
        llupAddPublicationService =
        element llup:addpublicationservice {
                attribute origin { text },
                attribute id { text },
                llupSender,
                llupTimeSpan,
                llupAddBlipConsumerEndPoint
        }
        llupPublicationServiceAdded =
        element llup:publicationserviceadded { llupSender, llupPublicationService }
        llupRemovePublicationService =
        element llup:removepublicationservice {
                attribute id { text },
                llupSender,
                llupPublicationService
        }
        llupPublicationServiceRemoved = element llup:publicationserviceremoved { llupSender, llupAdmin }
        llupBlipConsumerAdded = element llup:blipconsumeradded { llupSender, llupBlipConsumer }
        #
        llupSender =
        element llup:sender {
                attribute credentia-id { text },
                attribute email { text },
                text
        }
        llupRecipients = element llup:recipients { llupRecipient+ }
        llupRecipient = element llup:recipient { text }
        llupTimeSpan =
        element llup:time-span {
                attribute start { xsd:dateTime },
                attribute expires { xsd:dateTime }
        }
        llupKeywords = element llup:keywords { llupKeyword* }
        llupKeyword = element llup:keyword { text }
        llupHome = element llup:home { text }
        llupAdmin = element llup:admin { text }
        llupLink = element llup:link { text }
        llupSubject = element llup:subject { text }
        llupHistory =
        element llup:history {
                attribute created { xsd:dateTime },
                attribute last-update { xsd:dateTime }
        }
        llupStandingBlip = element llup:standingblip { llupSender, llupHome }
        llupReceiveBlipEndPoint = element llup:receiveblipendpoint { text }
        llupBlipConsumer = element llup:blipconsumer { llupSender, llupHome }
        llupAddBlipConsumerEndPoint = element llup:addblipconsumerendpoint { text }
        llupPublicationService = element llup:publicationservice { llupSender, llupHome }