#python #python-2.7 #rdflib
Вопрос:
Может ли кто-нибудь сказать мне, как сохранить XSD.float
значение Infinite
a в качестве литерала в rdflib?
XSD.float
допускает бесконечное значение и требует, чтобы оно хранилось как INF
(см. Здесь).
Но оба интуитивных метода возвращаются inf
вместо INF
этого , что приводит к сбою с некоторыми другими анализаторами RDF:
from rdflib import Graph, URIRef, Literal, Namespace
from rdflib.namespace import XSD
NS = Namespace("http://example.com/")
g = Graph()
attempt1 = Literal(float('inf'), datatype=XSD.float) # using a Python representation of an infinite float
g.add((NS.a, NS.b, attempt1))
attempt2 = Literal("INF", datatype=XSD.float) # directly inserting the desired output
g.add((NS.e, NS.f, attempt2))
print g.serialize()
должно привести к:
<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF
xmlns:ns1="http://example.com/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
>
<rdf:Description rdf:about="http://example.com/a">
<ns1:b rdf:datatype="http://www.w3.org/2001/XMLSchema#float">INF</ns1:b>
</rdf:Description>
<rdf:Description rdf:about="http://example.com/e">
<ns1:f rdf:datatype="http://www.w3.org/2001/XMLSchema#float">INF</ns1:f>
</rdf:Description>
</rdf:RDF>
но на самом деле приводит к
<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF
xmlns:ns1="http://example.com/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
>
<rdf:Description rdf:about="http://example.com/a">
<ns1:b rdf:datatype="http://www.w3.org/2001/XMLSchema#float">inf</ns1:b>
</rdf:Description>
<rdf:Description rdf:about="http://example.com/e">
<ns1:f rdf:datatype="http://www.w3.org/2001/XMLSchema#float">inf</ns1:f>
</rdf:Description>
</rdf:RDF>
Кто-нибудь знает, что я делаю неправильно или как создать обходной путь?
Для справки: я использую Python 2.7 и нет, я не могу переключиться на Python 3.x