Skip to content
Merged
2 changes: 2 additions & 0 deletions examples/7-load-Rdf/example_loadRDF.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later

package main

import (
Expand Down
44 changes: 44 additions & 0 deletions examples/8-load-save-Rdf/example_load-saveRDF.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later

package main

import (
"fmt"
"os"

"github.com/spdx/tools-golang/v0/rdfloader"
"github.com/spdx/tools-golang/v0/rdfsaver"

"github.com/spdx/tools-golang/v0/rdfloader/rdf2v1"
)

func main() {

// check that we've received the right number of arguments
args := os.Args
if len(args) != 2 {
fmt.Printf("Usage: %v <spdx-file-in>\n", args[0])
fmt.Printf(" Load SPDX 2.1 tag-value file <spdx-file-in>, and\n")
fmt.Printf(" print a portion of its contents.\n")
return
}

// storing the input
input := args[1]

// try to load the SPDX file's contents as a rdf file, version 2.1
doc2v1 := rdfloader.Reader2_1(input)

err := rdfsaver.Saver2_1(doc2v1)
if err != nil {
fmt.Printf("Error while saving the document.")
return
}

}
func Parse2_1(input string) (*rdf2v1.Document, *rdf2v1.Snippet, error) {
parser := rdf2v1.NewParser(input)
defer fmt.Printf("RDF Document parsed successfully.\n")
defer parser.Free()
return parser.Parse()
}
1,225 changes: 1,225 additions & 0 deletions examples/8-load-save-Rdf/examplerdf2v1.rdf

Large diffs are not rendered by default.

7 changes: 7 additions & 0 deletions examples/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,3 +61,10 @@ licenses for subsequent versions of the same set of files.

This example demonstrates loading an SPDX Rdf file from disk into memory,
and printing some of its contents to standard output.

## 8-load-save-Rdf/

*rdfloader*, *rdfsaver*

This example demonstrates loading an SPDX RDF file from disk into memory,
and re-saving it to a different file on disk.
2 changes: 2 additions & 0 deletions v0/rdfloader/rdf2v1/Annotation.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later

package rdf2v1

import (
Expand Down
2 changes: 2 additions & 0 deletions v0/rdfloader/rdf2v1/Checksum.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later

package rdf2v1

import (
Expand Down
3 changes: 3 additions & 0 deletions v0/rdfloader/rdf2v1/CreationInfo.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later

package rdf2v1

import (
Expand Down Expand Up @@ -25,6 +27,7 @@ func (p *Parser) requestCreationInfo(node goraptor.Term) (*CreationInfo, error)

func (p *Parser) MapCreationInfo(ci *CreationInfo) *builder {
builder := &builder{t: TypeCreationInfo, ptr: ci}
ci.SPDXIdentifier = SPDXID
builder.updaters = map[string]updater{
"licenseListVersion": update(&ci.LicenseListVersion),
"creator": updateList(&ci.Creator),
Expand Down
8 changes: 8 additions & 0 deletions v0/rdfloader/rdf2v1/Document.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later

package rdf2v1

import (
Expand Down Expand Up @@ -83,6 +85,9 @@ func (p *Parser) MapDocument(doc *Document) *builder {
return err
}
doc.Relationship = append(doc.Relationship, rel)
if rel != nil {
DoctoRel[SPDXID] = append(DoctoRel[SPDXID], rel)
}
return nil
},
"annotation": func(obj goraptor.Term) error {
Expand All @@ -91,6 +96,9 @@ func (p *Parser) MapDocument(doc *Document) *builder {
return err
}
doc.Annotation = append(doc.Annotation, an)
if an != nil {
DoctoAnno[SPDXID] = append(DoctoAnno[SPDXID], an)
}
return err
},
"externalDocumentRef": func(obj goraptor.Term) error {
Expand Down
2 changes: 2 additions & 0 deletions v0/rdfloader/rdf2v1/ExtractedLicensingInfo.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later

package rdf2v1

import (
Expand Down
5 changes: 5 additions & 0 deletions v0/rdfloader/rdf2v1/File.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later

package rdf2v1

import (
Expand Down Expand Up @@ -88,6 +90,9 @@ func (p *Parser) MapFile(file *File) *builder {
"annotation": func(obj goraptor.Term) error {
an, err := p.requestAnnotation(obj)
file.Annotation = append(file.Annotation, an)
if an != nil {
FiletoAnno[SPDXIDFile] = append(FiletoAnno[SPDXIDFile], an)
}
return err
},
"artifactOf": func(obj goraptor.Term) error {
Expand Down
2 changes: 2 additions & 0 deletions v0/rdfloader/rdf2v1/License.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later

package rdf2v1

import (
Expand Down
10 changes: 10 additions & 0 deletions v0/rdfloader/rdf2v1/Package.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later

package rdf2v1

import (
Expand Down Expand Up @@ -124,6 +126,11 @@ func (p *Parser) MapPackage(pkg *Package) *builder {
"copyrightText": update(&pkg.PackageCopyrightText),
"hasFile": func(obj goraptor.Term) error {
file, err := p.requestFile(obj)

// Relates File to Package
if file != nil {
PackagetoFile[SPDXIDPackage] = append(PackagetoFile[SPDXIDPackage], file)
}
if err != nil {
return err
}
Expand All @@ -150,6 +157,9 @@ func (p *Parser) MapPackage(pkg *Package) *builder {
"annotation": func(obj goraptor.Term) error {
an, err := p.requestAnnotation(obj)
pkg.Annotation = append(pkg.Annotation, an)
if an != nil {
PackagetoAnno[SPDXIDPackage] = append(PackagetoAnno[SPDXIDPackage], an)
}
return err
},
"rdfs:comment": update(&pkg.PackageComment)}
Expand Down
8 changes: 8 additions & 0 deletions v0/rdfloader/rdf2v1/ProcessTerm.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later

package rdf2v1

import (
Expand Down Expand Up @@ -155,6 +157,12 @@ func ExtractRelType(value string) string {
}
return s[1]
}

func AddRelType(value string) string {
s := "http://spdx.org/rdf/terms#relationshipType_" + value
return s
}

func InsertId(value string) ValueStr {
s := value + "#SPDXRef-DOCUMENT"
vs := Str(s)
Expand Down
10 changes: 10 additions & 0 deletions v0/rdfloader/rdf2v1/Relationship.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later

package rdf2v1

import (
Expand Down Expand Up @@ -44,9 +46,17 @@ func (p *Parser) MapRelationship(rel *Relationship) *builder {
}
pkg, err := p.requestPackage(obj)
rel.Package = append(rel.Package, pkg)

// Relates Relationship to Package
if pkg != nil {
ReltoPackage[SPDXIDRelationship] = append(ReltoPackage[SPDXIDRelationship], pkg)
}
if err != nil {
file, err := p.requestFile(obj)
rel.File = append(rel.File, file)
if file != nil {
ReltoFile[SPDXIDRelationship] = append(ReltoFile[SPDXIDRelationship], file)
}
if err != nil {
se, err := p.requestSpdxElement(obj)
rel.SpdxElement = se
Expand Down
2 changes: 2 additions & 0 deletions v0/rdfloader/rdf2v1/Review.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later

package rdf2v1

import (
Expand Down
5 changes: 5 additions & 0 deletions v0/rdfloader/rdf2v1/Snippet.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later

package rdf2v1

import (
Expand Down Expand Up @@ -78,6 +80,9 @@ func (p *Parser) MapSnippet(s *Snippet) *builder {
"snippetFromFile": func(obj goraptor.Term) error {
file, err := p.requestFile(obj)
s.SnippetFromFile = file
if file != nil {
SniptoFile[SPDXIDSnippet] = file
}
return err
},
"licenseInfoInSnippet": updateList(&s.LicenseInfoInSnippet),
Expand Down
37 changes: 27 additions & 10 deletions v0/rdfloader/rdf2v1/reader.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later

package rdf2v1

import (
Expand Down Expand Up @@ -35,16 +37,27 @@ var (
TypeLineCharPointer = Prefix("j.0:LineCharPointer")
)
var (
DocumentNamespace ValueStr
SPDXID ValueStr
SPDXIDFile ValueStr
SPDXIDSnippet ValueStr
SPDXIDPackage ValueStr
SPDXIDLicense ValueStr
SPDXIDCLicense ValueStr
ProjectURI ValueStr
RelatedSPDXElementID ValueStr
RelatedSPDXElementKey bool
DocumentNamespace ValueStr
ProjectURI ValueStr
SPDXID ValueStr
SPDXIDFile ValueStr
SPDXIDRelationship ValueStr
SPDXIDSnippet ValueStr
SPDXIDPackage ValueStr
SPDXIDLicense ValueStr
SPDXIDCLicense ValueStr
)

var (
counter int
PackagetoFile = make(map[ValueStr][]*File)
ReltoPackage = make(map[ValueStr][]*Package)
ReltoFile = make(map[ValueStr][]*File)
DoctoRel = make(map[ValueStr][]*Relationship)
SniptoFile = make(map[ValueStr]*File)
DoctoAnno = make(map[ValueStr][]*Annotation)
FiletoAnno = make(map[ValueStr][]*Annotation)
PackagetoAnno = make(map[ValueStr][]*Annotation)
)

// Parser Struct and associated methods
Expand Down Expand Up @@ -104,6 +117,10 @@ func (p *Parser) ProcessTriple(stm *goraptor.Statement) error {
SPDXIDCLicense = Str(strings.Replace(termStr(stm.Object), "http://spdx.org/licenses/", "", 1))
}
}
if ExtractId(termStr(stm.Predicate)) == "relationshipType" {
SPDXIDRelationship = Str(strings.Replace(termStr(stm.Object), "http://spdx.org/rdf/terms#relationshipType_", "", 1))
counter++
}

if stm.Predicate.Equals(URInsType) {
_, err := p.setNodeType(stm.Subject, stm.Object)
Expand Down
Loading