Copyright © 2010-2013 Linux Foundation and its Contributors. All other rights are expressly reserved.
Licensed under the Creative Commons Attribution License 3.0 unported.
This specification describes the SPDX® language, defined as a dictionary of named properties and classes using W3C's RDF Technology.
SPDX® is a designed to allow the exchange of data about software packages. This information includes general information about the package, licensing information about the package as a whole, a manifest of files contained in the package and licensing information related to the contained files.
This is an RDFa annotated HTML document that defines the SPDX® RDF vocabulary using the Web Ontology Language. It is RDFa 1.0 compatible and may be consumed by any RDFa 1.0 compatible parser. The same information is available in RDF/XML and Turtle formats if those are more convenient. They can be accessed from the SPDX website under the Specifications section.
RDF it is a widely used data interchange technology which allows heterogeneous systems communicate even when their internal models/implementations are incompatible. For more details on RDF, this RDF primer helpful for gaining a basic understanding.
The spdx
prefix used in this document expands to http://spdx.org/rdf/terms#
. Any terms in this document without an explicit prefix may be assumed to be in the spdx
namespace.
In addition to the spdx
prefix the following prefixes are also used. Each of these reference another vocabulary imported and used by the SPDX vocabulary.
SpdxElement
Annotation
SpdxDocument
CreationInfo
Package
ExtractedLicensingInfo
Checksum
PackageVerificationCode
File
Snippet
Relationship
Review
License
ConjunctiveLicenseSet
DisjunctiveLicenseSet
AnyLicenseInfo
SimpleLicenseInfo
SpdxElement
An SpdxElement
is any copyrightable element.
verificationCode
Cardinality: Mandatory, one
rdfs:comment
Cardinality: Optional, zero or one
relationship
Cardinality: Optional, zero or more
licenseConcluded
Cardinality: Mandatory, one
licenseDeclared
Cardinality: Mandatory, one
licenseComments
Cardinality: Optional, zero or one
copyrightText
Cardinality: Mandatory, one
annotation
Cardinality: Optional, zero or more
Annotation
An Annotation
is a comment on an SpdxElement
by a reviewer
.
rdfs:comment
Cardinality: Mandatory, one
reviewer
Cardinality: Mandatory, one
SpdxDocument
An SpdxDocument
is a summary of the contents, provenance, ownership and licensing analysis of a specific software package. This is, effectively, the top level of SPDX information.
verificationCode
Cardinality: Mandatory, one
rdfs:comment
Cardinality: Optional, zero or one
relationship
Cardinality: Optional, zero or more
licenseConcluded
Cardinality: Mandatory, one
licenseDeclared
Cardinality: Mandatory, one
licenseComments
Cardinality: Optional, zero or one
copyrightText
Cardinality: Mandatory, one
annotation
Cardinality: Optional, zero or more
specVersion
Cardinality: Mandatory, one
dataLicense
Cardinality: Mandatory, one
creationInfo
Cardinality: Mandatory, one
hasExtractedLicensingInfo
Cardinality: Optional, zero or more
referencesFile
Cardinality: Mandatory, one or more
reviewed
Cardinality: Optional, zero or more.
CreationInfo
A CreationInfo
provides information about the individuals, organizations and tools involved in the creation of an SpdxDocument
.
creator
Cardinality: Mandatory, one or more
created
Cardinality: Mandatory, one
rdfs:comment
Cardinality: Optional, zero or one
licenseListVersion
Cardinality: Optional, zero or one
Package
A Package
represents a collection of software files that are delivered as a single functional component.
verificationCode
Cardinality: Mandatory, one
rdfs:comment
Cardinality: Optional, zero or one
relationship
Cardinality: Optional, zero or more
licenseConcluded
Cardinality: Mandatory, one
licenseDeclared
Cardinality: Mandatory, one
licenseComments
Cardinality: Optional, zero or one
copyrightText
Cardinality: Mandatory, one
annotation
Cardinality: Optional, zero or more
name
Cardinality: Mandatory, one
versionInfo
Cardinality: Optional, zero or one
packageFileName
Cardinality: Optional, zero or one
supplier
Cardinality: Optional, zero or one
originator
Cardinality: Optional, zero or one
downloadLocation
Cardinality: Mandatory, one
doap:homepage
Cardinality: Optional, one
checksum
Cardinality: Optional, zero or one
sourceInfo
Cardinality: Optional, zero or one
licenseInfoFromFiles
Cardinality: Mandatory, one or more
summary
Cardinality: Optional, zero or one
description
Cardinality: Optional, zero or one
ExtractedLicensingInfo
An ExtractedLicensingInfo
represents a license or licensing notice that was found in the package. Any license text that is recognized as a license may be represented as a License
rather than an ExtractedLicensingInfo
.
licenseId
Cardinality: Mandatory, one
name
Cardinality: Optional, zero or more
extractedText
Cardinality: Mandatory, one
rdfs:comment
Cardinality: Optional, zero or one
rdfs:seeAlso
Cardinality: Optional, zero or more
File
A File
represents a named sequence of information that is contained in a software package.
verificationCode
Cardinality: Mandatory, one
rdfs:comment
Cardinality: Optional, zero or one
relationship
Cardinality: Optional, zero or more
licenseConcluded
Cardinality: Mandatory, one
licenseDeclared
Cardinality: Mandatory, one
licenseComments
Cardinality: Optional, zero or one
copyrightText
Cardinality: Mandatory, one
annotation
Cardinality: Optional, zero or more
fileName
Cardinality: Mandatory, one
rdfs:comment
Cardinality: Optional, zero or one
fileType
Cardinality: Optional, zero or one
checksum
Cardinality: Mandatory, one
noticeText
Cardinality: Optional, zero or one
fileContributor
Cardinality: Optional, zero or more
Review
A Review
represents an audit and signoff by an individual, organization or tool on the information in an SpdxDocument
.
reviewer
Cardinality: Mandatory, one
reviewDate
Cardinality: Mandatory, one
rdfs:comment
Cardinality: Optional, zero or one
Relationship
A Relationship
represents a relationship between two SpdxElement
s.
usage
Cardinality: Mandatory, one
relationshipType
Cardinality: Mandatory, one
relatedSpdxElement
Cardinality: Mandatory, one
rdfs:comment
Cardinality: Optional, zero or one
License
A License
represents a copyright license. The SPDX license list website is annotated with these properties (using RDFa) to allow license data published there to be easily processed.
The license list is populated in accordance with the License List fields guidelines. These guidelines are not normative and may change over time. SPDX tooling should not rely on values in the license list conforming to the current guidelines.
licenseId
Cardinality: Mandatory, one
A short human readable unique name for the license.
name
Cardinality: Optional, zero or one
A full name, including version if applicable, of the license.
licenseText
Cardinality: Mandatory, one
Full text of the license.
isOsiApproved
Cardinality: Mandatory, one
Indicates if the OSI has approved the license.
standardLicenseHeader
Cardinality: Optional, zero or more
License author's preferred text to indicated that a file is covered by the license.
>
standardLicenseTemplate
Cardinality: Optional, zero or one
License template which describes sections of the license which can be varied. See License Template section of the specification for format information.
>
rdfs:comment
Cardinality: Optional, zero or one
Factual notes regarding the license such as release date.
rdfs:seeAlso
Cardinality: Optional, zero or more
A link to the license on another website.
Checksum
A Checksum
is value that allows the contents of a file to be authenticated. Even small changes to the content of the file will change it's checksum. This class allows the results of a variety of checksum and cryptographic message digest algorithms to be represented.
algorithm
Cardinality: Mandatory, one
checksumValue
Cardinality: Mandatory, one
PackageVerificationCode
A manifest based verification code (the algorithm is defined in section 4.7 of the full specification) of the package. This allows consumers of this data and/or database to determine if a package they have in hand is identical to the package from which the data was produced. This algorithm works even if the SPDX document is included in the package.
packageVerificationCodeExcludedFile
Cardinality: Optional, zero or more
packageVerificationCodeValue
Cardinality: Mandatory, one
ConjunctiveLicenseSet
A ConjunctiveLicenseSet
represents a set of licensing information all of which apply.
This class refines rdfs:Container
.
member
Cardinality: Mandatory, two or more.
DisjunctiveLicenseSet
A DisjunctiveLicenseSet
represents a set of licensing information where only one license applies at a time. This class implies that the recipient gets to choose one of these licenses they would prefer to use.
This class refines rdfs:Container
.
member
Cardinality: Mandatory, two or more.
AnyLicenseInfo
The AnyLicenseInfo
class includes all resources that represent licensing information.
SimpleLicenseInfo
The SimpleLicenseInfo
class includes all resources that represent simple, atomic, licensing information.
algorithm
annotation
artifactOf
checksum
checksumValue
copyrightText
created
creationInfo
creator
dataLicense
describesPackage
description
downloadLocation
extractedText
fileDependency
fileContributor
fileName
fileType
hasExtractedLicensingInfo
hasFile
isOsiApproved
licenseComments
licenseConcluded
licenseDeclared
licenseId
licenseListVersion
licenseText
licenseInfoFromFiles
licenseInfoInFile
member
name
noticeText
originator
packageFileName
packageVerificationCode
packageVerificationCodeExcludedFile
packageVerificationCodeValue
relatedSpdxElement
relationship
relationshipType
referencesFile
reviewDate
reviewed
reviewer
sourceInfo
specVerison
standardLicenseHeader
standardLicenseTemplate
summary
supplier
usage
verificationCode
versionInfo
algorithm
Identifies the algorithm used to produce the subject Checksum
.
Currently, SHA-1 is the only supported algorithm. It is anticipated that other algorithms will be supported at a later time.
Checksum
spdx:checksumAlgorithm_sha1
annotation
Provide additional information about an SpdxElement
.
SpdxElement
Annotation
artifactOf
Indicates the project in which the file originated.
Tools must preserve doap:hompage
and doap:name
properties and the URI (if one is known) of doap:Project
resources that are values of this property. All other properties of doap:Projects
are not directly supported by SPDX and may be dropped when translating to or from some SPDX formats.
File
doap:Project
checksum
The checksum
property provides a mechanism that can be used to verify that the contents of a File
or Package
have not changed.
checksumValue
The checksumValue
property provides a lower case hexidecimal encoded digest value produced using a specific algorithm.
Checksum
xsd:hexBinary
created
The date and time at which the SpdxDocument
was created. This value must in UTC and have 'Z' as its timezone indicator.
CreationInfo
xsd:dateTime
copyrightText
The text of copyright declarations recited in the Package
or File
.
creationInfo
The creationInfo
property relates an SpdxDocument
to a set of information about the creation of the SpdxDocument
.
SpdxDocument
CreationInfo
creator
The name and, optionally, contact information of a person, organization or tool that created, or was used to create, the SpdxDocument
.
Values of this property must conform to the agent and tool syntax.
CreationInfo
xsd:string
dataLicense
The licensing under which the creator
of this SPDX document allows related data to be reproduced.
The only valid value for this property is http://spdx.org/licenses/CC0-1.0
. This is to alleviate any concern that content (the data) in an SPDX file is subject to any form of intellectual property right that could restrict the re-use of the information or the creation of another SPDX file for the same project(s). This approach avoids intellectual property and related restrictions over the SPDX file, however individuals can still contract one to one to restrict release of specific collections of SPDX files (which map to software bill of materials) and the identification of the supplier of SPDX files.
SpdxDocument
describesPackage
The describesPackage
property relates an SpdxDocument
to the package which it describes.
SpdxDocument
Package
description
Provides a detailed description of the package.
Package
xsd:string
downloadLocation
The URI at which this package is available for download. Private (i.e., not publicly reachable) URIs are acceptable as values of this property.
The values http://spdx.org/rdf/terms#none
and http://spdx.org/rdf/terms#noassertion
may be used to specify that the package is not downloadable or that no attempt was made to determine its download location, respectively.
Package
xsd:anyURI
extractedText
Verbatim license or licensing notice text that was discovered.
ExtractedLicensingInfo
xsd:string
fileDependency
This field provides a place for the SPDX file creator to record a list of other files which the file is a derivative of and/or depends on for the build (e.g., source file or build script for a binary program or library). The list of files may not necessarily represent the list of all file dependencies, but possibly the ones that impact the licensing or may be needed as part of the file distribution obligation.
fileContributor
This field provides a place for the SPDX file creator to record file contributors. Contributors could include names of copyright holders and/or authors who may not be copyright holders yet contributed to the file content.
File
xsd:string
fileName
The name of the file relative to the root of the package.
File
xsd:string
fileType
The type of the file.
File
spdx:fileType_source
Indicates the file is a source code file.
spdx:fileType_archive
Indicates the file is an archive file.
spdx:fileType_binary
Indicates the file is not a text file. filetype_archive
is preferred for archive files even though they are binary.
spdx:fileType_other
Indicates the file did not fall into any of the other categories.
hasExtractedLicensingInfo
Indicates that a particular ExtractedLicensingInfo
was defined in the subject SpdxDocument
.
SpdxDocument
ExtractedLicensingInfo
hasFile
isOsiApproved
Indicates that a particular license has been approved by the OSI as an open source licenses. If this property is true there should be a seeAlso
property linking to the OSI version of the license.
License
xsd:boolean
licenseComments
The licenseComments
property allows the preparer of the SPDX document to describe why the licensing in spdx:licenseConcluded
was chosen.
xsd:string
licenseConcluded
The licensing that the preparer of this SPDX document has concluded, based on the evidence, actually applies to the package.
licenseDeclared
The licensing that the creators of the software in the package, or the packager, have declared. Declarations by the original software creator should be preferred, if they exist.
Package
licenseId
A human readable short form license identifier for a license not on the SPDX License List. The license Id must be of the form "LicenseRef-"[idString] where [idString] is a unique string containing letters, numbers, “.”, “-” or “+”.
xsd:string
licenseListVersion
An optional field for creators of the SPDX file to provide the version of the SPDX License List used when the SPDX file was created.
CreationInfo
xsd:string
licenseText
The full text of the license.
License
xsd:string
licenseInfoFromFiles
The licensing information that was discovered directly within the package. There will be an instance of this property for each distinct value of all licenseInfoInFile
properties of all files contained in the package.
Package
licenseInfoInFile
Licensing information that was discovered directly in the subject file.
File
member
A license, or other licensing information, that is a member of the subject license set.
AnyLicenseInfo
rdfs:member
name
The full human readable name of the item. This should include version information when applicable.
xsd:string
rdfs:label
noticeText
This field provides a place for the SPDX file creator to record potential legal notices found in the file. This may or may not include copyright statements.
File
xsd:string
originator
The name and, optionally, contact information of the person or organization that originally created the package.
Values of this property must conform to the agent and tool syntax.
Package
xsd:string
or the individual spdx:noassertion
packageFileName
The base name of the package file name. For example, zlib-1.2.5.tar.gz
.
Package
xsd:string
packageVerificationCode
A manifest based authentication code for the package. This allows consumers of this data to determine if a package they have in hand is identical to the package from which the data was produced. This algorithm works even if the SPDX document is included in the package. This algorithm is described in detail in the SPDX specification.
The package verification code algorithm is defined in section 4.7 of the full specification.
Package
PackageVerificationCode
packageVerificationCodeExcludedFile
A file that was excluded when calculating the package verification code. This is usually a file containing SPDX data regarding the package. If a package contains more than one SPDX file all SPDX files must be excluded from the package verification code. If this is not done it would be impossible to correctly calculate the verification codes in both files.
PackageVerificationCode
xsd:string
packageVerificationCodeValue
The actual package verification code as a hex encoded value.
PackageVerificationCode
xsd:hexBinary
relationship
Defines a relationship between two SPDX element. The SPDX element may be a Package, File, or SpdxDocument.
SpdxElement
Relationship
relationshipType
Describes the type of relationship between two SPDX elements.
Relationship
spdx:relationshipType_partOf
The relatedSpdxElement
is a part of this SpdxElement
.
spdx:relationshipType_contains
The relatedSpdxElement
is a contained in this SpdxElement
.
spdx:relationshipType_generatedFrom
The relatedSpdxElement
is a generated from this SpdxElement
.
spdx:relationshipType_generates
The relatedSpdxElement
generates this SpdxElement
.
spdx:relationshipType_modifies
The relatedSpdxElement
modifies this SpdxElement
.
spdx:relationshipType_modifiedBy
The relatedSpdxElement
is modified by this SpdxElement
.
spdx:relationshipType_revisionOf
The relatedSpdxElement
is a revision of this SpdxElement
.
owl:sameAs
referencesFile
Indicates that a particular file belongs as part of the set of analyzed files in the SpdxDocument
.
SpdxDocument
File
reviewDate
The date and time at which the SpdxDocument
was reviewed. This value must be in UTC and have 'Z' as its timezone indicator.
Review
xsd:dateTime
reviewed
The review
property relates a SpdxDocument
to the review history.
SpdxDocument
Review
reviewer
The name and, optionally, contact information of the person who performed the review.
Values of this property must conform to the agent and tool syntax.
Review
xsd:string
sourceInfo
Allows the producer(s) of the SPDX document to describe how the package was acquired and/or changed from the original source.
Package
xsd:string
specVersion
Identifies the version of this specification that was used to produce this SPDX document. The value for this version of the spec is SPDX-1.2
. The values SPDX-1.0
and SPDX-1.1
may also be supported by SPDX tools for backwards compatibility purposes.
SpdxDocument
xsd:string
standardLicenseHeader
Text specifically delineated by the license, or license appendix, as the preferred way to indicate that a source, or other, file is copyable under the license.
License
xsd:string
standardLicenseTemplate
License template which describes sections of the license which can be varied. See License Template section of the specification for format information.
License
xsd:string
summary
Provides a short description of the package.
Package
xsd:string
supplier
The name and, optionally, contact information of the person or organization who was the immediate supplier of this package to the recipient. The supplier may be different than originator
when the software has been repackaged.
Values of this property must conform to the agent and tool syntax.
Package
xsd:string
or the individual spdx:noassertion
usage
Describes how the related relatedSpdxElement
is used by this SpdxElement.
Relationship
spdx:usageType_source
The relatedSpdxElement
is a source file used to compile a resultant executable.
spdx:usageType_executable
The relatedSpdxElement
is an independent executable binary file executed by this SpdxElement
.
spdx:usageType_dynamicLibrary
The relatedSpdxElement
is an binary library file which is dyamically linked to this SpdxElement
.
spdx:usageType_staticLibrary
The relatedSpdxElement
is an binary library file which is statically linked to this SpdxElement
.
spdx:usageType_dataFile
The relatedSpdxElement
is an data file used by this SpdxElement
.
spdx:usageType_test
The relatedSpdxElement
is a file (data, source, executable or other file type) used only in the testing by this SpdxElement
.
spdx:usageType_buildTools
The relatedSpdxElement
is a tool used only in the building by this SpdxElement
.
spdx:usageType_documentation
The relatedSpdxElement
is documentation for this SpdxElement
.
spdx:usageType_optional
The relatedSpdxElement
is an optional element for this SpdxElement
. Optional elements may or may not be included in the distributed package. Examples include contrib libraries, optional debugging facilities.
spdx:usageType_referenceImpl
The relatedSpdxElement
is a reference implementation for this SpdxElement
.
verificationCode
Unique code generated for each element. NOTE: This property is still being defined
SpdxElement
xsd:string
versionInfo
Provides an indication of the version of the package that is described by this SpdxDocument
.
Package
xsd:string
checksumAlgorithm_sha1
fileType_archive
fileType_binary
fileType_other
fileType_source
noassertion
none
relationshipType_partOf
relationshipType_contains
relationshipType_generatedFrom
relationshipType_generates
relationshipType_modifies
relationshipType_modifiedBy
relationshipType_revisionOf
usageType_source
usageType_executable
usageType_dynamicLibrary
usageType_staticLibrary
usageType_dataFile
usageType_test
usageType_buildTools
usageType_documentation
usageType_optional
usageType_referenceImpl
fileType_archive
Indicates the file is an archive file.
fileType_binary
Indicates the file is not a text file. spdx:filetype_archive
is preferred for archive files even though they are binary.
fileType_other
Indicates the file is not a source, archive or binary file.
fileType_source
Indicates the file is a source code file.
noassertion
Indicates that the preparer of the SPDX document is not making any assertion regarding the value of this field.
none
When this value is used as the object of a property it indicates that the preparer of the SpdxDocument
believes that there is no value for the property. This value should only be used if there is sufficient evidence to support this assertion.
relationshipType_partOf
Indicates the relatedSpdxElement
is part of an SpdxElement
.
relationshipType_contains
Indicates the relatedSpdxElement
contains an SpdxElement
.
relationshipType_generatedFrom
Indicates the relatedSpdxElement
is generated from an SpdxElement
.
relationshipType_generates
Indicates the relatedSpdxElement
generates an SpdxElement
.
relationshipType_modifies
Indicates the relatedSpdxElement
modifies an SpdxElement
.
relationshipType_modifiedBy
Indicates the relatedSpdxElement
is modified by an SpdxElement
.
relationshipType_revisionOf
Indicates the relatedSpdxElement
is a revision of an SpdxElement
.
usageType_source
Indicates the relatedSpdxElement
is a source file used to compile a resultant executable.
usageType_executable
Indicates the relatedSpdxElement
is an independent executable binary file.
usageType_dynamicLibrary
Indicates the relatedSpdxElement
is an binary library file which is dyamically linked.
usageType_staticLibrary
Indicates the relatedSpdxElement
is an binary library file which is statically linked.
usageType_test
Indicates the relatedSpdxElement
is a file (data, source, executable or other file type) used only in the testing.
usageType_buildTools
Indicates the relatedSpdxElement
is a tool used only in the building.
usageType_documentation
Indicates the relatedSpdxElement
is documentation.
usageType_optional
Indicates the relatedSpdxElement
is an optional element. Optional elements may or may not be included in the distributed package. Examples include contrib libraries, optional debugging facilities.
usageType_referenceImpl
Indicates the relatedSpdxElement
is a reference implementation.
Fields that identify entities that have acted in relation to the SPDX file are single line of text which name the agent or tool and, optionally, provide contact information. For example, "Person: Jane Doe (jane.doe@example.com)", "Organization: ExampleCodeInspect (contact@example.com)" and "Tool: LicenseFind - 1.0". The exact syntax of agent and tool identifications is described below in ABNF.
agent = person / organization
tool = "Tool: " name 0*1( " " DASH " " version)
person = "Person: " name 0*1contact-info
organization = "Organization: " name 0*1contact-info
name = 1*( UNRESERVED ) / U+0022 1*( VCHAR-SANS-QUOTE ) U+0022
contact-info = " (" email-addr ")"
email-addr = local-name-atom *( "." local-name-atom ) "@" domain-name-atom 1*( "." domain-name-atom )
idstring = 1*(ALPHA / DIGIT / ”-” / ”.” / ”+”)
version = 1*VCHAR-SANS-QUOTE
local-name-atom = 1*( ALPHA / DIGIT / ; Printable US-ASCII
"!" / "#" / ; characters not including
"$" / "%" / ; specials.
"&" / "'" /
"*" / "+" /
"-" / "/" /
"=" / "?" /
"^" / "_" /
"`" / "{" /
"|" / "}" /
"~" )
domain-name-atom = 1*( ALPHA / DIGIT / "-" )
DASH = U+2010 / U+2212 / ; hyphen, minus, em dash and
U+2013 / U+2014 ; en dash
UNRESERVED = U+0020-U+0027 / ; visible unicode characters
U+0029-U+0080 / ; except '(' and dashes
U+00A0-U+200F /
U+2011-U+2027 /
U+202A-U+2211 /
U+2213-U+E01EF
VCHAR-SANS-QUOTE = U+0020-U+0021 / ; visible unicode characters
U+0023-U+0080 / ; except quotation mark
U+00a0-U+E01EF