📄 testxmlfeatures.java
字号:
/*
* (c) Copyright 2001, 2002, 2002, 2003, 2004, 2005, 2006, 2007 Hewlett-Packard Development Company, LP
* All rights reserved.
* [See end of file]
$Id: TestXMLFeatures.java,v 1.54 2007/01/16 21:36:48 jeremy_carroll Exp $
*/
package com.hp.hpl.jena.xmloutput.test;
import java.io.*;
import java.util.*;
import java.util.regex.Pattern;
import com.hp.hpl.jena.graph.*;
import com.hp.hpl.jena.iri.*;
import com.hp.hpl.jena.rdf.model.*;
import com.hp.hpl.jena.rdf.model.impl.RDFDefaultErrorHandler;
import com.hp.hpl.jena.rdf.model.impl.Util;
import com.hp.hpl.jena.rdf.model.test.ModelTestBase;
import com.hp.hpl.jena.shared.*;
import com.hp.hpl.jena.vocabulary.RDF;
import com.hp.hpl.jena.xmloutput.impl.*;
/**
* @author bwm
* @version $Name: $ $Revision: 1.54 $ $Date: 2007/01/16 21:36:48 $
*/
public class TestXMLFeatures extends XMLOutputTestBase {
// static AwkCompiler awk = PrettyWriterTest.awk;
// static AwkMatcher matcher = PrettyWriterTest.matcher;
// static protected Log logger = LogFactory.getLog( TestXMLFeatures.class );
// static { logger.setLevel( Level.OFF ); }
private String base1 = "http://example/foobar";
private String base2 = "http://example/barfoo";
protected static String file1 = "testing/abbreviated/namespaces.rdf";
TestXMLFeatures(String name, String lang) {
super(name, lang);
}
public String toString() {
return getName() + " " + lang;
}
public void SUPPRESSEDtestRelativeURI() {
Model m = ModelFactory.createDefaultModel();
m.createResource("foo").addProperty(RDF.value, "bar");
m.write(new OutputStream() {
public void write(int b) throws IOException {
}
}, lang);
}
public void SUPPRESStestNoStripes() throws IOException {
check("testing/abbreviated/collection.rdf",
" <[a-zA-Z][-a-zA-Z0-9._]*:Class",
Change.blockRules("resourcePropertyElt"),
"http://example.org/foo");
}
/**
* Very specific test case to trap bug whereby a model which has a prefix
* j.0 defined (eg it was read in from a model we wrote out earlier) wants
* to allocate a new j.* prefix and picked j.0, BOOM.
*/
public void SUPPRESSEDtestBrokenPrefixing() throws Exception {
Model m = ModelFactory.createDefaultModel();
m.add(ModelTestBase.statement(m, "a http://bingle.bongle/booty#PP b"));
m.add(ModelTestBase.statement(m, "c http://dingle.dongle/dooty#PP d"));
StringWriter sw = new StringWriter();
m.write(sw);
Model m2 = ModelFactory.createDefaultModel();
String written = sw.toString();
m2.read(new StringReader(written), "");
StringWriter sw2 = new StringWriter();
m2.write(sw2);
String s2 = sw2.toString();
int first = s2.indexOf("xmlns:j.0=");
int last = s2.lastIndexOf("xmlns:j.0=");
assertEquals(first, last);
System.out.println(sw2.toString());
}
/**
* Writing a model with the base URI set to null should not throw a
* nullpointer exception.
*/
public void testNullBaseWithAbbrev() {
ModelFactory.createDefaultModel().write(new StringWriter(), lang, null);
}
/**
* This test checks that using a FileWriter works. It used not to work for
* some encodings. The encoding used is the platform default encoding.
* Because this may be MacRoman, we have to suppress warning messages.
*
* @throws IOException
*/
public void testBug696057() throws IOException {
File f = File.createTempFile("jena", ".rdf");
String fileName = f.getAbsolutePath();
Model m = createMemModel();
m.read(new FileInputStream(
"testing/wg/rdfms-syntax-incomplete/test001.rdf"), "");
RDFDefaultErrorHandler.silent = true;
Model m1 = null;
SimpleLogger old = null;
try {
old = BaseXMLWriter.setLogger(new SimpleLogger(){
public void warn(String s) {}
public void warn(String s, Exception e) {}
});
m.write(new FileWriter(fileName), lang);
m1 = createMemModel();
m1.read(new FileInputStream(fileName), "");
} finally {
RDFDefaultErrorHandler.silent = false;
BaseXMLWriter.setLogger(old);
}
assertTrue("Use of FileWriter", m.isIsomorphicWith(m1));
f.delete();
}
public void testXMLBase() throws IOException {
check(file1, // any will do
"xml:base=['\"]" + base2 + "['\"]", new Change() {
public void modify(RDFWriter writer) {
String oldvalue = (String) writer.setProperty(
"xmlbase", base1);
assertTrue("xmlbase valued non-null", oldvalue == null);
oldvalue = (String) writer
.setProperty("xmlbase", base2);
assertEquals("xmlbase valued incorrect.", base1,
oldvalue);
}
});
}
public void testPropertyURI() throws IOException {
doBadPropTest(lang);
}
void doBadPropTest(String lg) throws IOException {
Model m = createMemModel();
m.add(m.createResource(), m.createProperty("http://example/", "foo#"),
"foo");
File file = File.createTempFile("rdf", ".xml");
// file.deleteOnExit();
FileOutputStream fwriter = new FileOutputStream(file);
try {
m.write(fwriter, lg);
fwriter.close();
fail("Writer did not detect bad property URI");
} catch (InvalidPropertyURIException je) {
// as required, so nowt to do.
}
file.delete();
}
public void testUseNamespace() throws IOException {
check(file1, "xmlns:eg=['\"]http://example.org/#['\"]", Change
.setPrefix("eg", "http://example.org/#"));
}
public void testSingleQuote() throws IOException {
check(file1, "'", "\"", Change.setProperty("attributeQuoteChar", "'"));
}
public void testDoubleQuote() throws IOException {
check(file1, "\"", "'", Change.setProperty("attributeQuoteChar", "\""));
}
public void testUseDefaultNamespace() throws IOException {
check(file1, "xmlns=['\"]http://example.org/#['\"]", Change.setPrefix(
"", "http://example.org/#"));
}
public void testUseUnusedNamespace() throws IOException {
check(file1, "xmlns:unused=['\"]http://unused.org/#['\"]", Change
.setPrefix("unused", "http://unused.org/#"));
}
public void testRDFNamespace() throws IOException {
check(file1, "xmlns:r=['\"]" + RDF.getURI() + "['\"]", "rdf:",
new Change() {
public void modify(Model m) {
m.removeNsPrefix("rdf");
m.setNsPrefix("r", RDF.getURI());
}
});
}
public void testTab() throws IOException {
check(file1, " ", Change.setProperty("tab", "5"));
}
public void testNoTab() throws IOException {
check(file1, " ", Change.setProperty("tab", "0"));
}
public void testNoLiteral() throws IOException {
check("testing/wg/rdfms-xml-literal-namespaces/test001.rdf",
"#XMLLiteral", "[\"']Literal[\"']", Change.setProperty(
"blockrules", "parseTypeLiteralPropertyElt"));
}
public void testRDFDefaultNamespace() throws IOException {
check(file1, "xmlns=['\"]" + RDF.getURI() + "['\"].*"
+ "xmlns:j.cook.up=['\"]" + RDF.getURI() + "['\"]", Change
.setPrefix("", RDF.getURI()));
}
public void testBadPrefixNamespace() throws IOException {
// Trying to set the prefix should generate a warning.
// check(file1, null, null, "xmlns:3", true, new Change() {
// public void code( RDFWriter w ) {
// w.setNsPrefix("3", "http://example.org/#");
// }
// });
}
public void testDuplicateNamespace() throws IOException {
check(
file1,
"xmlns:eg[12]=['\"]http://example.org/#['\"]",
"xmlns:eg[12]=['\"]http://example.org/#['\"].*xmlns:eg[12]=['\"]http://example.org/#['\"]",
new Change() {
public void modify(Model m) {
m.setNsPrefix("eg1", "http://example.org/#");
m.setNsPrefix("eg2", "http://example.org/#");
}
});
}
public void testEntityDeclaration() throws IOException {
check(file1, "<!DOCTYPE rdf:RDF \\[[^]]*<!ENTITY spoo *'goo:boo'>",
"SPONGLE", Change.setProperty("showDoctypeDeclaration", true)
.andSetPrefix("spoo", "goo:boo"));
}
public void testEntityUse() throws IOException {
check(file1, "rdf:resource=\"&ex0;spoo\"", "SPONGLE", Change
.setProperty("showDoctypeDeclaration", true));
}
public void testDuplicatePrefix() throws IOException {
check(file1, "xmlns:eg=['\"]http://example.org/file[12]#['\"]", null,
new Change() {
public void modify(Model m) {
m.setNsPrefix("eg", "http://example.org/file1#");
m.setNsPrefix("eg", "http://example.org/file2#");
}
});
}
void setNsPrefixSysProp(String prefix, String uri) {
System.setProperty(RDFWriter.NSPREFIXPROPBASE + uri, prefix);
}
public void testUseNamespaceSysProp() throws IOException {
check(file1, "xmlns:eg=['\"]http://example.org/#['\"]", new Change() {
public void modify(RDFWriter writer) {
setNsPrefixSysProp("eg", "http://example.org/#");
}
});
}
public void testDefaultNamespaceSysProp() throws IOException {
check(file1, "xmlns=['\"]http://example.org/#['\"]", new Change() {
public void modify(RDFWriter writer) {
setNsPrefixSysProp("", "http://example.org/#");
}
});
}
public void testDuplicateNamespaceSysProp() throws IOException {
check(
file1,
"xmlns:eg[12]=['\"]http://example.org/#['\"]",
"xmlns:eg[12]=['\"]http://example.org/#['\"].*xmlns:eg[12]=['\"]http://example.org/#['\"]",
new Change() {
public void modify(RDFWriter writer) {
setNsPrefixSysProp("eg1", "http://example.org/#");
setNsPrefixSysProp("eg2", "http://example.org/#");
}
});
}
public void testDuplicatePrefixSysProp() throws IOException {
check(file1, "xmlns:eg=['\"]http://example.org/file[12]#['\"]", null,
new Change() {
public void modify(RDFWriter writer) {
setNsPrefixSysProp("eg", "http://example.org/file1#");
setNsPrefixSysProp("eg", "http://example.org/file2#");
}
});
}
public void testDuplicatePrefixSysPropAndExplicit() throws IOException {
check(file1, "xmlns:eg=['\"]http://example.org/file[12]#['\"]", null,
new Change() {
public void modify(Model m) {
m.setNsPrefix("eg", "http://example.org/file1#");
setNsPrefixSysProp("eg", "http://example.org/file2#");
}
});
}
public void testUTF8DeclAbsent() throws IOException {
check(file1, "utf-8", null, "<\\?xml", Change.none());
}
public void testUTF16DeclAbsent() throws IOException {
check(file1, "utf-16", null, "<\\?xml", false, Change.none());
}
public void testUTF8DeclPresent() throws IOException {
check(file1, "utf-8", "<\\?xml", null, Change.setProperty(
"showXmlDeclaration", true));
}
public void testUTF16DeclPresent() throws IOException {
check(file1, "utf-16", "<\\?xml", null, Change.setProperty(
"showXmlDeclaration", true));
}
public void testISO8859_1_DeclAbsent() throws IOException {
check(file1, "iso-8859-1", null, "<\\?xml", Change.setProperty(
"showXmlDeclaration", false));
}
public void testISO8859_1_DeclPresent() throws IOException {
check(file1, "iso-8859-1", "<\\?xml[^?]*ISO-8859-1", null, Change
.none());
}
public void testStringDeclAbsent() throws IOException {
check(file1, null, "<\\?xml", Change.none());
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -