http://git-wip-us.apache.org/repos/asf/jena/blob/4b5cd267/jena-elephas/jena-elephas-mapreduce/src/test/java/org/apache/jena/hadoop/rdf/mapreduce/split/QuadSplitWithNodesMapperTest.java ---------------------------------------------------------------------- diff --cc jena-elephas/jena-elephas-mapreduce/src/test/java/org/apache/jena/hadoop/rdf/mapreduce/split/QuadSplitWithNodesMapperTest.java index a171ffb,a171ffb..b50cdbb --- a/jena-elephas/jena-elephas-mapreduce/src/test/java/org/apache/jena/hadoop/rdf/mapreduce/split/QuadSplitWithNodesMapperTest.java +++ b/jena-elephas/jena-elephas-mapreduce/src/test/java/org/apache/jena/hadoop/rdf/mapreduce/split/QuadSplitWithNodesMapperTest.java @@@ -1,28 -1,28 +1,28 @@@ --/* -- * Licensed to the Apache Software Foundation (ASF) under one -- * or more contributor license agreements. See the NOTICE file -- * distributed with this work for additional information -- * regarding copyright ownership. The ASF licenses this file -- * to you under the Apache License, Version 2.0 (the -- * "License"); you may not use this file except in compliance -- * with the License. You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- ++/* ++ * Licensed to the Apache Software Foundation (ASF) under one ++ * or more contributor license agreements. See the NOTICE file ++ * distributed with this work for additional information ++ * regarding copyright ownership. The ASF licenses this file ++ * to you under the Apache License, Version 2.0 (the ++ * "License"); you may not use this file except in compliance ++ * with the License. You may obtain a copy of the License at ++ * ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * Unless required by applicable law or agreed to in writing, software ++ * distributed under the License is distributed on an "AS IS" BASIS, ++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ * See the License for the specific language governing permissions and ++ * limitations under the License. ++ */ ++ package org.apache.jena.hadoop.rdf.mapreduce.split; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.mapreduce.Mapper; --import org.apache.jena.hadoop.rdf.mapreduce.split.QuadSplitWithNodesMapper; --import org.apache.jena.hadoop.rdf.types.NodeWritable; --import org.apache.jena.hadoop.rdf.types.QuadWritable; ++import org.apache.jena.hadoop.rdf.mapreduce.split.QuadSplitWithNodesMapper; ++import org.apache.jena.hadoop.rdf.types.NodeWritable; ++import org.apache.jena.hadoop.rdf.types.QuadWritable; /**
http://git-wip-us.apache.org/repos/asf/jena/blob/4b5cd267/jena-elephas/jena-elephas-mapreduce/src/test/java/org/apache/jena/hadoop/rdf/mapreduce/split/TripleSplitToNodesMapperTest.java ---------------------------------------------------------------------- diff --cc jena-elephas/jena-elephas-mapreduce/src/test/java/org/apache/jena/hadoop/rdf/mapreduce/split/TripleSplitToNodesMapperTest.java index d91efca,d91efca..38b6c72 --- a/jena-elephas/jena-elephas-mapreduce/src/test/java/org/apache/jena/hadoop/rdf/mapreduce/split/TripleSplitToNodesMapperTest.java +++ b/jena-elephas/jena-elephas-mapreduce/src/test/java/org/apache/jena/hadoop/rdf/mapreduce/split/TripleSplitToNodesMapperTest.java @@@ -1,28 -1,28 +1,28 @@@ --/* -- * Licensed to the Apache Software Foundation (ASF) under one -- * or more contributor license agreements. See the NOTICE file -- * distributed with this work for additional information -- * regarding copyright ownership. The ASF licenses this file -- * to you under the Apache License, Version 2.0 (the -- * "License"); you may not use this file except in compliance -- * with the License. You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- ++/* ++ * Licensed to the Apache Software Foundation (ASF) under one ++ * or more contributor license agreements. See the NOTICE file ++ * distributed with this work for additional information ++ * regarding copyright ownership. The ASF licenses this file ++ * to you under the Apache License, Version 2.0 (the ++ * "License"); you may not use this file except in compliance ++ * with the License. You may obtain a copy of the License at ++ * ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * Unless required by applicable law or agreed to in writing, software ++ * distributed under the License is distributed on an "AS IS" BASIS, ++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ * See the License for the specific language governing permissions and ++ * limitations under the License. ++ */ ++ package org.apache.jena.hadoop.rdf.mapreduce.split; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.mapreduce.Mapper; --import org.apache.jena.hadoop.rdf.mapreduce.split.TripleSplitToNodesMapper; --import org.apache.jena.hadoop.rdf.types.NodeWritable; --import org.apache.jena.hadoop.rdf.types.TripleWritable; ++import org.apache.jena.hadoop.rdf.mapreduce.split.TripleSplitToNodesMapper; ++import org.apache.jena.hadoop.rdf.types.NodeWritable; ++import org.apache.jena.hadoop.rdf.types.TripleWritable; /** http://git-wip-us.apache.org/repos/asf/jena/blob/4b5cd267/jena-elephas/jena-elephas-mapreduce/src/test/java/org/apache/jena/hadoop/rdf/mapreduce/split/TripleSplitWithNodesMapperTest.java ---------------------------------------------------------------------- diff --cc jena-elephas/jena-elephas-mapreduce/src/test/java/org/apache/jena/hadoop/rdf/mapreduce/split/TripleSplitWithNodesMapperTest.java index 3b71f40,3b71f40..9731f07 --- a/jena-elephas/jena-elephas-mapreduce/src/test/java/org/apache/jena/hadoop/rdf/mapreduce/split/TripleSplitWithNodesMapperTest.java +++ b/jena-elephas/jena-elephas-mapreduce/src/test/java/org/apache/jena/hadoop/rdf/mapreduce/split/TripleSplitWithNodesMapperTest.java @@@ -1,29 -1,29 +1,29 @@@ --/* -- * Licensed to the Apache Software Foundation (ASF) under one -- * or more contributor license agreements. See the NOTICE file -- * distributed with this work for additional information -- * regarding copyright ownership. The ASF licenses this file -- * to you under the Apache License, Version 2.0 (the -- * "License"); you may not use this file except in compliance -- * with the License. You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- ++/* ++ * Licensed to the Apache Software Foundation (ASF) under one ++ * or more contributor license agreements. See the NOTICE file ++ * distributed with this work for additional information ++ * regarding copyright ownership. The ASF licenses this file ++ * to you under the Apache License, Version 2.0 (the ++ * "License"); you may not use this file except in compliance ++ * with the License. You may obtain a copy of the License at ++ * ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * Unless required by applicable law or agreed to in writing, software ++ * distributed under the License is distributed on an "AS IS" BASIS, ++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ * See the License for the specific language governing permissions and ++ * limitations under the License. ++ */ ++ package org.apache.jena.hadoop.rdf.mapreduce.split; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.mapreduce.Mapper; --import org.apache.jena.hadoop.rdf.mapreduce.split.TripleSplitToNodesMapper; --import org.apache.jena.hadoop.rdf.mapreduce.split.TripleSplitWithNodesMapper; --import org.apache.jena.hadoop.rdf.types.NodeWritable; --import org.apache.jena.hadoop.rdf.types.TripleWritable; ++import org.apache.jena.hadoop.rdf.mapreduce.split.TripleSplitToNodesMapper; ++import org.apache.jena.hadoop.rdf.mapreduce.split.TripleSplitWithNodesMapper; ++import org.apache.jena.hadoop.rdf.types.NodeWritable; ++import org.apache.jena.hadoop.rdf.types.TripleWritable; /** http://git-wip-us.apache.org/repos/asf/jena/blob/4b5cd267/jena-elephas/jena-elephas-mapreduce/src/test/java/org/apache/jena/hadoop/rdf/mapreduce/transform/QuadsToTriplesMapperTest.java ---------------------------------------------------------------------- diff --cc jena-elephas/jena-elephas-mapreduce/src/test/java/org/apache/jena/hadoop/rdf/mapreduce/transform/QuadsToTriplesMapperTest.java index e6167c0,e6167c0..ad7b0f2 --- a/jena-elephas/jena-elephas-mapreduce/src/test/java/org/apache/jena/hadoop/rdf/mapreduce/transform/QuadsToTriplesMapperTest.java +++ b/jena-elephas/jena-elephas-mapreduce/src/test/java/org/apache/jena/hadoop/rdf/mapreduce/transform/QuadsToTriplesMapperTest.java @@@ -1,37 -1,37 +1,37 @@@ --/* -- * Licensed to the Apache Software Foundation (ASF) under one -- * or more contributor license agreements. See the NOTICE file -- * distributed with this work for additional information -- * regarding copyright ownership. The ASF licenses this file -- * to you under the Apache License, Version 2.0 (the -- * "License"); you may not use this file except in compliance -- * with the License. You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- ++/* ++ * Licensed to the Apache Software Foundation (ASF) under one ++ * or more contributor license agreements. See the NOTICE file ++ * distributed with this work for additional information ++ * regarding copyright ownership. The ASF licenses this file ++ * to you under the Apache License, Version 2.0 (the ++ * "License"); you may not use this file except in compliance ++ * with the License. You may obtain a copy of the License at ++ * ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * Unless required by applicable law or agreed to in writing, software ++ * distributed under the License is distributed on an "AS IS" BASIS, ++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ * See the License for the specific language governing permissions and ++ * limitations under the License. ++ */ ++ package org.apache.jena.hadoop.rdf.mapreduce.transform; import java.io.IOException; -- ++ import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mrunit.mapreduce.MapDriver; import org.apache.hadoop.mrunit.types.Pair; --import org.apache.jena.datatypes.xsd.XSDDatatype ; --import org.apache.jena.graph.NodeFactory ; --import org.apache.jena.graph.Triple ; --import org.apache.jena.hadoop.rdf.mapreduce.AbstractMapperTests; --import org.apache.jena.hadoop.rdf.mapreduce.transform.QuadsToTriplesMapper; --import org.apache.jena.hadoop.rdf.types.QuadWritable; --import org.apache.jena.hadoop.rdf.types.TripleWritable; --import org.apache.jena.sparql.core.Quad ; ++import org.apache.jena.datatypes.xsd.XSDDatatype ; ++import org.apache.jena.graph.NodeFactory ; ++import org.apache.jena.graph.Triple ; ++import org.apache.jena.hadoop.rdf.mapreduce.AbstractMapperTests; ++import org.apache.jena.hadoop.rdf.mapreduce.transform.QuadsToTriplesMapper; ++import org.apache.jena.hadoop.rdf.types.QuadWritable; ++import org.apache.jena.hadoop.rdf.types.TripleWritable; ++import org.apache.jena.sparql.core.Quad ; import org.junit.Test; /** http://git-wip-us.apache.org/repos/asf/jena/blob/4b5cd267/jena-elephas/jena-elephas-mapreduce/src/test/java/org/apache/jena/hadoop/rdf/mapreduce/transform/TriplesToQuadsBySubjectMapperTest.java ---------------------------------------------------------------------- diff --cc jena-elephas/jena-elephas-mapreduce/src/test/java/org/apache/jena/hadoop/rdf/mapreduce/transform/TriplesToQuadsBySubjectMapperTest.java index e52ea6f,e52ea6f..6fb1279 --- a/jena-elephas/jena-elephas-mapreduce/src/test/java/org/apache/jena/hadoop/rdf/mapreduce/transform/TriplesToQuadsBySubjectMapperTest.java +++ b/jena-elephas/jena-elephas-mapreduce/src/test/java/org/apache/jena/hadoop/rdf/mapreduce/transform/TriplesToQuadsBySubjectMapperTest.java @@@ -1,37 -1,37 +1,37 @@@ --/* -- * Licensed to the Apache Software Foundation (ASF) under one -- * or more contributor license agreements. See the NOTICE file -- * distributed with this work for additional information -- * regarding copyright ownership. The ASF licenses this file -- * to you under the Apache License, Version 2.0 (the -- * "License"); you may not use this file except in compliance -- * with the License. You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- ++/* ++ * Licensed to the Apache Software Foundation (ASF) under one ++ * or more contributor license agreements. See the NOTICE file ++ * distributed with this work for additional information ++ * regarding copyright ownership. The ASF licenses this file ++ * to you under the Apache License, Version 2.0 (the ++ * "License"); you may not use this file except in compliance ++ * with the License. You may obtain a copy of the License at ++ * ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * Unless required by applicable law or agreed to in writing, software ++ * distributed under the License is distributed on an "AS IS" BASIS, ++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ * See the License for the specific language governing permissions and ++ * limitations under the License. ++ */ ++ package org.apache.jena.hadoop.rdf.mapreduce.transform; import java.io.IOException; -- ++ import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mrunit.mapreduce.MapDriver; import org.apache.hadoop.mrunit.types.Pair; --import org.apache.jena.datatypes.xsd.XSDDatatype ; --import org.apache.jena.graph.NodeFactory ; --import org.apache.jena.graph.Triple ; --import org.apache.jena.hadoop.rdf.mapreduce.AbstractMapperTests; --import org.apache.jena.hadoop.rdf.mapreduce.transform.TriplesToQuadsBySubjectMapper; --import org.apache.jena.hadoop.rdf.types.QuadWritable; --import org.apache.jena.hadoop.rdf.types.TripleWritable; --import org.apache.jena.sparql.core.Quad ; ++import org.apache.jena.datatypes.xsd.XSDDatatype ; ++import org.apache.jena.graph.NodeFactory ; ++import org.apache.jena.graph.Triple ; ++import org.apache.jena.hadoop.rdf.mapreduce.AbstractMapperTests; ++import org.apache.jena.hadoop.rdf.mapreduce.transform.TriplesToQuadsBySubjectMapper; ++import org.apache.jena.hadoop.rdf.types.QuadWritable; ++import org.apache.jena.hadoop.rdf.types.TripleWritable; ++import org.apache.jena.sparql.core.Quad ; import org.junit.Test; /** http://git-wip-us.apache.org/repos/asf/jena/blob/4b5cd267/jena-elephas/jena-elephas-mapreduce/src/test/java/org/apache/jena/hadoop/rdf/mapreduce/transform/TriplesToQuadsConstantGraphMapperTest.java ---------------------------------------------------------------------- diff --cc jena-elephas/jena-elephas-mapreduce/src/test/java/org/apache/jena/hadoop/rdf/mapreduce/transform/TriplesToQuadsConstantGraphMapperTest.java index 0a73623,0a73623..af9cf20 --- a/jena-elephas/jena-elephas-mapreduce/src/test/java/org/apache/jena/hadoop/rdf/mapreduce/transform/TriplesToQuadsConstantGraphMapperTest.java +++ b/jena-elephas/jena-elephas-mapreduce/src/test/java/org/apache/jena/hadoop/rdf/mapreduce/transform/TriplesToQuadsConstantGraphMapperTest.java @@@ -1,37 -1,37 +1,37 @@@ --/* -- * Licensed to the Apache Software Foundation (ASF) under one -- * or more contributor license agreements. See the NOTICE file -- * distributed with this work for additional information -- * regarding copyright ownership. The ASF licenses this file -- * to you under the Apache License, Version 2.0 (the -- * "License"); you may not use this file except in compliance -- * with the License. You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- ++/* ++ * Licensed to the Apache Software Foundation (ASF) under one ++ * or more contributor license agreements. See the NOTICE file ++ * distributed with this work for additional information ++ * regarding copyright ownership. The ASF licenses this file ++ * to you under the Apache License, Version 2.0 (the ++ * "License"); you may not use this file except in compliance ++ * with the License. You may obtain a copy of the License at ++ * ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * Unless required by applicable law or agreed to in writing, software ++ * distributed under the License is distributed on an "AS IS" BASIS, ++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ * See the License for the specific language governing permissions and ++ * limitations under the License. ++ */ ++ package org.apache.jena.hadoop.rdf.mapreduce.transform; import java.io.IOException; -- ++ import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mrunit.mapreduce.MapDriver; import org.apache.hadoop.mrunit.types.Pair; --import org.apache.jena.datatypes.xsd.XSDDatatype ; --import org.apache.jena.graph.NodeFactory ; --import org.apache.jena.graph.Triple ; --import org.apache.jena.hadoop.rdf.mapreduce.AbstractMapperTests; --import org.apache.jena.hadoop.rdf.mapreduce.transform.TriplesToQuadsConstantGraphMapper; --import org.apache.jena.hadoop.rdf.types.QuadWritable; --import org.apache.jena.hadoop.rdf.types.TripleWritable; --import org.apache.jena.sparql.core.Quad ; ++import org.apache.jena.datatypes.xsd.XSDDatatype ; ++import org.apache.jena.graph.NodeFactory ; ++import org.apache.jena.graph.Triple ; ++import org.apache.jena.hadoop.rdf.mapreduce.AbstractMapperTests; ++import org.apache.jena.hadoop.rdf.mapreduce.transform.TriplesToQuadsConstantGraphMapper; ++import org.apache.jena.hadoop.rdf.types.QuadWritable; ++import org.apache.jena.hadoop.rdf.types.TripleWritable; ++import org.apache.jena.sparql.core.Quad ; import org.junit.Test; /** http://git-wip-us.apache.org/repos/asf/jena/blob/4b5cd267/jena-elephas/jena-elephas-stats/src/main/java/org/apache/jena/hadoop/rdf/stats/RdfStats.java ---------------------------------------------------------------------- diff --cc jena-elephas/jena-elephas-stats/src/main/java/org/apache/jena/hadoop/rdf/stats/RdfStats.java index c62c50b,c62c50b..7425f42 --- a/jena-elephas/jena-elephas-stats/src/main/java/org/apache/jena/hadoop/rdf/stats/RdfStats.java +++ b/jena-elephas/jena-elephas-stats/src/main/java/org/apache/jena/hadoop/rdf/stats/RdfStats.java @@@ -1,421 -1,421 +1,421 @@@ --/* -- * Licensed to the Apache Software Foundation (ASF) under one -- * or more contributor license agreements. See the NOTICE file -- * distributed with this work for additional information -- * regarding copyright ownership. The ASF licenses this file -- * to you under the Apache License, Version 2.0 (the -- * "License"); you may not use this file except in compliance -- * with the License. You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --package org.apache.jena.hadoop.rdf.stats; -- --import java.io.IOException; --import java.util.ArrayList; --import java.util.List; --import java.util.concurrent.TimeUnit; -- --import javax.inject.Inject; -- --import org.apache.commons.io.output.CloseShieldOutputStream; --import org.apache.hadoop.conf.Configuration; --import org.apache.hadoop.mapreduce.Job; --import org.apache.hadoop.util.Tool; --import org.apache.hadoop.util.ToolRunner; --import org.apache.jena.hadoop.rdf.stats.jobs.JobFactory; -- --import com.github.rvesse.airline.HelpOption; --import com.github.rvesse.airline.SingleCommand; --import com.github.rvesse.airline.annotations.Arguments; --import com.github.rvesse.airline.annotations.Command; --import com.github.rvesse.airline.annotations.Option; --import com.github.rvesse.airline.annotations.restrictions.AllowedRawValues; --import com.github.rvesse.airline.annotations.restrictions.Required; --import com.github.rvesse.airline.help.Help; --import com.github.rvesse.airline.io.colors.BasicColor; --import com.github.rvesse.airline.io.output.AnsiBasicColorizedOutputStream; --import com.github.rvesse.airline.io.output.ColorizedOutputStream; --import com.github.rvesse.airline.model.CommandMetadata; --import com.github.rvesse.airline.parser.errors.ParseException; -- --/** -- * Entry point for the Hadoop job, handles launching all the relevant Hadoop -- * jobs -- */ --@Command(name = "hadoop jar PATH_TO_JAR org.apache.jena.hadoop.rdf.stats.RdfStats", description = "A command which computes statistics on RDF data using Hadoop") --public class RdfStats implements Tool { -- //@formatter:off -- private static final String DATA_TYPE_TRIPLES = "triples", -- DATA_TYPE_QUADS = "quads", -- DATA_TYPE_MIXED = "mixed"; -- //@formatter:on -- -- /** -- * Help option -- */ -- @Inject -- public HelpOption<RdfStats> helpOption; -- -- /** -- * Gets/Sets whether all available statistics will be calculated -- */ -- @Option(name = { "-a", "--all" }, description = "Requests that all available statistics be calculated") -- public boolean all = false; -- -- /** -- * Gets/Sets whether node usage counts will be calculated -- */ -- @Option(name = { "-n", "--node-count" }, description = "Requests that node usage counts be calculated") -- public boolean nodeCount = false; -- -- /** -- * Gets/Sets whether characteristic sets will be calculated -- */ -- @Option(name = { "-c", -- "--characteristic-sets" }, hidden = true, description = "Requests that characteristic sets be calculated (hidden as this has scalability issues)") -- public boolean characteristicSets = false; -- -- /** -- * Gets/Sets whether type counts will be calculated -- */ -- @Option(name = { "-t", "--type-count" }, description = "Requests that rdf:type usage counts be calculated") -- public boolean typeCount = false; -- -- /** -- * Gets/Sets whether data type counts will be calculated -- */ -- @Option(name = { "-d", "--data-types" }, description = "Requests that literal data type usage counts be calculated") -- public boolean dataTypeCount = false; -- -- /** -- * Gets/Sets whether namespace counts will be calculated -- */ -- @Option(name = { "--namespaces" }, description = "Requests that namespace usage counts be calculated") -- public boolean namespaceCount = false; -- -- @Option(name = { "-g", "--graph-sizes" }, description = "Requests that the size of each named graph be counted") -- public boolean graphSize = false; -- -- /** -- * Gets/Sets the input data type used -- */ -- @Option(name = { -- "--input-type" }, description = "Specifies whether the input data is a mixture of quads and triples, just quads or just triples. Using the most specific data type will yield the most accurate statistics") -- @AllowedRawValues(allowedValues = { DATA_TYPE_MIXED, DATA_TYPE_QUADS, DATA_TYPE_TRIPLES }) -- public String inputType = DATA_TYPE_MIXED; -- -- /** -- * Gets/Sets the output path -- */ -- @Option(name = { "-o", "--output" }, title = "OutputPath", description = "Sets the output path", arity = 1) -- @Required -- public String outputPath = null; -- -- /** -- * Gets/Sets the input path(s) -- */ -- @Arguments(description = "Sets the input path(s)", title = "InputPath") -- @Required -- public List<String> inputPaths = new ArrayList<String>(); -- -- private Configuration config; -- -- /** -- * Entry point method -- * -- * @param args -- * Arguments -- */ -- public static void main(String[] args) { -- ColorizedOutputStream<BasicColor> error = new AnsiBasicColorizedOutputStream( -- new CloseShieldOutputStream(System.err)); -- try { -- // Run and exit with result code if no errors bubble up -- // Note that the exit code may still be a error code -- int res = ToolRunner.run(new Configuration(true), new RdfStats(), args); -- System.exit(res); -- } catch (Throwable e) { -- // This will only happen if Hadoop option parsing errors -- // The run() method will handle its error itself -- error.setForegroundColor(BasicColor.RED); -- error.println(e.getMessage()); -- e.printStackTrace(error); -- } finally { -- error.close(); -- } -- // If any errors bubble up exit with non-zero code -- System.exit(1); -- } -- -- private static void showUsage() throws IOException { -- CommandMetadata metadata = SingleCommand.singleCommand(RdfStats.class).getCommandMetadata(); -- Help.help(metadata, System.err); -- System.exit(1); -- } -- -- @Override -- public void setConf(Configuration conf) { -- this.config = conf; -- } -- -- @Override -- public Configuration getConf() { -- return this.config; -- } -- -- @Override -- public int run(String[] args) { -- ColorizedOutputStream<BasicColor> error = new AnsiBasicColorizedOutputStream( -- new CloseShieldOutputStream(System.err)); -- try { -- if (args.length == 0) { -- showUsage(); -- } -- -- // Parse custom arguments -- RdfStats cmd = SingleCommand.singleCommand(RdfStats.class).parse(args); -- -- // Copy Hadoop configuration across -- cmd.setConf(this.getConf()); -- -- // Show help if requested and exit with success -- if (cmd.helpOption.showHelpIfRequested()) { -- return 0; -- } -- -- // Run the command and exit with success -- cmd.run(); -- return 0; -- } catch (ParseException e) { -- error.setForegroundColor(BasicColor.RED); -- error.println(e.getMessage()); -- error.println(); -- } catch (Throwable e) { -- error.setForegroundColor(BasicColor.RED); -- error.println(e.getMessage()); -- e.printStackTrace(error); -- error.println(); -- } finally { -- error.close(); -- } -- return 1; -- } -- -- private void run() throws Throwable { -- if (!this.outputPath.endsWith("/")) { -- this.outputPath += "/"; -- } -- -- // If all statistics requested turn on all statistics -- if (this.all) { -- this.nodeCount = true; -- this.characteristicSets = true; -- this.typeCount = true; -- this.dataTypeCount = true; -- this.namespaceCount = true; -- } -- -- // How many statistics were requested? -- int statsRequested = 0; -- if (this.nodeCount) -- statsRequested++; -- if (this.characteristicSets) -- statsRequested++; -- if (this.typeCount) -- statsRequested++; -- if (this.dataTypeCount) -- statsRequested++; -- if (this.namespaceCount) -- statsRequested++; -- if (this.graphSize) -- statsRequested++; -- -- // Error if no statistics requested -- if (statsRequested == 0) { -- System.err.println( -- "You did not request any statistics to be calculated, please use one/more of the relevant options to select the statistics to be computed"); -- return; -- } -- int statsComputed = 1; -- -- // Compute statistics -- if (this.nodeCount) { -- Job job = this.selectNodeCountJob(); -- statsComputed = this.computeStatistic(job, statsComputed, statsRequested); -- } -- if (this.graphSize) { -- Job job = this.selectGraphSizeJob(); -- statsComputed = this.computeStatistic(job, statsComputed, statsRequested); -- } -- if (this.typeCount) { -- Job[] jobs = this.selectTypeCountJobs(); -- statsComputed = this.computeStatistic(jobs, false, false, statsComputed, statsRequested); -- } -- if (this.dataTypeCount) { -- Job job = this.selectDataTypeCountJob(); -- statsComputed = this.computeStatistic(job, statsComputed, statsRequested); -- } -- if (this.namespaceCount) { -- Job job = this.selectNamespaceCountJob(); -- statsComputed = this.computeStatistic(job, statsComputed, statsRequested); -- } -- if (this.characteristicSets) { -- Job[] jobs = this.selectCharacteristicSetJobs(); -- statsComputed = this.computeStatistic(jobs, false, false, statsComputed, statsRequested); -- } -- } -- -- private int computeStatistic(Job job, int statsComputed, int statsRequested) throws Throwable { -- System.out.println(String.format("Computing Statistic %d of %d requested", statsComputed, statsRequested)); -- this.runJob(job); -- System.out.println(String.format("Computed Statistic %d of %d requested", statsComputed, statsRequested)); -- System.out.println(); -- return ++statsComputed; -- } -- -- private int computeStatistic(Job[] jobs, boolean continueOnFailure, boolean continueOnError, int statsComputed, -- int statsRequested) { -- System.out.println(String.format("Computing Statistic %d of %d requested", statsComputed, statsRequested)); -- this.runJobSequence(jobs, continueOnFailure, continueOnError); -- System.out.println(String.format("Computed Statistic %d of %d requested", statsComputed, statsRequested)); -- System.out.println(); -- return ++statsComputed; -- } -- -- private boolean runJob(Job job) throws Throwable { -- System.out.println("Submitting Job " + job.getJobName()); -- long start = System.nanoTime(); -- try { -- job.submit(); -- if (job.monitorAndPrintJob()) { -- System.out.println("Job " + job.getJobName() + " succeeded"); -- return true; -- } else { -- System.out.println("Job " + job.getJobName() + " failed"); -- return false; -- } -- } catch (Throwable e) { -- System.out.println("Unexpected failure in Job " + job.getJobName()); -- throw e; -- } finally { -- long end = System.nanoTime(); -- System.out.println("Job " + job.getJobName() + " finished after " -- + String.format("%,d milliseconds", TimeUnit.NANOSECONDS.toMillis(end - start))); -- System.out.println(); -- } -- } -- -- private void runJobSequence(Job[] jobs, boolean continueOnFailure, boolean continueOnError) { -- for (int i = 0; i < jobs.length; i++) { -- Job job = jobs[i]; -- try { -- boolean success = this.runJob(job); -- if (!success && !continueOnFailure) -- throw new IllegalStateException( -- "Unable to complete job sequence because Job " + job.getJobName() + " failed"); -- } catch (IllegalStateException e) { -- throw e; -- } catch (Throwable e) { -- if (!continueOnError) -- throw new IllegalStateException( -- "Unable to complete job sequence because job " + job.getJobName() + " errorred", e); -- } -- } -- } -- -- private Job selectNodeCountJob() throws IOException { -- String realOutputPath = outputPath + "node-counts/"; -- String[] inputs = new String[this.inputPaths.size()]; -- this.inputPaths.toArray(inputs); -- -- if (DATA_TYPE_QUADS.equals(this.inputType)) { -- return JobFactory.getQuadNodeCountJob(this.config, inputs, realOutputPath); -- } else if (DATA_TYPE_TRIPLES.equals(this.inputType)) { -- return JobFactory.getTripleNodeCountJob(this.config, inputs, realOutputPath); -- } else { -- return JobFactory.getNodeCountJob(this.config, inputs, realOutputPath); -- } -- } -- -- private Job selectGraphSizeJob() throws IOException { -- String realOutputPath = outputPath + "graph-sizes/"; -- String[] inputs = new String[this.inputPaths.size()]; -- this.inputPaths.toArray(inputs); -- -- if (DATA_TYPE_QUADS.equals(this.inputType)) { -- return JobFactory.getQuadGraphSizesJob(this.config, inputs, realOutputPath); -- } else if (DATA_TYPE_TRIPLES.equals(this.inputType)) { -- return JobFactory.getTripleGraphSizesJob(this.config, inputs, realOutputPath); -- } else { -- return JobFactory.getGraphSizesJob(this.config, inputs, realOutputPath); -- } -- } -- -- private Job selectDataTypeCountJob() throws IOException { -- String realOutputPath = outputPath + "data-type-counts/"; -- String[] inputs = new String[this.inputPaths.size()]; -- this.inputPaths.toArray(inputs); -- -- if (DATA_TYPE_QUADS.equals(this.inputType)) { -- return JobFactory.getQuadDataTypeCountJob(this.config, inputs, realOutputPath); -- } else if (DATA_TYPE_TRIPLES.equals(this.inputType)) { -- return JobFactory.getTripleDataTypeCountJob(this.config, inputs, realOutputPath); -- } else { -- return JobFactory.getDataTypeCountJob(this.config, inputs, realOutputPath); -- } -- } -- -- private Job selectNamespaceCountJob() throws IOException { -- String realOutputPath = outputPath + "namespace-counts/"; -- String[] inputs = new String[this.inputPaths.size()]; -- this.inputPaths.toArray(inputs); -- -- if (DATA_TYPE_QUADS.equals(this.inputType)) { -- return JobFactory.getQuadNamespaceCountJob(this.config, inputs, realOutputPath); -- } else if (DATA_TYPE_TRIPLES.equals(this.inputType)) { -- return JobFactory.getTripleNamespaceCountJob(this.config, inputs, realOutputPath); -- } else { -- return JobFactory.getNamespaceCountJob(this.config, inputs, realOutputPath); -- } -- } -- -- private Job[] selectCharacteristicSetJobs() throws IOException { -- String intermediateOutputPath = outputPath + "characteristics/intermediate/"; -- String finalOutputPath = outputPath + "characteristics/final/"; -- String[] inputs = new String[this.inputPaths.size()]; -- this.inputPaths.toArray(inputs); -- -- if (DATA_TYPE_QUADS.equals(this.inputType)) { -- return JobFactory.getQuadCharacteristicSetJobs(this.config, inputs, intermediateOutputPath, -- finalOutputPath); -- } else if (DATA_TYPE_TRIPLES.equals(this.inputType)) { -- return JobFactory.getTripleCharacteristicSetJobs(this.config, inputs, intermediateOutputPath, -- finalOutputPath); -- } else { -- return JobFactory.getCharacteristicSetJobs(this.config, inputs, intermediateOutputPath, finalOutputPath); -- } -- } -- -- private Job[] selectTypeCountJobs() throws IOException { -- String intermediateOutputPath = outputPath + "type-declarations/"; -- String finalOutputPath = outputPath + "type-counts/"; -- String[] inputs = new String[this.inputPaths.size()]; -- this.inputPaths.toArray(inputs); -- -- if (DATA_TYPE_QUADS.equals(this.inputType)) { -- return JobFactory.getQuadTypeCountJobs(this.config, inputs, intermediateOutputPath, finalOutputPath); -- } else if (DATA_TYPE_TRIPLES.equals(this.inputType)) { -- return JobFactory.getTripleTypeCountJobs(this.config, inputs, intermediateOutputPath, finalOutputPath); -- } else { -- return JobFactory.getTypeCountJobs(this.config, inputs, intermediateOutputPath, finalOutputPath); -- } -- } --} ++/* ++ * Licensed to the Apache Software Foundation (ASF) under one ++ * or more contributor license agreements. See the NOTICE file ++ * distributed with this work for additional information ++ * regarding copyright ownership. The ASF licenses this file ++ * to you under the Apache License, Version 2.0 (the ++ * "License"); you may not use this file except in compliance ++ * with the License. You may obtain a copy of the License at ++ * ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * Unless required by applicable law or agreed to in writing, software ++ * distributed under the License is distributed on an "AS IS" BASIS, ++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ * See the License for the specific language governing permissions and ++ * limitations under the License. ++ */ ++ ++package org.apache.jena.hadoop.rdf.stats; ++ ++import java.io.IOException; ++import java.util.ArrayList; ++import java.util.List; ++import java.util.concurrent.TimeUnit; ++ ++import javax.inject.Inject; ++ ++import org.apache.commons.io.output.CloseShieldOutputStream; ++import org.apache.hadoop.conf.Configuration; ++import org.apache.hadoop.mapreduce.Job; ++import org.apache.hadoop.util.Tool; ++import org.apache.hadoop.util.ToolRunner; ++import org.apache.jena.hadoop.rdf.stats.jobs.JobFactory; ++ ++import com.github.rvesse.airline.HelpOption; ++import com.github.rvesse.airline.SingleCommand; ++import com.github.rvesse.airline.annotations.Arguments; ++import com.github.rvesse.airline.annotations.Command; ++import com.github.rvesse.airline.annotations.Option; ++import com.github.rvesse.airline.annotations.restrictions.AllowedRawValues; ++import com.github.rvesse.airline.annotations.restrictions.Required; ++import com.github.rvesse.airline.help.Help; ++import com.github.rvesse.airline.io.colors.BasicColor; ++import com.github.rvesse.airline.io.output.AnsiBasicColorizedOutputStream; ++import com.github.rvesse.airline.io.output.ColorizedOutputStream; ++import com.github.rvesse.airline.model.CommandMetadata; ++import com.github.rvesse.airline.parser.errors.ParseException; ++ ++/** ++ * Entry point for the Hadoop job, handles launching all the relevant Hadoop ++ * jobs ++ */ ++@Command(name = "hadoop jar PATH_TO_JAR org.apache.jena.hadoop.rdf.stats.RdfStats", description = "A command which computes statistics on RDF data using Hadoop") ++public class RdfStats implements Tool { ++ //@formatter:off ++ private static final String DATA_TYPE_TRIPLES = "triples", ++ DATA_TYPE_QUADS = "quads", ++ DATA_TYPE_MIXED = "mixed"; ++ //@formatter:on ++ ++ /** ++ * Help option ++ */ ++ @Inject ++ public HelpOption<RdfStats> helpOption; ++ ++ /** ++ * Gets/Sets whether all available statistics will be calculated ++ */ ++ @Option(name = { "-a", "--all" }, description = "Requests that all available statistics be calculated") ++ public boolean all = false; ++ ++ /** ++ * Gets/Sets whether node usage counts will be calculated ++ */ ++ @Option(name = { "-n", "--node-count" }, description = "Requests that node usage counts be calculated") ++ public boolean nodeCount = false; ++ ++ /** ++ * Gets/Sets whether characteristic sets will be calculated ++ */ ++ @Option(name = { "-c", ++ "--characteristic-sets" }, hidden = true, description = "Requests that characteristic sets be calculated (hidden as this has scalability issues)") ++ public boolean characteristicSets = false; ++ ++ /** ++ * Gets/Sets whether type counts will be calculated ++ */ ++ @Option(name = { "-t", "--type-count" }, description = "Requests that rdf:type usage counts be calculated") ++ public boolean typeCount = false; ++ ++ /** ++ * Gets/Sets whether data type counts will be calculated ++ */ ++ @Option(name = { "-d", "--data-types" }, description = "Requests that literal data type usage counts be calculated") ++ public boolean dataTypeCount = false; ++ ++ /** ++ * Gets/Sets whether namespace counts will be calculated ++ */ ++ @Option(name = { "--namespaces" }, description = "Requests that namespace usage counts be calculated") ++ public boolean namespaceCount = false; ++ ++ @Option(name = { "-g", "--graph-sizes" }, description = "Requests that the size of each named graph be counted") ++ public boolean graphSize = false; ++ ++ /** ++ * Gets/Sets the input data type used ++ */ ++ @Option(name = { ++ "--input-type" }, description = "Specifies whether the input data is a mixture of quads and triples, just quads or just triples. Using the most specific data type will yield the most accurate statistics") ++ @AllowedRawValues(allowedValues = { DATA_TYPE_MIXED, DATA_TYPE_QUADS, DATA_TYPE_TRIPLES }) ++ public String inputType = DATA_TYPE_MIXED; ++ ++ /** ++ * Gets/Sets the output path ++ */ ++ @Option(name = { "-o", "--output" }, title = "OutputPath", description = "Sets the output path", arity = 1) ++ @Required ++ public String outputPath = null; ++ ++ /** ++ * Gets/Sets the input path(s) ++ */ ++ @Arguments(description = "Sets the input path(s)", title = "InputPath") ++ @Required ++ public List<String> inputPaths = new ArrayList<String>(); ++ ++ private Configuration config; ++ ++ /** ++ * Entry point method ++ * ++ * @param args ++ * Arguments ++ */ ++ public static void main(String[] args) { ++ ColorizedOutputStream<BasicColor> error = new AnsiBasicColorizedOutputStream( ++ new CloseShieldOutputStream(System.err)); ++ try { ++ // Run and exit with result code if no errors bubble up ++ // Note that the exit code may still be a error code ++ int res = ToolRunner.run(new Configuration(true), new RdfStats(), args); ++ System.exit(res); ++ } catch (Throwable e) { ++ // This will only happen if Hadoop option parsing errors ++ // The run() method will handle its error itself ++ error.setForegroundColor(BasicColor.RED); ++ error.println(e.getMessage()); ++ e.printStackTrace(error); ++ } finally { ++ error.close(); ++ } ++ // If any errors bubble up exit with non-zero code ++ System.exit(1); ++ } ++ ++ private static void showUsage() throws IOException { ++ CommandMetadata metadata = SingleCommand.singleCommand(RdfStats.class).getCommandMetadata(); ++ Help.help(metadata, System.err); ++ System.exit(1); ++ } ++ ++ @Override ++ public void setConf(Configuration conf) { ++ this.config = conf; ++ } ++ ++ @Override ++ public Configuration getConf() { ++ return this.config; ++ } ++ ++ @Override ++ public int run(String[] args) { ++ ColorizedOutputStream<BasicColor> error = new AnsiBasicColorizedOutputStream( ++ new CloseShieldOutputStream(System.err)); ++ try { ++ if (args.length == 0) { ++ showUsage(); ++ } ++ ++ // Parse custom arguments ++ RdfStats cmd = SingleCommand.singleCommand(RdfStats.class).parse(args); ++ ++ // Copy Hadoop configuration across ++ cmd.setConf(this.getConf()); ++ ++ // Show help if requested and exit with success ++ if (cmd.helpOption.showHelpIfRequested()) { ++ return 0; ++ } ++ ++ // Run the command and exit with success ++ cmd.run(); ++ return 0; ++ } catch (ParseException e) { ++ error.setForegroundColor(BasicColor.RED); ++ error.println(e.getMessage()); ++ error.println(); ++ } catch (Throwable e) { ++ error.setForegroundColor(BasicColor.RED); ++ error.println(e.getMessage()); ++ e.printStackTrace(error); ++ error.println(); ++ } finally { ++ error.close(); ++ } ++ return 1; ++ } ++ ++ private void run() throws Throwable { ++ if (!this.outputPath.endsWith("/")) { ++ this.outputPath += "/"; ++ } ++ ++ // If all statistics requested turn on all statistics ++ if (this.all) { ++ this.nodeCount = true; ++ this.characteristicSets = true; ++ this.typeCount = true; ++ this.dataTypeCount = true; ++ this.namespaceCount = true; ++ } ++ ++ // How many statistics were requested? ++ int statsRequested = 0; ++ if (this.nodeCount) ++ statsRequested++; ++ if (this.characteristicSets) ++ statsRequested++; ++ if (this.typeCount) ++ statsRequested++; ++ if (this.dataTypeCount) ++ statsRequested++; ++ if (this.namespaceCount) ++ statsRequested++; ++ if (this.graphSize) ++ statsRequested++; ++ ++ // Error if no statistics requested ++ if (statsRequested == 0) { ++ System.err.println( ++ "You did not request any statistics to be calculated, please use one/more of the relevant options to select the statistics to be computed"); ++ return; ++ } ++ int statsComputed = 1; ++ ++ // Compute statistics ++ if (this.nodeCount) { ++ Job job = this.selectNodeCountJob(); ++ statsComputed = this.computeStatistic(job, statsComputed, statsRequested); ++ } ++ if (this.graphSize) { ++ Job job = this.selectGraphSizeJob(); ++ statsComputed = this.computeStatistic(job, statsComputed, statsRequested); ++ } ++ if (this.typeCount) { ++ Job[] jobs = this.selectTypeCountJobs(); ++ statsComputed = this.computeStatistic(jobs, false, false, statsComputed, statsRequested); ++ } ++ if (this.dataTypeCount) { ++ Job job = this.selectDataTypeCountJob(); ++ statsComputed = this.computeStatistic(job, statsComputed, statsRequested); ++ } ++ if (this.namespaceCount) { ++ Job job = this.selectNamespaceCountJob(); ++ statsComputed = this.computeStatistic(job, statsComputed, statsRequested); ++ } ++ if (this.characteristicSets) { ++ Job[] jobs = this.selectCharacteristicSetJobs(); ++ statsComputed = this.computeStatistic(jobs, false, false, statsComputed, statsRequested); ++ } ++ } ++ ++ private int computeStatistic(Job job, int statsComputed, int statsRequested) throws Throwable { ++ System.out.println(String.format("Computing Statistic %d of %d requested", statsComputed, statsRequested)); ++ this.runJob(job); ++ System.out.println(String.format("Computed Statistic %d of %d requested", statsComputed, statsRequested)); ++ System.out.println(); ++ return ++statsComputed; ++ } ++ ++ private int computeStatistic(Job[] jobs, boolean continueOnFailure, boolean continueOnError, int statsComputed, ++ int statsRequested) { ++ System.out.println(String.format("Computing Statistic %d of %d requested", statsComputed, statsRequested)); ++ this.runJobSequence(jobs, continueOnFailure, continueOnError); ++ System.out.println(String.format("Computed Statistic %d of %d requested", statsComputed, statsRequested)); ++ System.out.println(); ++ return ++statsComputed; ++ } ++ ++ private boolean runJob(Job job) throws Throwable { ++ System.out.println("Submitting Job " + job.getJobName()); ++ long start = System.nanoTime(); ++ try { ++ job.submit(); ++ if (job.monitorAndPrintJob()) { ++ System.out.println("Job " + job.getJobName() + " succeeded"); ++ return true; ++ } else { ++ System.out.println("Job " + job.getJobName() + " failed"); ++ return false; ++ } ++ } catch (Throwable e) { ++ System.out.println("Unexpected failure in Job " + job.getJobName()); ++ throw e; ++ } finally { ++ long end = System.nanoTime(); ++ System.out.println("Job " + job.getJobName() + " finished after " ++ + String.format("%,d milliseconds", TimeUnit.NANOSECONDS.toMillis(end - start))); ++ System.out.println(); ++ } ++ } ++ ++ private void runJobSequence(Job[] jobs, boolean continueOnFailure, boolean continueOnError) { ++ for (int i = 0; i < jobs.length; i++) { ++ Job job = jobs[i]; ++ try { ++ boolean success = this.runJob(job); ++ if (!success && !continueOnFailure) ++ throw new IllegalStateException( ++ "Unable to complete job sequence because Job " + job.getJobName() + " failed"); ++ } catch (IllegalStateException e) { ++ throw e; ++ } catch (Throwable e) { ++ if (!continueOnError) ++ throw new IllegalStateException( ++ "Unable to complete job sequence because job " + job.getJobName() + " errorred", e); ++ } ++ } ++ } ++ ++ private Job selectNodeCountJob() throws IOException { ++ String realOutputPath = outputPath + "node-counts/"; ++ String[] inputs = new String[this.inputPaths.size()]; ++ this.inputPaths.toArray(inputs); ++ ++ if (DATA_TYPE_QUADS.equals(this.inputType)) { ++ return JobFactory.getQuadNodeCountJob(this.config, inputs, realOutputPath); ++ } else if (DATA_TYPE_TRIPLES.equals(this.inputType)) { ++ return JobFactory.getTripleNodeCountJob(this.config, inputs, realOutputPath); ++ } else { ++ return JobFactory.getNodeCountJob(this.config, inputs, realOutputPath); ++ } ++ } ++ ++ private Job selectGraphSizeJob() throws IOException { ++ String realOutputPath = outputPath + "graph-sizes/"; ++ String[] inputs = new String[this.inputPaths.size()]; ++ this.inputPaths.toArray(inputs); ++ ++ if (DATA_TYPE_QUADS.equals(this.inputType)) { ++ return JobFactory.getQuadGraphSizesJob(this.config, inputs, realOutputPath); ++ } else if (DATA_TYPE_TRIPLES.equals(this.inputType)) { ++ return JobFactory.getTripleGraphSizesJob(this.config, inputs, realOutputPath); ++ } else { ++ return JobFactory.getGraphSizesJob(this.config, inputs, realOutputPath); ++ } ++ } ++ ++ private Job selectDataTypeCountJob() throws IOException { ++ String realOutputPath = outputPath + "data-type-counts/"; ++ String[] inputs = new String[this.inputPaths.size()]; ++ this.inputPaths.toArray(inputs); ++ ++ if (DATA_TYPE_QUADS.equals(this.inputType)) { ++ return JobFactory.getQuadDataTypeCountJob(this.config, inputs, realOutputPath); ++ } else if (DATA_TYPE_TRIPLES.equals(this.inputType)) { ++ return JobFactory.getTripleDataTypeCountJob(this.config, inputs, realOutputPath); ++ } else { ++ return JobFactory.getDataTypeCountJob(this.config, inputs, realOutputPath); ++ } ++ } ++ ++ private Job selectNamespaceCountJob() throws IOException { ++ String realOutputPath = outputPath + "namespace-counts/"; ++ String[] inputs = new String[this.inputPaths.size()]; ++ this.inputPaths.toArray(inputs); ++ ++ if (DATA_TYPE_QUADS.equals(this.inputType)) { ++ return JobFactory.getQuadNamespaceCountJob(this.config, inputs, realOutputPath); ++ } else if (DATA_TYPE_TRIPLES.equals(this.inputType)) { ++ return JobFactory.getTripleNamespaceCountJob(this.config, inputs, realOutputPath); ++ } else { ++ return JobFactory.getNamespaceCountJob(this.config, inputs, realOutputPath); ++ } ++ } ++ ++ private Job[] selectCharacteristicSetJobs() throws IOException { ++ String intermediateOutputPath = outputPath + "characteristics/intermediate/"; ++ String finalOutputPath = outputPath + "characteristics/final/"; ++ String[] inputs = new String[this.inputPaths.size()]; ++ this.inputPaths.toArray(inputs); ++ ++ if (DATA_TYPE_QUADS.equals(this.inputType)) { ++ return JobFactory.getQuadCharacteristicSetJobs(this.config, inputs, intermediateOutputPath, ++ finalOutputPath); ++ } else if (DATA_TYPE_TRIPLES.equals(this.inputType)) { ++ return JobFactory.getTripleCharacteristicSetJobs(this.config, inputs, intermediateOutputPath, ++ finalOutputPath); ++ } else { ++ return JobFactory.getCharacteristicSetJobs(this.config, inputs, intermediateOutputPath, finalOutputPath); ++ } ++ } ++ ++ private Job[] selectTypeCountJobs() throws IOException { ++ String intermediateOutputPath = outputPath + "type-declarations/"; ++ String finalOutputPath = outputPath + "type-counts/"; ++ String[] inputs = new String[this.inputPaths.size()]; ++ this.inputPaths.toArray(inputs); ++ ++ if (DATA_TYPE_QUADS.equals(this.inputType)) { ++ return JobFactory.getQuadTypeCountJobs(this.config, inputs, intermediateOutputPath, finalOutputPath); ++ } else if (DATA_TYPE_TRIPLES.equals(this.inputType)) { ++ return JobFactory.getTripleTypeCountJobs(this.config, inputs, intermediateOutputPath, finalOutputPath); ++ } else { ++ return JobFactory.getTypeCountJobs(this.config, inputs, intermediateOutputPath, finalOutputPath); ++ } ++ } ++} http://git-wip-us.apache.org/repos/asf/jena/blob/4b5cd267/jena-elephas/jena-elephas-stats/src/main/java/org/apache/jena/hadoop/rdf/stats/jobs/JobFactory.java ---------------------------------------------------------------------- diff --cc jena-elephas/jena-elephas-stats/src/main/java/org/apache/jena/hadoop/rdf/stats/jobs/JobFactory.java index 0d6bf18,0d6bf18..b0ed898 --- a/jena-elephas/jena-elephas-stats/src/main/java/org/apache/jena/hadoop/rdf/stats/jobs/JobFactory.java +++ b/jena-elephas/jena-elephas-stats/src/main/java/org/apache/jena/hadoop/rdf/stats/jobs/JobFactory.java @@@ -1,25 -1,25 +1,25 @@@ --/* -- * Licensed to the Apache Software Foundation (ASF) under one -- * or more contributor license agreements. See the NOTICE file -- * distributed with this work for additional information -- * regarding copyright ownership. The ASF licenses this file -- * to you under the Apache License, Version 2.0 (the -- * "License"); you may not use this file except in compliance -- * with the License. You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- ++/* ++ * Licensed to the Apache Software Foundation (ASF) under one ++ * or more contributor license agreements. See the NOTICE file ++ * distributed with this work for additional information ++ * regarding copyright ownership. The ASF licenses this file ++ * to you under the Apache License, Version 2.0 (the ++ * "License"); you may not use this file except in compliance ++ * with the License. You may obtain a copy of the License at ++ * ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * Unless required by applicable law or agreed to in writing, software ++ * distributed under the License is distributed on an "AS IS" BASIS, ++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ * See the License for the specific language governing permissions and ++ * limitations under the License. ++ */ ++ package org.apache.jena.hadoop.rdf.stats.jobs; import java.io.IOException; -- ++ import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.LongWritable; @@@ -28,7 -28,7 +28,7 @@@ import org.apache.hadoop.io.SequenceFil import org.apache.hadoop.io.Text; import org.apache.hadoop.io.compress.BZip2Codec; import org.apache.hadoop.mapreduce.Job; --import org.apache.hadoop.mapreduce.lib.chain.ChainMapper; ++import org.apache.hadoop.mapreduce.lib.chain.ChainMapper; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.input.NLineInputFormat; import org.apache.hadoop.mapreduce.lib.input.SequenceFileInputFormat; @@@ -36,40 -36,40 +36,40 @@@ import org.apache.hadoop.mapreduce.lib. import org.apache.hadoop.mapreduce.lib.output.SequenceFileOutputFormat; import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat; import org.apache.hadoop.util.StringUtils; --import org.apache.jena.hadoop.rdf.io.input.QuadsInputFormat; --import org.apache.jena.hadoop.rdf.io.input.TriplesInputFormat; --import org.apache.jena.hadoop.rdf.io.input.TriplesOrQuadsInputFormat; --import org.apache.jena.hadoop.rdf.io.input.nquads.NQuadsInputFormat; --import org.apache.jena.hadoop.rdf.io.input.ntriples.NTriplesInputFormat; --import org.apache.jena.hadoop.rdf.io.output.nquads.NQuadsOutputFormat; --import org.apache.jena.hadoop.rdf.io.output.ntriples.NTriplesNodeOutputFormat; --import org.apache.jena.hadoop.rdf.io.output.ntriples.NTriplesOutputFormat; --import org.apache.jena.hadoop.rdf.mapreduce.KeyMapper; --import org.apache.jena.hadoop.rdf.mapreduce.RdfMapReduceConstants; --import org.apache.jena.hadoop.rdf.mapreduce.TextCountReducer; --import org.apache.jena.hadoop.rdf.mapreduce.characteristics.CharacteristicSetReducer; --import org.apache.jena.hadoop.rdf.mapreduce.characteristics.QuadCharacteristicSetGeneratingReducer; --import org.apache.jena.hadoop.rdf.mapreduce.characteristics.TripleCharacteristicSetGeneratingReducer; --import org.apache.jena.hadoop.rdf.mapreduce.count.NodeCountReducer; --import org.apache.jena.hadoop.rdf.mapreduce.count.QuadNodeCountMapper; --import org.apache.jena.hadoop.rdf.mapreduce.count.TripleNodeCountMapper; --import org.apache.jena.hadoop.rdf.mapreduce.count.datatypes.QuadDataTypeCountMapper; --import org.apache.jena.hadoop.rdf.mapreduce.count.datatypes.TripleDataTypeCountMapper; --import org.apache.jena.hadoop.rdf.mapreduce.count.namespaces.QuadNamespaceCountMapper; --import org.apache.jena.hadoop.rdf.mapreduce.count.namespaces.TripleNamespaceCountMapper; --import org.apache.jena.hadoop.rdf.mapreduce.count.positional.QuadGraphCountMapper; --import org.apache.jena.hadoop.rdf.mapreduce.count.positional.QuadObjectCountMapper; --import org.apache.jena.hadoop.rdf.mapreduce.count.positional.TripleObjectCountMapper; --import org.apache.jena.hadoop.rdf.mapreduce.filter.positional.QuadFilterByPredicateMapper; --import org.apache.jena.hadoop.rdf.mapreduce.filter.positional.TripleFilterByPredicateUriMapper; --import org.apache.jena.hadoop.rdf.mapreduce.group.QuadGroupBySubjectMapper; --import org.apache.jena.hadoop.rdf.mapreduce.group.TripleGroupBySubjectMapper; --import org.apache.jena.hadoop.rdf.mapreduce.transform.TriplesToQuadsConstantGraphMapper; --import org.apache.jena.hadoop.rdf.types.CharacteristicSetWritable; --import org.apache.jena.hadoop.rdf.types.NodeWritable; --import org.apache.jena.hadoop.rdf.types.QuadWritable; --import org.apache.jena.hadoop.rdf.types.TripleWritable; --import org.apache.jena.vocabulary.RDF ; ++import org.apache.jena.hadoop.rdf.io.input.QuadsInputFormat; ++import org.apache.jena.hadoop.rdf.io.input.TriplesInputFormat; ++import org.apache.jena.hadoop.rdf.io.input.TriplesOrQuadsInputFormat; ++import org.apache.jena.hadoop.rdf.io.input.nquads.NQuadsInputFormat; ++import org.apache.jena.hadoop.rdf.io.input.ntriples.NTriplesInputFormat; ++import org.apache.jena.hadoop.rdf.io.output.nquads.NQuadsOutputFormat; ++import org.apache.jena.hadoop.rdf.io.output.ntriples.NTriplesNodeOutputFormat; ++import org.apache.jena.hadoop.rdf.io.output.ntriples.NTriplesOutputFormat; ++import org.apache.jena.hadoop.rdf.mapreduce.KeyMapper; ++import org.apache.jena.hadoop.rdf.mapreduce.RdfMapReduceConstants; ++import org.apache.jena.hadoop.rdf.mapreduce.TextCountReducer; ++import org.apache.jena.hadoop.rdf.mapreduce.characteristics.CharacteristicSetReducer; ++import org.apache.jena.hadoop.rdf.mapreduce.characteristics.QuadCharacteristicSetGeneratingReducer; ++import org.apache.jena.hadoop.rdf.mapreduce.characteristics.TripleCharacteristicSetGeneratingReducer; ++import org.apache.jena.hadoop.rdf.mapreduce.count.NodeCountReducer; ++import org.apache.jena.hadoop.rdf.mapreduce.count.QuadNodeCountMapper; ++import org.apache.jena.hadoop.rdf.mapreduce.count.TripleNodeCountMapper; ++import org.apache.jena.hadoop.rdf.mapreduce.count.datatypes.QuadDataTypeCountMapper; ++import org.apache.jena.hadoop.rdf.mapreduce.count.datatypes.TripleDataTypeCountMapper; ++import org.apache.jena.hadoop.rdf.mapreduce.count.namespaces.QuadNamespaceCountMapper; ++import org.apache.jena.hadoop.rdf.mapreduce.count.namespaces.TripleNamespaceCountMapper; ++import org.apache.jena.hadoop.rdf.mapreduce.count.positional.QuadGraphCountMapper; ++import org.apache.jena.hadoop.rdf.mapreduce.count.positional.QuadObjectCountMapper; ++import org.apache.jena.hadoop.rdf.mapreduce.count.positional.TripleObjectCountMapper; ++import org.apache.jena.hadoop.rdf.mapreduce.filter.positional.QuadFilterByPredicateMapper; ++import org.apache.jena.hadoop.rdf.mapreduce.filter.positional.TripleFilterByPredicateUriMapper; ++import org.apache.jena.hadoop.rdf.mapreduce.group.QuadGroupBySubjectMapper; ++import org.apache.jena.hadoop.rdf.mapreduce.group.TripleGroupBySubjectMapper; ++import org.apache.jena.hadoop.rdf.mapreduce.transform.TriplesToQuadsConstantGraphMapper; ++import org.apache.jena.hadoop.rdf.types.CharacteristicSetWritable; ++import org.apache.jena.hadoop.rdf.types.NodeWritable; ++import org.apache.jena.hadoop.rdf.types.QuadWritable; ++import org.apache.jena.hadoop.rdf.types.TripleWritable; ++import org.apache.jena.vocabulary.RDF ; /** * Factory that can produce {@link Job} instances for computing various RDF @@@ -101,7 -101,7 +101,7 @@@ public class JobFactory public static Job getTripleNodeCountJob(Configuration config, String[] inputPaths, String outputPath) throws IOException { Job job = Job.getInstance(config); job.setJarByClass(JobFactory.class); -- job.setJobName("RDF Triples Node Usage Count"); ++ job.setJobName("RDF Triples Node Usage Count"); // Map/Reduce classes job.setMapperClass(TripleNodeCountMapper.class); @@@ -180,67 -180,67 +180,67 @@@ FileOutputFormat.setOutputPath(job, new Path(outputPath)); return job; -- } -- -- public static Job getTripleGraphSizesJob(Configuration config, String[] inputPaths, String outputPath) throws IOException { -- Job job = Job.getInstance(config); -- job.setJarByClass(JobFactory.class); -- job.setJobName("RDF Triples Graph Sizes"); -- -- // Map/Reduce classes -- ChainMapper.addMapper(job, TriplesToQuadsConstantGraphMapper.class, LongWritable.class, TripleWritable.class, LongWritable.class, QuadWritable.class, config); -- ChainMapper.addMapper(job, QuadGraphCountMapper.class, LongWritable.class, QuadWritable.class, NodeWritable.class, LongWritable.class, config); -- job.setMapOutputKeyClass(NodeWritable.class); -- job.setMapOutputValueClass(LongWritable.class); -- job.setReducerClass(NodeCountReducer.class); -- -- // Input and Output -- job.setInputFormatClass(TriplesInputFormat.class); -- job.setOutputFormatClass(NTriplesNodeOutputFormat.class); -- FileInputFormat.setInputPaths(job, StringUtils.arrayToString(inputPaths)); -- FileOutputFormat.setOutputPath(job, new Path(outputPath)); -- -- return job; -- } -- -- public static Job getQuadGraphSizesJob(Configuration config, String[] inputPaths, String outputPath) throws IOException { -- Job job = Job.getInstance(config); -- job.setJarByClass(JobFactory.class); -- job.setJobName("RDF Quads Graph Sizes"); -- -- // Map/Reduce classes -- job.setMapperClass(QuadGraphCountMapper.class); -- job.setMapOutputKeyClass(NodeWritable.class); -- job.setMapOutputValueClass(LongWritable.class); -- job.setReducerClass(NodeCountReducer.class); -- -- // Input and Output -- job.setInputFormatClass(QuadsInputFormat.class); -- job.setOutputFormatClass(NTriplesNodeOutputFormat.class); -- FileInputFormat.setInputPaths(job, StringUtils.arrayToString(inputPaths)); -- FileOutputFormat.setOutputPath(job, new Path(outputPath)); -- -- return job; -- } -- -- public static Job getGraphSizesJob(Configuration config, String[] inputPaths, String outputPath) throws IOException { -- Job job = Job.getInstance(config); -- job.setJarByClass(JobFactory.class); -- job.setJobName("RDF Graph Sizes"); -- -- // Map/Reduce classes -- job.setMapperClass(QuadGraphCountMapper.class); -- job.setMapOutputKeyClass(NodeWritable.class); -- job.setMapOutputValueClass(LongWritable.class); -- job.setReducerClass(NodeCountReducer.class); -- -- // Input and Output -- job.setInputFormatClass(TriplesOrQuadsInputFormat.class); -- job.setOutputFormatClass(NTriplesNodeOutputFormat.class); -- FileInputFormat.setInputPaths(job, StringUtils.arrayToString(inputPaths)); -- FileOutputFormat.setOutputPath(job, new Path(outputPath)); -- -- return job; ++ } ++ ++ public static Job getTripleGraphSizesJob(Configuration config, String[] inputPaths, String outputPath) throws IOException { ++ Job job = Job.getInstance(config); ++ job.setJarByClass(JobFactory.class); ++ job.setJobName("RDF Triples Graph Sizes"); ++ ++ // Map/Reduce classes ++ ChainMapper.addMapper(job, TriplesToQuadsConstantGraphMapper.class, LongWritable.class, TripleWritable.class, LongWritable.class, QuadWritable.class, config); ++ ChainMapper.addMapper(job, QuadGraphCountMapper.class, LongWritable.class, QuadWritable.class, NodeWritable.class, LongWritable.class, config); ++ job.setMapOutputKeyClass(NodeWritable.class); ++ job.setMapOutputValueClass(LongWritable.class); ++ job.setReducerClass(NodeCountReducer.class); ++ ++ // Input and Output ++ job.setInputFormatClass(TriplesInputFormat.class); ++ job.setOutputFormatClass(NTriplesNodeOutputFormat.class); ++ FileInputFormat.setInputPaths(job, StringUtils.arrayToString(inputPaths)); ++ FileOutputFormat.setOutputPath(job, new Path(outputPath)); ++ ++ return job; ++ } ++ ++ public static Job getQuadGraphSizesJob(Configuration config, String[] inputPaths, String outputPath) throws IOException { ++ Job job = Job.getInstance(config); ++ job.setJarByClass(JobFactory.class); ++ job.setJobName("RDF Quads Graph Sizes"); ++ ++ // Map/Reduce classes ++ job.setMapperClass(QuadGraphCountMapper.class); ++ job.setMapOutputKeyClass(NodeWritable.class); ++ job.setMapOutputValueClass(LongWritable.class); ++ job.setReducerClass(NodeCountReducer.class); ++ ++ // Input and Output ++ job.setInputFormatClass(QuadsInputFormat.class); ++ job.setOutputFormatClass(NTriplesNodeOutputFormat.class); ++ FileInputFormat.setInputPaths(job, StringUtils.arrayToString(inputPaths)); ++ FileOutputFormat.setOutputPath(job, new Path(outputPath)); ++ ++ return job; ++ } ++ ++ public static Job getGraphSizesJob(Configuration config, String[] inputPaths, String outputPath) throws IOException { ++ Job job = Job.getInstance(config); ++ job.setJarByClass(JobFactory.class); ++ job.setJobName("RDF Graph Sizes"); ++ ++ // Map/Reduce classes ++ job.setMapperClass(QuadGraphCountMapper.class); ++ job.setMapOutputKeyClass(NodeWritable.class); ++ job.setMapOutputValueClass(LongWritable.class); ++ job.setReducerClass(NodeCountReducer.class); ++ ++ // Input and Output ++ job.setInputFormatClass(TriplesOrQuadsInputFormat.class); ++ job.setOutputFormatClass(NTriplesNodeOutputFormat.class); ++ FileInputFormat.setInputPaths(job, StringUtils.arrayToString(inputPaths)); ++ FileOutputFormat.setOutputPath(job, new Path(outputPath)); ++ ++ return job; } /** http://git-wip-us.apache.org/repos/asf/jena/blob/4b5cd267/jena-fuseki1/Data/books.ttl ---------------------------------------------------------------------- diff --cc jena-fuseki1/Data/books.ttl index 7957323,7957323..f341edc --- a/jena-fuseki1/Data/books.ttl +++ b/jena-fuseki1/Data/books.ttl @@@ -1,62 -1,62 +1,62 @@@ --# Licensed to the Apache Software Foundation (ASF) under one --# or more contributor license agreements. See the NOTICE file --# distributed with this work for additional information --# regarding copyright ownership. The ASF licenses this file --# to you under the Apache License, Version 2.0 (the --# "License"); you may not use this file except in compliance --# with the License. You may obtain a copy of the License at --# --# http://www.apache.org/licenses/LICENSE-2.0 --# --# Unless required by applicable law or agreed to in writing, software --# distributed under the License is distributed on an "AS IS" BASIS, --# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. --# See the License for the specific language governing permissions and --# limitations under the License. -- --@prefix dc: <http://purl.org/dc/elements/1.1/> . --@prefix vcard: <http://www.w3.org/2001/vcard-rdf/3.0#> . --@prefix ns: <http://example.org/ns#> . -- --@prefix : <http://example.org/book/> . -- --# A small dataset for usage examples of Joseki --# This data is intentionaly irregular (e.g. different ways to --# record the book creator) as if the information is either an --# aggregation or was created at different times. -- --:book1 -- dc:title "Harry Potter and the Philosopher's Stone" ; -- dc:creator "J.K. Rowling" ; -- . -- --:book2 -- dc:title "Harry Potter and the Chamber of Secrets" ; -- dc:creator _:a . -- --:book3 -- dc:title "Harry Potter and the Prisoner Of Azkaban" ; -- dc:creator _:a . -- --:book4 -- dc:title "Harry Potter and the Goblet of Fire" . -- --:book5 -- dc:title "Harry Potter and the Order of the Phoenix"; -- dc:creator "J.K. Rowling" ; -- . -- --:book6 -- dc:title "Harry Potter and the Half-Blood Prince"; -- dc:creator "J.K. Rowling" . -- --:book7 -- dc:title "Harry Potter and the Deathly Hallows" ; -- dc:creator "J.K. Rowling" . --_:a -- vcard:FN "J.K. Rowling" ; -- vcard:N -- [ vcard:Family "Rowling" ; -- vcard:Given "Joanna" -- ] -- . ++# Licensed to the Apache Software Foundation (ASF) under one ++# or more contributor license agreements. See the NOTICE file ++# distributed with this work for additional information ++# regarding copyright ownership. The ASF licenses this file ++# to you under the Apache License, Version 2.0 (the ++# "License"); you may not use this file except in compliance ++# with the License. You may obtain a copy of the License at ++# ++# http://www.apache.org/licenses/LICENSE-2.0 ++# ++# Unless required by applicable law or agreed to in writing, software ++# distributed under the License is distributed on an "AS IS" BASIS, ++# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++# See the License for the specific language governing permissions and ++# limitations under the License. ++ ++@prefix dc: <http://purl.org/dc/elements/1.1/> . ++@prefix vcard: <http://www.w3.org/2001/vcard-rdf/3.0#> . ++@prefix ns: <http://example.org/ns#> . ++ ++@prefix : <http://example.org/book/> . ++ ++# A small dataset for usage examples of Joseki ++# This data is intentionaly irregular (e.g. different ways to ++# record the book creator) as if the information is either an ++# aggregation or was created at different times. ++ ++:book1 ++ dc:title "Harry Potter and the Philosopher's Stone" ; ++ dc:creator "J.K. Rowling" ; ++ . ++ ++:book2 ++ dc:title "Harry Potter and the Chamber of Secrets" ; ++ dc:creator _:a . ++ ++:book3 ++ dc:title "Harry Potter and the Prisoner Of Azkaban" ; ++ dc:creator _:a . ++ ++:book4 ++ dc:title "Harry Potter and the Goblet of Fire" . ++ ++:book5 ++ dc:title "Harry Potter and the Order of the Phoenix"; ++ dc:creator "J.K. Rowling" ; ++ . ++ ++:book6 ++ dc:title "Harry Potter and the Half-Blood Prince"; ++ dc:creator "J.K. Rowling" . ++ ++:book7 ++ dc:title "Harry Potter and the Deathly Hallows" ; ++ dc:creator "J.K. Rowling" . ++_:a ++ vcard:FN "J.K. Rowling" ; ++ vcard:N ++ [ vcard:Family "Rowling" ; ++ vcard:Given "Joanna" ++ ] ++ . http://git-wip-us.apache.org/repos/asf/jena/blob/4b5cd267/jena-fuseki1/pages/books.ttl ---------------------------------------------------------------------- diff --cc jena-fuseki1/pages/books.ttl index eeeadb6,eeeadb6..0554449 --- a/jena-fuseki1/pages/books.ttl +++ b/jena-fuseki1/pages/books.ttl @@@ -1,47 -1,47 +1,47 @@@ --# Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0 --@prefix dc: <http://purl.org/dc/elements/1.1/> . --@prefix vcard: <http://www.w3.org/2001/vcard-rdf/3.0#> . --@prefix ns: <http://example.org/ns#> . -- --@prefix : <http://example.org/book/> . -- --# A small dataset for usage examples of Fuseki --# This data is intentionaly irregular (e.g. different ways to --# record the book creator) as if the information is either an --# aggregation or was created at different times. -- --:book1 -- dc:title "Harry Potter and the Philosopher's Stone" ; -- dc:creator "J.K. Rowling" ; -- . -- --:book2 -- dc:title "Harry Potter and the Chamber of Secrets" ; -- dc:creator _:a . -- --:book3 -- dc:title "Harry Potter and the Prisoner Of Azkaban" ; -- dc:creator _:a . -- --:book4 -- dc:title "Harry Potter and the Goblet of Fire" . -- --:book5 -- dc:title "Harry Potter and the Order of the Phoenix"; -- dc:creator "J.K. Rowling" ; -- . -- --:book6 -- dc:title "Harry Potter and the Half-Blood Prince"; -- dc:creator "J.K. Rowling" . -- --:book7 -- dc:title "Harry Potter and the Deathly Hallows" ; -- dc:creator "J.K. Rowling" . --_:a -- vcard:FN "J.K. Rowling" ; -- vcard:N -- [ vcard:Family "Rowling" ; -- vcard:Given "Joanna" -- ] -- . ++# Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0 ++@prefix dc: <http://purl.org/dc/elements/1.1/> . ++@prefix vcard: <http://www.w3.org/2001/vcard-rdf/3.0#> . ++@prefix ns: <http://example.org/ns#> . ++ ++@prefix : <http://example.org/book/> . ++ ++# A small dataset for usage examples of Fuseki ++# This data is intentionaly irregular (e.g. different ways to ++# record the book creator) as if the information is either an ++# aggregation or was created at different times. ++ ++:book1 ++ dc:title "Harry Potter and the Philosopher's Stone" ; ++ dc:creator "J.K. Rowling" ; ++ . ++ ++:book2 ++ dc:title "Harry Potter and the Chamber of Secrets" ; ++ dc:creator _:a . ++ ++:book3 ++ dc:title "Harry Potter and the Prisoner Of Azkaban" ; ++ dc:creator _:a . ++ ++:book4 ++ dc:title "Harry Potter and the Goblet of Fire" . ++ ++:book5 ++ dc:title "Harry Potter and the Order of the Phoenix"; ++ dc:creator "J.K. Rowling" ; ++ . ++ ++:book6 ++ dc:title "Harry Potter and the Half-Blood Prince"; ++ dc:creator "J.K. Rowling" . ++ ++:book7 ++ dc:title "Harry Potter and the Deathly Hallows" ; ++ dc:creator "J.K. Rowling" . ++_:a ++ vcard:FN "J.K. Rowling" ; ++ vcard:N ++ [ vcard:Family "Rowling" ; ++ vcard:Given "Joanna" ++ ] ++ . http://git-wip-us.apache.org/repos/asf/jena/blob/4b5cd267/jena-fuseki1/src/test/java/org/apache/jena/fuseki/http/TestDatasetGraphAccessorHTTP.java ---------------------------------------------------------------------- diff --cc jena-fuseki1/src/test/java/org/apache/jena/fuseki/http/TestDatasetGraphAccessorHTTP.java index 7687b2c,7687b2c..2b45d2b --- a/jena-fuseki1/src/test/java/org/apache/jena/fuseki/http/TestDatasetGraphAccessorHTTP.java +++ b/jena-fuseki1/src/test/java/org/apache/jena/fuseki/http/TestDatasetGraphAccessorHTTP.java @@@ -16,8 -16,8 +16,8 @@@ * limitations under the License. */ --package org.apache.jena.fuseki.http; -- ++package org.apache.jena.fuseki.http; ++ import org.apache.jena.fuseki.ServerTest ; import org.apache.jena.web.AbstractTestDatasetGraphAccessor ; import org.apache.jena.web.DatasetGraphAccessor ; @@@ -25,19 -25,19 +25,19 @@@ import org.apache.jena.web.DatasetGraph import org.junit.AfterClass ; import org.junit.Before ; import org.junit.BeforeClass ; -- --public class TestDatasetGraphAccessorHTTP extends AbstractTestDatasetGraphAccessor --{ -- @BeforeClass public static void beforeClass() { ServerTest.allocServer() ; } -- @AfterClass public static void afterClass() { ServerTest.freeServer() ; } ++ ++public class TestDatasetGraphAccessorHTTP extends AbstractTestDatasetGraphAccessor ++{ ++ @BeforeClass public static void beforeClass() { ServerTest.allocServer() ; } ++ @AfterClass public static void afterClass() { ServerTest.freeServer() ; } @Before public void before() { ServerTest.resetServer() ; -- } -- -- -- @Override -- protected DatasetGraphAccessor getDatasetUpdater() -- { -- return new DatasetGraphAccessorHTTP(ServerTest.serviceREST) ; -- } ++ } ++ ++ ++ @Override ++ protected DatasetGraphAccessor getDatasetUpdater() ++ { ++ return new DatasetGraphAccessorHTTP(ServerTest.serviceREST) ; ++ } }
