in assets/lambda_helper_neptune/python/rdflib/term.py [0:0]
def eq(self, other):
"""
Compare the value of this literal with something else
Either, with the value of another literal
comparisons are then done in literal "value space",
and according to the rules of XSD subtype-substitution/type-promotion
OR, with a python object:
basestring objects can be compared with plain-literals,
or those with datatype xsd:string
bool objects with xsd:boolean
a int, long or float with numeric xsd types
isodate date,time,datetime objects with xsd:date,xsd:time or xsd:datetime
Any other operations returns NotImplemented
"""
if isinstance(other, Literal):
if self.datatype in _NUMERIC_LITERAL_TYPES \
and other.datatype in _NUMERIC_LITERAL_TYPES:
if self.value != None and other.value != None:
return self.value == other.value
else:
if str.__eq__(self, other):
return True
raise TypeError(
'I cannot know that these two lexical forms do not map to the same value: %s and %s' % (self, other))
if (self.language or "").lower() != (other.language or "").lower():
return False
dtself = self.datatype or _XSD_STRING
dtother = other.datatype or _XSD_STRING
if (dtself == _XSD_STRING and dtother == _XSD_STRING):
# string/plain literals, compare on lexical form
return str.__eq__(self, other)
if dtself != dtother:
if rdflib.DAWG_LITERAL_COLLATION:
raise TypeError("I don't know how to compare literals with datatypes %s and %s" % (
self.datatype, other.datatype))
else:
return False
# matching non-string DTs now - do we compare values or
# lexical form first? comparing two ints is far quicker -
# maybe there are counter examples
if self.value != None and other.value != None:
if self.datatype in (_RDF_XMLLITERAL, _RDF_HTMLLITERAL):
return _isEqualXMLNode(self.value, other.value)
return self.value == other.value
else:
if str.__eq__(self, other):
return True
if self.datatype == _XSD_STRING:
return False # string value space=lexical space
# matching DTs, but not matching, we cannot compare!
raise TypeError(
'I cannot know that these two lexical forms do not map to the same value: %s and %s' % (self, other))
elif isinstance(other, Node):
return False # no non-Literal nodes are equal to a literal
elif isinstance(other, str):
# only plain-literals can be directly compared to strings
# TODO: Is "blah"@en eq "blah" ?
if self.language is not None:
return False
if (self.datatype == _XSD_STRING or self.datatype is None):
return str(self) == other
elif isinstance(other, (int, float)):
if self.datatype in _NUMERIC_LITERAL_TYPES:
return self.value == other
elif isinstance(other, (date, datetime, time)):
if self.datatype in (_XSD_DATETIME, _XSD_DATE, _XSD_TIME):
return self.value == other
elif isinstance(other, bool):
if self.datatype == _XSD_BOOLEAN:
return self.value == other
return NotImplemented