Java源码示例:org.eclipse.rdf4j.model.util.Literals
示例1
/**
* Verify that BIND clause alias from the SERVICE clause gets added to the result set.
*
* @see <a href="https://github.com/eclipse/rdf4j/issues/646">#646</a>
*/
@Test
public void testValuesBindClauseHandling() throws Exception {
String query = "select * { service <" + getRepositoryUrl(1) + "> { Bind(1 as ?val) . VALUES ?x {1 2} . } }";
try (RepositoryConnection conn = localRepository.getConnection()) {
TupleQuery tq = conn.prepareTupleQuery(query);
TupleQueryResult tqr = tq.evaluate();
assertNotNull(tqr);
assertTrue(tqr.hasNext());
List<BindingSet> result = QueryResults.asList(tqr);
assertEquals(2, result.size());
for (BindingSet bs : result) {
assertTrue(bs.hasBinding("val"));
assertEquals(1, Literals.getIntValue(bs.getValue("val"), 0));
assertTrue(bs.hasBinding("x"));
int x = Literals.getIntValue(bs.getValue("x"), 0);
assertTrue(x == 1 || x == 2);
}
}
}
示例2
private void writeValue(Value value, DataOutputStream dataOut) throws IOException {
if (value instanceof IRI) {
dataOut.writeByte(URI_MARKER);
writeString(((IRI) value).toString(), dataOut);
} else if (value instanceof BNode) {
dataOut.writeByte(BNODE_MARKER);
writeString(((BNode) value).getID(), dataOut);
} else if (value instanceof Literal) {
Literal lit = (Literal) value;
String label = lit.getLabel();
IRI datatype = lit.getDatatype();
if (Literals.isLanguageLiteral(lit)) {
dataOut.writeByte(LANG_LITERAL_MARKER);
writeString(label, dataOut);
writeString(lit.getLanguage().get(), dataOut);
} else {
dataOut.writeByte(DATATYPE_LITERAL_MARKER);
writeString(label, dataOut);
writeValue(datatype, dataOut);
}
} else {
throw new IllegalArgumentException("unexpected value type: " + value.getClass());
}
}
示例3
private void writeLiteral(Literal literal) throws IOException {
if (Literals.isLanguageLiteral(literal)) {
xmlWriter.setAttribute(LITERAL_LANG_ATT, literal.getLanguage().get());
}
// Only enter this section for non-language literals now, as the
// rdf:langString datatype is handled implicitly above
else {
IRI datatype = literal.getDatatype();
boolean ignoreDatatype = datatype.equals(XMLSchema.STRING) && xsdStringToPlainLiteral();
if (!ignoreDatatype) {
if (isQName(datatype)) {
writeQName(datatype);
}
xmlWriter.setAttribute(LITERAL_DATATYPE_ATT, datatype.stringValue());
}
}
xmlWriter.textElement(LITERAL_TAG, literal.getLabel());
}
示例4
/**
* Checks whether the supplied two literal arguments are 'argument compatible' according to the SPARQL definition.
*
* @param arg1 the first argument
* @param arg2 the second argument
* @return true iff the two supplied arguments are argument compatible, false otherwise
* @see <a href="http://www.w3.org/TR/sparql11-query/#func-arg-compatibility">SPARQL Argument Compatibility
* Rules</a>
*/
public static boolean compatibleArguments(Literal arg1, Literal arg2) {
boolean arg1Language = Literals.isLanguageLiteral(arg1);
boolean arg2Language = Literals.isLanguageLiteral(arg2);
boolean arg1Simple = isSimpleLiteral(arg1);
boolean arg2Simple = isSimpleLiteral(arg2);
// 1. The arguments are literals typed as xsd:string
// 2. The arguments are language literals with identical language tags
// 3. The first argument is a language literal and the second
// argument is a literal typed as xsd:string
boolean compatible =
(arg1Simple && arg2Simple)
|| (arg1Language && arg2Language && arg1.getLanguage().equals(arg2.getLanguage()))
|| (arg1Language && arg2Simple);
return compatible;
}
示例5
private static StringBuilder appendValue(StringBuilder sb, Literal lit) {
sb.append('"');
sb.append(SPARQLUtil.encodeString(lit.getLabel()));
sb.append('"');
if (Literals.isLanguageLiteral(lit)) {
sb.append('@');
sb.append(lit.getLanguage().get());
} else if (!lit.getDatatype().equals(XMLSchema.STRING)) {
// Don't append type if it's xsd:string, this keeps it compatible with RDF 1.0
sb.append("^^<");
sb.append(lit.getDatatype().stringValue());
sb.append('>');
}
return sb;
}
示例6
/**
* Append the SPARQL query string rendering of the {@link org.eclipse.rdf4j.model.Value} to the supplied
* {@link StringBuilder}.
*
* @param value the value to render
* @param builder the {@link StringBuilder} to append to
* @return the original {@link StringBuilder} with the value appended.
*/
public static StringBuilder toSPARQL(Value value, StringBuilder builder) {
if (value instanceof IRI) {
IRI aURI = (IRI) value;
builder.append("<").append(aURI.toString()).append(">");
} else if (value instanceof BNode) {
builder.append("_:").append(((BNode) value).getID());
} else if (value instanceof Literal) {
Literal aLit = (Literal) value;
builder.append("\"\"\"").append(escape(aLit.getLabel())).append("\"\"\"");
if (Literals.isLanguageLiteral(aLit)) {
aLit.getLanguage().ifPresent(lang -> builder.append("@").append(lang));
} else {
builder.append("^^<").append(aLit.getDatatype().toString()).append(">");
}
}
return builder;
}
示例7
/**
* Return the query string rendering of the {@link Value}
*
* @param theValue the value to render
* @return the value rendered in its query string representation
*/
public static String toSeRQL(Value theValue) {
StringBuilder aBuffer = new StringBuilder();
if (theValue instanceof IRI) {
IRI aURI = (IRI) theValue;
aBuffer.append("<").append(aURI.toString()).append(">");
} else if (theValue instanceof BNode) {
aBuffer.append("_:").append(((BNode) theValue).getID());
} else if (theValue instanceof Literal) {
Literal aLit = (Literal) theValue;
aBuffer.append("\"").append(escape(aLit.getLabel())).append("\"");
if (Literals.isLanguageLiteral(aLit)) {
aBuffer.append("@").append(aLit.getLanguage());
} else {
aBuffer.append("^^<").append(aLit.getDatatype().toString()).append(">");
}
}
return aBuffer.toString();
}
示例8
/**
* Writes out the XML-representation for the supplied value.
*/
private void writeValue(Value value) throws IOException, RDFHandlerException {
if (value instanceof IRI) {
IRI uri = (IRI) value;
xmlWriter.textElement(URI_TAG, uri.toString());
} else if (value instanceof BNode) {
BNode bNode = (BNode) value;
xmlWriter.textElement(BNODE_TAG, bNode.getID());
} else if (value instanceof Literal) {
Literal literal = (Literal) value;
IRI datatype = literal.getDatatype();
if (Literals.isLanguageLiteral(literal)) {
xmlWriter.setAttribute(LANGUAGE_ATT, literal.getLanguage().get());
xmlWriter.textElement(PLAIN_LITERAL_TAG, literal.getLabel());
} else {
xmlWriter.setAttribute(DATATYPE_ATT, datatype.toString());
xmlWriter.textElement(TYPED_LITERAL_TAG, literal.getLabel());
}
} else {
throw new RDFHandlerException("Unknown value type: " + value.getClass());
}
}
示例9
/**
* Appends the N-Triples representation of the given {@link Literal} to the given {@link Appendable}, optionally
* ignoring the xsd:string datatype as it is implied for RDF-1.1.
*
* @param lit The literal to write.
* @param appendable The object to append to.
* @param xsdStringToPlainLiteral True to omit serializing the xsd:string datatype and false to always serialize the
* datatype for literals.
* @param escapeUnicode True to escape non-ascii/non-printable characters using Unicode escapes
* (<tt>\uxxxx</tt> and <tt>\Uxxxxxxxx</tt>), false to print without
* escaping.
* @throws IOException
*/
public static void append(Literal lit, Appendable appendable, boolean xsdStringToPlainLiteral,
boolean escapeUnicode) throws IOException {
// Do some character escaping on the label:
appendable.append("\"");
escapeString(lit.getLabel(), appendable, escapeUnicode);
appendable.append("\"");
if (Literals.isLanguageLiteral(lit)) {
// Append the literal's language
appendable.append("@");
appendable.append(lit.getLanguage().get());
} else {
// SES-1917 : In RDF-1.1, all literals have a type, and if they are not
// language literals we display the type for backwards compatibility
// Append the literal's datatype
IRI datatype = lit.getDatatype();
boolean ignoreDatatype = datatype.equals(XMLSchema.STRING) && xsdStringToPlainLiteral;
if (!ignoreDatatype) {
appendable.append("^^");
append(lit.getDatatype(), appendable);
}
}
}
示例10
/**
* Converts a {@link Literal} into a {@link RyaType} representation of the
* {@code literal}.
* @param literal the {@link Literal} to convert.
* @return the {@link RyaType} representation of the {@code literal}.
*/
public static RyaType convertLiteral(final Literal literal) {
if (literal == null) {
return null;
}
if (literal.getDatatype() != null) {
if (Literals.isLanguageLiteral(literal)) {
final String language = literal.getLanguage().get();
if (Literals.isValidLanguageTag(language)) {
return new RyaType(literal.getDatatype(), literal.stringValue(), language);
} else {
log.warn("Invalid language (" + LogUtils.clean(language) + ") found in Literal. Defaulting to: " + UNDETERMINED_LANGUAGE);
// Replace invalid language with "und"
return new RyaType(literal.getDatatype(), literal.stringValue(), UNDETERMINED_LANGUAGE);
}
}
return new RyaType(literal.getDatatype(), literal.stringValue());
}
return new RyaType(literal.stringValue());
}
示例11
@Override
public RyaType deserialize(final byte[] bytes) throws RyaTypeResolverException {
if (!deserializable(bytes)) {
throw new RyaTypeResolverException("Bytes not deserializable");
}
final RyaType rt = newInstance();
rt.setDataType(getRyaDataType());
String data = new String(bytes, 0, bytes.length - 2, StandardCharsets.UTF_8);
if (RDF.LANGSTRING.equals(rt.getDataType())) {
final int langDelimiterPos = data.lastIndexOf(LiteralLanguageUtils.LANGUAGE_DELIMITER);
final String parsedData = data.substring(0, langDelimiterPos);
final String language = data.substring(langDelimiterPos + 1, data.length());
if (language != null && Literals.isValidLanguageTag(language)) {
rt.setLanguage(language);
} else {
rt.setLanguage(LiteralLanguageUtils.UNDETERMINED_LANGUAGE);
}
data = parsedData;
}
rt.setData(deserializeData(data));
return rt;
}
示例12
@Test
public void testConvertLiteral_validLanguage() {
final String expectedData = "Hello";
for (final String language : LANGUAGE_CODES) {
// This only checks the validity of the format. Not that the language tag actually exists.
assertTrue(Literals.isValidLanguageTag(language));
final RyaType ryaType = new RyaType(RDF.LANGSTRING, expectedData, language);
final Literal literal = RyaToRdfConversions.convertLiteral(ryaType);
assertEquals(RDF.LANGSTRING, literal.getDatatype());
assertEquals(expectedData, literal.getLabel());
assertTrue(literal.getLanguage().isPresent());
assertEquals(language, literal.getLanguage().get());
final Literal expectedLiteral = VF.createLiteral(expectedData, language);
assertEquals(expectedLiteral, literal);
}
}
示例13
@Test
public void testConvertLiteral_invalidLanguage() {
final String expectedData = "Hello";
final List<String> badLanguages = Lists.newArrayList(
"bad language",
"en-",
"en-US-"
);
for (final String badLanguage : badLanguages) {
// This only checks the validity of the format. Not that the language tag actually exists.
assertFalse(Literals.isValidLanguageTag(badLanguage));
final RyaType ryaType = new RyaType(RDF.LANGSTRING, expectedData, badLanguage);
final Literal literal = RyaToRdfConversions.convertLiteral(ryaType);
assertEquals(RDF.LANGSTRING, literal.getDatatype());
assertEquals(expectedData, literal.getLabel());
assertTrue(literal.getLanguage().isPresent());
// Check that the invalid language is replaced with "und"
assertEquals(LiteralLanguageUtils.UNDETERMINED_LANGUAGE, literal.getLanguage().get());
}
}
示例14
@Test
public void testConvertLiteral_invalidLanguage() {
final String expectedData = "Hello";
final List<String> badLanguages = Lists.newArrayList(
"bad language",
"en-",
"en-US-"
);
for (final String badLanguage : badLanguages) {
// This only checks the validity of the format. Not that the language tag actually exists.
assertFalse(Literals.isValidLanguageTag(badLanguage));
final Literal literal = VF.createLiteral(expectedData, badLanguage);
final RyaType ryaType = RdfToRyaConversions.convertLiteral(literal);
assertEquals(RDF.LANGSTRING, ryaType.getDataType());
assertEquals(expectedData, ryaType.getData());
// Check that the invalid language is replaced with "und"
assertEquals(LiteralLanguageUtils.UNDETERMINED_LANGUAGE, ryaType.getLanguage());
}
}
示例15
public static StringBuilder toSPARQL(Value value, StringBuilder builder) {
if(value instanceof IRI) {
IRI aLit = (IRI)value;
builder.append("<").append(aLit.toString()).append(">");
} else if(value instanceof BNode) {
builder.append("_:").append(((BNode)value).getID());
} else if(value instanceof Literal) {
Literal aLit1 = (Literal)value;
builder.append("\"\"\"").append(RenderUtils.escape(aLit1.getLabel())).append("\"\"\"");
if(Literals.isLanguageLiteral(aLit1)) {
builder.append("@").append(aLit1.getLanguage());
} else if (value instanceof PlainLiteral) {
// do not print type
} else {
builder.append("^^<").append(aLit1.getDatatype().toString()).append(">");
}
}
return builder;
}
示例16
private static StringBuilder appendValue(StringBuilder sb, Literal lit) {
sb.append('"');
sb.append(SPARQLUtil.encodeString(lit.getLabel()));
sb.append('"');
if (Literals.isLanguageLiteral(lit)) {
sb.append('@');
sb.append(lit.getLanguage().get());
}
else {
sb.append("^^<");
sb.append(lit.getDatatype().stringValue());
sb.append('>');
}
return sb;
}
示例17
private void writeLiteral(Value obj) throws IOException {
Literal objLit = (Literal) obj;
// datatype attribute
boolean isXMLLiteral = false;
// language attribute
if (Literals.isLanguageLiteral(objLit)) {
writeAttribute("xml:lang", objLit.getLanguage().orElse(""));
} else {
IRI datatype = objLit.getDatatype();
// Check if datatype is rdf:XMLLiteral
isXMLLiteral = datatype.equals(RDF.XMLLITERAL);
if (isXMLLiteral) {
writeAttribute(RDF.NAMESPACE, "parseType", "Literal");
} else if (!datatype.equals(XMLSchema.STRING)) {
writeAttribute(RDF.NAMESPACE, "datatype", datatype.toString());
}
}
writeEndOfStartTag();
// label
if (isXMLLiteral) {
// Write XML literal as plain XML
writer.write(objLit.getLabel());
} else {
writeCharacterData(objLit.getLabel());
}
}
示例18
private Value copy(Value value) {
if (value instanceof IRI) {
return createIRI(value.stringValue());
} else if (value instanceof Literal) {
Literal lit = (Literal) value;
if (Literals.isLanguageLiteral(lit)) {
return createLiteral(value.stringValue(), lit.getLanguage().orElse(null));
} else {
return createLiteral(value.stringValue(), lit.getDatatype());
}
} else {
return createBNode(value.stringValue());
}
}
示例19
/**
* Creates an NativeLiteral that is equal to the supplied literal. This method returns the supplied literal itself
* if it is already a NativeLiteral that has been created by this ValueStore, which prevents unnecessary object
* creations.
*
* @return A NativeLiteral for the specified literal.
*/
public NativeLiteral getNativeLiteral(Literal l) {
if (isOwnValue(l)) {
return (NativeLiteral) l;
}
if (Literals.isLanguageLiteral(l)) {
return new NativeLiteral(revision, l.getLabel(), l.getLanguage().get());
} else {
NativeIRI datatype = getNativeURI(l.getDatatype());
return new NativeLiteral(revision, l.getLabel(), datatype);
}
}
示例20
private void writeLiteral(StringBuilder builder, Literal lit) {
String label = lit.getLabel();
if (label.indexOf('\n') > 0 || label.indexOf('\r') > 0 || label.indexOf('\t') > 0) {
// Write label as long string
builder.append("\"\"\"");
builder.append(TurtleUtil.encodeLongString(label));
builder.append("\"\"\"");
} else {
// Write label as normal string
builder.append("\"");
builder.append(TurtleUtil.encodeString(label));
builder.append("\"");
}
IRI datatype = lit.getDatatype();
if (Literals.isLanguageLiteral(lit)) {
// Append the literal's language
builder.append("@");
builder.append(lit.getLanguage().get());
} else {
// Append the literal's data type (possibly written as an
// abbreviated URI)
builder.append("^^");
writeURI(builder, datatype);
}
}
示例21
private void writeLiteral(Literal literal) throws IOException {
String label = literal.getLabel();
IRI datatype = literal.getDatatype();
int marker = PLAIN_LITERAL_RECORD_MARKER;
if (Literals.isLanguageLiteral(literal)) {
marker = LANG_LITERAL_RECORD_MARKER;
} else {
String namespace = datatype.getNamespace();
if (!namespaceTable.containsKey(namespace)) {
// Assign an ID to this new namespace
writeNamespace(namespace);
}
marker = DATATYPE_LITERAL_RECORD_MARKER;
}
out.writeByte(marker);
writeString(label);
if (Literals.isLanguageLiteral(literal)) {
writeString(literal.getLanguage().get());
} else {
writeQName(datatype);
}
}
示例22
protected void writeValue(Value value) throws IOException, QueryResultHandlerException {
jg.writeStartObject();
if (value instanceof IRI) {
jg.writeStringField("type", "uri");
jg.writeStringField("value", ((IRI) value).toString());
} else if (value instanceof BNode) {
jg.writeStringField("type", "bnode");
jg.writeStringField("value", ((BNode) value).getID());
} else if (value instanceof Literal) {
Literal lit = (Literal) value;
if (Literals.isLanguageLiteral(lit)) {
jg.writeObjectField("xml:lang", lit.getLanguage().orElse(null));
} else {
IRI datatype = lit.getDatatype();
boolean ignoreDatatype = datatype.equals(XMLSchema.STRING) && xsdStringToPlainLiteral();
if (!ignoreDatatype) {
jg.writeObjectField("datatype", lit.getDatatype().stringValue());
}
}
jg.writeObjectField("type", "literal");
jg.writeObjectField("value", lit.getLabel());
} else {
throw new TupleQueryResultHandlerException("Unknown Value object type: " + value.getClass());
}
jg.writeEndObject();
}
示例23
@Override
protected Literal convert(ValueFactory valueFactory, Value value) throws ValueExprEvaluationException {
if (value instanceof IRI) {
return valueFactory.createLiteral(value.toString(), XMLSchema.STRING);
} else if (value instanceof Literal) {
Literal literal = (Literal) value;
IRI datatype = literal.getDatatype();
if (QueryEvaluationUtil.isSimpleLiteral(literal)) {
return valueFactory.createLiteral(literal.getLabel(), XMLSchema.STRING);
} else if (!Literals.isLanguageLiteral(literal)) {
if (XMLDatatypeUtil.isNumericDatatype(datatype) || datatype.equals(XMLSchema.BOOLEAN)
|| datatype.equals(XMLSchema.DATETIME) || datatype.equals(XMLSchema.DATETIMESTAMP)) {
// FIXME Slightly simplified wrt the spec, we just always use the
// canonical value of the
// source literal as the target lexical value. This is not 100%
// compliant with handling of
// some date-related datatypes.
//
// See
// http://www.w3.org/TR/xpath-functions/#casting-from-primitive-to-primitive
if (XMLDatatypeUtil.isValidValue(literal.getLabel(), datatype)) {
String normalizedValue = XMLDatatypeUtil.normalize(literal.getLabel(), datatype);
return valueFactory.createLiteral(normalizedValue, XMLSchema.STRING);
} else {
return valueFactory.createLiteral(literal.getLabel(), XMLSchema.STRING);
}
} else {
// for unknown datatypes, just use the lexical value.
return valueFactory.createLiteral(literal.getLabel(), XMLSchema.STRING);
}
}
}
throw typeError(value, null);
}
示例24
private StringBuilder appendValue(StringBuilder sb, Literal lit) {
sb.append('"');
sb.append(lit.getLabel().replace("\"", "\\\""));
sb.append('"');
if (Literals.isLanguageLiteral(lit)) {
sb.append('@');
sb.append(lit.getLanguage().get());
} else {
sb.append("^^<");
sb.append(lit.getDatatype().stringValue());
sb.append('>');
}
return sb;
}
示例25
@Override
public Literal createLiteral(String label, String language) {
if (!Literals.isValidLanguageTag(language)) {
throw new IllegalArgumentException("Not a valid language tag: " + language);
}
return delegate.createLiteral(label, language);
}
示例26
protected void serialize(Literal literal, XMLWriter xmlWriter) throws IOException {
if (literal != null) {
if (Literals.isLanguageLiteral(literal)) {
xmlWriter.setAttribute(TransactionXMLConstants.LANG_ATT, literal.getLanguage().get());
} else {
xmlWriter.setAttribute(TransactionXMLConstants.DATATYPE_ATT, literal.getDatatype().toString());
}
String label = literal.getLabel();
boolean valid = true;
int i = 0;
while (valid && i < label.length()) {
char c = label.charAt(i++);
valid = XMLUtil.isValidCharacterDataChar(c);
}
if (!valid) {
xmlWriter.setAttribute(TransactionXMLConstants.ENCODING_ATT, "base64");
label = DatatypeConverter.printBase64Binary(label.getBytes(StandardCharsets.UTF_8));
}
xmlWriter.textElement(TransactionXMLConstants.LITERAL_TAG, label);
} else {
serializeNull(xmlWriter);
}
}
示例27
@Override
public boolean isRecognizedLanguage(String languageTag) {
Objects.requireNonNull(languageTag, "Language tag cannot be null");
try {
Literals.normalizeLanguageTag(languageTag);
} catch (IllformedLocaleException e) {
return false;
}
return true;
}
示例28
@Override
public Literal normalizeLanguage(String literalValue, String languageTag, ValueFactory valueFactory)
throws LiteralUtilException {
Objects.requireNonNull(languageTag, "Language tag cannot be null");
Objects.requireNonNull(literalValue, "Literal value cannot be null");
try {
return valueFactory.createLiteral(literalValue, Literals.normalizeLanguageTag(languageTag));
} catch (IllformedLocaleException e) {
throw new LiteralUtilException("Could not normalize BCP47 language tag", e);
}
}
示例29
/**
* Helper method to reduce complexity of the JSON serialisation algorithm Any null contexts will only be serialised
* to JSON if there are also non-null contexts in the contexts array
*
* @param object The RDF value to serialise
* @param contexts The set of contexts that are relevant to this object, including null contexts as they are found.
* @param jg the {@link JsonGenerator} to write to.
* @throws IOException
* @throws JsonGenerationException
* @throws JSONException
*/
public static void writeObject(final Value object, final Set<Resource> contexts, final JsonGenerator jg)
throws JsonGenerationException, IOException {
jg.writeStartObject();
if (object instanceof Literal) {
jg.writeObjectField(RDFJSONUtility.VALUE, object.stringValue());
jg.writeObjectField(RDFJSONUtility.TYPE, RDFJSONUtility.LITERAL);
final Literal l = (Literal) object;
if (Literals.isLanguageLiteral(l)) {
jg.writeObjectField(RDFJSONUtility.LANG, l.getLanguage().orElse(null));
} else {
jg.writeObjectField(RDFJSONUtility.DATATYPE, l.getDatatype().stringValue());
}
} else if (object instanceof BNode) {
jg.writeObjectField(RDFJSONUtility.VALUE, resourceToString((BNode) object));
jg.writeObjectField(RDFJSONUtility.TYPE, RDFJSONUtility.BNODE);
} else if (object instanceof IRI) {
jg.writeObjectField(RDFJSONUtility.VALUE, resourceToString((IRI) object));
jg.writeObjectField(RDFJSONUtility.TYPE, RDFJSONUtility.URI);
}
if (contexts != null && !contexts.isEmpty() && !(contexts.size() == 1 && contexts.iterator().next() == null)) {
jg.writeArrayFieldStart(RDFJSONUtility.GRAPHS);
for (final Resource nextContext : contexts) {
if (nextContext == null) {
jg.writeNull();
} else {
jg.writeString(resourceToString(nextContext));
}
}
jg.writeEndArray();
}
jg.writeEndObject();
}
示例30
private void writeLiteral(Literal literal) throws IOException {
String label = literal.getLabel();
IRI datatype = literal.getDatatype();
if (Literals.isLanguageLiteral(literal)) {
out.writeByte(LANG_LITERAL_VALUE);
writeString(label);
writeString(literal.getLanguage().get());
} else {
out.writeByte(DATATYPE_LITERAL_VALUE);
writeString(label);
writeString(datatype.toString());
}
}