| 1 | from rdfalchemy import rdfSubject, rdfSingle, rdfMultiple |
|---|
| 2 | from rdfalchemy.orm import mapper |
|---|
| 3 | from rdflib import Namespace |
|---|
| 4 | |
|---|
| 5 | from rdfalchemy.samples.foaf import Person |
|---|
| 6 | |
|---|
| 7 | DOAP=Namespace("http://usefulinc.com/ns/doap#") |
|---|
| 8 | FOAF=Namespace("http://xmlns.com/foaf/0.1/" ) |
|---|
| 9 | |
|---|
| 10 | class Project(rdfSubject): |
|---|
| 11 | rdf_type = DOAP.Project |
|---|
| 12 | name = rdfSingle(DOAP.name) |
|---|
| 13 | created = rdfSingle(DOAP.created) |
|---|
| 14 | homepage = rdfSingle(DOAP.homepage) |
|---|
| 15 | shortdesc = rdfMultiple(DOAP.shortdesc) |
|---|
| 16 | releases = rdfMultiple(DOAP.release, range_type=DOAP.Version) |
|---|
| 17 | language = rdfSingle(DOAP['programming-language']) # because of the hyphen, we can't use DOAP.programming-language |
|---|
| 18 | maintainer = rdfSingle(DOAP.maintainer,range_type=FOAF.Person) |
|---|
| 19 | |
|---|
| 20 | |
|---|
| 21 | class Release(rdfSubject): |
|---|
| 22 | rdf_type = DOAP.Version |
|---|
| 23 | name = rdfSingle(DOAP.revision) |
|---|
| 24 | created = rdfSingle(DOAP.created) |
|---|
| 25 | shortdesc = rdfMultiple(DOAP.shortdesc) |
|---|
| 26 | file_releases = rdfMultiple(DOAP['file-release']) |
|---|
| 27 | |
|---|
| 28 | # mapper() |
|---|
| 29 | # The above line works becuase * is implied |
|---|
| 30 | # The below line is just more explicit |
|---|
| 31 | mapper(Project,Release, Person) |
|---|
| 32 | |
|---|
| 33 | def show_project(p): |
|---|
| 34 | print "\n============================" |
|---|
| 35 | print "Name is %s" % p.name |
|---|
| 36 | print " created on %s" % p.created |
|---|
| 37 | # bacause of `mapper()`, release below will be an instance of Release |
|---|
| 38 | # so we can use dot notation on it |
|---|
| 39 | for release in p.releases: |
|---|
| 40 | print " %s released on %s" % (release.name,release.created) |
|---|
| 41 | for f in release.file_releases: |
|---|
| 42 | print " with file %s" % f.resUri # or f.n3() |
|---|
| 43 | |
|---|
| 44 | |
|---|
| 45 | if __name__ == '__main__': |
|---|
| 46 | loads=["http://doapspace.org/doap/sf/accs.rdf","http://doapspace.org/doap/sf/nut"] |
|---|
| 47 | for url in loads: |
|---|
| 48 | rdfSubject.db.load(url) |
|---|
| 49 | |
|---|
| 50 | for p in Project.ClassInstances(): |
|---|
| 51 | show_project(p) |
|---|
| 52 | |
|---|
| 53 | # A Place to gather more doap records |
|---|
| 54 | pypirss="http://pypi.python.org/pypi?%3Aaction=rss" |
|---|