From 8703efc4f9bb0f5990598765eb3fdfe53bb8785c Mon Sep 17 00:00:00 2001 From: Rob Austein Date: Thu, 26 Jun 2014 17:48:53 +0000 Subject: Initial schema and test cases for RRDP, based on Tim's expired -01 draft. Not yet simplified to remove what we now think are premature optimizations; the schema contains notes on this. See #705. svn path=/branches/tk705/; revision=5875 --- schemas/relaxng/rrdp.rnc | 118 ++++++++++++++++++++++++++ schemas/relaxng/rrdp.rng | 214 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 332 insertions(+) create mode 100644 schemas/relaxng/rrdp.rnc create mode 100644 schemas/relaxng/rrdp.rng (limited to 'schemas') diff --git a/schemas/relaxng/rrdp.rnc b/schemas/relaxng/rrdp.rnc new file mode 100644 index 00000000..44b94034 --- /dev/null +++ b/schemas/relaxng/rrdp.rnc @@ -0,0 +1,118 @@ +# $Id$ +# +# RelaxNG schema for RPKI Repository Delta Protocol (RRDP). +# +# Copyright (C) 2014 Dragon Research Labs ("DRL") +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND DRL DISCLAIMS ALL WARRANTIES WITH +# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +# AND FITNESS. IN NO EVENT SHALL DRL BE LIABLE FOR ANY SPECIAL, DIRECT, +# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. + +default namespace = "http://www.ripe.net/rpki/rrdp" + +# I find the use of "version" for both the protocol version and the database version +# unncessarily confusing, so I'd prefer "serial" for the latter. For the moment, +# I'm keeping the attribute names as in Tim's document and just using "serial" for +# the data type. +# +# The xsd:string types here are me being lazy in the initial version. +# We should also think about length limits for all of these types. + +version = xsd:positiveInteger { maxInclusive="1" } +serial = xsd:nonNegativeInteger +uri = xsd:anyURI +uuid = xsd:string +sha256 = xsd:string +base64 = xsd:base64Binary +index = xsd:positiveInteger + +# Notification file: lists current snapshots and deltas +# +# We want to get rid of the multiple segment thing from Tim's original +# specification. I think this means that the multiple +# elements collapse down to a single snapshot, the +# attributes of which probably float up to the element. +# Or maybe we just require exactly one snapshot-segment element; it's +# a bit verbose, but leaves an easy way to change our minds later, +# and it's XML so who's going to notice one more element? +# +# Specify as in the -01 draft for the moment, simplify later. + +start |= element msg { + attribute version { version }, + attribute type { "notification" }, + element notification { + attribute session_id { uuid }, + attribute current_version { serial }, + element snapshot { + attribute version { serial }, + element snapshot-segment { + attribute uri { uri }, + attribute hash { sha256 } + }+ + }, + element deltas { + element delta-segment { + attribute from { serial }, + attribute to { serial }, + attribute uri { uri }, + attribute hash { sha256 } + }+ + }? + } +} + +# If we're getting rid of multiple snapshot segments, I think the +# index attributes go away. +# +# -01 is a bit vague on and elements: +# Zero-or-more? One-or-more? Does "exact copy" include using the +# publication protocol's XML namespace instead of RRDP's? Tag +# attribute allowed? Wing it for now. + +# Snapshot segment: think DNS AXFR. + +start |= element msg { + attribute version { version }, + attribute type { "snapshot" }, + element snapshot { + attribute session_id { uuid }, + attribute repository_version { serial }, + attribute index { index }, + element publish { attribute uri { uri }, base64 }* + } +} + +# Delta segment: think DNS IXFR. + +# -01 doesn't say whether is zero-or-more or one-or-more. + +start |= element msg { + attribute version { version }, + attribute type { "deltas" }, + element deltas { + attribute session_id { uuid }, + attribute from { serial }, + attribute to { serial }, + attribute index { index }, + element delta { + attribute version { serial }, + ( element publish { attribute uri { uri }, base64 } | + element withdraw { attribute uri { uri } } )* + }* + } +} + +# Local Variables: +# indent-tabs-mode: nil +# comment-start: "# " +# comment-start-skip: "#[ \t]*" +# End: diff --git a/schemas/relaxng/rrdp.rng b/schemas/relaxng/rrdp.rng new file mode 100644 index 00000000..7323f1c3 --- /dev/null +++ b/schemas/relaxng/rrdp.rng @@ -0,0 +1,214 @@ + + + + + + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + notification + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + snapshot + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + deltas + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- cgit v1.2.3