| author | ymh <ymh.work@gmail.com> |
| Mon, 07 Oct 2013 14:28:31 +0200 | |
| changeset 142 | c365a6e23a56 |
| parent 141 | 740d595d6728 |
| child 143 | b74f0e14d50f |
--- a/src/p4l/management/commands/dump_record.py Sat Oct 05 21:00:59 2013 +0200 +++ b/src/p4l/management/commands/dump_record.py Mon Oct 07 14:28:31 2013 +0200 @@ -170,4 +170,4 @@ writer.endElementNS((RDF, 'RDF'), 'RDF') writer.endDocument() - dest_file.write("\n") \ No newline at end of file + dest_file.write("\n")
--- a/src/p4l/mapping/__init__.py Sat Oct 05 21:00:59 2013 +0200 +++ b/src/p4l/mapping/__init__.py Mon Oct 07 14:28:31 2013 +0200 @@ -32,12 +32,19 @@ # from rdflib.namespace import RDFS +from rdflib.term import URIRef, Literal from p4l.mapping.constants import IIEP, DCT from p4l.mapping.serializers import (ModelSerializer, SimpleFieldSerializer, BooleanFieldSerializer, RelatedFieldSerializer) +def uri_convert(s): + try: + return URIRef(unicode(s)) if s else None + except: + return Literal(unicode(s)) if s else None + class ImprintSerializer(ModelSerializer): imprintCity = SimpleFieldSerializer(predicate=IIEP.imprintCity, lang_field='lang') @@ -82,20 +89,20 @@ notes = SimpleFieldSerializer(predicate=IIEP.notes) editionStatement = SimpleFieldSerializer(predicate=IIEP.editionStatement) corporateAuthorLabel = SimpleFieldSerializer(predicate=IIEP.corporateAuthorLabel) - recordType = SimpleFieldSerializer(predicate=DCT.type) + recordType = SimpleFieldSerializer(predicate=DCT.type, convert=uri_convert) isDocumentPart = BooleanFieldSerializer(predicate=IIEP.isDocumentPart) hidden = BooleanFieldSerializer(predicate=IIEP.hidden) restricted = BooleanFieldSerializer(predicate=IIEP.restricted) - language = RelatedFieldSerializer(many=False, value_field='uri', predicate=DCT.language) - otherLanguages = RelatedFieldSerializer(many=True, value_field='uri', predicate=IIEP.otherLanguage) - subjects = RelatedFieldSerializer(many=True, value_field='uri', predicate=DCT.subject) - themes = RelatedFieldSerializer(many=True, value_field='uri', predicate=IIEP.theme) - countries = RelatedFieldSerializer(many=True, value_field='uri', predicate=IIEP.country) - projectNames = RelatedFieldSerializer(many=True, value_field='uri', predicate=IIEP.projectName) - subjectCorporateBodies = RelatedFieldSerializer(many=True, value_field='uri', predicate=IIEP.subjectCorporateBody) - corporateAuthors = RelatedFieldSerializer(many=True, value_field='uri', predicate=IIEP.corporateAuthor) - audiences = RelatedFieldSerializer(many=True, value_field='uri', predicate=IIEP.audience) + language = RelatedFieldSerializer(many=False, value_field='uri', predicate=DCT.language, convert=uri_convert) + otherLanguages = RelatedFieldSerializer(many=True, value_field='uri', predicate=IIEP.otherLanguage, convert=uri_convert) + subjects = RelatedFieldSerializer(many=True, value_field='uri', predicate=DCT.subject, convert=uri_convert) + themes = RelatedFieldSerializer(many=True, value_field='uri', predicate=IIEP.theme, convert=uri_convert) + countries = RelatedFieldSerializer(many=True, value_field='uri', predicate=IIEP.country, convert=uri_convert) + projectNames = RelatedFieldSerializer(many=True, value_field='uri', predicate=IIEP.projectName, convert=uri_convert) + subjectCorporateBodies = RelatedFieldSerializer(many=True, value_field='uri', predicate=IIEP.subjectCorporateBody, convert=uri_convert) + corporateAuthors = RelatedFieldSerializer(many=True, value_field='uri', predicate=IIEP.corporateAuthor, convert=uri_convert) + audiences = RelatedFieldSerializer(many=True, value_field='uri', predicate=IIEP.audience, convert=uri_convert) isbns = RelatedFieldSerializer(many=True, value_field='isbn', predicate=IIEP.isbn, lang_field='lang') issns = RelatedFieldSerializer(many=True, value_field='issn', predicate=IIEP.issn, lang_field='lang')
--- a/src/p4l/mapping/serializers.py Sat Oct 05 21:00:59 2013 +0200 +++ b/src/p4l/mapping/serializers.py Mon Oct 07 14:28:31 2013 +0200 @@ -31,11 +31,11 @@ # knowledge of the CeCILL-B license and that you accept its terms. # +from collections import OrderedDict import logging from rdflib.namespace import RDF -from rdflib.term import URIRef, Literal, BNode -from collections import OrderedDict +from rdflib.term import URIRef, Literal, BNode, Identifier logger = logging.getLogger(__name__) @@ -80,8 +80,9 @@ res = self.convert(getattr(obj, self.source or fieldname)) if res is None: return - if not isinstance(res, Literal): + if not isinstance(res, Identifier): res = Literal(unicode(res)) + lang = getattr(obj, self.lang_field, None) if self.lang_field else None return Literal(res.value, lang) if lang else res @@ -99,7 +100,7 @@ class RelatedFieldSerializer(SimpleFieldSerializer): def __init__(self, value_field, predicate=None, convert=None, source=None, many=False, lang_field=None): - super(RelatedFieldSerializer, self).__init__(predicate, convert, source, lang_field=lang_field) + super(RelatedFieldSerializer, self).__init__(predicate=predicate, convert=convert, source=source, lang_field=lang_field) self.many = many self.value_field = value_field