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

Reply via email to