@@ -189,6 +189,8 @@ class Document(object):
189189 Represent an SPDX document with these fields:
190190 - version: Spec version. Mandatory, one - Type: Version.
191191 - data_license: SPDX-Metadata license. Mandatory, one. Type: License.
192+ - spdx_id: SPDX Identifier for the document to refer to itself in
193+ relationship to other elements. Mandatory, one. Type: str.
192194 - comment: Comments on the SPDX file, optional one. Type: str
193195 - creation_info: SPDX file creation info. Mandatory, one. Type: CreationInfo
194196 - package: Package described by this document. Mandatory, one. Type: Package
@@ -198,11 +200,13 @@ class Document(object):
198200 Type: Review.
199201 """
200202
201- def __init__ (self , version = None , data_license = None , comment = None , package = None ):
203+ def __init__ (self , version = None , data_license = None , spdx_id = None ,
204+ comment = None , package = None ):
202205 # avoid recursive impor
203206 from spdx .creationinfo import CreationInfo
204207 self .version = version
205208 self .data_license = data_license
209+ self .spdx_id = spdx_id
206210 self .comment = comment
207211 self .creation_info = CreationInfo ()
208212 self .package = package
@@ -237,6 +241,7 @@ def validate(self, messages=None):
237241
238242 return (self .validate_version (messages )
239243 and self .validate_data_lics (messages )
244+ and self .validate_spdx_id (messages )
240245 and self .validate_creation_info (messages )
241246 and self .validate_package (messages )
242247 and self .validate_extracted_licenses (messages )
@@ -268,6 +273,20 @@ def validate_data_lics(self, messages=None):
268273 messages .append ('Document data license must be CC0-1.0.' )
269274 return False
270275
276+ def validate_spdx_id (self , messages = None ):
277+ # FIXME: messages should be returned
278+ messages = messages if messages is not None else []
279+
280+ if self .spdx_id is None :
281+ messages .append ('Document has no SPDX Identifier.' )
282+ return False
283+
284+ if self .spdx_id .endswith ('SPDXRef-DOCUMENT' ):
285+ return True
286+ else :
287+ messages .append ('Invalid Document SPDX Identifier value.' )
288+ return False
289+
271290 def validate_reviews (self , messages = None ):
272291 # FIXME: messages should be returned
273292 messages = messages if messages is not None else []
0 commit comments