本文整理汇总了Python中rdflib.graph.Graph.predicate_objects方法的典型用法代码示例。如果您正苦于以下问题:Python Graph.predicate_objects方法的具体用法?Python Graph.predicate_objects怎么用?Python Graph.predicate_objects使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类rdflib.graph.Graph
的用法示例。
在下文中一共展示了Graph.predicate_objects方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: ttl2solr
# 需要导入模块: from rdflib.graph import Graph [as 别名]
# 或者: from rdflib.graph.Graph import predicate_objects [as 别名]
def ttl2solr(infile, outfile, vocab_name=None):
logger.info('ttl2solr: Loading %s', infile)
g = Graph()
g.load(infile, format='turtle')
# Build parent lookup hash
# logger.debug('Building parent lookup hash')
parents = {}
for c, p in g.subject_objects(SKOS.broader):
c = text_type(c) # to string
p = text_type(p) # to string
if c not in parents:
parents[c] = set()
parents[c].add(p)
# Build labels lookup hash using two fast passes
# logger.debug('Building labels lookup hash')
labels = {}
for c, p in g.subject_objects(SKOS.altLabel):
labels[text_type(c)] = text_type(p)
for c, p in g.subject_objects(SKOS.prefLabel):
labels[text_type(c)] = text_type(p) # overwrite altLabel with prefLabel if found
# logger.debug('Building documents')
docs = []
unknown_preds = set()
for uriref in g.subjects(RDF.type, SKOS.Concept):
doc = {'id': text_type(uriref)}
if vocab_name is not None:
doc['vocabulary'] = vocab_name
for pred, obj in g.predicate_objects(uriref):
if pred not in schema:
if pred not in unknown_preds:
logger.warning('Encountered unknown predicate with no mapping to JSON: %s', pred)
unknown_preds.add(pred)
continue
if pred == SKOS.inScheme and schema[pred] in vocabs:
doc['vocab'] = vocabs[schema[pred]]
continue
if schema[pred] is None:
continue
if schema[pred] not in doc:
doc[schema[pred]] = []
doc[schema[pred]].append(text_type(obj))
# Add labels from broader concepts
bcs = []
for bc in get_breadcrumbs([[text_type(uriref)]], parents):
bc = [labels.get(x) for x in reversed(bc[1:])]
bcs.append('/'.join([x for x in bc if x is not None]))
doc['paths'] = bcs
byLevel = [[text_type(uriref)]] # Level 0
level = 0
while True:
byLevel.append([])
for x in byLevel[level]:
byLevel[level + 1].extend(parents.get(x, set()))
if len(byLevel[level + 1]) == 0:
break
level += 1
for level, items in enumerate(byLevel[1:4]):
# logger.debug(level, items)
doc['parentsLevel{}'.format(level + 1)] = [labels[x] for x in items if x in labels] # Vi mangler labels for enkelt toppetiketter, som f.eks. 'http://data.ub.uio.no/ddc/19'
docs.append(doc)
logger.info('ttl2solr: Storing %d documents in %s', len(docs), outfile)
json.dump(docs, open(outfile, 'w'), indent=2)
示例2: convert
# 需要导入模块: from rdflib.graph import Graph [as 别名]
# 或者: from rdflib.graph.Graph import predicate_objects [as 别名]
def convert(infile, outfile):
logger.debug('Loading %s', infile)
g = Graph()
g.load(infile, format='turtle')
# Build parent lookup hash
logger.debug('Building parent lookup hash')
parents = {}
for c, p in g.subject_objects(SKOS.broader):
c = text_type(c) # to string
p = text_type(p) # to string
if c not in parents:
parents[c] = set()
parents[c].add(p)
# Build labels lookup hash using two fast passes
logger.debug('Building labels lookup hash')
labels = {}
for c, p in g.subject_objects(SKOS.altLabel):
labels[text_type(c)] = text_type(p)
for c, p in g.subject_objects(SKOS.prefLabel):
labels[text_type(c)] = text_type(p) # overwrite altLabel with prefLabel if found
logger.debug('Building documents')
docs = []
for uriref in g.subjects(RDF.type, SKOS.Concept):
doc = {'id': text_type(uriref)}
for pred, obj in g.predicate_objects(uriref):
if pred not in schema:
logger.error('Encountered unknown predicate with no mapping to JSON: %s', pred)
continue
if pred == SKOS.inScheme and schema[pred] in vocabs:
doc['vocab'] = vocabs[schema[pred]]
continue
if schema[pred] is None:
continue
if schema[pred] not in doc:
doc[schema[pred]] = []
doc[schema[pred]].append(text_type(obj))
# Add labels from broader concepts
byLevel = [[text_type(uriref)]] # Level 0
level = 0
while True:
byLevel.append([])
for x in byLevel[level]:
byLevel[level + 1].extend(parents.get(x, set()))
if len(byLevel[level + 1]) == 0:
break
level += 1
for level, items in enumerate(byLevel[1:-1]):
# logger.debug(level, items)
doc['parentsLevel{}'.format(level)] = [labels[x] for x in items if x in labels] # Vi mangler labels for enkelt toppetiketter, som f.eks. 'http://data.ub.uio.no/ddc/19'
docs.append(doc)
logger.debug('Generated %d documents', len(docs))
logger.debug('Saving %s', outfile)
json.dump(docs, open(outfile, 'w'), indent=2)