📄 testtypedliterals.java
字号:
Literal l1 = m.createTypedLiteral("foo", "http://www.w3.org/2001/XMLSchema#integer");
} catch (DatatypeFormatException e1 ) {
test1 = true;
}
assertTrue("detected illegal string, direct", test1);
boolean test2 = false;
try {
Object foo = "foo";
Literal l1 = m.createTypedLiteral(foo, "http://www.w3.org/2001/XMLSchema#integer");
} catch (DatatypeFormatException e2 ) {
test2 = true;
}
assertTrue("detected illegal string, overloaded", test2);
// Overloading of calendar convenience functions
Calendar testCal = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
testCal.set(1999, 4, 30, 15, 9, 32);
testCal.set(Calendar.MILLISECOND, 0); // ms field can be undefined on Linux
Literal lc = m.createTypedLiteral((Object)testCal);
assertEquals("calendar overloading test", m.createTypedLiteral("1999-05-30T15:09:32Z", XSDDatatype.XSDdateTime), lc );
} finally {
JenaParameters.enableEagerLiteralValidation = old;
}
}
/**
* Test plain literal/xsd:string/xsd:int equality operations
*/
public void testPlainSameValueAs() {
Literal lString = m.createTypedLiteral("10", XSDDatatype.XSDstring );
Literal lPlain = m.createTypedLiteral("10", (RDFDatatype)null );
Literal lPlain3 = m.createTypedLiteral("10", (String)null );
Literal lPlain2 = m.createLiteral("10");
Literal lInt = m.createTypedLiteral("10", XSDDatatype.XSDint );
assertSameValueAs("Null type = plain literal", lPlain, lPlain2);
assertSameValueAs("Null type = plain literal", lPlain, lPlain3);
assertSameValueAs("Null type = plain literal", lPlain2, lPlain3);
assertTrue("null type", lPlain3.getDatatype() == null);
assertDiffer("String != int", lString, lInt);
assertDiffer("Plain != int", lPlain, lInt);
assertDiffer("Plain != int", lPlain2, lInt);
// The correct answer to this is currently up to us
if (JenaParameters.enablePlainLiteralSameAsString) {
assertSameValueAs("String != plain??", lString, lPlain);
assertSameValueAs("String != plain??", lString, lPlain2);
} else {
assertDiffer("String != plain??", lString, lPlain);
assertDiffer("String != plain??", lString, lPlain2);
}
}
/**
* Test cases of numeric comparison.
*/
public void testNumberSameValueAs() {
Literal lDouble = m.createTypedLiteral("5", XSDDatatype.XSDdouble);
Literal lDouble2 = m.createTypedLiteral("5.5", XSDDatatype.XSDdouble);
Literal lFloat = m.createTypedLiteral("5", XSDDatatype.XSDfloat);
Literal lint = m.createTypedLiteral("5", XSDDatatype.XSDint);
Literal linteger = m.createTypedLiteral("5", XSDDatatype.XSDinteger);
Literal lbyte = m.createTypedLiteral("5", XSDDatatype.XSDbyte);
assertSameValueAs("integer subclasses equal", lint, linteger);
assertSameValueAs("integer subclasses equal", lint, lbyte);
assertSameValueAs("integer subclasses equal", linteger, lbyte);
assertDiffer("float/double/int distinct", lDouble, lDouble2);
assertDiffer("float/double/int distinct", lDouble, lFloat);
assertDiffer("float/double/int distinct", lDouble, lint);
assertDiffer("float/double/int distinct", lDouble, linteger);
assertDiffer("float/double/int distinct", lDouble2, lint);
assertDiffer("float/double/int distinct", lDouble2, lbyte);
assertDiffer("float/double/int distinct", lint, lDouble);
assertDiffer("float/double/int distinct", lbyte, lDouble);
assertDiffer("float/double/int distinct", lint, lDouble2);
assertDiffer("float/double/int distinct", lbyte, lDouble2);
}
/**
* Test user defined data types using the DAML+OIL standard example.
* N.B. The file on daml.org is not legal (wrong namespace for XMLSchema, missed
* qualifiers onsome restriction base types) so we actually load a locally cached
* correct version but pretend it is from the real URI.
*/
public void testUserDefined() throws IOException {
String uri = "http://www.daml.org/2001/03/daml+oil-ex-dt";
String filename = "testing/xsd/daml+oil-ex-dt.xsd";
TypeMapper tm = TypeMapper.getInstance();
List typenames = XSDDatatype.loadUserDefined(uri, new FileReader(filename), null, tm);
assertIteratorValues(typenames.iterator(), new Object[] {
uri + "#XSDEnumerationHeight",
uri + "#over12",
uri + "#over17",
uri + "#over59",
uri + "#clothingsize" });
// Check the string restriction
RDFDatatype heightType = tm.getSafeTypeByName(uri + "#XSDEnumerationHeight");
checkLegalLiteral("short", heightType, String.class, "short");
checkLegalLiteral("tall", heightType, String.class, "tall");
checkIllegalLiteral("shortish", heightType);
// Check the numeric restriction
RDFDatatype over12Type = tm.getSafeTypeByName(uri + "#over12");
checkLegalLiteral("15", over12Type, Integer.class, new Integer(15));
checkIllegalLiteral("12", over12Type);
// Check the union type
RDFDatatype clothingsize = tm.getSafeTypeByName(uri + "#clothingsize");
checkLegalLiteral("42", clothingsize, Integer.class, new Integer(42));
checkLegalLiteral("short", clothingsize, String.class, "short");
// Check use of isValidLiteral for base versus derived combinations
LiteralLabel iOver12 = m.createTypedLiteral("13", over12Type).asNode().getLiteral();
LiteralLabel iDecimal14 = m.createTypedLiteral("14", XSDDatatype.XSDdecimal).asNode().getLiteral();
LiteralLabel iDecimal10 = m.createTypedLiteral("10", XSDDatatype.XSDdecimal).asNode().getLiteral();
LiteralLabel iString = m.createTypedLiteral("15", XSDDatatype.XSDstring).asNode().getLiteral();
LiteralLabel iPlain = m.createLiteral("foo").asNode().getLiteral();
assertTrue(over12Type.isValidLiteral(iOver12));
assertTrue(over12Type.isValidLiteral(iDecimal14));
assertTrue( ! over12Type.isValidLiteral(iDecimal10));
assertTrue( ! over12Type.isValidLiteral(iString));
assertTrue( ! over12Type.isValidLiteral(iPlain));
assertTrue(XSDDatatype.XSDdecimal.isValidLiteral(iOver12));
assertTrue(XSDDatatype.XSDdecimal.isValidLiteral(iDecimal14));
assertTrue(XSDDatatype.XSDdecimal.isValidLiteral(iDecimal10));
assertTrue( ! XSDDatatype.XSDdecimal.isValidLiteral(iString));
assertTrue( ! XSDDatatype.XSDdecimal.isValidLiteral(iPlain));
assertTrue(XSDDatatype.XSDstring.isValidLiteral(iString));
assertTrue(XSDDatatype.XSDstring.isValidLiteral(iPlain));
assertTrue( ! XSDDatatype.XSDstring.isValidLiteral(iOver12));
assertTrue( ! XSDDatatype.XSDstring.isValidLiteral(iDecimal10));
assertTrue( ! XSDDatatype.XSDstring.isValidLiteral(iDecimal14));
}
/**
* Test data/time wrappers
*/
public void testDateTime() {
// Duration
Literal l1 = m.createTypedLiteral("P1Y2M3DT5H6M7.50S", XSDDatatype.XSDduration);
assertEquals("duration data type", XSDDatatype.XSDduration, l1.getDatatype());
assertEquals("duration java type", XSDDuration.class, l1.getValue().getClass());
assertEquals("duration value", 1, ((XSDDuration)l1.getValue()).getYears());
assertEquals("duration value", 2, ((XSDDuration)l1.getValue()).getMonths());
assertEquals("duration value", 3, ((XSDDuration)l1.getValue()).getDays());
assertEquals("duration value", 5, ((XSDDuration)l1.getValue()).getHours());
assertEquals("duration value", 6, ((XSDDuration)l1.getValue()).getMinutes());
assertEquals("duration value", 7, ((XSDDuration)l1.getValue()).getFullSeconds());
assertEquals("duration value", BigDecimal.valueOf(75,1), ((XSDDuration)l1.getValue()).getBigSeconds());
assertFloatEquals("duration value", 18367.5, ((XSDDuration)l1.getValue()).getTimePart());
assertEquals("serialization", "P1Y2M3DT5H6M7.5S", l1.getValue().toString());
assertTrue("equality test", l1.sameValueAs( m.createTypedLiteral("P1Y2M3DT5H6M7.5S", XSDDatatype.XSDduration) ) );
assertTrue("inequality test", l1 != m.createTypedLiteral("P1Y2M2DT5H6M7.5S", XSDDatatype.XSDduration));
l1 = m.createTypedLiteral("P1Y", XSDDatatype.XSDduration);
assertEquals("duration data type", XSDDatatype.XSDduration, l1.getDatatype());
assertEquals("duration java type", XSDDuration.class, l1.getValue().getClass());
assertEquals("duration value", 1, ((XSDDuration)l1.getValue()).getYears());
assertEquals("serialization", "P1Y", l1.getValue().toString());
assertTrue("equality test", l1.sameValueAs( m.createTypedLiteral("P1Y", XSDDatatype.XSDduration) ) );
assertTrue("inequality test", l1 != m.createTypedLiteral("P1Y", XSDDatatype.XSDduration));
// dateTime
l1 = m.createTypedLiteral("1999-05-31T02:09:32Z", XSDDatatype.XSDdateTime);
XSDDateTime xdt = (XSDDateTime)l1.getValue();
assertEquals("dateTime data type", XSDDatatype.XSDdateTime, l1.getDatatype());
assertEquals("dateTime java type", XSDDateTime.class, l1.getValue().getClass());
assertEquals("dateTime value", 1999, xdt.getYears());
assertEquals("dateTime value", 5, xdt.getMonths());
assertEquals("dateTime value", 31, xdt.getDays());
assertEquals("dateTime value", 2, xdt.getHours());
assertEquals("dateTime value", 9, xdt.getMinutes());
assertEquals("dateTime value", 32, xdt.getFullSeconds());
assertEquals("serialization", "1999-05-31T02:09:32Z", l1.getValue().toString());
Calendar cal = xdt.asCalendar();
Calendar testCal = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
testCal.set(1999, 4, 31, 2, 9, 32);
/*
assertEquals("calendar value", cal.get(Calendar.YEAR), testCal.get(Calendar.YEAR) );
assertEquals("calendar value", cal.get(Calendar.MONTH), testCal.get(Calendar.MONTH) );
assertEquals("calendar value", cal.get(Calendar.DATE), testCal.get(Calendar.DATE) );
assertEquals("calendar value", cal.get(Calendar.HOUR), testCal.get(Calendar.HOUR) );
assertEquals("calendar value", cal.get(Calendar.MINUTE), testCal.get(Calendar.MINUTE) );
assertEquals("calendar value", cal.get(Calendar.SECOND), testCal.get(Calendar.SECOND) );
*/
testCal.set(Calendar.MILLISECOND, 0); // ms field can be undefined on Linux
assertEquals("calendar value", cal, testCal);
assertEquals("equality test", l1, m.createTypedLiteral("1999-05-31T02:09:32Z", XSDDatatype.XSDdateTime));
assertTrue("inequality test", l1 != m.createTypedLiteral("1999-04-31T02:09:32Z", XSDDatatype.XSDdateTime));
Calendar testCal2 = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
testCal2.set(1999, 4, 30, 15, 9, 32);
testCal2.set(Calendar.MILLISECOND, 0); // ms field can be undefined on Linux
Literal lc = m.createTypedLiteral(testCal2);
assertEquals("calendar 24 hour test", m.createTypedLiteral("1999-05-30T15:09:32Z", XSDDatatype.XSDdateTime), lc );
assertEquals("calendar value", cal, testCal);
assertEquals("equality test", l1, m.createTypedLiteral("1999-05-31T02:09:32Z", XSDDatatype.XSDdateTime));
Calendar testCal3 = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
testCal3.clear();
testCal3.set(1999, Calendar.JANUARY, 30, 15, 9, 32);
lc = m.createTypedLiteral(testCal3);
assertEquals("1999-01-30T15:09:32Z", lc.getLexicalForm());
String urib="rdf://test.com#";
String uri1=urib+"1";
String urip=urib+"prop";
String testN3 = "<"+uri1+"> <"+urip+"> \""+lc.getLexicalForm()+"\"^^<"+lc.getDatatypeURI()+"> .";
java.io.StringReader sr = new java.io.StringReader(testN3);
m.read(sr, urib, "N3");
assertTrue(m.contains(m.getResource(uri1),m.getProperty(urip)));
Resource r1 = m.getResource(uri1);
Property p = m.getProperty(urip);
XSDDateTime returnedDateTime = (XSDDateTime) r1.getProperty(p).getLiteral().getValue();
assertEquals("deserialized calendar value", testCal3, returnedDateTime.asCalendar());
// dateTime to calendar with milliseconds
Calendar testCal4 = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
testCal4.set(1999, 4, 30, 15, 9, 32);
testCal4.set(Calendar.MILLISECOND, 25);
doDateTimeTest(testCal4, "1999-05-30T15:09:32.025Z", 32.025);
testCal4.set(Calendar.MILLISECOND, 250);
doDateTimeTest(testCal4, "1999-05-30T15:09:32.25Z", 32.25);
testCal4.set(Calendar.MILLISECOND, 2);
doDateTimeTest(testCal4, "1999-05-30T15:09:32.002Z", 32.002);
// Illegal dateTimes
boolean ok = false;
boolean old = JenaParameters.enableEagerLiteralValidation;
try {
JenaParameters.enableEagerLiteralValidation = true;
l1 = m.createTypedLiteral(new Date(12345656l), XSDDatatype.XSDdateTime);
} catch (DatatypeFormatException e) {
ok = true;
} finally {
JenaParameters.enableEagerLiteralValidation = old;
}
assertTrue("Early detection of invalid literals", ok);
// date
l1 = m.createTypedLiteral("1999-05-31", XSDDatatype.XSDdate);
assertEquals("dateTime data type", XSDDatatype.XSDdate, l1.getDatatype());
assertEquals("dateTime java type", XSDDateTime.class, l1.getValue().getClass());
xdt = (XSDDateTime)l1.getValue();
assertEquals("dateTime value", 1999, xdt.getYears());
assertEquals("dateTime value", 5, xdt.getMonths());
assertEquals("dateTime value", 31, xdt.getDays());
try {
xdt.getHours();
assertTrue("Failed to prevent illegal access", false);
} catch (IllegalDateTimeFieldException e) {}
// time
l1 = m.createTypedLiteral("12:56:32", XSDDatatype.XSDtime);
assertEquals("dateTime data type", XSDDatatype.XSDtime, l1.getDatatype());
assertEquals("dateTime java type", XSDDateTime.class, l1.getValue().getClass());
xdt = (XSDDateTime)l1.getValue();
assertEquals("dateTime value", 12, xdt.getHours());
assertEquals("dateTime value", 56, xdt.getMinutes());
assertEquals("dateTime value", 32, xdt.getFullSeconds());
try {
xdt.getDays();
assertTrue("Failed to prevent illegal access", false);
} catch (IllegalDateTimeFieldException e) {}
// gYearMonth
l1 = m.createTypedLiteral("1999-05", XSDDatatype.XSDgYearMonth);
assertEquals("dateTime data type", XSDDatatype.XSDgYearMonth, l1.getDatatype());
assertEquals("dateTime java type", XSDDateTime.class, l1.getValue().getClass());
xdt = (XSDDateTime)l1.getValue();
assertEquals("dateTime value", 1999, xdt.getYears());
assertEquals("dateTime value", 5, xdt.getMonths());
try {
xdt.getDays();
assertTrue("Failed to prevent illegal access", false);
} catch (IllegalDateTimeFieldException e) {}
// gYear
l1 = m.createTypedLiteral("1999", XSDDatatype.XSDgYear);
assertEquals("dateTime data type", XSDDatatype.XSDgYear, l1.getDatatype());
assertEquals("dateTime java type", XSDDateTime.class, l1.getValue().getClass());
xdt = (XSDDateTime)l1.getValue();
assertEquals("dateTime value", 1999, xdt.getYears());
try {
xdt.getMonths();
assertTrue("Failed to prevent illegal access", false);
} catch (IllegalDateTimeFieldException e) {}
// gMonth
l1 = m.createTypedLiteral("--05--", XSDDatatype.XSDgMonth);
assertEquals("dateTime data type", XSDDatatype.XSDgMonth, l1.getDatatype());
assertEquals("dateTime java type", XSDDateTime.class, l1.getValue().getClass());
xdt = (XSDDateTime)l1.getValue();
assertEquals("dateTime value", 5, xdt.getMonths());
try {
xdt.getYears();
assertTrue("Failed to prevent illegal access", false);
} catch (IllegalDateTimeFieldException e) {}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -