On 7/9/07, Jason Kivlighn <[EMAIL PROTECTED]> wrote:
>
> > 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.
> I'll fix that.
>
> I want to point out, though, that I don't picture this script as a
> long-term solution in generating licenses.  In my opinion, it hackishly
> pulls together files from all over, including translations from the po
> files in svn.

True enough, but for the time being the .xml file will remain the
canonical file.  Even when we move to using RDF it'll probably be
slightly different -- I'm unmotivated to  maintain tons of little
files when you can represent the entire mess with a single graph.


>
> I like the idea of migrating towards using these RDF license files in
> the other direction:  taking one source with all the license information
> and extracting the relevant information and using it to generate the
> translations, http://creativecommons.org/licenses/.../rdf, and so on.
>
> My 2 cents.
>
> Cheers,
> Jason
>
> >
> > 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
>
_______________________________________________
cc-devel mailing list
[email protected]
http://lists.ibiblio.org/mailman/listinfo/cc-devel

Reply via email to