Note that this script makes an incorrect assumption in determining if a license has been superseded. Namely it assumes that the versions will be in ascending order in the XML file, which is not guaranteed.
NRY On 7/5/07, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote: > Revision: 6139 > http://svn.sourceforge.net/cctools/?rev=6139&view=rev > Author: jakin44 > Date: 2007-07-05 22:34:16 -0700 (Thu, 05 Jul 2007) > > Log Message: > ----------- > Script to generate RDF descriptions of all CC licenses. > > Added Paths: > ----------- > liblicense/gen_licenses.py > > Added: liblicense/gen_licenses.py > =================================================================== > --- liblicense/gen_licenses.py (rev 0) > +++ liblicense/gen_licenses.py 2007-07-06 05:34:16 UTC (rev 6139) > @@ -0,0 +1,252 @@ > +#!/usr/bin/env python > +# Creative Commons has made the contents of this file > +# available under a CC-GNU-GPL license: > +# > +# http://creativecommons.org/licenses/GPL/2.0/ > +# > +# A copy of the full license can be found as part of this > +# distribution in the file COPYING. > +# > +# You may use the liblicense software in accordance with the > +# terms of that license. You agree that you are solely > +# responsible for your use of the liblicense software and you > +# represent and warrant to Creative Commons that your use > +# of the liblicense software will comply with the CC-GNU-GPL. > +# > +# Copyright 2007, Creative Commons, www.creativecommons.org. > +# Copyright 2007, Jason Kivlighn. > + > +from rdflib.Graph import Graph > +from rdflib import Namespace, RDF > + > +from urllib2 import * > +import xml.dom.minidom > +import xml.dom.ext > +import sys, os > + > +if not os.path.exists("i18n"): > + print "ERROR: Checkout > https://svn.sourceforge.net/svnroot/cctools/i18n/trunk/i18n/ from svn into > the current directory before running this script." > + sys.exit(1) > + > +try: > + os.mkdir("licenses") > +except: > + pass > + > +header = """<!-- > + > +Creative Commons has made the contents of this file > +available under a CC-GNU-GPL license: > + > + http://creativecommons.org/licenses/GPL/2.0/ > + > + A copy of the full license can be found as part of this > + distribution in the file COPYING > + > +You may use the liblicense software in accordance with the > +terms of that license. You agree that you are solely > +responsible for your use of the liblicense software and you > +represent and warrant to Creative Commons that your use > +of the liblicense software will comply with the CC-GNU-GPL. > + > +Copyright 2007, Creative Commons, www.creativecommons.org. > + > +--> > +""" > + > +PO_DIR="https://svn.sourceforge.net/svnroot/cctools/i18n/trunk/i18n/" > +LICENSE_FILE="https://svn.sourceforge.net/svnroot/cctools/license_xsl/trunk/licenses.xml" > + > +NS_DC = "http://purl.org/dc/elements/1.1/" > +NS_DCQ = "http://purl.org/dc/terms/" > +NS_RDF = "http://www.w3.org/1999/02/22-rdf-syntax-ns#" > + > +NS_CC = Namespace("http://creativecommons.org/ns#") > + > +#x-default should be first in the list > +xDefault = "en" > +locales = [xDefault, "af","bg","ca","da","de","de_AT","de_CH","en_CA", > + "en_GB","en_US","eo","es","es_AR","es_CL","es_CO","es_MX","es_PE", > + > "eu","fi","fr","fr_CA","fr_CH","fr_LU","gl","he","hr","hu","it","it_CH", > + "ja","ko","kr","mk","ms","nl","nso","pl","pt","pt_PT","sl","st","sv", > + "zh","zh_TW","zu"] > + > +conn = urlopen(LICENSE_FILE) > +license_xml = xml.dom.minidom.parse(conn) > + > +licenses = license_xml.getElementsByTagName('license') > +print [license.getAttribute('id') for license in licenses] > +for license in licenses: > + id = license.getAttribute('id') > + print id > + jurisdictions = license.getElementsByTagName('jurisdiction') > + for jurisdiction in jurisdictions: > + jurisdiction_id = jurisdiction.getAttribute('id') > + versions = jurisdiction.getElementsByTagName('version') > + replacedByURI = versions[len(versions)-1].getAttribute('uri') > + for version in versions: > + version_id = version.getAttribute('id') > + uri = version.getAttribute('uri') > + > + store = Graph() > + > + try: > + store.load('%srdf' % uri) > + except: > + print uri, "failed" > + pass > + else: > + doc = xml.dom.minidom.Document() > + > + rdf = doc.createElementNS(NS_RDF, "rdf:RDF") > + doc.appendChild( rdf ) > + > + description = doc.createElementNS(NS_RDF, > "rdf:Description") > + > description.setAttributeNS(NS_RDF,"rdf:about",uri) > + rdf.appendChild( description ) > + > + if version_id != "-": > + hasVersion = > doc.createElementNS(NS_DC, "dc:hasVersion") > + hasVersion.appendChild( > doc.createTextNode(version_id) ) > + description.appendChild( hasVersion ) > + > + if len(versions) > 0 and replacedByURI != uri: > + isReplacedBy = > doc.createElementNS(NS_DC, "dc:isReplacedBy") > + isReplacedByURI = > doc.createElementNS(NS_DCQ, "dcq:URI") > + isReplacedByURIValue = > doc.createElementNS(NS_RDF,"rdf:value") > + isReplacedByURIValue.appendChild( > doc.createTextNode(replacedByURI) ) > + isReplacedByURI.appendChild( > isReplacedByURIValue ) > + isReplacedBy.appendChild( > isReplacedByURI ) > + description.appendChild( isReplacedBy > ) > + > + type = doc.createElementNS(NS_DC, "dc:type") > + type.appendChild( > doc.createTextNode("License") ) > + description.appendChild( type ) > + > + identifier = doc.createElementNS(NS_DC, > "dc:identifier") > + identifier.appendChild( > doc.createTextNode(uri) ) > + description.appendChild( identifier ) > + > + if id in ["GPL","LGPL"]: > + creator_str = "Free Software > Foundation" > + elif id == "publicdomain": > + creator_str = None > + else: > + creator_str = "Creative Commons" > + > + if creator_str: > + creator = doc.createElementNS(NS_DC, > "dc:creator") > + creator.appendChild( > doc.createTextNode(creator_str) ) > + description.appendChild( creator ) > + > + publisher = doc.createElementNS(NS_DC, > "dc:publisher") > + publisher.appendChild( > doc.createTextNode("Creative Commons") ) > + description.appendChild( publisher ) > + > + if jurisdiction_id != "-": > + coverage = doc.createElementNS(NS_DC, > "dc:coverage") > + coverageCode = > doc.createElementNS(NS_DCQ, "dcq:ISO3166") > + coverageCodeValue = > doc.createElementNS(NS_RDF,"rdf:value") > + coverageCodeValue.appendChild( > doc.createTextNode(jurisdiction_id) ) > + coverageCode.appendChild( > coverageCodeValue ) > + coverage.appendChild( coverageCode ) > + description.appendChild( coverage ) > + > + basedOnURI = uri.rsplit("/",2)[0]+"/" > + isBasedOn = > doc.createElementNS(NS_DC, "dc:isBasedOn") > + isBasedOnURI = > doc.createElementNS(NS_DCQ, "dcq:URI") > + isBasedOnURIValue = > doc.createElementNS(NS_RDF,"rdf:value") > + isBasedOnURIValue.appendChild( > doc.createTextNode(basedOnURI) ) > + isBasedOnURI.appendChild( > isBasedOnURIValue ) > + isBasedOn.appendChild( isBasedOnURI ) > + description.appendChild( isBasedOn ) > + > + rdfType = doc.createElementNS(NS_RDF, > "rdf:type") > + > rdfType.setAttributeNS(NS_RDF,"rdf:resource","http://creativecommons.org/ns#License") > + description.appendChild( rdfType ) > + > + for license in store.subjects(RDF.type, > NS_CC["License"]): > + for requires in > store.objects(license, NS_CC["requires"]): > + element = > doc.createElementNS(NS_CC, "requires") > + > element.setAttributeNS(NS_RDF,"rdf:resource",str(requires)) > + description.appendChild( > element ) > + for permits in store.objects(license, > NS_CC["permits"]): > + element = > doc.createElementNS(NS_CC, "permits") > + > element.setAttributeNS(NS_RDF,"rdf:resource",str(permits)) > + description.appendChild( > element ) > + for prohibits in > store.objects(license, NS_CC["prohibits"]): > + element = > doc.createElementNS(NS_CC, "prohibits") > + > element.setAttributeNS(NS_RDF,"rdf:resource",str(prohibits)) > + description.appendChild( > element ) > + > + #try: > + > + translation_map = {} > + > + title = doc.createElementNS(NS_DC, "dc:title") > + title_alt = doc.createElementNS(NS_RDF, > "rdf:Alt") > + title.appendChild( title_alt ) > + description.appendChild(title) > + if id == "devnations": > + translation_map['msgid > "util.Developing_Nations"'] = title_alt > + else: > + translation_map['msgid > "licenses.pretty_%s"' % id] = title_alt > + > + """ > + dcDescription = doc.createElementNS(NS_DC, > "dc:description") > + dcDescription_alt = > doc.createElementNS(NS_RDF, "rdf:Alt") > + dcDescription.appendChild( dcDescription_alt ) > + description.appendChild(dcDescription) > + translation_map['msgid "char.%s_description"' > % id] = dcDescription_alt > + """ > + > + for locale in locales: > + try: > + #conn = > urlopen(PO_DIR+"icommons-%s.po" % locale) > + conn = > open("i18n/icommons-%s.po" % locale,"r") > + lines = conn.readlines() > + i = 0 > + while i < len(lines): > + line = > lines[i].decode("utf8").strip() > + element = > translation_map.get(line) > + if element: > + i += 1 > + msgstr = > lines[i].strip().lstrip('msgstr "').rstrip('"') > + li = > doc.createElementNS(NS_RDF,"rdf:li") > + if locale == > xDefault: > + > li.setAttributeNS(xml.dom.XML_NAMESPACE,"xml:lang","x-default") > + else: > + if > locale.find("_") == -1: > + > locale = locale + "_" + locale.upper() > + > li.setAttributeNS(xml.dom.XML_NAMESPACE,"xml:lang",locale) > + > + if > creator_str == "Creative Commons": > + > msgstr = "Creative Commons - "+msgstr > + > li.appendChild( doc.createTextNode(msgstr) ) > + > + > element.appendChild( li ) > + i += 1 > + except: > + print "getting po file, %s, > failed" % locale > + continue > + > + output = "licenses/%s.rdf" % > uri.lstrip("http://").replace("/","_") > + output_file = open(output,"w") > + #doc.writexml(output_file,'','\t','\n') > + xml.dom.ext.PrettyPrint(doc,output_file) > + output_file.close() > + > + # Now tack on the header comment > + f_out = open(output+".new","w") > + f_in = open(output,"r") > + > + f_out.write(f_in.readline()) > + f_out.write(header) > + f_out.write(f_in.read()) > + > + f_out.close() > + f_in.close() > + > + os.rename(output+".new",output) > + > +print "Licenses output to licenses/" > > > Property changes on: liblicense/gen_licenses.py > ___________________________________________________________________ > Name: svn:executable > + * > > > This was sent by the SourceForge.net collaborative development platform, the > world's largest Open Source development site. > > ------------------------------------------------------------------------- > This SF.net email is sponsored by DB2 Express > Download DB2 Express C - the FREE version of DB2 express and take > control of your XML. No limits. Just data. Click to get it now. > http://sourceforge.net/powerbar/db2/ > _______________________________________________ > Cctools-cvs mailing list > [EMAIL PROTECTED] > https://lists.sourceforge.net/lists/listinfo/cctools-cvs > _______________________________________________ cc-devel mailing list [email protected] http://lists.ibiblio.org/mailman/listinfo/cc-devel
