Skip to content

Commit 0e591e9

Browse files
author
James Leigh
committed
Issue #712: Move isValidLanguageTag to Literals
Signed-off-by: James Leigh <james.leigh@ontotext.com>
1 parent cd85da6 commit 0e591e9

3 files changed

Lines changed: 25 additions & 15 deletions

File tree

core/model/src/main/java/org/eclipse/rdf4j/model/datatypes/XMLDatatypeUtil.java

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@
1010
import java.math.BigDecimal;
1111
import java.math.BigInteger;
1212
import java.net.URISyntaxException;
13-
import java.util.IllformedLocaleException;
14-
import java.util.Locale;
1513
import java.util.StringTokenizer;
1614

1715
import javax.xml.datatype.DatatypeConfigurationException;
@@ -24,6 +22,7 @@
2422
import org.eclipse.rdf4j.common.net.ParsedIRI;
2523
import org.eclipse.rdf4j.common.text.ASCIIUtil;
2624
import org.eclipse.rdf4j.model.IRI;
25+
import org.eclipse.rdf4j.model.util.Literals;
2726
import org.eclipse.rdf4j.model.vocabulary.XMLSchema;
2827

2928
/**
@@ -277,7 +276,7 @@ else if (datatype.equals(XMLSchema.ANYURI)) {
277276
result = isValidAnyURI(value);
278277
}
279278
else if (datatype.equals(XMLSchema.LANGUAGE)) {
280-
result = isValidLanguage(value);
279+
result = Literals.isValidLanguageTag(value);
281280
}
282281

283282
return result;
@@ -681,15 +680,6 @@ public static boolean isValidAnyURI(String value) {
681680
}
682681
}
683682

684-
public static boolean isValidLanguage(String value) {
685-
try {
686-
new Locale.Builder().setLanguageTag(value);
687-
return true;
688-
} catch (IllformedLocaleException e) {
689-
return false;
690-
}
691-
}
692-
693683
private static boolean isPrefixStartChar(int c) {
694684
return ASCIIUtil.isLetter(c) || c >= 0x00C0 && c <= 0x00D6 || c >= 0x00D8 && c <= 0x00F6
695685
|| c >= 0x00F8 && c <= 0x02FF || c >= 0x0370 && c <= 0x037D || c >= 0x037F && c <= 0x1FFF

core/model/src/main/java/org/eclipse/rdf4j/model/impl/ValidatingValueFactory.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.eclipse.rdf4j.model.Value;
2525
import org.eclipse.rdf4j.model.ValueFactory;
2626
import org.eclipse.rdf4j.model.datatypes.XMLDatatypeUtil;
27+
import org.eclipse.rdf4j.model.util.Literals;
2728
import org.eclipse.rdf4j.model.util.URIUtil;
2829

2930
/**
@@ -138,8 +139,8 @@ public Literal createLiteral(String label, IRI datatype) {
138139
}
139140

140141
public Literal createLiteral(String label, String language) {
141-
if (!XMLDatatypeUtil.isValidLanguage(language)) {
142-
throw new IllegalArgumentException("Not a validate language tag");
142+
if (!Literals.isValidLanguageTag(language)) {
143+
throw new IllegalArgumentException("Not a validate language tag: " + language);
143144
}
144145
return delegate.createLiteral(label, language);
145146
}

core/model/src/main/java/org/eclipse/rdf4j/model/util/Literals.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515
import java.util.Objects;
1616
import java.util.Optional;
1717

18-
import javax.xml.datatype.XMLGregorianCalendar;
1918
import javax.xml.datatype.Duration;
19+
import javax.xml.datatype.XMLGregorianCalendar;
2020

2121
import org.eclipse.rdf4j.model.Literal;
2222
import org.eclipse.rdf4j.model.Value;
@@ -600,6 +600,25 @@ public static String normalizeLanguageTag(String languageTag)
600600
return new Locale.Builder().setLanguageTag(languageTag).build().toLanguageTag().intern();
601601
}
602602

603+
/**
604+
* Checks if the given string is a <a href="https://tools.ietf.org/html/bcp47">BCP47</a> language tag
605+
* according to the rules defined by the JDK in the {@link Locale} API.
606+
*
607+
* @param languageTag
608+
* A language tag
609+
* @return <code>true</code> if the given language tag is well-formed according to the rules specified in
610+
* BCP47.
611+
*/
612+
public static boolean isValidLanguageTag(String languageTag) {
613+
try {
614+
new Locale.Builder().setLanguageTag(languageTag);
615+
return true;
616+
}
617+
catch (IllformedLocaleException e) {
618+
return false;
619+
}
620+
}
621+
603622
protected Literals() {
604623
// Protected default constructor to prevent instantiation
605624
}

0 commit comments

Comments
 (0)