1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
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
# <snapshot-segment/> elements collapse down to a single snapshot, the
# attributes of which probably float up to the <snapshot/> 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 <publish/> and <withdraw/> 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 <delta/> 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:
|