Values of rdf:value in BIBFRAME do have a datatype: rdfs:literal. That means that unless declared otherwise, it is a string by default. Whenever you want, you can refine a literal
(1) rdf: value “10”
(2) rdf:value “10”^^xs:int
The first is a string; the second is an integer. But there is nowhere in BIBFRAME that you would refine a value of rdf:value.
Consider for example a bf:Identifier. BIBFRAME prescribes that you assert the value of the identifier by rdf:value:
bf:identifiedBy [ a bf:Isbn
rdf:value “9783110413014” ] .
“9783110413014” is a string. You could refine it and assert that it’s an integer:
But you don’t want to do that because it isn’t an integer, it’s just a string. And wherever rdf:value is prescribed in BIBFRAME, it is just a string.
Someday you may be able to assert that it has datatype “isbn”….
… and that may facilitate processing of the isbn string. But there is no such primitive datatype yet. However the statement “a bf:Isbn” would seem to serve that purpose.
My point being that wherever rdf:value occurs, though there may not be an explicit primitive datatype, the actual datatype is understood by context.
There are datatype properties in BIBFRAME where is makes sense to refine the datatype. Take bf:count or bf:date for example
Someone might declare:
and someone else declare:
bf:date “June 20, 2016”
vs: bf:date “20160620”^^xdt:date
And in both cases the second form is going to be more easily processed.
But neither of these is supplied via rdf:value; they are datatype properties, for which rdf:value doesn’t apply.