~launchpad-pqm/launchpad/devel

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
default namespace = "https://launchpad.net/xmlns/2006/bugs"

start = lpbugs

# Data types

boolean = "True" | "False"
lpname = xsd:string { pattern = "[a-z0-9][a-z0-9\+\.\-]*" }
lpbugname = xsd:string { pattern = "[a-z][a-z0-9\+\.\-]*" }
cvename = xsd:string { pattern = "(19|20)[0-9][0-9]-[0-9][0-9][0-9][0-9]" }
non_empty_text = xsd:string { minLength = "1" }

# XXX: jamesh 2006-04-11 bug=105401:
# These status and importance values need to be kept in sync with the
# rest of Launchpad.  However, there are not yet any tests for this.
#     https://bugs.launchpad.net/bugs/105401
status = (
  "NEW"          |
  "INCOMPLETE"   |
  "INVALID"      |
  "WONTFIX"      |
  "CONFIRMED"    |
  "TRIAGED"      |
  "INPROGRESS"   |
  "FIXCOMMITTED" |
  "FIXRELEASED"  |
  "UNKNOWN")
importance = (
  "UNKNOWN"   |
  "CRITICAL"  |
  "HIGH"      |
  "MEDIUM"    |
  "LOW"       |
  "WISHLIST"  |
  "UNDECIDED")

# Content model for a person element.  The element content is the
# person's name.  For successful bug import, an email address must be
# provided.
person_nobody = (
  attribute name { string "nobody" })
person_normal = (
  attribute name { lpname }?,
  attribute email { non_empty_text },
  text)
person = (
  person_nobody |
  person_normal)

lpbugs = element launchpad-bugs { bug* }

bug = element bug {
  attribute id { xsd:integer } &
  element private { boolean }? &
  element security_related { boolean }? &
  element duplicateof { xsd:integer }? &
  element datecreated { xsd:dateTime } &
  element nickname { lpbugname }? &
  # The following will likely be renamed summary in a future version.
  element title { text } &
  element description { text } &
  element reporter { person } &
  element status { status } &
  element importance { importance } &
  element milestone { lpname }? &
  element assignee { person }? &
  element urls {
    element url { attribute href { xsd:anyURI }, text }*
  }? &
  element cves {
    element cve { cvename }*
  }? &
  element tags {
    element tag { lpname }*
  }? &
  element bugwatches {
    element bugwatch { attribute href { xsd:anyURI } }*
  }? &
  element subscriptions {
    element subscriber { person }*
  }? &
  comment+
}

# A bug has one or more comments.  The first comment duplicates the
# reporter, datecreated, title, description of the bug.
comment = element comment {
  element sender { person } &
  element date { xsd:dateTime } &
  element title { text }? &
  element text { text } &
  attachment*
}

# A bug attachment.  Attachments are associated with a bug comment.
attachment = element attachment {
  attribute href { xsd:anyURI }? &
  element type { "PATCH" | "UNSPECIFIED" }? &
  element filename { non_empty_text }? &
  # The following will likely be renamed summary in a future version.
  element title { text }? &
  element mimetype { text }? &
  element contents { xsd:base64Binary { minLength = "1" } }
}