From 5fdd2369faca3d1de646968ece084c441c5d5106 Mon Sep 17 00:00:00 2001 From: Andy Seaborne Date: Tue, 3 Jul 2018 18:55:21 +0100 Subject: [PATCH] JENA-1573: Remove the jena-fuseki1 distribution binary --- jena-fuseki1/DEPENDENCIES | 21 - jena-fuseki1/assembly-dist.xml | 78 ---- jena-fuseki1/assembly-soh.xml | 41 -- jena-fuseki1/dist/ABOUT | 1 - jena-fuseki1/dist/LICENSE | 548 ------------------------- jena-fuseki1/dist/NOTICE | 216 ---------- jena-fuseki1/dist/README | 48 --- jena-fuseki1/pom.xml | 38 -- jena-fuseki1/s-delete | 713 --------------------------------- jena-fuseki1/s-get | 713 --------------------------------- jena-fuseki1/s-head | 713 --------------------------------- jena-fuseki1/s-post | 713 --------------------------------- jena-fuseki1/s-put | 713 --------------------------------- jena-fuseki1/s-query | 713 --------------------------------- jena-fuseki1/s-update | 713 --------------------------------- jena-fuseki1/s-update-form | 713 --------------------------------- 16 files changed, 6695 deletions(-) delete mode 100644 jena-fuseki1/DEPENDENCIES delete mode 100644 jena-fuseki1/assembly-dist.xml delete mode 100644 jena-fuseki1/assembly-soh.xml delete mode 100644 jena-fuseki1/dist/ABOUT delete mode 100644 jena-fuseki1/dist/LICENSE delete mode 100644 jena-fuseki1/dist/NOTICE delete mode 100644 jena-fuseki1/dist/README delete mode 100755 jena-fuseki1/s-delete delete mode 100755 jena-fuseki1/s-get delete mode 100755 jena-fuseki1/s-head delete mode 100755 jena-fuseki1/s-post delete mode 100755 jena-fuseki1/s-put delete mode 100755 jena-fuseki1/s-query delete mode 100755 jena-fuseki1/s-update delete mode 100755 jena-fuseki1/s-update-form diff --git a/jena-fuseki1/DEPENDENCIES b/jena-fuseki1/DEPENDENCIES deleted file mode 100644 index 7dece40ca27..00000000000 --- a/jena-fuseki1/DEPENDENCIES +++ /dev/null @@ -1,21 +0,0 @@ -This file lists the dependences for Apache Jena Fuseki. - Version numbers are given in the POM file for a particular distribution. - -Apache Projects: Apache Software License - Apache Jena, including the Jena IRI library - Apache Xerces-J - Apache log4j - Apache HttpComponents (HTTP Client) - Apache Commons Codec - Apache Common FileUpload - -SLF4J : http://www.slf4j.org/ - Copyright (c) 2004-2008 QOS.ch - MIT License - -JUnit : http://junit.org/ - Common Public License - v 1.0 - -Jetty: http://www.eclipse.org/jetty/ - Apache License 2.0 - (also avilable under Eclipse Public License 1.0) diff --git a/jena-fuseki1/assembly-dist.xml b/jena-fuseki1/assembly-dist.xml deleted file mode 100644 index 509d2306bdb..00000000000 --- a/jena-fuseki1/assembly-dist.xml +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - distribution - - - zip - tar.gz - - - ${project.artifactId}-${project.version} - - - - ${project.build.directory}/${server.jar.name}.jar - - fuseki-server.jar - - - - dist/README - README - - - dist/LICENSE - LICENSE - - - dist/NOTICE - NOTICE - - - - - - - - log4j.properties - fuseki - fuseki-server - fuseki-server.bat - config*.ttl - s-* - pages/* - Data/* - - - - diff --git a/jena-fuseki1/assembly-soh.xml b/jena-fuseki1/assembly-soh.xml deleted file mode 100644 index 49317abbc28..00000000000 --- a/jena-fuseki1/assembly-soh.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - soh - - - zip - - - apache-${project.artifactId}-${project.version} - - - - - s-* - - - - diff --git a/jena-fuseki1/dist/ABOUT b/jena-fuseki1/dist/ABOUT deleted file mode 100644 index cee2ca25288..00000000000 --- a/jena-fuseki1/dist/ABOUT +++ /dev/null @@ -1 +0,0 @@ -This directory holds the material needed for inclusion in the Fuseki distribution. \ No newline at end of file diff --git a/jena-fuseki1/dist/LICENSE b/jena-fuseki1/dist/LICENSE deleted file mode 100644 index 45a6ca4526e..00000000000 --- a/jena-fuseki1/dist/LICENSE +++ /dev/null @@ -1,548 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -- - - - - - - - - - - - - - - - - - - - - - - - - (c) Copyright 2003, Plugged In Software - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - 3. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -- - - - - - - - - - - - - - - - - - - - - - - - -http://www.slf4j.org/license.html - - Copyright (c) 2004-2011 QOS.ch - All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -- - - - - - - - - - - - - - - - - - - - - - - - -============================================================== - Jetty Web Container - Copyright 1995-2012 Mort Bay Consulting Pty Ltd. -============================================================== - -The Jetty Web Container is Copyright Mort Bay Consulting Pty Ltd -unless otherwise noted. - -Jetty is dual licensed under both - - * The Apache 2.0 License - http://www.apache.org/licenses/LICENSE-2.0.html - - and - - * The Eclipse Public 1.0 License - http://www.eclipse.org/legal/epl-v10.html - -Jetty may be distributed under either license. - -The javax.servlet package used was sourced from the Apache -Software Foundation and is distributed under the apache 2.0 -license. - -The UnixCrypt.java code implements the one way cryptography used by -Unix systems for simple password protection. Copyright 1996 Aki Yoshida, -modified April 2001 by Iris Van den Broeke, Daniel Deville. -Permission to use, copy, modify and distribute UnixCrypt -for non-commercial or commercial purposes and without fee is -granted provided that the copyright notice appears in all copies. - -- - - - - - - - - - - - - - - - - - - - - - - - -From Apache HttpComponents Client - -This project contains annotations derived from JCIP-ANNOTATIONS -Copyright (c) 2005 Brian Goetz and Tim Peierls. -See http://www.jcip.net and the Creative Commons Attribution License -(http://creativecommons.org/licenses/by/2.5) - -- - - - - - - - - - - - - - - - - - - - - - - - -From Apache Lucene - -Some code in core/src/java/org/apache/lucene/util/UnicodeUtil.java was -derived from unicode conversion examples available at -http://www.unicode.org/Public/PROGRAMS/CVTUTF. Here is the copyright -from those sources: - -/* - * Copyright 2001-2004 Unicode, Inc. - * - * Disclaimer - * - * This source code is provided as is by Unicode, Inc. No claims are - * made as to fitness for any particular purpose. No warranties of any - * kind are expressed or implied. The recipient agrees to determine - * applicability of information provided. If this file has been - * purchased on magnetic or optical media from Unicode, Inc., the - * sole remedy for any claim will be exchange of defective media - * within 90 days of receipt. - * - * Limitations on Rights to Redistribute This Code - * - * Unicode, Inc. hereby grants the right to freely use the information - * supplied in this file in the creation of products supporting the - * Unicode Standard, and to make copies of this file in any form - * for internal or external distribution as long as this notice - * remains attached. - */ - - -Some code in core/src/java/org/apache/lucene/util/ArrayUtil.java was -derived from Python 2.4.2 sources available at -http://www.python.org. Full license is here: - - http://www.python.org/download/releases/2.4.2/license/ - -Some code in core/src/java/org/apache/lucene/util/UnicodeUtil.java was -derived from Python 3.1.2 sources available at -http://www.python.org. Full license is here: - - http://www.python.org/download/releases/3.1.2/license/ - -Some code in core/src/java/org/apache/lucene/util/automaton was -derived from Brics automaton sources available at -www.brics.dk/automaton/. Here is the copyright from those sources: - -/* - * Copyright (c) 2001-2009 Anders Moeller - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -The levenshtein automata tables in core/src/java/org/apache/lucene/util/automaton -were automatically generated with the moman/finenight FSA package. -Here is the copyright for those sources: - -# Copyright (c) 2010, Jean-Philippe Barrette-LaPierre, -# -# Permission is hereby granted, free of charge, to any person -# obtaining a copy of this software and associated documentation -# files (the "Software"), to deal in the Software without -# restriction, including without limitation the rights to use, -# copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the -# Software is furnished to do so, subject to the following -# conditions: -# -# The above copyright notice and this permission notice shall be -# included in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -# OTHER DEALINGS IN THE SOFTWARE. - -Some code in core/src/java/org/apache/lucene/util/UnicodeUtil.java was -derived from ICU (http://www.icu-project.org) -The full license is available here: - http://source.icu-project.org/repos/icu/icu/trunk/license.html - -/* - * Copyright (C) 1999-2010, International Business Machines - * Corporation and others. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, and/or sell copies of the - * Software, and to permit persons to whom the Software is furnished to do so, - * provided that the above copyright notice(s) and this permission notice appear - * in all copies of the Software and that both the above copyright notice(s) and - * this permission notice appear in supporting documentation. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE - * LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR - * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER - * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT - * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Except as contained in this notice, the name of a copyright holder shall not - * be used in advertising or otherwise to promote the sale, use or other - * dealings in this Software without prior written authorization of the - * copyright holder. - */ - -The following license applies to the Snowball stemmers: - -Copyright (c) 2001, Dr Martin Porter -Copyright (c) 2002, Richard Boulton -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holders nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -The following license applies to the KStemmer: - -Copyright © 2003, -Center for Intelligent Information Retrieval, -University of Massachusetts, Amherst. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. - -3. The names "Center for Intelligent Information Retrieval" and -"University of Massachusetts" must not be used to endorse or promote products -derived from this software without prior written permission. To obtain -permission, contact info@ciir.cs.umass.edu. - -THIS SOFTWARE IS PROVIDED BY UNIVERSITY OF MASSACHUSETTS AND OTHER CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -SUCH DAMAGE. - -The following license applies to the Morfologik project: - -Copyright (c) 2006 Dawid Weiss -Copyright (c) 2007-2011 Dawid Weiss, Marcin Miłkowski -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - * Neither the name of Morfologik nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ---- - -The dictionary comes from Morfologik project. Morfologik uses data from -Polish ispell/myspell dictionary hosted at http://www.sjp.pl/slownik/en/ and -is licenced on the terms of (inter alia) LGPL and Creative Commons -ShareAlike. The part-of-speech tags were added in Morfologik project and -are not found in the data from sjp.pl. The tagset is similar to IPI PAN -tagset. - ---- - -The following license applies to the Morfeusz project, -used by org.apache.lucene.analysis.morfologik. - -BSD-licensed dictionary of Polish (SGJP) -http://sgjp.pl/morfeusz/ - -Copyright © 2011 Zygmunt Saloni, Włodzimierz Gruszczyński, - Marcin Woliński, Robert Wołosz - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the - distribution. - -THIS SOFTWARE IS PROVIDED BY COPYRIGHT HOLDERS “AS IS” AND ANY EXPRESS -OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN -IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - diff --git a/jena-fuseki1/dist/NOTICE b/jena-fuseki1/dist/NOTICE deleted file mode 100644 index c59250f1db2..00000000000 --- a/jena-fuseki1/dist/NOTICE +++ /dev/null @@ -1,216 +0,0 @@ -Apache Jena - module Fuseki -Copyright 2011-2018 The Apache Software Foundation - -This product includes software developed at -The Apache Software Foundation (http://www.apache.org/). - -Portions of this software were originally based on the following: - - Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Hewlett-Packard Development Company, LP - - Copyright 2010, 2011 Epimorphics Ltd. - - Copyright 2010, 2011 Talis Systems Ltd. -These have been licensed to the Apache Software Foundation under a software grant. - -- - - - - - - - - - - - - - - - - - - - - - - - -slf4j: - Copyright (c) 2004-2011 QOS.ch - All rights reserved. - -- - - - - - - - - - - - - - - - - - - - - - - - -(c) Copyright 2003, Plugged In Software -This product includes software developed by -PluggedIn Software under a BSD license. - -- - - - - - - - - - - - - - - - - - - - - - - - - Jetty Web Container - Copyright 1995-2012 Mort Bay Consulting Pty Ltd. - -under the Apache 2.0 License. - -The Jetty Web Container includes: - -UnixCrypt.java -Copyright 1996 Aki Yoshida, -modified April 2001 by Iris Van den Broeke, Daniel Deville. - -- - - - - - - - - - - - - - - - - - - - - - - - -From Apache HttpComponents Client: - -This project contains annotations derived from JCIP-ANNOTATIONS -Copyright (c) 2005 Brian Goetz and Tim Peierls. See http://www.jcip.net - -- - - - - - - - - - - - - - - - - - - - - - - - - Apache Xerces Java - Copyright 1999-2013 The Apache Software Foundation - - This product includes software developed at - The Apache Software Foundation (http://www.apache.org/). - - Portions of this software were originally based on the following: - - software copyright (c) 1999, IBM Corporation., http://www.ibm.com. - - software copyright (c) 1999, Sun Microsystems., http://www.sun.com. - - voluntary contributions made by Paul Eng on behalf of the - Apache Software Foundation that were originally developed at iClick, Inc., - software copyright (c) 1999. - -- - - - - - - - - - - - - - - - - - - - - - - - -From Apache Lucene: - -ICU4J, (under analysis/icu) is licensed under an MIT styles license -and Copyright (c) 1995-2008 International Business Machines Corporation and others - -Some data files (under analysis/icu/src/data) are derived from Unicode data such -as the Unicode Character Database. See http://unicode.org/copyright.html for more -details. - -Brics Automaton (under core/src/java/org/apache/lucene/util/automaton) is -BSD-licensed, created by Anders Møller. See http://www.brics.dk/automaton/ - -The levenshtein automata tables (under core/src/java/org/apache/lucene/util/automaton) were -automatically generated with the moman/finenight FSA library, created by -Jean-Philippe Barrette-LaPierre. This library is available under an MIT license, -see http://sites.google.com/site/rrettesite/moman and -http://bitbucket.org/jpbarrette/moman/overview/ - -This product includes code (JaspellTernarySearchTrie) from Java Spelling -Checking Package (jaspell): http://jaspell.sourceforge.net/ -License: The BSD License (http://www.opensource.org/licenses/bsd-license.php) - -The snowball stemmers in - analysis/common/src/java/net/sf/snowball -were developed by Martin Porter and Richard Boulton. -The snowball stopword lists in - analysis/common/src/resources/org/apache/lucene/analysis/snowball -were developed by Martin Porter and Richard Boulton. -The full snowball package is available from - http://snowball.tartarus.org/ - -The KStem stemmer in - analysis/common/src/org/apache/lucene/analysis/en -was developed by Bob Krovetz and Sergio Guzman-Lara (CIIR-UMass Amherst) -under the BSD-license. - -The Arabic,Persian,Romanian,Bulgarian, and Hindi analyzers (common) come with a default -stopword list that is BSD-licensed created by Jacques Savoy. -See http://members.unine.ch/jacques.savoy/clef/index.html. - -The German,Spanish,Finnish,French,Hungarian,Italian,Portuguese,Russian and Swedish light stemmers -(common) are based on BSD-licensed reference implementations created by Jacques Savoy and -Ljiljana Dolamic. - -The Stempel analyzer (stempel) includes BSD-licensed software developed -by the Egothor project http://egothor.sf.net/, created by Leo Galambos, Martin Kvapil, -and Edmond Nolan. - -The Polish analyzer (stempel) comes with a default -stopword list that is BSD-licensed created by the Carrot2 project. The file resides -in stempel/src/resources/org/apache/lucene/analysis/pl/stopwords.txt. -See http://project.carrot2.org/license.html. - -The SmartChineseAnalyzer source code (smartcn) was -provided by Xiaoping Gao and copyright 2009 by www.imdict.net. - -WordBreakTestUnicode_*.java (under modules/analysis/common/src/test/) -is derived from Unicode data such as the Unicode Character Database. -See http://unicode.org/copyright.html for more details. - -The Morfologik analyzer (morfologik) includes BSD-licensed software -developed by Dawid Weiss and Marcin Miłkowski (http://morfologik.blogspot.com/). - -Morfologik uses data from Polish ispell/myspell dictionary -(http://www.sjp.pl/slownik/en/) licenced on the terms of (inter alia) -LGPL and Creative Commons ShareAlike. - -Morfologic includes data from BSD-licensed dictionary of Polish (SGJP) -(http://sgjp.pl/morfeusz/) - -Servlet-api.jar and javax.servlet-*.jar are under the CDDL license, the original -source code for this can be found at http://www.eclipse.org/jetty/downloads.php - -=========================================================================== -Kuromoji Japanese Morphological Analyzer - Apache Lucene Integration -=========================================================================== - -This software includes a binary and/or source version of data from - - mecab-ipadic-2.7.0-20070801 - -which can be obtained from - - http://atilika.com/releases/mecab-ipadic/mecab-ipadic-2.7.0-20070801.tar.gz - -or - - http://jaist.dl.sourceforge.net/project/mecab/mecab-ipadic/2.7.0-20070801/mecab-ipadic-2.7.0-20070801.tar.gz - -=========================================================================== -mecab-ipadic-2.7.0-20070801 Notice -=========================================================================== - -Nara Institute of Science and Technology (NAIST), -the copyright holders, disclaims all warranties with regard to this -software, including all implied warranties of merchantability and -fitness, in no event shall NAIST be liable for -any special, indirect or consequential damages or any damages -whatsoever resulting from loss of use, data or profits, whether in an -action of contract, negligence or other tortuous action, arising out -of or in connection with the use or performance of this software. - -A large portion of the dictionary entries -originate from ICOT Free Software. The following conditions for ICOT -Free Software applies to the current dictionary as well. - -Each User may also freely distribute the Program, whether in its -original form or modified, to any third party or parties, PROVIDED -that the provisions of Section 3 ("NO WARRANTY") will ALWAYS appear -on, or be attached to, the Program, which is distributed substantially -in the same form as set out herein and that such intended -distribution, if actually made, will neither violate or otherwise -contravene any of the laws and regulations of the countries having -jurisdiction over the User or the intended distribution itself. - -NO WARRANTY - -The program was produced on an experimental basis in the course of the -research and development conducted during the project and is provided -to users as so produced on an experimental basis. Accordingly, the -program is provided without any warranty whatsoever, whether express, -implied, statutory or otherwise. The term "warranty" used herein -includes, but is not limited to, any warranty of the quality, -performance, merchantability and fitness for a particular purpose of -the program and the nonexistence of any infringement or violation of -any right of any third party. - -Each user of the program will agree and understand, and be deemed to -have agreed and understood, that there is no warranty whatsoever for -the program and, accordingly, the entire risk arising from or -otherwise connected with the program is assumed by the user. - -Therefore, neither ICOT, the copyright holder, or any other -organization that participated in or was otherwise related to the -development of the program and their respective officials, directors, -officers and other employees shall be held liable for any and all -damages, including, without limitation, general, special, incidental -and consequential damages, arising out of or otherwise in connection -with the use or inability to use the program or any product, material -or result produced or otherwise obtained by using the program, -regardless of whether they have been advised of, or otherwise had -knowledge of, the possibility of such damages at any time during the -project or thereafter. Each user will be deemed to have agreed to the -foregoing by his or her commencement of use of the program. The term -"use" as used herein includes, but is not limited to, the use, -modification, copying and distribution of the program and the -production of secondary products from the program. - -In the case where the program, whether in its original form or -modified, was distributed or delivered to or received by a user from -any person, organization or entity other than ICOT, unless it makes or -grants independently of ICOT any specific warranty to the user in -writing, such person, organization or entity, will also be exempted -from and not be held liable to the user for any such damages as noted -above as far as the program is concerned. diff --git a/jena-fuseki1/dist/README b/jena-fuseki1/dist/README deleted file mode 100644 index daa410a7853..00000000000 --- a/jena-fuseki1/dist/README +++ /dev/null @@ -1,48 +0,0 @@ -Apache Jena Fuseki1 -=================== - -Apache Jena Fuseki1 is deprecated in favor of Apache Jena Fuseki2 - -Documentation on Fuseki1: - http://jena.apache.org/documentation/serving_data/ - -Documentation on Fuseki2: - http://jena.apache.org/documentation/fuseki2/ - - -Cryptographic Software Notice ------------------------------ - -This distribution includes cryptographic software. The country in which -you currently reside may have restrictions on the import, possession, -use, and/or re-export to another country, of encryption software. BEFORE -using any encryption software, please check your country's laws, -regulations and policies concerning the import, possession, or use, and -re-export of encryption software, to see if this is permitted. -See for more information. - -The U.S. Government Department of Commerce, Bureau of Industry and -Security (BIS), has classified this software as Export Commodity -Control Number (ECCN) 5D002.C.1, which includes information security -software using or performing cryptographic functions with asymmetric -algorithms. The form and manner of this Apache Software Foundation -distribution makes it eligible for export under the License Exception -ENC Technology Software Unrestricted (TSU) exception (see the BIS -Export Administration Regulations, Section 740.13) for both object -code and source code. - -The following provides more details on the included software that -may be subject to export controls on cryptographic software: - - Apache Jena Fuseki1 (distribution) includes - Apache HttpComponents Client - Apache HttpComponents Core - which interfaces with the Java Secure Socket Extension (JSSE) API - and also - Eclipse Jetty - to provide - - - HTTPS support - - Apache Jena Fuseki1 (distribution) does not include any - implementation of JSSE. diff --git a/jena-fuseki1/pom.xml b/jena-fuseki1/pom.xml index 0285de0bc71..72457633fb2 100644 --- a/jena-fuseki1/pom.xml +++ b/jena-fuseki1/pom.xml @@ -47,11 +47,6 @@ ${project.artifactId}-${project.version} ${this.root}-server - - - 8.1.22.v20160922 1.7 @@ -322,39 +317,6 @@ - - maven-assembly-plugin - - - - - - create-zip-assembly - package - single - - posix - - assembly-dist.xml - - - - - - org.apache.maven.plugins maven-resources-plugin diff --git a/jena-fuseki1/s-delete b/jena-fuseki1/s-delete deleted file mode 100755 index 4f6590dc972..00000000000 --- a/jena-fuseki1/s-delete +++ /dev/null @@ -1,713 +0,0 @@ -#!/usr/bin/env ruby -# -*- coding: utf-8 -*- - -# 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. - -# SPARQL HTTP Update, client. - -require 'optparse' -require 'net/http' -require 'uri' -require 'cgi' -require 'pp' -require 'ostruct' - -# ToDo -# Allow a choice of media type for GET -# --accept "content-type" (and abbreviations) -# --header "Add:this" -# --user, --password -# Basic authentication: request.basic_auth("username", "password") -# Follow redirects => 301: puts response["location"] # All headers are lowercase? - -SOH_NAME="SOH" -SOH_VERSION="0.0.0" - -$proxy = ENV['http_proxy'] ? URI.parse(ENV['http_proxy']) : OpenStruct.new - -# What about direct naming? - -# Names -$mtTurtle = 'text/turtle;charset=utf-8' -$mtRDF = 'application/rdf+xml' -$mtText = 'text/plain' -$mtNTriples = 'application/n-triples' -$mtNQuads = 'application/n-quads' -$mtJSONLD = 'application/ld+json' -$mtTriG = 'application/trig' -$mtSparqlResultsX = 'application/sparql-results+xml' -$mtSparqlResultsJ = 'application/sparql-results+json' -$mtAppJSON = 'application/json' -$mtAppXML = 'application/xml' -$mtSparqlResultsTSV = 'application/sparql-results+tsv' -$mtSparqlResultsCSV = 'application/sparql-results+csv' -$mtSparqlUpdate = 'application/sparql-update' -$mtWWWForm = 'application/x-www-form-urlencoded' -$mtSparqlQuery = "application/sparql-query" ; - -# Global media type table. -$fileMediaTypes = {} -$fileMediaTypes['ttl'] = $mtTurtle -$fileMediaTypes['n3'] = 'text/n3; charset=utf-8' -$fileMediaTypes['nt'] = $mtText -$fileMediaTypes['rdf'] = $mtRDF -$fileMediaTypes['owl'] = $mtRDF -$fileMediaTypes['nq'] = $mtNQuads -$fileMediaTypes['trig'] = $mtTriG -$fileMediaTypes['json-ld'] = $mtJSONLD -$fileMediaTypes['jsonld'] = $mtJSONLD - -# Global charset : no entry means "don't set" -$charsetUTF8 = 'utf-8' -$charset = {} -$charset[$mtTurtle] = 'utf-8' -$charset[$mtText] = 'ascii' -$charset[$mtTriG] = 'utf-8' -$charset[$mtNQuads] = 'utf-8' - -# Headers - -$hContentType = 'Content-Type' -# $hContentEncoding = 'Content-Encoding' -$hContentLength = 'Content-Length' -# $hContentLocation = 'Content-Location' -# $hContentRange = 'Content-Range' - -$hAccept = 'Accept' -$hAcceptCharset = 'Accept-Charset' -$hAcceptEncoding = 'Accept-Encoding' -$hAcceptRanges = 'Accept-Ranges' - -$headers = { "User-Agent" => "#{SOH_NAME}/Fuseki #{SOH_VERSION}"} -$print_http = false - -# Default for GET -# At least allow anything (and hope!) -$accept_rdf="#{$mtTurtle} , #{$mtNTriples};q=0.9 , #{$mtRDF};q=0.8 , #{$mtJSONLD};q=0.5" -# Datasets -$accept_ds="#{$mtTrig} , #{$mtNQuads};q=0.9 , #{$mtJSONLD};q=0.5" -# For SPARQL query -$accept_results="#{$mtSparqlResultsJ} , #{$mtSparqlResultsX};q=0.9 , #{$accept_rdf}" - -# Accept any in case of trouble. -$accept_rdf="#{$accept_rdf} , */*;q=0.1" -$accept_results="#{$accept_results} , */*;q=0.1" - -# The media type usually forces the charset. -$accept_charset=nil - -## Who we are. -## Two styles: -## s-query ..... -## soh query ..... - -$cmd = File.basename($0) -if $cmd == 'soh' -then - $cmd = (ARGV.size == 0) ? 'soh' : ARGV.shift -end - -if ! $cmd.start_with?('s-') && $cmd != 'soh' - $cmd = 's-'+$cmd -end - -## -------- - -def GET(dataset, graph) - print "GET #{dataset} #{graph}\n" if $verbose - requestURI = target(dataset, graph) - headers = {} - headers.merge!($headers) - headers[$hAccept] = $accept_rdf - headers[$hAcceptCharset] = $accept_charset unless $accept_charset.nil? - get_worker(requestURI, headers) -end - -def get_worker(requestURI, headers) - uri = URI.parse(requestURI) - request = Net::HTTP::Get.new(uri.request_uri) - request.initialize_http_header(headers) - print_http_request(uri, request) - response_print_body(uri, request) -end - -def HEAD(dataset, graph) - print "HEAD #{dataset} #{graph}\n" if $verbose - requestURI = target(dataset, graph) - headers = {} - headers.merge!($headers) - headers[$hAccept] = $accept_rdf - headers[$hAcceptCharset] = $accept_charset unless $accept_charset.nil? - uri = URI.parse(requestURI) - request = Net::HTTP::Head.new(uri.request_uri) - request.initialize_http_header(headers) - print_http_request(uri, request) - response_no_body(uri, request) -end - -def PUT(dataset, graph, file) - print "PUT #{dataset} #{graph} #{file}\n" if $verbose - send_body(dataset, graph, file, Net::HTTP::Put) -end - -def POST(dataset, graph, file) - print "POST #{dataset} #{graph} #{file}\n" if $verbose - send_body(dataset, graph, file, Net::HTTP::Post) -end - -def DELETE(dataset, graph) - print "DELETE #{dataset} #{graph}\n" if $verbose - requestURI = target(dataset, graph) - uri = URI.parse(requestURI) - request = Net::HTTP::Delete.new(uri.request_uri) - headers = {} - headers.merge!($headers) - request.initialize_http_header(headers) - print_http_request(uri, request) - response_no_body(uri, request) -end - -def uri_escape(string) - CGI.escape(string) -end - -def target(dataset, graph) - return dataset+"?default" if graph == "default" - return dataset+"?graph="+uri_escape(graph) -end - -def send_body(dataset, graph, file, method) - mt = content_type(file) - headers = {} - headers.merge!($headers) - headers[$hContentType] = mt - headers[$hContentLength] = File.size(file).to_s - ## p headers - - requestURI = target(dataset, graph) - uri = URI.parse(requestURI) - - request = method.new(uri.request_uri) - request.initialize_http_header(headers) - print_http_request(uri, request) - request.body_stream = File.open(file) - response_no_body(uri, request) -end - -def response_no_body(uri, request) - http = Net::HTTP::Proxy($proxy.host,$proxy.port).new(uri.host, uri.port) - http.read_timeout = nil - # check we can connect. - begin http.start - rescue Exception => e - # puts e.message - #puts e.backtrace.inspect - warn_exit "Failed to connect: #{uri.host}:#{uri.port}: #{e.message}", 3 - end - response = http.request(request) - print_http_response(response) - case response - when Net::HTTPSuccess, Net::HTTPRedirection - # OK - when Net::HTTPNotFound - warn_exit "404 Not found: #{uri}", 9 - #print response.body - else - warn_exit "#{response.code} #{response.message} #{uri}", 9 - # Unreachable - response.error! - end - # NO BODY IN RESPONSE -end - -def response_print_body(uri, request) - http = Net::HTTP::Proxy($proxy.host,$proxy.port).new(uri.host, uri.port) - http.read_timeout = nil - # check we can connect. - begin http.start - rescue => e - #puts e.backtrace.inspect - #print e.class - warn_exit "Failed to connect: #{uri.host}:#{uri.port}: #{e.message}", 3 - end - - # Add a blank line if headers were output. - print "\n" if $http_print ; - - begin - response = http.request(request) { |res| - print_http_response(res) - #puts res.code - res.read_body do |segment| - print segment - end - } - case response - when Net::HTTPSuccess, Net::HTTPRedirection - # OK - when Net::HTTPNotFound - warn_exit "404 Not found: #{uri}", 9 - #print response.body - else - warn_exit "#{response.code}: #{uri}", 9 - # Unreachable - response.error! - end - rescue EOFError => e - warn_exit "IO Error: "+e.message, 3 - end -end - -def print_http_request(uri, request) - return unless $print_http - #print "Request\n" - print request.method," ",uri, "\n" - print_headers(" ",request) -end - -def print_http_response(response) - return unless $print_http - #print "Response\n" - print response.code, " ", response.message, "\n" - print_headers(" ",response) -end - -def print_headers(marker, headers) - headers.each do |k,v| - k = k.split('-').map{|w| w.capitalize}.join('-')+':' - printf "%s%-20s %s\n",marker,k,v - end -end - -def content_type(file) - file =~ /\.([^.]*)$/ - ext = $1 - mt = $fileMediaTypes[ext] - cs = $charset[mt] - mt = mt+';charset='+cs if ! cs.nil? - return mt -end - -def charset(content_type) - return $charset[content_type] -end - -def warn_exit(msg, rc) - warn msg - exit rc ; -end - -def parseURI(uri_string) - begin - return URI.parse(uri_string).to_s - rescue URI::InvalidURIError => err - warn_exit "Bad URI: <#{uri_string}>", 2 - end -end - -## ---- Command - -def cmd_soh(command=nil) - ## Command line - options = {} - optparse = OptionParser.new do |opts| - # Set a banner, displayed at the top - # of the help screen. - case $cmd - when "s-http", "sparql-http", "soh" - banner="$cmd [get|post|put|delete] datasetURI graph [file]" - when "s-get", "s-head", "s-delete" - banner="$cmd datasetURI graph" - end - - opts.banner = $banner - # Define the options, and what they do - - options[:verbose] = false - opts.on( '-v', '--verbose', 'Verbose' ) do - options[:verbose] = true - end - - options[:version] = false - opts.on( '--version', 'Print version and exit' ) do - print "#{SOH_NAME} #{SOH_VERSION}\n" - exit - end - - # This displays the help screen, all programs are - # assumed to have this option. - opts.on( '-h', '--help', 'Display this screen and exit' ) do - puts opts - exit - end - end - - begin optparse.parse! - rescue OptionParser::InvalidArgument => e - warn e - exit - end - - $verbose = options[:verbose] - $print_http = $verbose - - if command.nil? - if ARGV.size == 0 - warn "No command given: expected one of 'get', 'put', 'post', 'delete', 'query' or 'update'" - exit 1 - end - cmdPrint=ARGV.shift - command=cmdPrint.upcase - else - cmdPrint=command - end - - case command - when "HEAD", "GET", "DELETE" - requiredFile=false - when "PUT", "POST" - requiredFile=true - when "QUERY" - cmd_sparql_query - when "UPDATE" - cmd_sparql_update - else - warn_exit "Unknown command: #{command}", 2 - end - - if requiredFile - then - if ARGV.size != 3 - warn_exit "Required: dataset URI, graph URI (or 'default') and file", 1 - end - else - if ARGV.size != 2 - warn_exit "Required: dataset URI and graph URI (or 'default')", 1 - end - end - - dataset=parseURI(ARGV.shift) - # Relative URI? - graph=parseURI(ARGV.shift) - file="" - if requiredFile - then - file = ARGV.shift if requiredFile - if ! File.exist?(file) - warn_exit "No such file: "+file, 3 - end - if File.directory?(file) - warn_exit "File is a directory: "+file, 3 - end - end - - case command - when "GET" - GET(dataset, graph) - when "HEAD" - HEAD(dataset, graph) - when "PUT" - PUT(dataset, graph, file) - when "DELETE" - DELETE(dataset, graph) - when "POST" - POST(dataset, graph, file) - else - warn_exit "Internal error: Unknown command: #{cmd}", 2 - end - exit 0 -end - -## -------- -def string_or_file(arg) - return arg if ! arg.match(/^@/) - a=(arg[1..-1]) - open(a, 'rb'){|f| f.read} -end - -## -------- SPARQL Query - -## Choose method -def SPARQL_query(service, query, query_file, forcePOST=false, args2={}) - if ! query_file.nil? - query = open(query_file, 'rb'){|f| f.read} - end - if forcePOST || query.length >= 2*1024 - SPARQL_query_POST(service, query, args2) - else - SPARQL_query_GET(service, query, args2) - end -end - -## By GET - -def SPARQL_query_GET(service, query, args2) - args = { "query" => query } - args.merge!(args2) - qs=args.collect { |k,v| "#{k}=#{uri_escape(v)}" }.join('&') - action="#{service}?#{qs}" - headers={} - headers.merge!($headers) - headers[$hAccept]=$accept_results - get_worker(action, headers) -end - -## By POST - -def SPARQL_query_POST(service, query, args2) - # DRY - body/no body for each of request and response. - post_params={ "query" => query } - post_params.merge!(args2) - uri = URI.parse(service) - headers={} - headers.merge!($headers) - headers[$hAccept]=$accept_results - execute_post_form_body(uri, headers, post_params) -end - -def execute_post_form_body(uri, headers, post_params) - request = Net::HTTP::Post.new(uri.request_uri) - qs=post_params.collect { |k,v| "#{k}=#{uri_escape(v)}" }.join('&') - headers[$hContentType] = $mtWWWForm - headers[$hContentLength] = qs.length.to_s - request.initialize_http_header(headers) - request.body = qs - print_http_request(uri, request) - response_print_body(uri, request) -end - -# Usage: -v --help --file= --query= -def cmd_sparql_query - options={} - optparse = OptionParser.new do |opts| - opts.banner = "Usage: #{$cmd} [--query QUERY] [--service URI] [--post] 'query' | @file" - opts.on('--service=URI', '--server=URI', 'SPARQL endpoint') do |uri| - options[:service]=uri - end - opts.on('--query=FILE','--file=FILE', 'Take query from a file') do |file| - options[:file]=file - end - opts.on('--output=TYPE', [:json,:xml,:text,:csv,:tsv], - 'Set the output argument') do |type| - options[:output]=type - end - opts.on('--accept=TYPE', [:json,:xml,:text,:csv,:tsv], - 'Set the accept header type') do |type| - options[:accept]=type - end - options[:verbose] = false - opts.on( '--post', 'Force use of POST' ) do - options[:post] = true - end - opts.on( '-v', '--verbose', 'Verbose' ) do - options[:verbose] = true - end - opts.on( '--version', 'Print version and exit' ) do - print "#{SOH_NAME} #{SOH_VERSION}\n" - exit - end - opts.on( '-h', '--help', 'Display this screen and exit' ) do - puts opts - exit - end - end - - begin optparse.parse! - rescue OptionParser::InvalidArgument, OptionParser::InvalidOption => e - warn e - exit 1 - end - - $verbose = options[:verbose] - $print_http = $verbose - usePOST = options[:post] - - service = options[:service] - warn_exit 'No service specified. Required --service=URI',1 if service.nil? - - # Query - query=nil - query_file=options[:file] - if query_file.nil? && ARGV.size == 0 - then - warn_exit 'No query specified.',1 - end - if query_file.nil? - query = ARGV.shift - if query.match(/^@/) - query_file = query[1..-1] - query = nil - end - end - - # --output ==> output= (non-standard) - args={} - case options[:output] - when nil - when "json","xml","text","csv","tsv" - args['output'] = options[:output] - when :json,:xml,:text,:csv,:tsv - args['output'] = options[:output].to_s - else - warn_exit "Unrecognized output type: "+options[:output],2 - end - - # --accept - # options[:accept] - - print "SPARQL #{service}\n" if $verbose - #args={"output"=>"text"} - SPARQL_query(service, query, query_file, usePOST, args) - exit(0) -end - -## -------- SPARQL Update - -# Update sent as a WWW form. -def SPARQL_update_by_form(service, update, args2={}) - args = {} - args.merge!(args2) - headers={} - headers.merge!($headers) - # args? encode? - body="update="+uri_escape(update) - headers[$hContentType] = $mtWWWForm - headers[$hContentLength] = body.length.to_s - uri = URI.parse(service) - execute_post_form(uri, headers, body) -end - -# DRY - query form. -def execute_post_form(uri, headers, body) - request = Net::HTTP::Post.new(uri.request_uri) - request.initialize_http_header(headers) - request.body = body - print_http_request(uri, request) - response_no_body(uri, request) -end - -def SPARQL_update(service, update, args2={}) - args = {} - args.merge!(args2) - headers={} - headers.merge!($headers) - headers[$hContentType] = $mtSparqlUpdate - uri = URI.parse(service) - request = Net::HTTP::Post.new(uri.request_uri) - request.initialize_http_header(headers) - request.body = update - print_http_request(uri, request) - response_no_body(uri, request) -end - -def cmd_sparql_update(by_raw_post=true) - # Share with cmd_sparql_query - options={} - optparse = OptionParser.new do |opts| - opts.banner = "Usage: #{$cmd} [--file REQUEST] [--service URI] 'request' | @file" - opts.on('--service=URI', '--server=URI', 'SPARQL endpoint') do |uri| - options[:service]=uri - end - opts.on('--update=FILE', '--file=FILE', 'Take update from a file') do |file| - options[:file]=file - end - options[:verbose] = false - opts.on( '-v', '--verbose', 'Verbose' ) do - options[:verbose] = true - end - opts.on( '--version', 'Print version and exit' ) do - print "#{SOH_NAME} #{SOH_VERSION}\n" - exit - end - opts.on( '-h', '--help', 'Display this screen and exit' ) do - puts opts - exit - end - end - - begin optparse.parse! - rescue OptionParser::InvalidArgument => e - warn e - exit - end - - $verbose = options[:verbose] - $print_http = $verbose - - service = options[:service] - warn_exit 'No service specified. Required --service=URI',1 if service.nil? - - update=nil - update_file=options[:file] - - if update_file.nil? && ARGV.size == 0 - then - warn_exit 'No update specified.',1 - end - if update_file.nil? - update = ARGV.shift - if update.match(/^@/) - update_file = update[1..-1] - update = nil - end - end - - print "SPARQL-Update #{service}\n" if $verbose - args={} - - # Reads in the file :-( - if update.nil? - then - update = open(update_file, 'rb'){|f| f.read} - else - update = string_or_file(update) - end - - if by_raw_post - SPARQL_update(service, update, args) - else - SPARQL_update_by_form(service, update, args) - end - exit(0) -end - -## ------- - -case $cmd -when "s-http", "sparql-http", "soh" - $banner="#{$cmd} [get|post|put|delete] datasetURI graph [file]" - cmd_soh -when "s-get", "s-head", "s-put", "s-delete", "s-post" - - case $cmd - when "s-get", "s-head", "s-delete" - $banner="#{$cmd} datasetURI graph" - when "s-put", "s-post" - $banner="#{$cmd} datasetURI graph file" - end - cmd2 = $cmd.sub(/^s-/, '').upcase - cmd_soh cmd2 - -when "s-query", "sparql-query" - cmd_sparql_query -when "s-update", "sparql-update" - cmd_sparql_update true -when "s-update-form", "sparql-update-form" - cmd_sparql_update false -else - warn_exit "Unknown: "+$cmd, 1 -end diff --git a/jena-fuseki1/s-get b/jena-fuseki1/s-get deleted file mode 100755 index 4f6590dc972..00000000000 --- a/jena-fuseki1/s-get +++ /dev/null @@ -1,713 +0,0 @@ -#!/usr/bin/env ruby -# -*- coding: utf-8 -*- - -# 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. - -# SPARQL HTTP Update, client. - -require 'optparse' -require 'net/http' -require 'uri' -require 'cgi' -require 'pp' -require 'ostruct' - -# ToDo -# Allow a choice of media type for GET -# --accept "content-type" (and abbreviations) -# --header "Add:this" -# --user, --password -# Basic authentication: request.basic_auth("username", "password") -# Follow redirects => 301: puts response["location"] # All headers are lowercase? - -SOH_NAME="SOH" -SOH_VERSION="0.0.0" - -$proxy = ENV['http_proxy'] ? URI.parse(ENV['http_proxy']) : OpenStruct.new - -# What about direct naming? - -# Names -$mtTurtle = 'text/turtle;charset=utf-8' -$mtRDF = 'application/rdf+xml' -$mtText = 'text/plain' -$mtNTriples = 'application/n-triples' -$mtNQuads = 'application/n-quads' -$mtJSONLD = 'application/ld+json' -$mtTriG = 'application/trig' -$mtSparqlResultsX = 'application/sparql-results+xml' -$mtSparqlResultsJ = 'application/sparql-results+json' -$mtAppJSON = 'application/json' -$mtAppXML = 'application/xml' -$mtSparqlResultsTSV = 'application/sparql-results+tsv' -$mtSparqlResultsCSV = 'application/sparql-results+csv' -$mtSparqlUpdate = 'application/sparql-update' -$mtWWWForm = 'application/x-www-form-urlencoded' -$mtSparqlQuery = "application/sparql-query" ; - -# Global media type table. -$fileMediaTypes = {} -$fileMediaTypes['ttl'] = $mtTurtle -$fileMediaTypes['n3'] = 'text/n3; charset=utf-8' -$fileMediaTypes['nt'] = $mtText -$fileMediaTypes['rdf'] = $mtRDF -$fileMediaTypes['owl'] = $mtRDF -$fileMediaTypes['nq'] = $mtNQuads -$fileMediaTypes['trig'] = $mtTriG -$fileMediaTypes['json-ld'] = $mtJSONLD -$fileMediaTypes['jsonld'] = $mtJSONLD - -# Global charset : no entry means "don't set" -$charsetUTF8 = 'utf-8' -$charset = {} -$charset[$mtTurtle] = 'utf-8' -$charset[$mtText] = 'ascii' -$charset[$mtTriG] = 'utf-8' -$charset[$mtNQuads] = 'utf-8' - -# Headers - -$hContentType = 'Content-Type' -# $hContentEncoding = 'Content-Encoding' -$hContentLength = 'Content-Length' -# $hContentLocation = 'Content-Location' -# $hContentRange = 'Content-Range' - -$hAccept = 'Accept' -$hAcceptCharset = 'Accept-Charset' -$hAcceptEncoding = 'Accept-Encoding' -$hAcceptRanges = 'Accept-Ranges' - -$headers = { "User-Agent" => "#{SOH_NAME}/Fuseki #{SOH_VERSION}"} -$print_http = false - -# Default for GET -# At least allow anything (and hope!) -$accept_rdf="#{$mtTurtle} , #{$mtNTriples};q=0.9 , #{$mtRDF};q=0.8 , #{$mtJSONLD};q=0.5" -# Datasets -$accept_ds="#{$mtTrig} , #{$mtNQuads};q=0.9 , #{$mtJSONLD};q=0.5" -# For SPARQL query -$accept_results="#{$mtSparqlResultsJ} , #{$mtSparqlResultsX};q=0.9 , #{$accept_rdf}" - -# Accept any in case of trouble. -$accept_rdf="#{$accept_rdf} , */*;q=0.1" -$accept_results="#{$accept_results} , */*;q=0.1" - -# The media type usually forces the charset. -$accept_charset=nil - -## Who we are. -## Two styles: -## s-query ..... -## soh query ..... - -$cmd = File.basename($0) -if $cmd == 'soh' -then - $cmd = (ARGV.size == 0) ? 'soh' : ARGV.shift -end - -if ! $cmd.start_with?('s-') && $cmd != 'soh' - $cmd = 's-'+$cmd -end - -## -------- - -def GET(dataset, graph) - print "GET #{dataset} #{graph}\n" if $verbose - requestURI = target(dataset, graph) - headers = {} - headers.merge!($headers) - headers[$hAccept] = $accept_rdf - headers[$hAcceptCharset] = $accept_charset unless $accept_charset.nil? - get_worker(requestURI, headers) -end - -def get_worker(requestURI, headers) - uri = URI.parse(requestURI) - request = Net::HTTP::Get.new(uri.request_uri) - request.initialize_http_header(headers) - print_http_request(uri, request) - response_print_body(uri, request) -end - -def HEAD(dataset, graph) - print "HEAD #{dataset} #{graph}\n" if $verbose - requestURI = target(dataset, graph) - headers = {} - headers.merge!($headers) - headers[$hAccept] = $accept_rdf - headers[$hAcceptCharset] = $accept_charset unless $accept_charset.nil? - uri = URI.parse(requestURI) - request = Net::HTTP::Head.new(uri.request_uri) - request.initialize_http_header(headers) - print_http_request(uri, request) - response_no_body(uri, request) -end - -def PUT(dataset, graph, file) - print "PUT #{dataset} #{graph} #{file}\n" if $verbose - send_body(dataset, graph, file, Net::HTTP::Put) -end - -def POST(dataset, graph, file) - print "POST #{dataset} #{graph} #{file}\n" if $verbose - send_body(dataset, graph, file, Net::HTTP::Post) -end - -def DELETE(dataset, graph) - print "DELETE #{dataset} #{graph}\n" if $verbose - requestURI = target(dataset, graph) - uri = URI.parse(requestURI) - request = Net::HTTP::Delete.new(uri.request_uri) - headers = {} - headers.merge!($headers) - request.initialize_http_header(headers) - print_http_request(uri, request) - response_no_body(uri, request) -end - -def uri_escape(string) - CGI.escape(string) -end - -def target(dataset, graph) - return dataset+"?default" if graph == "default" - return dataset+"?graph="+uri_escape(graph) -end - -def send_body(dataset, graph, file, method) - mt = content_type(file) - headers = {} - headers.merge!($headers) - headers[$hContentType] = mt - headers[$hContentLength] = File.size(file).to_s - ## p headers - - requestURI = target(dataset, graph) - uri = URI.parse(requestURI) - - request = method.new(uri.request_uri) - request.initialize_http_header(headers) - print_http_request(uri, request) - request.body_stream = File.open(file) - response_no_body(uri, request) -end - -def response_no_body(uri, request) - http = Net::HTTP::Proxy($proxy.host,$proxy.port).new(uri.host, uri.port) - http.read_timeout = nil - # check we can connect. - begin http.start - rescue Exception => e - # puts e.message - #puts e.backtrace.inspect - warn_exit "Failed to connect: #{uri.host}:#{uri.port}: #{e.message}", 3 - end - response = http.request(request) - print_http_response(response) - case response - when Net::HTTPSuccess, Net::HTTPRedirection - # OK - when Net::HTTPNotFound - warn_exit "404 Not found: #{uri}", 9 - #print response.body - else - warn_exit "#{response.code} #{response.message} #{uri}", 9 - # Unreachable - response.error! - end - # NO BODY IN RESPONSE -end - -def response_print_body(uri, request) - http = Net::HTTP::Proxy($proxy.host,$proxy.port).new(uri.host, uri.port) - http.read_timeout = nil - # check we can connect. - begin http.start - rescue => e - #puts e.backtrace.inspect - #print e.class - warn_exit "Failed to connect: #{uri.host}:#{uri.port}: #{e.message}", 3 - end - - # Add a blank line if headers were output. - print "\n" if $http_print ; - - begin - response = http.request(request) { |res| - print_http_response(res) - #puts res.code - res.read_body do |segment| - print segment - end - } - case response - when Net::HTTPSuccess, Net::HTTPRedirection - # OK - when Net::HTTPNotFound - warn_exit "404 Not found: #{uri}", 9 - #print response.body - else - warn_exit "#{response.code}: #{uri}", 9 - # Unreachable - response.error! - end - rescue EOFError => e - warn_exit "IO Error: "+e.message, 3 - end -end - -def print_http_request(uri, request) - return unless $print_http - #print "Request\n" - print request.method," ",uri, "\n" - print_headers(" ",request) -end - -def print_http_response(response) - return unless $print_http - #print "Response\n" - print response.code, " ", response.message, "\n" - print_headers(" ",response) -end - -def print_headers(marker, headers) - headers.each do |k,v| - k = k.split('-').map{|w| w.capitalize}.join('-')+':' - printf "%s%-20s %s\n",marker,k,v - end -end - -def content_type(file) - file =~ /\.([^.]*)$/ - ext = $1 - mt = $fileMediaTypes[ext] - cs = $charset[mt] - mt = mt+';charset='+cs if ! cs.nil? - return mt -end - -def charset(content_type) - return $charset[content_type] -end - -def warn_exit(msg, rc) - warn msg - exit rc ; -end - -def parseURI(uri_string) - begin - return URI.parse(uri_string).to_s - rescue URI::InvalidURIError => err - warn_exit "Bad URI: <#{uri_string}>", 2 - end -end - -## ---- Command - -def cmd_soh(command=nil) - ## Command line - options = {} - optparse = OptionParser.new do |opts| - # Set a banner, displayed at the top - # of the help screen. - case $cmd - when "s-http", "sparql-http", "soh" - banner="$cmd [get|post|put|delete] datasetURI graph [file]" - when "s-get", "s-head", "s-delete" - banner="$cmd datasetURI graph" - end - - opts.banner = $banner - # Define the options, and what they do - - options[:verbose] = false - opts.on( '-v', '--verbose', 'Verbose' ) do - options[:verbose] = true - end - - options[:version] = false - opts.on( '--version', 'Print version and exit' ) do - print "#{SOH_NAME} #{SOH_VERSION}\n" - exit - end - - # This displays the help screen, all programs are - # assumed to have this option. - opts.on( '-h', '--help', 'Display this screen and exit' ) do - puts opts - exit - end - end - - begin optparse.parse! - rescue OptionParser::InvalidArgument => e - warn e - exit - end - - $verbose = options[:verbose] - $print_http = $verbose - - if command.nil? - if ARGV.size == 0 - warn "No command given: expected one of 'get', 'put', 'post', 'delete', 'query' or 'update'" - exit 1 - end - cmdPrint=ARGV.shift - command=cmdPrint.upcase - else - cmdPrint=command - end - - case command - when "HEAD", "GET", "DELETE" - requiredFile=false - when "PUT", "POST" - requiredFile=true - when "QUERY" - cmd_sparql_query - when "UPDATE" - cmd_sparql_update - else - warn_exit "Unknown command: #{command}", 2 - end - - if requiredFile - then - if ARGV.size != 3 - warn_exit "Required: dataset URI, graph URI (or 'default') and file", 1 - end - else - if ARGV.size != 2 - warn_exit "Required: dataset URI and graph URI (or 'default')", 1 - end - end - - dataset=parseURI(ARGV.shift) - # Relative URI? - graph=parseURI(ARGV.shift) - file="" - if requiredFile - then - file = ARGV.shift if requiredFile - if ! File.exist?(file) - warn_exit "No such file: "+file, 3 - end - if File.directory?(file) - warn_exit "File is a directory: "+file, 3 - end - end - - case command - when "GET" - GET(dataset, graph) - when "HEAD" - HEAD(dataset, graph) - when "PUT" - PUT(dataset, graph, file) - when "DELETE" - DELETE(dataset, graph) - when "POST" - POST(dataset, graph, file) - else - warn_exit "Internal error: Unknown command: #{cmd}", 2 - end - exit 0 -end - -## -------- -def string_or_file(arg) - return arg if ! arg.match(/^@/) - a=(arg[1..-1]) - open(a, 'rb'){|f| f.read} -end - -## -------- SPARQL Query - -## Choose method -def SPARQL_query(service, query, query_file, forcePOST=false, args2={}) - if ! query_file.nil? - query = open(query_file, 'rb'){|f| f.read} - end - if forcePOST || query.length >= 2*1024 - SPARQL_query_POST(service, query, args2) - else - SPARQL_query_GET(service, query, args2) - end -end - -## By GET - -def SPARQL_query_GET(service, query, args2) - args = { "query" => query } - args.merge!(args2) - qs=args.collect { |k,v| "#{k}=#{uri_escape(v)}" }.join('&') - action="#{service}?#{qs}" - headers={} - headers.merge!($headers) - headers[$hAccept]=$accept_results - get_worker(action, headers) -end - -## By POST - -def SPARQL_query_POST(service, query, args2) - # DRY - body/no body for each of request and response. - post_params={ "query" => query } - post_params.merge!(args2) - uri = URI.parse(service) - headers={} - headers.merge!($headers) - headers[$hAccept]=$accept_results - execute_post_form_body(uri, headers, post_params) -end - -def execute_post_form_body(uri, headers, post_params) - request = Net::HTTP::Post.new(uri.request_uri) - qs=post_params.collect { |k,v| "#{k}=#{uri_escape(v)}" }.join('&') - headers[$hContentType] = $mtWWWForm - headers[$hContentLength] = qs.length.to_s - request.initialize_http_header(headers) - request.body = qs - print_http_request(uri, request) - response_print_body(uri, request) -end - -# Usage: -v --help --file= --query= -def cmd_sparql_query - options={} - optparse = OptionParser.new do |opts| - opts.banner = "Usage: #{$cmd} [--query QUERY] [--service URI] [--post] 'query' | @file" - opts.on('--service=URI', '--server=URI', 'SPARQL endpoint') do |uri| - options[:service]=uri - end - opts.on('--query=FILE','--file=FILE', 'Take query from a file') do |file| - options[:file]=file - end - opts.on('--output=TYPE', [:json,:xml,:text,:csv,:tsv], - 'Set the output argument') do |type| - options[:output]=type - end - opts.on('--accept=TYPE', [:json,:xml,:text,:csv,:tsv], - 'Set the accept header type') do |type| - options[:accept]=type - end - options[:verbose] = false - opts.on( '--post', 'Force use of POST' ) do - options[:post] = true - end - opts.on( '-v', '--verbose', 'Verbose' ) do - options[:verbose] = true - end - opts.on( '--version', 'Print version and exit' ) do - print "#{SOH_NAME} #{SOH_VERSION}\n" - exit - end - opts.on( '-h', '--help', 'Display this screen and exit' ) do - puts opts - exit - end - end - - begin optparse.parse! - rescue OptionParser::InvalidArgument, OptionParser::InvalidOption => e - warn e - exit 1 - end - - $verbose = options[:verbose] - $print_http = $verbose - usePOST = options[:post] - - service = options[:service] - warn_exit 'No service specified. Required --service=URI',1 if service.nil? - - # Query - query=nil - query_file=options[:file] - if query_file.nil? && ARGV.size == 0 - then - warn_exit 'No query specified.',1 - end - if query_file.nil? - query = ARGV.shift - if query.match(/^@/) - query_file = query[1..-1] - query = nil - end - end - - # --output ==> output= (non-standard) - args={} - case options[:output] - when nil - when "json","xml","text","csv","tsv" - args['output'] = options[:output] - when :json,:xml,:text,:csv,:tsv - args['output'] = options[:output].to_s - else - warn_exit "Unrecognized output type: "+options[:output],2 - end - - # --accept - # options[:accept] - - print "SPARQL #{service}\n" if $verbose - #args={"output"=>"text"} - SPARQL_query(service, query, query_file, usePOST, args) - exit(0) -end - -## -------- SPARQL Update - -# Update sent as a WWW form. -def SPARQL_update_by_form(service, update, args2={}) - args = {} - args.merge!(args2) - headers={} - headers.merge!($headers) - # args? encode? - body="update="+uri_escape(update) - headers[$hContentType] = $mtWWWForm - headers[$hContentLength] = body.length.to_s - uri = URI.parse(service) - execute_post_form(uri, headers, body) -end - -# DRY - query form. -def execute_post_form(uri, headers, body) - request = Net::HTTP::Post.new(uri.request_uri) - request.initialize_http_header(headers) - request.body = body - print_http_request(uri, request) - response_no_body(uri, request) -end - -def SPARQL_update(service, update, args2={}) - args = {} - args.merge!(args2) - headers={} - headers.merge!($headers) - headers[$hContentType] = $mtSparqlUpdate - uri = URI.parse(service) - request = Net::HTTP::Post.new(uri.request_uri) - request.initialize_http_header(headers) - request.body = update - print_http_request(uri, request) - response_no_body(uri, request) -end - -def cmd_sparql_update(by_raw_post=true) - # Share with cmd_sparql_query - options={} - optparse = OptionParser.new do |opts| - opts.banner = "Usage: #{$cmd} [--file REQUEST] [--service URI] 'request' | @file" - opts.on('--service=URI', '--server=URI', 'SPARQL endpoint') do |uri| - options[:service]=uri - end - opts.on('--update=FILE', '--file=FILE', 'Take update from a file') do |file| - options[:file]=file - end - options[:verbose] = false - opts.on( '-v', '--verbose', 'Verbose' ) do - options[:verbose] = true - end - opts.on( '--version', 'Print version and exit' ) do - print "#{SOH_NAME} #{SOH_VERSION}\n" - exit - end - opts.on( '-h', '--help', 'Display this screen and exit' ) do - puts opts - exit - end - end - - begin optparse.parse! - rescue OptionParser::InvalidArgument => e - warn e - exit - end - - $verbose = options[:verbose] - $print_http = $verbose - - service = options[:service] - warn_exit 'No service specified. Required --service=URI',1 if service.nil? - - update=nil - update_file=options[:file] - - if update_file.nil? && ARGV.size == 0 - then - warn_exit 'No update specified.',1 - end - if update_file.nil? - update = ARGV.shift - if update.match(/^@/) - update_file = update[1..-1] - update = nil - end - end - - print "SPARQL-Update #{service}\n" if $verbose - args={} - - # Reads in the file :-( - if update.nil? - then - update = open(update_file, 'rb'){|f| f.read} - else - update = string_or_file(update) - end - - if by_raw_post - SPARQL_update(service, update, args) - else - SPARQL_update_by_form(service, update, args) - end - exit(0) -end - -## ------- - -case $cmd -when "s-http", "sparql-http", "soh" - $banner="#{$cmd} [get|post|put|delete] datasetURI graph [file]" - cmd_soh -when "s-get", "s-head", "s-put", "s-delete", "s-post" - - case $cmd - when "s-get", "s-head", "s-delete" - $banner="#{$cmd} datasetURI graph" - when "s-put", "s-post" - $banner="#{$cmd} datasetURI graph file" - end - cmd2 = $cmd.sub(/^s-/, '').upcase - cmd_soh cmd2 - -when "s-query", "sparql-query" - cmd_sparql_query -when "s-update", "sparql-update" - cmd_sparql_update true -when "s-update-form", "sparql-update-form" - cmd_sparql_update false -else - warn_exit "Unknown: "+$cmd, 1 -end diff --git a/jena-fuseki1/s-head b/jena-fuseki1/s-head deleted file mode 100755 index 4f6590dc972..00000000000 --- a/jena-fuseki1/s-head +++ /dev/null @@ -1,713 +0,0 @@ -#!/usr/bin/env ruby -# -*- coding: utf-8 -*- - -# 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. - -# SPARQL HTTP Update, client. - -require 'optparse' -require 'net/http' -require 'uri' -require 'cgi' -require 'pp' -require 'ostruct' - -# ToDo -# Allow a choice of media type for GET -# --accept "content-type" (and abbreviations) -# --header "Add:this" -# --user, --password -# Basic authentication: request.basic_auth("username", "password") -# Follow redirects => 301: puts response["location"] # All headers are lowercase? - -SOH_NAME="SOH" -SOH_VERSION="0.0.0" - -$proxy = ENV['http_proxy'] ? URI.parse(ENV['http_proxy']) : OpenStruct.new - -# What about direct naming? - -# Names -$mtTurtle = 'text/turtle;charset=utf-8' -$mtRDF = 'application/rdf+xml' -$mtText = 'text/plain' -$mtNTriples = 'application/n-triples' -$mtNQuads = 'application/n-quads' -$mtJSONLD = 'application/ld+json' -$mtTriG = 'application/trig' -$mtSparqlResultsX = 'application/sparql-results+xml' -$mtSparqlResultsJ = 'application/sparql-results+json' -$mtAppJSON = 'application/json' -$mtAppXML = 'application/xml' -$mtSparqlResultsTSV = 'application/sparql-results+tsv' -$mtSparqlResultsCSV = 'application/sparql-results+csv' -$mtSparqlUpdate = 'application/sparql-update' -$mtWWWForm = 'application/x-www-form-urlencoded' -$mtSparqlQuery = "application/sparql-query" ; - -# Global media type table. -$fileMediaTypes = {} -$fileMediaTypes['ttl'] = $mtTurtle -$fileMediaTypes['n3'] = 'text/n3; charset=utf-8' -$fileMediaTypes['nt'] = $mtText -$fileMediaTypes['rdf'] = $mtRDF -$fileMediaTypes['owl'] = $mtRDF -$fileMediaTypes['nq'] = $mtNQuads -$fileMediaTypes['trig'] = $mtTriG -$fileMediaTypes['json-ld'] = $mtJSONLD -$fileMediaTypes['jsonld'] = $mtJSONLD - -# Global charset : no entry means "don't set" -$charsetUTF8 = 'utf-8' -$charset = {} -$charset[$mtTurtle] = 'utf-8' -$charset[$mtText] = 'ascii' -$charset[$mtTriG] = 'utf-8' -$charset[$mtNQuads] = 'utf-8' - -# Headers - -$hContentType = 'Content-Type' -# $hContentEncoding = 'Content-Encoding' -$hContentLength = 'Content-Length' -# $hContentLocation = 'Content-Location' -# $hContentRange = 'Content-Range' - -$hAccept = 'Accept' -$hAcceptCharset = 'Accept-Charset' -$hAcceptEncoding = 'Accept-Encoding' -$hAcceptRanges = 'Accept-Ranges' - -$headers = { "User-Agent" => "#{SOH_NAME}/Fuseki #{SOH_VERSION}"} -$print_http = false - -# Default for GET -# At least allow anything (and hope!) -$accept_rdf="#{$mtTurtle} , #{$mtNTriples};q=0.9 , #{$mtRDF};q=0.8 , #{$mtJSONLD};q=0.5" -# Datasets -$accept_ds="#{$mtTrig} , #{$mtNQuads};q=0.9 , #{$mtJSONLD};q=0.5" -# For SPARQL query -$accept_results="#{$mtSparqlResultsJ} , #{$mtSparqlResultsX};q=0.9 , #{$accept_rdf}" - -# Accept any in case of trouble. -$accept_rdf="#{$accept_rdf} , */*;q=0.1" -$accept_results="#{$accept_results} , */*;q=0.1" - -# The media type usually forces the charset. -$accept_charset=nil - -## Who we are. -## Two styles: -## s-query ..... -## soh query ..... - -$cmd = File.basename($0) -if $cmd == 'soh' -then - $cmd = (ARGV.size == 0) ? 'soh' : ARGV.shift -end - -if ! $cmd.start_with?('s-') && $cmd != 'soh' - $cmd = 's-'+$cmd -end - -## -------- - -def GET(dataset, graph) - print "GET #{dataset} #{graph}\n" if $verbose - requestURI = target(dataset, graph) - headers = {} - headers.merge!($headers) - headers[$hAccept] = $accept_rdf - headers[$hAcceptCharset] = $accept_charset unless $accept_charset.nil? - get_worker(requestURI, headers) -end - -def get_worker(requestURI, headers) - uri = URI.parse(requestURI) - request = Net::HTTP::Get.new(uri.request_uri) - request.initialize_http_header(headers) - print_http_request(uri, request) - response_print_body(uri, request) -end - -def HEAD(dataset, graph) - print "HEAD #{dataset} #{graph}\n" if $verbose - requestURI = target(dataset, graph) - headers = {} - headers.merge!($headers) - headers[$hAccept] = $accept_rdf - headers[$hAcceptCharset] = $accept_charset unless $accept_charset.nil? - uri = URI.parse(requestURI) - request = Net::HTTP::Head.new(uri.request_uri) - request.initialize_http_header(headers) - print_http_request(uri, request) - response_no_body(uri, request) -end - -def PUT(dataset, graph, file) - print "PUT #{dataset} #{graph} #{file}\n" if $verbose - send_body(dataset, graph, file, Net::HTTP::Put) -end - -def POST(dataset, graph, file) - print "POST #{dataset} #{graph} #{file}\n" if $verbose - send_body(dataset, graph, file, Net::HTTP::Post) -end - -def DELETE(dataset, graph) - print "DELETE #{dataset} #{graph}\n" if $verbose - requestURI = target(dataset, graph) - uri = URI.parse(requestURI) - request = Net::HTTP::Delete.new(uri.request_uri) - headers = {} - headers.merge!($headers) - request.initialize_http_header(headers) - print_http_request(uri, request) - response_no_body(uri, request) -end - -def uri_escape(string) - CGI.escape(string) -end - -def target(dataset, graph) - return dataset+"?default" if graph == "default" - return dataset+"?graph="+uri_escape(graph) -end - -def send_body(dataset, graph, file, method) - mt = content_type(file) - headers = {} - headers.merge!($headers) - headers[$hContentType] = mt - headers[$hContentLength] = File.size(file).to_s - ## p headers - - requestURI = target(dataset, graph) - uri = URI.parse(requestURI) - - request = method.new(uri.request_uri) - request.initialize_http_header(headers) - print_http_request(uri, request) - request.body_stream = File.open(file) - response_no_body(uri, request) -end - -def response_no_body(uri, request) - http = Net::HTTP::Proxy($proxy.host,$proxy.port).new(uri.host, uri.port) - http.read_timeout = nil - # check we can connect. - begin http.start - rescue Exception => e - # puts e.message - #puts e.backtrace.inspect - warn_exit "Failed to connect: #{uri.host}:#{uri.port}: #{e.message}", 3 - end - response = http.request(request) - print_http_response(response) - case response - when Net::HTTPSuccess, Net::HTTPRedirection - # OK - when Net::HTTPNotFound - warn_exit "404 Not found: #{uri}", 9 - #print response.body - else - warn_exit "#{response.code} #{response.message} #{uri}", 9 - # Unreachable - response.error! - end - # NO BODY IN RESPONSE -end - -def response_print_body(uri, request) - http = Net::HTTP::Proxy($proxy.host,$proxy.port).new(uri.host, uri.port) - http.read_timeout = nil - # check we can connect. - begin http.start - rescue => e - #puts e.backtrace.inspect - #print e.class - warn_exit "Failed to connect: #{uri.host}:#{uri.port}: #{e.message}", 3 - end - - # Add a blank line if headers were output. - print "\n" if $http_print ; - - begin - response = http.request(request) { |res| - print_http_response(res) - #puts res.code - res.read_body do |segment| - print segment - end - } - case response - when Net::HTTPSuccess, Net::HTTPRedirection - # OK - when Net::HTTPNotFound - warn_exit "404 Not found: #{uri}", 9 - #print response.body - else - warn_exit "#{response.code}: #{uri}", 9 - # Unreachable - response.error! - end - rescue EOFError => e - warn_exit "IO Error: "+e.message, 3 - end -end - -def print_http_request(uri, request) - return unless $print_http - #print "Request\n" - print request.method," ",uri, "\n" - print_headers(" ",request) -end - -def print_http_response(response) - return unless $print_http - #print "Response\n" - print response.code, " ", response.message, "\n" - print_headers(" ",response) -end - -def print_headers(marker, headers) - headers.each do |k,v| - k = k.split('-').map{|w| w.capitalize}.join('-')+':' - printf "%s%-20s %s\n",marker,k,v - end -end - -def content_type(file) - file =~ /\.([^.]*)$/ - ext = $1 - mt = $fileMediaTypes[ext] - cs = $charset[mt] - mt = mt+';charset='+cs if ! cs.nil? - return mt -end - -def charset(content_type) - return $charset[content_type] -end - -def warn_exit(msg, rc) - warn msg - exit rc ; -end - -def parseURI(uri_string) - begin - return URI.parse(uri_string).to_s - rescue URI::InvalidURIError => err - warn_exit "Bad URI: <#{uri_string}>", 2 - end -end - -## ---- Command - -def cmd_soh(command=nil) - ## Command line - options = {} - optparse = OptionParser.new do |opts| - # Set a banner, displayed at the top - # of the help screen. - case $cmd - when "s-http", "sparql-http", "soh" - banner="$cmd [get|post|put|delete] datasetURI graph [file]" - when "s-get", "s-head", "s-delete" - banner="$cmd datasetURI graph" - end - - opts.banner = $banner - # Define the options, and what they do - - options[:verbose] = false - opts.on( '-v', '--verbose', 'Verbose' ) do - options[:verbose] = true - end - - options[:version] = false - opts.on( '--version', 'Print version and exit' ) do - print "#{SOH_NAME} #{SOH_VERSION}\n" - exit - end - - # This displays the help screen, all programs are - # assumed to have this option. - opts.on( '-h', '--help', 'Display this screen and exit' ) do - puts opts - exit - end - end - - begin optparse.parse! - rescue OptionParser::InvalidArgument => e - warn e - exit - end - - $verbose = options[:verbose] - $print_http = $verbose - - if command.nil? - if ARGV.size == 0 - warn "No command given: expected one of 'get', 'put', 'post', 'delete', 'query' or 'update'" - exit 1 - end - cmdPrint=ARGV.shift - command=cmdPrint.upcase - else - cmdPrint=command - end - - case command - when "HEAD", "GET", "DELETE" - requiredFile=false - when "PUT", "POST" - requiredFile=true - when "QUERY" - cmd_sparql_query - when "UPDATE" - cmd_sparql_update - else - warn_exit "Unknown command: #{command}", 2 - end - - if requiredFile - then - if ARGV.size != 3 - warn_exit "Required: dataset URI, graph URI (or 'default') and file", 1 - end - else - if ARGV.size != 2 - warn_exit "Required: dataset URI and graph URI (or 'default')", 1 - end - end - - dataset=parseURI(ARGV.shift) - # Relative URI? - graph=parseURI(ARGV.shift) - file="" - if requiredFile - then - file = ARGV.shift if requiredFile - if ! File.exist?(file) - warn_exit "No such file: "+file, 3 - end - if File.directory?(file) - warn_exit "File is a directory: "+file, 3 - end - end - - case command - when "GET" - GET(dataset, graph) - when "HEAD" - HEAD(dataset, graph) - when "PUT" - PUT(dataset, graph, file) - when "DELETE" - DELETE(dataset, graph) - when "POST" - POST(dataset, graph, file) - else - warn_exit "Internal error: Unknown command: #{cmd}", 2 - end - exit 0 -end - -## -------- -def string_or_file(arg) - return arg if ! arg.match(/^@/) - a=(arg[1..-1]) - open(a, 'rb'){|f| f.read} -end - -## -------- SPARQL Query - -## Choose method -def SPARQL_query(service, query, query_file, forcePOST=false, args2={}) - if ! query_file.nil? - query = open(query_file, 'rb'){|f| f.read} - end - if forcePOST || query.length >= 2*1024 - SPARQL_query_POST(service, query, args2) - else - SPARQL_query_GET(service, query, args2) - end -end - -## By GET - -def SPARQL_query_GET(service, query, args2) - args = { "query" => query } - args.merge!(args2) - qs=args.collect { |k,v| "#{k}=#{uri_escape(v)}" }.join('&') - action="#{service}?#{qs}" - headers={} - headers.merge!($headers) - headers[$hAccept]=$accept_results - get_worker(action, headers) -end - -## By POST - -def SPARQL_query_POST(service, query, args2) - # DRY - body/no body for each of request and response. - post_params={ "query" => query } - post_params.merge!(args2) - uri = URI.parse(service) - headers={} - headers.merge!($headers) - headers[$hAccept]=$accept_results - execute_post_form_body(uri, headers, post_params) -end - -def execute_post_form_body(uri, headers, post_params) - request = Net::HTTP::Post.new(uri.request_uri) - qs=post_params.collect { |k,v| "#{k}=#{uri_escape(v)}" }.join('&') - headers[$hContentType] = $mtWWWForm - headers[$hContentLength] = qs.length.to_s - request.initialize_http_header(headers) - request.body = qs - print_http_request(uri, request) - response_print_body(uri, request) -end - -# Usage: -v --help --file= --query= -def cmd_sparql_query - options={} - optparse = OptionParser.new do |opts| - opts.banner = "Usage: #{$cmd} [--query QUERY] [--service URI] [--post] 'query' | @file" - opts.on('--service=URI', '--server=URI', 'SPARQL endpoint') do |uri| - options[:service]=uri - end - opts.on('--query=FILE','--file=FILE', 'Take query from a file') do |file| - options[:file]=file - end - opts.on('--output=TYPE', [:json,:xml,:text,:csv,:tsv], - 'Set the output argument') do |type| - options[:output]=type - end - opts.on('--accept=TYPE', [:json,:xml,:text,:csv,:tsv], - 'Set the accept header type') do |type| - options[:accept]=type - end - options[:verbose] = false - opts.on( '--post', 'Force use of POST' ) do - options[:post] = true - end - opts.on( '-v', '--verbose', 'Verbose' ) do - options[:verbose] = true - end - opts.on( '--version', 'Print version and exit' ) do - print "#{SOH_NAME} #{SOH_VERSION}\n" - exit - end - opts.on( '-h', '--help', 'Display this screen and exit' ) do - puts opts - exit - end - end - - begin optparse.parse! - rescue OptionParser::InvalidArgument, OptionParser::InvalidOption => e - warn e - exit 1 - end - - $verbose = options[:verbose] - $print_http = $verbose - usePOST = options[:post] - - service = options[:service] - warn_exit 'No service specified. Required --service=URI',1 if service.nil? - - # Query - query=nil - query_file=options[:file] - if query_file.nil? && ARGV.size == 0 - then - warn_exit 'No query specified.',1 - end - if query_file.nil? - query = ARGV.shift - if query.match(/^@/) - query_file = query[1..-1] - query = nil - end - end - - # --output ==> output= (non-standard) - args={} - case options[:output] - when nil - when "json","xml","text","csv","tsv" - args['output'] = options[:output] - when :json,:xml,:text,:csv,:tsv - args['output'] = options[:output].to_s - else - warn_exit "Unrecognized output type: "+options[:output],2 - end - - # --accept - # options[:accept] - - print "SPARQL #{service}\n" if $verbose - #args={"output"=>"text"} - SPARQL_query(service, query, query_file, usePOST, args) - exit(0) -end - -## -------- SPARQL Update - -# Update sent as a WWW form. -def SPARQL_update_by_form(service, update, args2={}) - args = {} - args.merge!(args2) - headers={} - headers.merge!($headers) - # args? encode? - body="update="+uri_escape(update) - headers[$hContentType] = $mtWWWForm - headers[$hContentLength] = body.length.to_s - uri = URI.parse(service) - execute_post_form(uri, headers, body) -end - -# DRY - query form. -def execute_post_form(uri, headers, body) - request = Net::HTTP::Post.new(uri.request_uri) - request.initialize_http_header(headers) - request.body = body - print_http_request(uri, request) - response_no_body(uri, request) -end - -def SPARQL_update(service, update, args2={}) - args = {} - args.merge!(args2) - headers={} - headers.merge!($headers) - headers[$hContentType] = $mtSparqlUpdate - uri = URI.parse(service) - request = Net::HTTP::Post.new(uri.request_uri) - request.initialize_http_header(headers) - request.body = update - print_http_request(uri, request) - response_no_body(uri, request) -end - -def cmd_sparql_update(by_raw_post=true) - # Share with cmd_sparql_query - options={} - optparse = OptionParser.new do |opts| - opts.banner = "Usage: #{$cmd} [--file REQUEST] [--service URI] 'request' | @file" - opts.on('--service=URI', '--server=URI', 'SPARQL endpoint') do |uri| - options[:service]=uri - end - opts.on('--update=FILE', '--file=FILE', 'Take update from a file') do |file| - options[:file]=file - end - options[:verbose] = false - opts.on( '-v', '--verbose', 'Verbose' ) do - options[:verbose] = true - end - opts.on( '--version', 'Print version and exit' ) do - print "#{SOH_NAME} #{SOH_VERSION}\n" - exit - end - opts.on( '-h', '--help', 'Display this screen and exit' ) do - puts opts - exit - end - end - - begin optparse.parse! - rescue OptionParser::InvalidArgument => e - warn e - exit - end - - $verbose = options[:verbose] - $print_http = $verbose - - service = options[:service] - warn_exit 'No service specified. Required --service=URI',1 if service.nil? - - update=nil - update_file=options[:file] - - if update_file.nil? && ARGV.size == 0 - then - warn_exit 'No update specified.',1 - end - if update_file.nil? - update = ARGV.shift - if update.match(/^@/) - update_file = update[1..-1] - update = nil - end - end - - print "SPARQL-Update #{service}\n" if $verbose - args={} - - # Reads in the file :-( - if update.nil? - then - update = open(update_file, 'rb'){|f| f.read} - else - update = string_or_file(update) - end - - if by_raw_post - SPARQL_update(service, update, args) - else - SPARQL_update_by_form(service, update, args) - end - exit(0) -end - -## ------- - -case $cmd -when "s-http", "sparql-http", "soh" - $banner="#{$cmd} [get|post|put|delete] datasetURI graph [file]" - cmd_soh -when "s-get", "s-head", "s-put", "s-delete", "s-post" - - case $cmd - when "s-get", "s-head", "s-delete" - $banner="#{$cmd} datasetURI graph" - when "s-put", "s-post" - $banner="#{$cmd} datasetURI graph file" - end - cmd2 = $cmd.sub(/^s-/, '').upcase - cmd_soh cmd2 - -when "s-query", "sparql-query" - cmd_sparql_query -when "s-update", "sparql-update" - cmd_sparql_update true -when "s-update-form", "sparql-update-form" - cmd_sparql_update false -else - warn_exit "Unknown: "+$cmd, 1 -end diff --git a/jena-fuseki1/s-post b/jena-fuseki1/s-post deleted file mode 100755 index 4f6590dc972..00000000000 --- a/jena-fuseki1/s-post +++ /dev/null @@ -1,713 +0,0 @@ -#!/usr/bin/env ruby -# -*- coding: utf-8 -*- - -# 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. - -# SPARQL HTTP Update, client. - -require 'optparse' -require 'net/http' -require 'uri' -require 'cgi' -require 'pp' -require 'ostruct' - -# ToDo -# Allow a choice of media type for GET -# --accept "content-type" (and abbreviations) -# --header "Add:this" -# --user, --password -# Basic authentication: request.basic_auth("username", "password") -# Follow redirects => 301: puts response["location"] # All headers are lowercase? - -SOH_NAME="SOH" -SOH_VERSION="0.0.0" - -$proxy = ENV['http_proxy'] ? URI.parse(ENV['http_proxy']) : OpenStruct.new - -# What about direct naming? - -# Names -$mtTurtle = 'text/turtle;charset=utf-8' -$mtRDF = 'application/rdf+xml' -$mtText = 'text/plain' -$mtNTriples = 'application/n-triples' -$mtNQuads = 'application/n-quads' -$mtJSONLD = 'application/ld+json' -$mtTriG = 'application/trig' -$mtSparqlResultsX = 'application/sparql-results+xml' -$mtSparqlResultsJ = 'application/sparql-results+json' -$mtAppJSON = 'application/json' -$mtAppXML = 'application/xml' -$mtSparqlResultsTSV = 'application/sparql-results+tsv' -$mtSparqlResultsCSV = 'application/sparql-results+csv' -$mtSparqlUpdate = 'application/sparql-update' -$mtWWWForm = 'application/x-www-form-urlencoded' -$mtSparqlQuery = "application/sparql-query" ; - -# Global media type table. -$fileMediaTypes = {} -$fileMediaTypes['ttl'] = $mtTurtle -$fileMediaTypes['n3'] = 'text/n3; charset=utf-8' -$fileMediaTypes['nt'] = $mtText -$fileMediaTypes['rdf'] = $mtRDF -$fileMediaTypes['owl'] = $mtRDF -$fileMediaTypes['nq'] = $mtNQuads -$fileMediaTypes['trig'] = $mtTriG -$fileMediaTypes['json-ld'] = $mtJSONLD -$fileMediaTypes['jsonld'] = $mtJSONLD - -# Global charset : no entry means "don't set" -$charsetUTF8 = 'utf-8' -$charset = {} -$charset[$mtTurtle] = 'utf-8' -$charset[$mtText] = 'ascii' -$charset[$mtTriG] = 'utf-8' -$charset[$mtNQuads] = 'utf-8' - -# Headers - -$hContentType = 'Content-Type' -# $hContentEncoding = 'Content-Encoding' -$hContentLength = 'Content-Length' -# $hContentLocation = 'Content-Location' -# $hContentRange = 'Content-Range' - -$hAccept = 'Accept' -$hAcceptCharset = 'Accept-Charset' -$hAcceptEncoding = 'Accept-Encoding' -$hAcceptRanges = 'Accept-Ranges' - -$headers = { "User-Agent" => "#{SOH_NAME}/Fuseki #{SOH_VERSION}"} -$print_http = false - -# Default for GET -# At least allow anything (and hope!) -$accept_rdf="#{$mtTurtle} , #{$mtNTriples};q=0.9 , #{$mtRDF};q=0.8 , #{$mtJSONLD};q=0.5" -# Datasets -$accept_ds="#{$mtTrig} , #{$mtNQuads};q=0.9 , #{$mtJSONLD};q=0.5" -# For SPARQL query -$accept_results="#{$mtSparqlResultsJ} , #{$mtSparqlResultsX};q=0.9 , #{$accept_rdf}" - -# Accept any in case of trouble. -$accept_rdf="#{$accept_rdf} , */*;q=0.1" -$accept_results="#{$accept_results} , */*;q=0.1" - -# The media type usually forces the charset. -$accept_charset=nil - -## Who we are. -## Two styles: -## s-query ..... -## soh query ..... - -$cmd = File.basename($0) -if $cmd == 'soh' -then - $cmd = (ARGV.size == 0) ? 'soh' : ARGV.shift -end - -if ! $cmd.start_with?('s-') && $cmd != 'soh' - $cmd = 's-'+$cmd -end - -## -------- - -def GET(dataset, graph) - print "GET #{dataset} #{graph}\n" if $verbose - requestURI = target(dataset, graph) - headers = {} - headers.merge!($headers) - headers[$hAccept] = $accept_rdf - headers[$hAcceptCharset] = $accept_charset unless $accept_charset.nil? - get_worker(requestURI, headers) -end - -def get_worker(requestURI, headers) - uri = URI.parse(requestURI) - request = Net::HTTP::Get.new(uri.request_uri) - request.initialize_http_header(headers) - print_http_request(uri, request) - response_print_body(uri, request) -end - -def HEAD(dataset, graph) - print "HEAD #{dataset} #{graph}\n" if $verbose - requestURI = target(dataset, graph) - headers = {} - headers.merge!($headers) - headers[$hAccept] = $accept_rdf - headers[$hAcceptCharset] = $accept_charset unless $accept_charset.nil? - uri = URI.parse(requestURI) - request = Net::HTTP::Head.new(uri.request_uri) - request.initialize_http_header(headers) - print_http_request(uri, request) - response_no_body(uri, request) -end - -def PUT(dataset, graph, file) - print "PUT #{dataset} #{graph} #{file}\n" if $verbose - send_body(dataset, graph, file, Net::HTTP::Put) -end - -def POST(dataset, graph, file) - print "POST #{dataset} #{graph} #{file}\n" if $verbose - send_body(dataset, graph, file, Net::HTTP::Post) -end - -def DELETE(dataset, graph) - print "DELETE #{dataset} #{graph}\n" if $verbose - requestURI = target(dataset, graph) - uri = URI.parse(requestURI) - request = Net::HTTP::Delete.new(uri.request_uri) - headers = {} - headers.merge!($headers) - request.initialize_http_header(headers) - print_http_request(uri, request) - response_no_body(uri, request) -end - -def uri_escape(string) - CGI.escape(string) -end - -def target(dataset, graph) - return dataset+"?default" if graph == "default" - return dataset+"?graph="+uri_escape(graph) -end - -def send_body(dataset, graph, file, method) - mt = content_type(file) - headers = {} - headers.merge!($headers) - headers[$hContentType] = mt - headers[$hContentLength] = File.size(file).to_s - ## p headers - - requestURI = target(dataset, graph) - uri = URI.parse(requestURI) - - request = method.new(uri.request_uri) - request.initialize_http_header(headers) - print_http_request(uri, request) - request.body_stream = File.open(file) - response_no_body(uri, request) -end - -def response_no_body(uri, request) - http = Net::HTTP::Proxy($proxy.host,$proxy.port).new(uri.host, uri.port) - http.read_timeout = nil - # check we can connect. - begin http.start - rescue Exception => e - # puts e.message - #puts e.backtrace.inspect - warn_exit "Failed to connect: #{uri.host}:#{uri.port}: #{e.message}", 3 - end - response = http.request(request) - print_http_response(response) - case response - when Net::HTTPSuccess, Net::HTTPRedirection - # OK - when Net::HTTPNotFound - warn_exit "404 Not found: #{uri}", 9 - #print response.body - else - warn_exit "#{response.code} #{response.message} #{uri}", 9 - # Unreachable - response.error! - end - # NO BODY IN RESPONSE -end - -def response_print_body(uri, request) - http = Net::HTTP::Proxy($proxy.host,$proxy.port).new(uri.host, uri.port) - http.read_timeout = nil - # check we can connect. - begin http.start - rescue => e - #puts e.backtrace.inspect - #print e.class - warn_exit "Failed to connect: #{uri.host}:#{uri.port}: #{e.message}", 3 - end - - # Add a blank line if headers were output. - print "\n" if $http_print ; - - begin - response = http.request(request) { |res| - print_http_response(res) - #puts res.code - res.read_body do |segment| - print segment - end - } - case response - when Net::HTTPSuccess, Net::HTTPRedirection - # OK - when Net::HTTPNotFound - warn_exit "404 Not found: #{uri}", 9 - #print response.body - else - warn_exit "#{response.code}: #{uri}", 9 - # Unreachable - response.error! - end - rescue EOFError => e - warn_exit "IO Error: "+e.message, 3 - end -end - -def print_http_request(uri, request) - return unless $print_http - #print "Request\n" - print request.method," ",uri, "\n" - print_headers(" ",request) -end - -def print_http_response(response) - return unless $print_http - #print "Response\n" - print response.code, " ", response.message, "\n" - print_headers(" ",response) -end - -def print_headers(marker, headers) - headers.each do |k,v| - k = k.split('-').map{|w| w.capitalize}.join('-')+':' - printf "%s%-20s %s\n",marker,k,v - end -end - -def content_type(file) - file =~ /\.([^.]*)$/ - ext = $1 - mt = $fileMediaTypes[ext] - cs = $charset[mt] - mt = mt+';charset='+cs if ! cs.nil? - return mt -end - -def charset(content_type) - return $charset[content_type] -end - -def warn_exit(msg, rc) - warn msg - exit rc ; -end - -def parseURI(uri_string) - begin - return URI.parse(uri_string).to_s - rescue URI::InvalidURIError => err - warn_exit "Bad URI: <#{uri_string}>", 2 - end -end - -## ---- Command - -def cmd_soh(command=nil) - ## Command line - options = {} - optparse = OptionParser.new do |opts| - # Set a banner, displayed at the top - # of the help screen. - case $cmd - when "s-http", "sparql-http", "soh" - banner="$cmd [get|post|put|delete] datasetURI graph [file]" - when "s-get", "s-head", "s-delete" - banner="$cmd datasetURI graph" - end - - opts.banner = $banner - # Define the options, and what they do - - options[:verbose] = false - opts.on( '-v', '--verbose', 'Verbose' ) do - options[:verbose] = true - end - - options[:version] = false - opts.on( '--version', 'Print version and exit' ) do - print "#{SOH_NAME} #{SOH_VERSION}\n" - exit - end - - # This displays the help screen, all programs are - # assumed to have this option. - opts.on( '-h', '--help', 'Display this screen and exit' ) do - puts opts - exit - end - end - - begin optparse.parse! - rescue OptionParser::InvalidArgument => e - warn e - exit - end - - $verbose = options[:verbose] - $print_http = $verbose - - if command.nil? - if ARGV.size == 0 - warn "No command given: expected one of 'get', 'put', 'post', 'delete', 'query' or 'update'" - exit 1 - end - cmdPrint=ARGV.shift - command=cmdPrint.upcase - else - cmdPrint=command - end - - case command - when "HEAD", "GET", "DELETE" - requiredFile=false - when "PUT", "POST" - requiredFile=true - when "QUERY" - cmd_sparql_query - when "UPDATE" - cmd_sparql_update - else - warn_exit "Unknown command: #{command}", 2 - end - - if requiredFile - then - if ARGV.size != 3 - warn_exit "Required: dataset URI, graph URI (or 'default') and file", 1 - end - else - if ARGV.size != 2 - warn_exit "Required: dataset URI and graph URI (or 'default')", 1 - end - end - - dataset=parseURI(ARGV.shift) - # Relative URI? - graph=parseURI(ARGV.shift) - file="" - if requiredFile - then - file = ARGV.shift if requiredFile - if ! File.exist?(file) - warn_exit "No such file: "+file, 3 - end - if File.directory?(file) - warn_exit "File is a directory: "+file, 3 - end - end - - case command - when "GET" - GET(dataset, graph) - when "HEAD" - HEAD(dataset, graph) - when "PUT" - PUT(dataset, graph, file) - when "DELETE" - DELETE(dataset, graph) - when "POST" - POST(dataset, graph, file) - else - warn_exit "Internal error: Unknown command: #{cmd}", 2 - end - exit 0 -end - -## -------- -def string_or_file(arg) - return arg if ! arg.match(/^@/) - a=(arg[1..-1]) - open(a, 'rb'){|f| f.read} -end - -## -------- SPARQL Query - -## Choose method -def SPARQL_query(service, query, query_file, forcePOST=false, args2={}) - if ! query_file.nil? - query = open(query_file, 'rb'){|f| f.read} - end - if forcePOST || query.length >= 2*1024 - SPARQL_query_POST(service, query, args2) - else - SPARQL_query_GET(service, query, args2) - end -end - -## By GET - -def SPARQL_query_GET(service, query, args2) - args = { "query" => query } - args.merge!(args2) - qs=args.collect { |k,v| "#{k}=#{uri_escape(v)}" }.join('&') - action="#{service}?#{qs}" - headers={} - headers.merge!($headers) - headers[$hAccept]=$accept_results - get_worker(action, headers) -end - -## By POST - -def SPARQL_query_POST(service, query, args2) - # DRY - body/no body for each of request and response. - post_params={ "query" => query } - post_params.merge!(args2) - uri = URI.parse(service) - headers={} - headers.merge!($headers) - headers[$hAccept]=$accept_results - execute_post_form_body(uri, headers, post_params) -end - -def execute_post_form_body(uri, headers, post_params) - request = Net::HTTP::Post.new(uri.request_uri) - qs=post_params.collect { |k,v| "#{k}=#{uri_escape(v)}" }.join('&') - headers[$hContentType] = $mtWWWForm - headers[$hContentLength] = qs.length.to_s - request.initialize_http_header(headers) - request.body = qs - print_http_request(uri, request) - response_print_body(uri, request) -end - -# Usage: -v --help --file= --query= -def cmd_sparql_query - options={} - optparse = OptionParser.new do |opts| - opts.banner = "Usage: #{$cmd} [--query QUERY] [--service URI] [--post] 'query' | @file" - opts.on('--service=URI', '--server=URI', 'SPARQL endpoint') do |uri| - options[:service]=uri - end - opts.on('--query=FILE','--file=FILE', 'Take query from a file') do |file| - options[:file]=file - end - opts.on('--output=TYPE', [:json,:xml,:text,:csv,:tsv], - 'Set the output argument') do |type| - options[:output]=type - end - opts.on('--accept=TYPE', [:json,:xml,:text,:csv,:tsv], - 'Set the accept header type') do |type| - options[:accept]=type - end - options[:verbose] = false - opts.on( '--post', 'Force use of POST' ) do - options[:post] = true - end - opts.on( '-v', '--verbose', 'Verbose' ) do - options[:verbose] = true - end - opts.on( '--version', 'Print version and exit' ) do - print "#{SOH_NAME} #{SOH_VERSION}\n" - exit - end - opts.on( '-h', '--help', 'Display this screen and exit' ) do - puts opts - exit - end - end - - begin optparse.parse! - rescue OptionParser::InvalidArgument, OptionParser::InvalidOption => e - warn e - exit 1 - end - - $verbose = options[:verbose] - $print_http = $verbose - usePOST = options[:post] - - service = options[:service] - warn_exit 'No service specified. Required --service=URI',1 if service.nil? - - # Query - query=nil - query_file=options[:file] - if query_file.nil? && ARGV.size == 0 - then - warn_exit 'No query specified.',1 - end - if query_file.nil? - query = ARGV.shift - if query.match(/^@/) - query_file = query[1..-1] - query = nil - end - end - - # --output ==> output= (non-standard) - args={} - case options[:output] - when nil - when "json","xml","text","csv","tsv" - args['output'] = options[:output] - when :json,:xml,:text,:csv,:tsv - args['output'] = options[:output].to_s - else - warn_exit "Unrecognized output type: "+options[:output],2 - end - - # --accept - # options[:accept] - - print "SPARQL #{service}\n" if $verbose - #args={"output"=>"text"} - SPARQL_query(service, query, query_file, usePOST, args) - exit(0) -end - -## -------- SPARQL Update - -# Update sent as a WWW form. -def SPARQL_update_by_form(service, update, args2={}) - args = {} - args.merge!(args2) - headers={} - headers.merge!($headers) - # args? encode? - body="update="+uri_escape(update) - headers[$hContentType] = $mtWWWForm - headers[$hContentLength] = body.length.to_s - uri = URI.parse(service) - execute_post_form(uri, headers, body) -end - -# DRY - query form. -def execute_post_form(uri, headers, body) - request = Net::HTTP::Post.new(uri.request_uri) - request.initialize_http_header(headers) - request.body = body - print_http_request(uri, request) - response_no_body(uri, request) -end - -def SPARQL_update(service, update, args2={}) - args = {} - args.merge!(args2) - headers={} - headers.merge!($headers) - headers[$hContentType] = $mtSparqlUpdate - uri = URI.parse(service) - request = Net::HTTP::Post.new(uri.request_uri) - request.initialize_http_header(headers) - request.body = update - print_http_request(uri, request) - response_no_body(uri, request) -end - -def cmd_sparql_update(by_raw_post=true) - # Share with cmd_sparql_query - options={} - optparse = OptionParser.new do |opts| - opts.banner = "Usage: #{$cmd} [--file REQUEST] [--service URI] 'request' | @file" - opts.on('--service=URI', '--server=URI', 'SPARQL endpoint') do |uri| - options[:service]=uri - end - opts.on('--update=FILE', '--file=FILE', 'Take update from a file') do |file| - options[:file]=file - end - options[:verbose] = false - opts.on( '-v', '--verbose', 'Verbose' ) do - options[:verbose] = true - end - opts.on( '--version', 'Print version and exit' ) do - print "#{SOH_NAME} #{SOH_VERSION}\n" - exit - end - opts.on( '-h', '--help', 'Display this screen and exit' ) do - puts opts - exit - end - end - - begin optparse.parse! - rescue OptionParser::InvalidArgument => e - warn e - exit - end - - $verbose = options[:verbose] - $print_http = $verbose - - service = options[:service] - warn_exit 'No service specified. Required --service=URI',1 if service.nil? - - update=nil - update_file=options[:file] - - if update_file.nil? && ARGV.size == 0 - then - warn_exit 'No update specified.',1 - end - if update_file.nil? - update = ARGV.shift - if update.match(/^@/) - update_file = update[1..-1] - update = nil - end - end - - print "SPARQL-Update #{service}\n" if $verbose - args={} - - # Reads in the file :-( - if update.nil? - then - update = open(update_file, 'rb'){|f| f.read} - else - update = string_or_file(update) - end - - if by_raw_post - SPARQL_update(service, update, args) - else - SPARQL_update_by_form(service, update, args) - end - exit(0) -end - -## ------- - -case $cmd -when "s-http", "sparql-http", "soh" - $banner="#{$cmd} [get|post|put|delete] datasetURI graph [file]" - cmd_soh -when "s-get", "s-head", "s-put", "s-delete", "s-post" - - case $cmd - when "s-get", "s-head", "s-delete" - $banner="#{$cmd} datasetURI graph" - when "s-put", "s-post" - $banner="#{$cmd} datasetURI graph file" - end - cmd2 = $cmd.sub(/^s-/, '').upcase - cmd_soh cmd2 - -when "s-query", "sparql-query" - cmd_sparql_query -when "s-update", "sparql-update" - cmd_sparql_update true -when "s-update-form", "sparql-update-form" - cmd_sparql_update false -else - warn_exit "Unknown: "+$cmd, 1 -end diff --git a/jena-fuseki1/s-put b/jena-fuseki1/s-put deleted file mode 100755 index 4f6590dc972..00000000000 --- a/jena-fuseki1/s-put +++ /dev/null @@ -1,713 +0,0 @@ -#!/usr/bin/env ruby -# -*- coding: utf-8 -*- - -# 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. - -# SPARQL HTTP Update, client. - -require 'optparse' -require 'net/http' -require 'uri' -require 'cgi' -require 'pp' -require 'ostruct' - -# ToDo -# Allow a choice of media type for GET -# --accept "content-type" (and abbreviations) -# --header "Add:this" -# --user, --password -# Basic authentication: request.basic_auth("username", "password") -# Follow redirects => 301: puts response["location"] # All headers are lowercase? - -SOH_NAME="SOH" -SOH_VERSION="0.0.0" - -$proxy = ENV['http_proxy'] ? URI.parse(ENV['http_proxy']) : OpenStruct.new - -# What about direct naming? - -# Names -$mtTurtle = 'text/turtle;charset=utf-8' -$mtRDF = 'application/rdf+xml' -$mtText = 'text/plain' -$mtNTriples = 'application/n-triples' -$mtNQuads = 'application/n-quads' -$mtJSONLD = 'application/ld+json' -$mtTriG = 'application/trig' -$mtSparqlResultsX = 'application/sparql-results+xml' -$mtSparqlResultsJ = 'application/sparql-results+json' -$mtAppJSON = 'application/json' -$mtAppXML = 'application/xml' -$mtSparqlResultsTSV = 'application/sparql-results+tsv' -$mtSparqlResultsCSV = 'application/sparql-results+csv' -$mtSparqlUpdate = 'application/sparql-update' -$mtWWWForm = 'application/x-www-form-urlencoded' -$mtSparqlQuery = "application/sparql-query" ; - -# Global media type table. -$fileMediaTypes = {} -$fileMediaTypes['ttl'] = $mtTurtle -$fileMediaTypes['n3'] = 'text/n3; charset=utf-8' -$fileMediaTypes['nt'] = $mtText -$fileMediaTypes['rdf'] = $mtRDF -$fileMediaTypes['owl'] = $mtRDF -$fileMediaTypes['nq'] = $mtNQuads -$fileMediaTypes['trig'] = $mtTriG -$fileMediaTypes['json-ld'] = $mtJSONLD -$fileMediaTypes['jsonld'] = $mtJSONLD - -# Global charset : no entry means "don't set" -$charsetUTF8 = 'utf-8' -$charset = {} -$charset[$mtTurtle] = 'utf-8' -$charset[$mtText] = 'ascii' -$charset[$mtTriG] = 'utf-8' -$charset[$mtNQuads] = 'utf-8' - -# Headers - -$hContentType = 'Content-Type' -# $hContentEncoding = 'Content-Encoding' -$hContentLength = 'Content-Length' -# $hContentLocation = 'Content-Location' -# $hContentRange = 'Content-Range' - -$hAccept = 'Accept' -$hAcceptCharset = 'Accept-Charset' -$hAcceptEncoding = 'Accept-Encoding' -$hAcceptRanges = 'Accept-Ranges' - -$headers = { "User-Agent" => "#{SOH_NAME}/Fuseki #{SOH_VERSION}"} -$print_http = false - -# Default for GET -# At least allow anything (and hope!) -$accept_rdf="#{$mtTurtle} , #{$mtNTriples};q=0.9 , #{$mtRDF};q=0.8 , #{$mtJSONLD};q=0.5" -# Datasets -$accept_ds="#{$mtTrig} , #{$mtNQuads};q=0.9 , #{$mtJSONLD};q=0.5" -# For SPARQL query -$accept_results="#{$mtSparqlResultsJ} , #{$mtSparqlResultsX};q=0.9 , #{$accept_rdf}" - -# Accept any in case of trouble. -$accept_rdf="#{$accept_rdf} , */*;q=0.1" -$accept_results="#{$accept_results} , */*;q=0.1" - -# The media type usually forces the charset. -$accept_charset=nil - -## Who we are. -## Two styles: -## s-query ..... -## soh query ..... - -$cmd = File.basename($0) -if $cmd == 'soh' -then - $cmd = (ARGV.size == 0) ? 'soh' : ARGV.shift -end - -if ! $cmd.start_with?('s-') && $cmd != 'soh' - $cmd = 's-'+$cmd -end - -## -------- - -def GET(dataset, graph) - print "GET #{dataset} #{graph}\n" if $verbose - requestURI = target(dataset, graph) - headers = {} - headers.merge!($headers) - headers[$hAccept] = $accept_rdf - headers[$hAcceptCharset] = $accept_charset unless $accept_charset.nil? - get_worker(requestURI, headers) -end - -def get_worker(requestURI, headers) - uri = URI.parse(requestURI) - request = Net::HTTP::Get.new(uri.request_uri) - request.initialize_http_header(headers) - print_http_request(uri, request) - response_print_body(uri, request) -end - -def HEAD(dataset, graph) - print "HEAD #{dataset} #{graph}\n" if $verbose - requestURI = target(dataset, graph) - headers = {} - headers.merge!($headers) - headers[$hAccept] = $accept_rdf - headers[$hAcceptCharset] = $accept_charset unless $accept_charset.nil? - uri = URI.parse(requestURI) - request = Net::HTTP::Head.new(uri.request_uri) - request.initialize_http_header(headers) - print_http_request(uri, request) - response_no_body(uri, request) -end - -def PUT(dataset, graph, file) - print "PUT #{dataset} #{graph} #{file}\n" if $verbose - send_body(dataset, graph, file, Net::HTTP::Put) -end - -def POST(dataset, graph, file) - print "POST #{dataset} #{graph} #{file}\n" if $verbose - send_body(dataset, graph, file, Net::HTTP::Post) -end - -def DELETE(dataset, graph) - print "DELETE #{dataset} #{graph}\n" if $verbose - requestURI = target(dataset, graph) - uri = URI.parse(requestURI) - request = Net::HTTP::Delete.new(uri.request_uri) - headers = {} - headers.merge!($headers) - request.initialize_http_header(headers) - print_http_request(uri, request) - response_no_body(uri, request) -end - -def uri_escape(string) - CGI.escape(string) -end - -def target(dataset, graph) - return dataset+"?default" if graph == "default" - return dataset+"?graph="+uri_escape(graph) -end - -def send_body(dataset, graph, file, method) - mt = content_type(file) - headers = {} - headers.merge!($headers) - headers[$hContentType] = mt - headers[$hContentLength] = File.size(file).to_s - ## p headers - - requestURI = target(dataset, graph) - uri = URI.parse(requestURI) - - request = method.new(uri.request_uri) - request.initialize_http_header(headers) - print_http_request(uri, request) - request.body_stream = File.open(file) - response_no_body(uri, request) -end - -def response_no_body(uri, request) - http = Net::HTTP::Proxy($proxy.host,$proxy.port).new(uri.host, uri.port) - http.read_timeout = nil - # check we can connect. - begin http.start - rescue Exception => e - # puts e.message - #puts e.backtrace.inspect - warn_exit "Failed to connect: #{uri.host}:#{uri.port}: #{e.message}", 3 - end - response = http.request(request) - print_http_response(response) - case response - when Net::HTTPSuccess, Net::HTTPRedirection - # OK - when Net::HTTPNotFound - warn_exit "404 Not found: #{uri}", 9 - #print response.body - else - warn_exit "#{response.code} #{response.message} #{uri}", 9 - # Unreachable - response.error! - end - # NO BODY IN RESPONSE -end - -def response_print_body(uri, request) - http = Net::HTTP::Proxy($proxy.host,$proxy.port).new(uri.host, uri.port) - http.read_timeout = nil - # check we can connect. - begin http.start - rescue => e - #puts e.backtrace.inspect - #print e.class - warn_exit "Failed to connect: #{uri.host}:#{uri.port}: #{e.message}", 3 - end - - # Add a blank line if headers were output. - print "\n" if $http_print ; - - begin - response = http.request(request) { |res| - print_http_response(res) - #puts res.code - res.read_body do |segment| - print segment - end - } - case response - when Net::HTTPSuccess, Net::HTTPRedirection - # OK - when Net::HTTPNotFound - warn_exit "404 Not found: #{uri}", 9 - #print response.body - else - warn_exit "#{response.code}: #{uri}", 9 - # Unreachable - response.error! - end - rescue EOFError => e - warn_exit "IO Error: "+e.message, 3 - end -end - -def print_http_request(uri, request) - return unless $print_http - #print "Request\n" - print request.method," ",uri, "\n" - print_headers(" ",request) -end - -def print_http_response(response) - return unless $print_http - #print "Response\n" - print response.code, " ", response.message, "\n" - print_headers(" ",response) -end - -def print_headers(marker, headers) - headers.each do |k,v| - k = k.split('-').map{|w| w.capitalize}.join('-')+':' - printf "%s%-20s %s\n",marker,k,v - end -end - -def content_type(file) - file =~ /\.([^.]*)$/ - ext = $1 - mt = $fileMediaTypes[ext] - cs = $charset[mt] - mt = mt+';charset='+cs if ! cs.nil? - return mt -end - -def charset(content_type) - return $charset[content_type] -end - -def warn_exit(msg, rc) - warn msg - exit rc ; -end - -def parseURI(uri_string) - begin - return URI.parse(uri_string).to_s - rescue URI::InvalidURIError => err - warn_exit "Bad URI: <#{uri_string}>", 2 - end -end - -## ---- Command - -def cmd_soh(command=nil) - ## Command line - options = {} - optparse = OptionParser.new do |opts| - # Set a banner, displayed at the top - # of the help screen. - case $cmd - when "s-http", "sparql-http", "soh" - banner="$cmd [get|post|put|delete] datasetURI graph [file]" - when "s-get", "s-head", "s-delete" - banner="$cmd datasetURI graph" - end - - opts.banner = $banner - # Define the options, and what they do - - options[:verbose] = false - opts.on( '-v', '--verbose', 'Verbose' ) do - options[:verbose] = true - end - - options[:version] = false - opts.on( '--version', 'Print version and exit' ) do - print "#{SOH_NAME} #{SOH_VERSION}\n" - exit - end - - # This displays the help screen, all programs are - # assumed to have this option. - opts.on( '-h', '--help', 'Display this screen and exit' ) do - puts opts - exit - end - end - - begin optparse.parse! - rescue OptionParser::InvalidArgument => e - warn e - exit - end - - $verbose = options[:verbose] - $print_http = $verbose - - if command.nil? - if ARGV.size == 0 - warn "No command given: expected one of 'get', 'put', 'post', 'delete', 'query' or 'update'" - exit 1 - end - cmdPrint=ARGV.shift - command=cmdPrint.upcase - else - cmdPrint=command - end - - case command - when "HEAD", "GET", "DELETE" - requiredFile=false - when "PUT", "POST" - requiredFile=true - when "QUERY" - cmd_sparql_query - when "UPDATE" - cmd_sparql_update - else - warn_exit "Unknown command: #{command}", 2 - end - - if requiredFile - then - if ARGV.size != 3 - warn_exit "Required: dataset URI, graph URI (or 'default') and file", 1 - end - else - if ARGV.size != 2 - warn_exit "Required: dataset URI and graph URI (or 'default')", 1 - end - end - - dataset=parseURI(ARGV.shift) - # Relative URI? - graph=parseURI(ARGV.shift) - file="" - if requiredFile - then - file = ARGV.shift if requiredFile - if ! File.exist?(file) - warn_exit "No such file: "+file, 3 - end - if File.directory?(file) - warn_exit "File is a directory: "+file, 3 - end - end - - case command - when "GET" - GET(dataset, graph) - when "HEAD" - HEAD(dataset, graph) - when "PUT" - PUT(dataset, graph, file) - when "DELETE" - DELETE(dataset, graph) - when "POST" - POST(dataset, graph, file) - else - warn_exit "Internal error: Unknown command: #{cmd}", 2 - end - exit 0 -end - -## -------- -def string_or_file(arg) - return arg if ! arg.match(/^@/) - a=(arg[1..-1]) - open(a, 'rb'){|f| f.read} -end - -## -------- SPARQL Query - -## Choose method -def SPARQL_query(service, query, query_file, forcePOST=false, args2={}) - if ! query_file.nil? - query = open(query_file, 'rb'){|f| f.read} - end - if forcePOST || query.length >= 2*1024 - SPARQL_query_POST(service, query, args2) - else - SPARQL_query_GET(service, query, args2) - end -end - -## By GET - -def SPARQL_query_GET(service, query, args2) - args = { "query" => query } - args.merge!(args2) - qs=args.collect { |k,v| "#{k}=#{uri_escape(v)}" }.join('&') - action="#{service}?#{qs}" - headers={} - headers.merge!($headers) - headers[$hAccept]=$accept_results - get_worker(action, headers) -end - -## By POST - -def SPARQL_query_POST(service, query, args2) - # DRY - body/no body for each of request and response. - post_params={ "query" => query } - post_params.merge!(args2) - uri = URI.parse(service) - headers={} - headers.merge!($headers) - headers[$hAccept]=$accept_results - execute_post_form_body(uri, headers, post_params) -end - -def execute_post_form_body(uri, headers, post_params) - request = Net::HTTP::Post.new(uri.request_uri) - qs=post_params.collect { |k,v| "#{k}=#{uri_escape(v)}" }.join('&') - headers[$hContentType] = $mtWWWForm - headers[$hContentLength] = qs.length.to_s - request.initialize_http_header(headers) - request.body = qs - print_http_request(uri, request) - response_print_body(uri, request) -end - -# Usage: -v --help --file= --query= -def cmd_sparql_query - options={} - optparse = OptionParser.new do |opts| - opts.banner = "Usage: #{$cmd} [--query QUERY] [--service URI] [--post] 'query' | @file" - opts.on('--service=URI', '--server=URI', 'SPARQL endpoint') do |uri| - options[:service]=uri - end - opts.on('--query=FILE','--file=FILE', 'Take query from a file') do |file| - options[:file]=file - end - opts.on('--output=TYPE', [:json,:xml,:text,:csv,:tsv], - 'Set the output argument') do |type| - options[:output]=type - end - opts.on('--accept=TYPE', [:json,:xml,:text,:csv,:tsv], - 'Set the accept header type') do |type| - options[:accept]=type - end - options[:verbose] = false - opts.on( '--post', 'Force use of POST' ) do - options[:post] = true - end - opts.on( '-v', '--verbose', 'Verbose' ) do - options[:verbose] = true - end - opts.on( '--version', 'Print version and exit' ) do - print "#{SOH_NAME} #{SOH_VERSION}\n" - exit - end - opts.on( '-h', '--help', 'Display this screen and exit' ) do - puts opts - exit - end - end - - begin optparse.parse! - rescue OptionParser::InvalidArgument, OptionParser::InvalidOption => e - warn e - exit 1 - end - - $verbose = options[:verbose] - $print_http = $verbose - usePOST = options[:post] - - service = options[:service] - warn_exit 'No service specified. Required --service=URI',1 if service.nil? - - # Query - query=nil - query_file=options[:file] - if query_file.nil? && ARGV.size == 0 - then - warn_exit 'No query specified.',1 - end - if query_file.nil? - query = ARGV.shift - if query.match(/^@/) - query_file = query[1..-1] - query = nil - end - end - - # --output ==> output= (non-standard) - args={} - case options[:output] - when nil - when "json","xml","text","csv","tsv" - args['output'] = options[:output] - when :json,:xml,:text,:csv,:tsv - args['output'] = options[:output].to_s - else - warn_exit "Unrecognized output type: "+options[:output],2 - end - - # --accept - # options[:accept] - - print "SPARQL #{service}\n" if $verbose - #args={"output"=>"text"} - SPARQL_query(service, query, query_file, usePOST, args) - exit(0) -end - -## -------- SPARQL Update - -# Update sent as a WWW form. -def SPARQL_update_by_form(service, update, args2={}) - args = {} - args.merge!(args2) - headers={} - headers.merge!($headers) - # args? encode? - body="update="+uri_escape(update) - headers[$hContentType] = $mtWWWForm - headers[$hContentLength] = body.length.to_s - uri = URI.parse(service) - execute_post_form(uri, headers, body) -end - -# DRY - query form. -def execute_post_form(uri, headers, body) - request = Net::HTTP::Post.new(uri.request_uri) - request.initialize_http_header(headers) - request.body = body - print_http_request(uri, request) - response_no_body(uri, request) -end - -def SPARQL_update(service, update, args2={}) - args = {} - args.merge!(args2) - headers={} - headers.merge!($headers) - headers[$hContentType] = $mtSparqlUpdate - uri = URI.parse(service) - request = Net::HTTP::Post.new(uri.request_uri) - request.initialize_http_header(headers) - request.body = update - print_http_request(uri, request) - response_no_body(uri, request) -end - -def cmd_sparql_update(by_raw_post=true) - # Share with cmd_sparql_query - options={} - optparse = OptionParser.new do |opts| - opts.banner = "Usage: #{$cmd} [--file REQUEST] [--service URI] 'request' | @file" - opts.on('--service=URI', '--server=URI', 'SPARQL endpoint') do |uri| - options[:service]=uri - end - opts.on('--update=FILE', '--file=FILE', 'Take update from a file') do |file| - options[:file]=file - end - options[:verbose] = false - opts.on( '-v', '--verbose', 'Verbose' ) do - options[:verbose] = true - end - opts.on( '--version', 'Print version and exit' ) do - print "#{SOH_NAME} #{SOH_VERSION}\n" - exit - end - opts.on( '-h', '--help', 'Display this screen and exit' ) do - puts opts - exit - end - end - - begin optparse.parse! - rescue OptionParser::InvalidArgument => e - warn e - exit - end - - $verbose = options[:verbose] - $print_http = $verbose - - service = options[:service] - warn_exit 'No service specified. Required --service=URI',1 if service.nil? - - update=nil - update_file=options[:file] - - if update_file.nil? && ARGV.size == 0 - then - warn_exit 'No update specified.',1 - end - if update_file.nil? - update = ARGV.shift - if update.match(/^@/) - update_file = update[1..-1] - update = nil - end - end - - print "SPARQL-Update #{service}\n" if $verbose - args={} - - # Reads in the file :-( - if update.nil? - then - update = open(update_file, 'rb'){|f| f.read} - else - update = string_or_file(update) - end - - if by_raw_post - SPARQL_update(service, update, args) - else - SPARQL_update_by_form(service, update, args) - end - exit(0) -end - -## ------- - -case $cmd -when "s-http", "sparql-http", "soh" - $banner="#{$cmd} [get|post|put|delete] datasetURI graph [file]" - cmd_soh -when "s-get", "s-head", "s-put", "s-delete", "s-post" - - case $cmd - when "s-get", "s-head", "s-delete" - $banner="#{$cmd} datasetURI graph" - when "s-put", "s-post" - $banner="#{$cmd} datasetURI graph file" - end - cmd2 = $cmd.sub(/^s-/, '').upcase - cmd_soh cmd2 - -when "s-query", "sparql-query" - cmd_sparql_query -when "s-update", "sparql-update" - cmd_sparql_update true -when "s-update-form", "sparql-update-form" - cmd_sparql_update false -else - warn_exit "Unknown: "+$cmd, 1 -end diff --git a/jena-fuseki1/s-query b/jena-fuseki1/s-query deleted file mode 100755 index 4f6590dc972..00000000000 --- a/jena-fuseki1/s-query +++ /dev/null @@ -1,713 +0,0 @@ -#!/usr/bin/env ruby -# -*- coding: utf-8 -*- - -# 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. - -# SPARQL HTTP Update, client. - -require 'optparse' -require 'net/http' -require 'uri' -require 'cgi' -require 'pp' -require 'ostruct' - -# ToDo -# Allow a choice of media type for GET -# --accept "content-type" (and abbreviations) -# --header "Add:this" -# --user, --password -# Basic authentication: request.basic_auth("username", "password") -# Follow redirects => 301: puts response["location"] # All headers are lowercase? - -SOH_NAME="SOH" -SOH_VERSION="0.0.0" - -$proxy = ENV['http_proxy'] ? URI.parse(ENV['http_proxy']) : OpenStruct.new - -# What about direct naming? - -# Names -$mtTurtle = 'text/turtle;charset=utf-8' -$mtRDF = 'application/rdf+xml' -$mtText = 'text/plain' -$mtNTriples = 'application/n-triples' -$mtNQuads = 'application/n-quads' -$mtJSONLD = 'application/ld+json' -$mtTriG = 'application/trig' -$mtSparqlResultsX = 'application/sparql-results+xml' -$mtSparqlResultsJ = 'application/sparql-results+json' -$mtAppJSON = 'application/json' -$mtAppXML = 'application/xml' -$mtSparqlResultsTSV = 'application/sparql-results+tsv' -$mtSparqlResultsCSV = 'application/sparql-results+csv' -$mtSparqlUpdate = 'application/sparql-update' -$mtWWWForm = 'application/x-www-form-urlencoded' -$mtSparqlQuery = "application/sparql-query" ; - -# Global media type table. -$fileMediaTypes = {} -$fileMediaTypes['ttl'] = $mtTurtle -$fileMediaTypes['n3'] = 'text/n3; charset=utf-8' -$fileMediaTypes['nt'] = $mtText -$fileMediaTypes['rdf'] = $mtRDF -$fileMediaTypes['owl'] = $mtRDF -$fileMediaTypes['nq'] = $mtNQuads -$fileMediaTypes['trig'] = $mtTriG -$fileMediaTypes['json-ld'] = $mtJSONLD -$fileMediaTypes['jsonld'] = $mtJSONLD - -# Global charset : no entry means "don't set" -$charsetUTF8 = 'utf-8' -$charset = {} -$charset[$mtTurtle] = 'utf-8' -$charset[$mtText] = 'ascii' -$charset[$mtTriG] = 'utf-8' -$charset[$mtNQuads] = 'utf-8' - -# Headers - -$hContentType = 'Content-Type' -# $hContentEncoding = 'Content-Encoding' -$hContentLength = 'Content-Length' -# $hContentLocation = 'Content-Location' -# $hContentRange = 'Content-Range' - -$hAccept = 'Accept' -$hAcceptCharset = 'Accept-Charset' -$hAcceptEncoding = 'Accept-Encoding' -$hAcceptRanges = 'Accept-Ranges' - -$headers = { "User-Agent" => "#{SOH_NAME}/Fuseki #{SOH_VERSION}"} -$print_http = false - -# Default for GET -# At least allow anything (and hope!) -$accept_rdf="#{$mtTurtle} , #{$mtNTriples};q=0.9 , #{$mtRDF};q=0.8 , #{$mtJSONLD};q=0.5" -# Datasets -$accept_ds="#{$mtTrig} , #{$mtNQuads};q=0.9 , #{$mtJSONLD};q=0.5" -# For SPARQL query -$accept_results="#{$mtSparqlResultsJ} , #{$mtSparqlResultsX};q=0.9 , #{$accept_rdf}" - -# Accept any in case of trouble. -$accept_rdf="#{$accept_rdf} , */*;q=0.1" -$accept_results="#{$accept_results} , */*;q=0.1" - -# The media type usually forces the charset. -$accept_charset=nil - -## Who we are. -## Two styles: -## s-query ..... -## soh query ..... - -$cmd = File.basename($0) -if $cmd == 'soh' -then - $cmd = (ARGV.size == 0) ? 'soh' : ARGV.shift -end - -if ! $cmd.start_with?('s-') && $cmd != 'soh' - $cmd = 's-'+$cmd -end - -## -------- - -def GET(dataset, graph) - print "GET #{dataset} #{graph}\n" if $verbose - requestURI = target(dataset, graph) - headers = {} - headers.merge!($headers) - headers[$hAccept] = $accept_rdf - headers[$hAcceptCharset] = $accept_charset unless $accept_charset.nil? - get_worker(requestURI, headers) -end - -def get_worker(requestURI, headers) - uri = URI.parse(requestURI) - request = Net::HTTP::Get.new(uri.request_uri) - request.initialize_http_header(headers) - print_http_request(uri, request) - response_print_body(uri, request) -end - -def HEAD(dataset, graph) - print "HEAD #{dataset} #{graph}\n" if $verbose - requestURI = target(dataset, graph) - headers = {} - headers.merge!($headers) - headers[$hAccept] = $accept_rdf - headers[$hAcceptCharset] = $accept_charset unless $accept_charset.nil? - uri = URI.parse(requestURI) - request = Net::HTTP::Head.new(uri.request_uri) - request.initialize_http_header(headers) - print_http_request(uri, request) - response_no_body(uri, request) -end - -def PUT(dataset, graph, file) - print "PUT #{dataset} #{graph} #{file}\n" if $verbose - send_body(dataset, graph, file, Net::HTTP::Put) -end - -def POST(dataset, graph, file) - print "POST #{dataset} #{graph} #{file}\n" if $verbose - send_body(dataset, graph, file, Net::HTTP::Post) -end - -def DELETE(dataset, graph) - print "DELETE #{dataset} #{graph}\n" if $verbose - requestURI = target(dataset, graph) - uri = URI.parse(requestURI) - request = Net::HTTP::Delete.new(uri.request_uri) - headers = {} - headers.merge!($headers) - request.initialize_http_header(headers) - print_http_request(uri, request) - response_no_body(uri, request) -end - -def uri_escape(string) - CGI.escape(string) -end - -def target(dataset, graph) - return dataset+"?default" if graph == "default" - return dataset+"?graph="+uri_escape(graph) -end - -def send_body(dataset, graph, file, method) - mt = content_type(file) - headers = {} - headers.merge!($headers) - headers[$hContentType] = mt - headers[$hContentLength] = File.size(file).to_s - ## p headers - - requestURI = target(dataset, graph) - uri = URI.parse(requestURI) - - request = method.new(uri.request_uri) - request.initialize_http_header(headers) - print_http_request(uri, request) - request.body_stream = File.open(file) - response_no_body(uri, request) -end - -def response_no_body(uri, request) - http = Net::HTTP::Proxy($proxy.host,$proxy.port).new(uri.host, uri.port) - http.read_timeout = nil - # check we can connect. - begin http.start - rescue Exception => e - # puts e.message - #puts e.backtrace.inspect - warn_exit "Failed to connect: #{uri.host}:#{uri.port}: #{e.message}", 3 - end - response = http.request(request) - print_http_response(response) - case response - when Net::HTTPSuccess, Net::HTTPRedirection - # OK - when Net::HTTPNotFound - warn_exit "404 Not found: #{uri}", 9 - #print response.body - else - warn_exit "#{response.code} #{response.message} #{uri}", 9 - # Unreachable - response.error! - end - # NO BODY IN RESPONSE -end - -def response_print_body(uri, request) - http = Net::HTTP::Proxy($proxy.host,$proxy.port).new(uri.host, uri.port) - http.read_timeout = nil - # check we can connect. - begin http.start - rescue => e - #puts e.backtrace.inspect - #print e.class - warn_exit "Failed to connect: #{uri.host}:#{uri.port}: #{e.message}", 3 - end - - # Add a blank line if headers were output. - print "\n" if $http_print ; - - begin - response = http.request(request) { |res| - print_http_response(res) - #puts res.code - res.read_body do |segment| - print segment - end - } - case response - when Net::HTTPSuccess, Net::HTTPRedirection - # OK - when Net::HTTPNotFound - warn_exit "404 Not found: #{uri}", 9 - #print response.body - else - warn_exit "#{response.code}: #{uri}", 9 - # Unreachable - response.error! - end - rescue EOFError => e - warn_exit "IO Error: "+e.message, 3 - end -end - -def print_http_request(uri, request) - return unless $print_http - #print "Request\n" - print request.method," ",uri, "\n" - print_headers(" ",request) -end - -def print_http_response(response) - return unless $print_http - #print "Response\n" - print response.code, " ", response.message, "\n" - print_headers(" ",response) -end - -def print_headers(marker, headers) - headers.each do |k,v| - k = k.split('-').map{|w| w.capitalize}.join('-')+':' - printf "%s%-20s %s\n",marker,k,v - end -end - -def content_type(file) - file =~ /\.([^.]*)$/ - ext = $1 - mt = $fileMediaTypes[ext] - cs = $charset[mt] - mt = mt+';charset='+cs if ! cs.nil? - return mt -end - -def charset(content_type) - return $charset[content_type] -end - -def warn_exit(msg, rc) - warn msg - exit rc ; -end - -def parseURI(uri_string) - begin - return URI.parse(uri_string).to_s - rescue URI::InvalidURIError => err - warn_exit "Bad URI: <#{uri_string}>", 2 - end -end - -## ---- Command - -def cmd_soh(command=nil) - ## Command line - options = {} - optparse = OptionParser.new do |opts| - # Set a banner, displayed at the top - # of the help screen. - case $cmd - when "s-http", "sparql-http", "soh" - banner="$cmd [get|post|put|delete] datasetURI graph [file]" - when "s-get", "s-head", "s-delete" - banner="$cmd datasetURI graph" - end - - opts.banner = $banner - # Define the options, and what they do - - options[:verbose] = false - opts.on( '-v', '--verbose', 'Verbose' ) do - options[:verbose] = true - end - - options[:version] = false - opts.on( '--version', 'Print version and exit' ) do - print "#{SOH_NAME} #{SOH_VERSION}\n" - exit - end - - # This displays the help screen, all programs are - # assumed to have this option. - opts.on( '-h', '--help', 'Display this screen and exit' ) do - puts opts - exit - end - end - - begin optparse.parse! - rescue OptionParser::InvalidArgument => e - warn e - exit - end - - $verbose = options[:verbose] - $print_http = $verbose - - if command.nil? - if ARGV.size == 0 - warn "No command given: expected one of 'get', 'put', 'post', 'delete', 'query' or 'update'" - exit 1 - end - cmdPrint=ARGV.shift - command=cmdPrint.upcase - else - cmdPrint=command - end - - case command - when "HEAD", "GET", "DELETE" - requiredFile=false - when "PUT", "POST" - requiredFile=true - when "QUERY" - cmd_sparql_query - when "UPDATE" - cmd_sparql_update - else - warn_exit "Unknown command: #{command}", 2 - end - - if requiredFile - then - if ARGV.size != 3 - warn_exit "Required: dataset URI, graph URI (or 'default') and file", 1 - end - else - if ARGV.size != 2 - warn_exit "Required: dataset URI and graph URI (or 'default')", 1 - end - end - - dataset=parseURI(ARGV.shift) - # Relative URI? - graph=parseURI(ARGV.shift) - file="" - if requiredFile - then - file = ARGV.shift if requiredFile - if ! File.exist?(file) - warn_exit "No such file: "+file, 3 - end - if File.directory?(file) - warn_exit "File is a directory: "+file, 3 - end - end - - case command - when "GET" - GET(dataset, graph) - when "HEAD" - HEAD(dataset, graph) - when "PUT" - PUT(dataset, graph, file) - when "DELETE" - DELETE(dataset, graph) - when "POST" - POST(dataset, graph, file) - else - warn_exit "Internal error: Unknown command: #{cmd}", 2 - end - exit 0 -end - -## -------- -def string_or_file(arg) - return arg if ! arg.match(/^@/) - a=(arg[1..-1]) - open(a, 'rb'){|f| f.read} -end - -## -------- SPARQL Query - -## Choose method -def SPARQL_query(service, query, query_file, forcePOST=false, args2={}) - if ! query_file.nil? - query = open(query_file, 'rb'){|f| f.read} - end - if forcePOST || query.length >= 2*1024 - SPARQL_query_POST(service, query, args2) - else - SPARQL_query_GET(service, query, args2) - end -end - -## By GET - -def SPARQL_query_GET(service, query, args2) - args = { "query" => query } - args.merge!(args2) - qs=args.collect { |k,v| "#{k}=#{uri_escape(v)}" }.join('&') - action="#{service}?#{qs}" - headers={} - headers.merge!($headers) - headers[$hAccept]=$accept_results - get_worker(action, headers) -end - -## By POST - -def SPARQL_query_POST(service, query, args2) - # DRY - body/no body for each of request and response. - post_params={ "query" => query } - post_params.merge!(args2) - uri = URI.parse(service) - headers={} - headers.merge!($headers) - headers[$hAccept]=$accept_results - execute_post_form_body(uri, headers, post_params) -end - -def execute_post_form_body(uri, headers, post_params) - request = Net::HTTP::Post.new(uri.request_uri) - qs=post_params.collect { |k,v| "#{k}=#{uri_escape(v)}" }.join('&') - headers[$hContentType] = $mtWWWForm - headers[$hContentLength] = qs.length.to_s - request.initialize_http_header(headers) - request.body = qs - print_http_request(uri, request) - response_print_body(uri, request) -end - -# Usage: -v --help --file= --query= -def cmd_sparql_query - options={} - optparse = OptionParser.new do |opts| - opts.banner = "Usage: #{$cmd} [--query QUERY] [--service URI] [--post] 'query' | @file" - opts.on('--service=URI', '--server=URI', 'SPARQL endpoint') do |uri| - options[:service]=uri - end - opts.on('--query=FILE','--file=FILE', 'Take query from a file') do |file| - options[:file]=file - end - opts.on('--output=TYPE', [:json,:xml,:text,:csv,:tsv], - 'Set the output argument') do |type| - options[:output]=type - end - opts.on('--accept=TYPE', [:json,:xml,:text,:csv,:tsv], - 'Set the accept header type') do |type| - options[:accept]=type - end - options[:verbose] = false - opts.on( '--post', 'Force use of POST' ) do - options[:post] = true - end - opts.on( '-v', '--verbose', 'Verbose' ) do - options[:verbose] = true - end - opts.on( '--version', 'Print version and exit' ) do - print "#{SOH_NAME} #{SOH_VERSION}\n" - exit - end - opts.on( '-h', '--help', 'Display this screen and exit' ) do - puts opts - exit - end - end - - begin optparse.parse! - rescue OptionParser::InvalidArgument, OptionParser::InvalidOption => e - warn e - exit 1 - end - - $verbose = options[:verbose] - $print_http = $verbose - usePOST = options[:post] - - service = options[:service] - warn_exit 'No service specified. Required --service=URI',1 if service.nil? - - # Query - query=nil - query_file=options[:file] - if query_file.nil? && ARGV.size == 0 - then - warn_exit 'No query specified.',1 - end - if query_file.nil? - query = ARGV.shift - if query.match(/^@/) - query_file = query[1..-1] - query = nil - end - end - - # --output ==> output= (non-standard) - args={} - case options[:output] - when nil - when "json","xml","text","csv","tsv" - args['output'] = options[:output] - when :json,:xml,:text,:csv,:tsv - args['output'] = options[:output].to_s - else - warn_exit "Unrecognized output type: "+options[:output],2 - end - - # --accept - # options[:accept] - - print "SPARQL #{service}\n" if $verbose - #args={"output"=>"text"} - SPARQL_query(service, query, query_file, usePOST, args) - exit(0) -end - -## -------- SPARQL Update - -# Update sent as a WWW form. -def SPARQL_update_by_form(service, update, args2={}) - args = {} - args.merge!(args2) - headers={} - headers.merge!($headers) - # args? encode? - body="update="+uri_escape(update) - headers[$hContentType] = $mtWWWForm - headers[$hContentLength] = body.length.to_s - uri = URI.parse(service) - execute_post_form(uri, headers, body) -end - -# DRY - query form. -def execute_post_form(uri, headers, body) - request = Net::HTTP::Post.new(uri.request_uri) - request.initialize_http_header(headers) - request.body = body - print_http_request(uri, request) - response_no_body(uri, request) -end - -def SPARQL_update(service, update, args2={}) - args = {} - args.merge!(args2) - headers={} - headers.merge!($headers) - headers[$hContentType] = $mtSparqlUpdate - uri = URI.parse(service) - request = Net::HTTP::Post.new(uri.request_uri) - request.initialize_http_header(headers) - request.body = update - print_http_request(uri, request) - response_no_body(uri, request) -end - -def cmd_sparql_update(by_raw_post=true) - # Share with cmd_sparql_query - options={} - optparse = OptionParser.new do |opts| - opts.banner = "Usage: #{$cmd} [--file REQUEST] [--service URI] 'request' | @file" - opts.on('--service=URI', '--server=URI', 'SPARQL endpoint') do |uri| - options[:service]=uri - end - opts.on('--update=FILE', '--file=FILE', 'Take update from a file') do |file| - options[:file]=file - end - options[:verbose] = false - opts.on( '-v', '--verbose', 'Verbose' ) do - options[:verbose] = true - end - opts.on( '--version', 'Print version and exit' ) do - print "#{SOH_NAME} #{SOH_VERSION}\n" - exit - end - opts.on( '-h', '--help', 'Display this screen and exit' ) do - puts opts - exit - end - end - - begin optparse.parse! - rescue OptionParser::InvalidArgument => e - warn e - exit - end - - $verbose = options[:verbose] - $print_http = $verbose - - service = options[:service] - warn_exit 'No service specified. Required --service=URI',1 if service.nil? - - update=nil - update_file=options[:file] - - if update_file.nil? && ARGV.size == 0 - then - warn_exit 'No update specified.',1 - end - if update_file.nil? - update = ARGV.shift - if update.match(/^@/) - update_file = update[1..-1] - update = nil - end - end - - print "SPARQL-Update #{service}\n" if $verbose - args={} - - # Reads in the file :-( - if update.nil? - then - update = open(update_file, 'rb'){|f| f.read} - else - update = string_or_file(update) - end - - if by_raw_post - SPARQL_update(service, update, args) - else - SPARQL_update_by_form(service, update, args) - end - exit(0) -end - -## ------- - -case $cmd -when "s-http", "sparql-http", "soh" - $banner="#{$cmd} [get|post|put|delete] datasetURI graph [file]" - cmd_soh -when "s-get", "s-head", "s-put", "s-delete", "s-post" - - case $cmd - when "s-get", "s-head", "s-delete" - $banner="#{$cmd} datasetURI graph" - when "s-put", "s-post" - $banner="#{$cmd} datasetURI graph file" - end - cmd2 = $cmd.sub(/^s-/, '').upcase - cmd_soh cmd2 - -when "s-query", "sparql-query" - cmd_sparql_query -when "s-update", "sparql-update" - cmd_sparql_update true -when "s-update-form", "sparql-update-form" - cmd_sparql_update false -else - warn_exit "Unknown: "+$cmd, 1 -end diff --git a/jena-fuseki1/s-update b/jena-fuseki1/s-update deleted file mode 100755 index 4f6590dc972..00000000000 --- a/jena-fuseki1/s-update +++ /dev/null @@ -1,713 +0,0 @@ -#!/usr/bin/env ruby -# -*- coding: utf-8 -*- - -# 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. - -# SPARQL HTTP Update, client. - -require 'optparse' -require 'net/http' -require 'uri' -require 'cgi' -require 'pp' -require 'ostruct' - -# ToDo -# Allow a choice of media type for GET -# --accept "content-type" (and abbreviations) -# --header "Add:this" -# --user, --password -# Basic authentication: request.basic_auth("username", "password") -# Follow redirects => 301: puts response["location"] # All headers are lowercase? - -SOH_NAME="SOH" -SOH_VERSION="0.0.0" - -$proxy = ENV['http_proxy'] ? URI.parse(ENV['http_proxy']) : OpenStruct.new - -# What about direct naming? - -# Names -$mtTurtle = 'text/turtle;charset=utf-8' -$mtRDF = 'application/rdf+xml' -$mtText = 'text/plain' -$mtNTriples = 'application/n-triples' -$mtNQuads = 'application/n-quads' -$mtJSONLD = 'application/ld+json' -$mtTriG = 'application/trig' -$mtSparqlResultsX = 'application/sparql-results+xml' -$mtSparqlResultsJ = 'application/sparql-results+json' -$mtAppJSON = 'application/json' -$mtAppXML = 'application/xml' -$mtSparqlResultsTSV = 'application/sparql-results+tsv' -$mtSparqlResultsCSV = 'application/sparql-results+csv' -$mtSparqlUpdate = 'application/sparql-update' -$mtWWWForm = 'application/x-www-form-urlencoded' -$mtSparqlQuery = "application/sparql-query" ; - -# Global media type table. -$fileMediaTypes = {} -$fileMediaTypes['ttl'] = $mtTurtle -$fileMediaTypes['n3'] = 'text/n3; charset=utf-8' -$fileMediaTypes['nt'] = $mtText -$fileMediaTypes['rdf'] = $mtRDF -$fileMediaTypes['owl'] = $mtRDF -$fileMediaTypes['nq'] = $mtNQuads -$fileMediaTypes['trig'] = $mtTriG -$fileMediaTypes['json-ld'] = $mtJSONLD -$fileMediaTypes['jsonld'] = $mtJSONLD - -# Global charset : no entry means "don't set" -$charsetUTF8 = 'utf-8' -$charset = {} -$charset[$mtTurtle] = 'utf-8' -$charset[$mtText] = 'ascii' -$charset[$mtTriG] = 'utf-8' -$charset[$mtNQuads] = 'utf-8' - -# Headers - -$hContentType = 'Content-Type' -# $hContentEncoding = 'Content-Encoding' -$hContentLength = 'Content-Length' -# $hContentLocation = 'Content-Location' -# $hContentRange = 'Content-Range' - -$hAccept = 'Accept' -$hAcceptCharset = 'Accept-Charset' -$hAcceptEncoding = 'Accept-Encoding' -$hAcceptRanges = 'Accept-Ranges' - -$headers = { "User-Agent" => "#{SOH_NAME}/Fuseki #{SOH_VERSION}"} -$print_http = false - -# Default for GET -# At least allow anything (and hope!) -$accept_rdf="#{$mtTurtle} , #{$mtNTriples};q=0.9 , #{$mtRDF};q=0.8 , #{$mtJSONLD};q=0.5" -# Datasets -$accept_ds="#{$mtTrig} , #{$mtNQuads};q=0.9 , #{$mtJSONLD};q=0.5" -# For SPARQL query -$accept_results="#{$mtSparqlResultsJ} , #{$mtSparqlResultsX};q=0.9 , #{$accept_rdf}" - -# Accept any in case of trouble. -$accept_rdf="#{$accept_rdf} , */*;q=0.1" -$accept_results="#{$accept_results} , */*;q=0.1" - -# The media type usually forces the charset. -$accept_charset=nil - -## Who we are. -## Two styles: -## s-query ..... -## soh query ..... - -$cmd = File.basename($0) -if $cmd == 'soh' -then - $cmd = (ARGV.size == 0) ? 'soh' : ARGV.shift -end - -if ! $cmd.start_with?('s-') && $cmd != 'soh' - $cmd = 's-'+$cmd -end - -## -------- - -def GET(dataset, graph) - print "GET #{dataset} #{graph}\n" if $verbose - requestURI = target(dataset, graph) - headers = {} - headers.merge!($headers) - headers[$hAccept] = $accept_rdf - headers[$hAcceptCharset] = $accept_charset unless $accept_charset.nil? - get_worker(requestURI, headers) -end - -def get_worker(requestURI, headers) - uri = URI.parse(requestURI) - request = Net::HTTP::Get.new(uri.request_uri) - request.initialize_http_header(headers) - print_http_request(uri, request) - response_print_body(uri, request) -end - -def HEAD(dataset, graph) - print "HEAD #{dataset} #{graph}\n" if $verbose - requestURI = target(dataset, graph) - headers = {} - headers.merge!($headers) - headers[$hAccept] = $accept_rdf - headers[$hAcceptCharset] = $accept_charset unless $accept_charset.nil? - uri = URI.parse(requestURI) - request = Net::HTTP::Head.new(uri.request_uri) - request.initialize_http_header(headers) - print_http_request(uri, request) - response_no_body(uri, request) -end - -def PUT(dataset, graph, file) - print "PUT #{dataset} #{graph} #{file}\n" if $verbose - send_body(dataset, graph, file, Net::HTTP::Put) -end - -def POST(dataset, graph, file) - print "POST #{dataset} #{graph} #{file}\n" if $verbose - send_body(dataset, graph, file, Net::HTTP::Post) -end - -def DELETE(dataset, graph) - print "DELETE #{dataset} #{graph}\n" if $verbose - requestURI = target(dataset, graph) - uri = URI.parse(requestURI) - request = Net::HTTP::Delete.new(uri.request_uri) - headers = {} - headers.merge!($headers) - request.initialize_http_header(headers) - print_http_request(uri, request) - response_no_body(uri, request) -end - -def uri_escape(string) - CGI.escape(string) -end - -def target(dataset, graph) - return dataset+"?default" if graph == "default" - return dataset+"?graph="+uri_escape(graph) -end - -def send_body(dataset, graph, file, method) - mt = content_type(file) - headers = {} - headers.merge!($headers) - headers[$hContentType] = mt - headers[$hContentLength] = File.size(file).to_s - ## p headers - - requestURI = target(dataset, graph) - uri = URI.parse(requestURI) - - request = method.new(uri.request_uri) - request.initialize_http_header(headers) - print_http_request(uri, request) - request.body_stream = File.open(file) - response_no_body(uri, request) -end - -def response_no_body(uri, request) - http = Net::HTTP::Proxy($proxy.host,$proxy.port).new(uri.host, uri.port) - http.read_timeout = nil - # check we can connect. - begin http.start - rescue Exception => e - # puts e.message - #puts e.backtrace.inspect - warn_exit "Failed to connect: #{uri.host}:#{uri.port}: #{e.message}", 3 - end - response = http.request(request) - print_http_response(response) - case response - when Net::HTTPSuccess, Net::HTTPRedirection - # OK - when Net::HTTPNotFound - warn_exit "404 Not found: #{uri}", 9 - #print response.body - else - warn_exit "#{response.code} #{response.message} #{uri}", 9 - # Unreachable - response.error! - end - # NO BODY IN RESPONSE -end - -def response_print_body(uri, request) - http = Net::HTTP::Proxy($proxy.host,$proxy.port).new(uri.host, uri.port) - http.read_timeout = nil - # check we can connect. - begin http.start - rescue => e - #puts e.backtrace.inspect - #print e.class - warn_exit "Failed to connect: #{uri.host}:#{uri.port}: #{e.message}", 3 - end - - # Add a blank line if headers were output. - print "\n" if $http_print ; - - begin - response = http.request(request) { |res| - print_http_response(res) - #puts res.code - res.read_body do |segment| - print segment - end - } - case response - when Net::HTTPSuccess, Net::HTTPRedirection - # OK - when Net::HTTPNotFound - warn_exit "404 Not found: #{uri}", 9 - #print response.body - else - warn_exit "#{response.code}: #{uri}", 9 - # Unreachable - response.error! - end - rescue EOFError => e - warn_exit "IO Error: "+e.message, 3 - end -end - -def print_http_request(uri, request) - return unless $print_http - #print "Request\n" - print request.method," ",uri, "\n" - print_headers(" ",request) -end - -def print_http_response(response) - return unless $print_http - #print "Response\n" - print response.code, " ", response.message, "\n" - print_headers(" ",response) -end - -def print_headers(marker, headers) - headers.each do |k,v| - k = k.split('-').map{|w| w.capitalize}.join('-')+':' - printf "%s%-20s %s\n",marker,k,v - end -end - -def content_type(file) - file =~ /\.([^.]*)$/ - ext = $1 - mt = $fileMediaTypes[ext] - cs = $charset[mt] - mt = mt+';charset='+cs if ! cs.nil? - return mt -end - -def charset(content_type) - return $charset[content_type] -end - -def warn_exit(msg, rc) - warn msg - exit rc ; -end - -def parseURI(uri_string) - begin - return URI.parse(uri_string).to_s - rescue URI::InvalidURIError => err - warn_exit "Bad URI: <#{uri_string}>", 2 - end -end - -## ---- Command - -def cmd_soh(command=nil) - ## Command line - options = {} - optparse = OptionParser.new do |opts| - # Set a banner, displayed at the top - # of the help screen. - case $cmd - when "s-http", "sparql-http", "soh" - banner="$cmd [get|post|put|delete] datasetURI graph [file]" - when "s-get", "s-head", "s-delete" - banner="$cmd datasetURI graph" - end - - opts.banner = $banner - # Define the options, and what they do - - options[:verbose] = false - opts.on( '-v', '--verbose', 'Verbose' ) do - options[:verbose] = true - end - - options[:version] = false - opts.on( '--version', 'Print version and exit' ) do - print "#{SOH_NAME} #{SOH_VERSION}\n" - exit - end - - # This displays the help screen, all programs are - # assumed to have this option. - opts.on( '-h', '--help', 'Display this screen and exit' ) do - puts opts - exit - end - end - - begin optparse.parse! - rescue OptionParser::InvalidArgument => e - warn e - exit - end - - $verbose = options[:verbose] - $print_http = $verbose - - if command.nil? - if ARGV.size == 0 - warn "No command given: expected one of 'get', 'put', 'post', 'delete', 'query' or 'update'" - exit 1 - end - cmdPrint=ARGV.shift - command=cmdPrint.upcase - else - cmdPrint=command - end - - case command - when "HEAD", "GET", "DELETE" - requiredFile=false - when "PUT", "POST" - requiredFile=true - when "QUERY" - cmd_sparql_query - when "UPDATE" - cmd_sparql_update - else - warn_exit "Unknown command: #{command}", 2 - end - - if requiredFile - then - if ARGV.size != 3 - warn_exit "Required: dataset URI, graph URI (or 'default') and file", 1 - end - else - if ARGV.size != 2 - warn_exit "Required: dataset URI and graph URI (or 'default')", 1 - end - end - - dataset=parseURI(ARGV.shift) - # Relative URI? - graph=parseURI(ARGV.shift) - file="" - if requiredFile - then - file = ARGV.shift if requiredFile - if ! File.exist?(file) - warn_exit "No such file: "+file, 3 - end - if File.directory?(file) - warn_exit "File is a directory: "+file, 3 - end - end - - case command - when "GET" - GET(dataset, graph) - when "HEAD" - HEAD(dataset, graph) - when "PUT" - PUT(dataset, graph, file) - when "DELETE" - DELETE(dataset, graph) - when "POST" - POST(dataset, graph, file) - else - warn_exit "Internal error: Unknown command: #{cmd}", 2 - end - exit 0 -end - -## -------- -def string_or_file(arg) - return arg if ! arg.match(/^@/) - a=(arg[1..-1]) - open(a, 'rb'){|f| f.read} -end - -## -------- SPARQL Query - -## Choose method -def SPARQL_query(service, query, query_file, forcePOST=false, args2={}) - if ! query_file.nil? - query = open(query_file, 'rb'){|f| f.read} - end - if forcePOST || query.length >= 2*1024 - SPARQL_query_POST(service, query, args2) - else - SPARQL_query_GET(service, query, args2) - end -end - -## By GET - -def SPARQL_query_GET(service, query, args2) - args = { "query" => query } - args.merge!(args2) - qs=args.collect { |k,v| "#{k}=#{uri_escape(v)}" }.join('&') - action="#{service}?#{qs}" - headers={} - headers.merge!($headers) - headers[$hAccept]=$accept_results - get_worker(action, headers) -end - -## By POST - -def SPARQL_query_POST(service, query, args2) - # DRY - body/no body for each of request and response. - post_params={ "query" => query } - post_params.merge!(args2) - uri = URI.parse(service) - headers={} - headers.merge!($headers) - headers[$hAccept]=$accept_results - execute_post_form_body(uri, headers, post_params) -end - -def execute_post_form_body(uri, headers, post_params) - request = Net::HTTP::Post.new(uri.request_uri) - qs=post_params.collect { |k,v| "#{k}=#{uri_escape(v)}" }.join('&') - headers[$hContentType] = $mtWWWForm - headers[$hContentLength] = qs.length.to_s - request.initialize_http_header(headers) - request.body = qs - print_http_request(uri, request) - response_print_body(uri, request) -end - -# Usage: -v --help --file= --query= -def cmd_sparql_query - options={} - optparse = OptionParser.new do |opts| - opts.banner = "Usage: #{$cmd} [--query QUERY] [--service URI] [--post] 'query' | @file" - opts.on('--service=URI', '--server=URI', 'SPARQL endpoint') do |uri| - options[:service]=uri - end - opts.on('--query=FILE','--file=FILE', 'Take query from a file') do |file| - options[:file]=file - end - opts.on('--output=TYPE', [:json,:xml,:text,:csv,:tsv], - 'Set the output argument') do |type| - options[:output]=type - end - opts.on('--accept=TYPE', [:json,:xml,:text,:csv,:tsv], - 'Set the accept header type') do |type| - options[:accept]=type - end - options[:verbose] = false - opts.on( '--post', 'Force use of POST' ) do - options[:post] = true - end - opts.on( '-v', '--verbose', 'Verbose' ) do - options[:verbose] = true - end - opts.on( '--version', 'Print version and exit' ) do - print "#{SOH_NAME} #{SOH_VERSION}\n" - exit - end - opts.on( '-h', '--help', 'Display this screen and exit' ) do - puts opts - exit - end - end - - begin optparse.parse! - rescue OptionParser::InvalidArgument, OptionParser::InvalidOption => e - warn e - exit 1 - end - - $verbose = options[:verbose] - $print_http = $verbose - usePOST = options[:post] - - service = options[:service] - warn_exit 'No service specified. Required --service=URI',1 if service.nil? - - # Query - query=nil - query_file=options[:file] - if query_file.nil? && ARGV.size == 0 - then - warn_exit 'No query specified.',1 - end - if query_file.nil? - query = ARGV.shift - if query.match(/^@/) - query_file = query[1..-1] - query = nil - end - end - - # --output ==> output= (non-standard) - args={} - case options[:output] - when nil - when "json","xml","text","csv","tsv" - args['output'] = options[:output] - when :json,:xml,:text,:csv,:tsv - args['output'] = options[:output].to_s - else - warn_exit "Unrecognized output type: "+options[:output],2 - end - - # --accept - # options[:accept] - - print "SPARQL #{service}\n" if $verbose - #args={"output"=>"text"} - SPARQL_query(service, query, query_file, usePOST, args) - exit(0) -end - -## -------- SPARQL Update - -# Update sent as a WWW form. -def SPARQL_update_by_form(service, update, args2={}) - args = {} - args.merge!(args2) - headers={} - headers.merge!($headers) - # args? encode? - body="update="+uri_escape(update) - headers[$hContentType] = $mtWWWForm - headers[$hContentLength] = body.length.to_s - uri = URI.parse(service) - execute_post_form(uri, headers, body) -end - -# DRY - query form. -def execute_post_form(uri, headers, body) - request = Net::HTTP::Post.new(uri.request_uri) - request.initialize_http_header(headers) - request.body = body - print_http_request(uri, request) - response_no_body(uri, request) -end - -def SPARQL_update(service, update, args2={}) - args = {} - args.merge!(args2) - headers={} - headers.merge!($headers) - headers[$hContentType] = $mtSparqlUpdate - uri = URI.parse(service) - request = Net::HTTP::Post.new(uri.request_uri) - request.initialize_http_header(headers) - request.body = update - print_http_request(uri, request) - response_no_body(uri, request) -end - -def cmd_sparql_update(by_raw_post=true) - # Share with cmd_sparql_query - options={} - optparse = OptionParser.new do |opts| - opts.banner = "Usage: #{$cmd} [--file REQUEST] [--service URI] 'request' | @file" - opts.on('--service=URI', '--server=URI', 'SPARQL endpoint') do |uri| - options[:service]=uri - end - opts.on('--update=FILE', '--file=FILE', 'Take update from a file') do |file| - options[:file]=file - end - options[:verbose] = false - opts.on( '-v', '--verbose', 'Verbose' ) do - options[:verbose] = true - end - opts.on( '--version', 'Print version and exit' ) do - print "#{SOH_NAME} #{SOH_VERSION}\n" - exit - end - opts.on( '-h', '--help', 'Display this screen and exit' ) do - puts opts - exit - end - end - - begin optparse.parse! - rescue OptionParser::InvalidArgument => e - warn e - exit - end - - $verbose = options[:verbose] - $print_http = $verbose - - service = options[:service] - warn_exit 'No service specified. Required --service=URI',1 if service.nil? - - update=nil - update_file=options[:file] - - if update_file.nil? && ARGV.size == 0 - then - warn_exit 'No update specified.',1 - end - if update_file.nil? - update = ARGV.shift - if update.match(/^@/) - update_file = update[1..-1] - update = nil - end - end - - print "SPARQL-Update #{service}\n" if $verbose - args={} - - # Reads in the file :-( - if update.nil? - then - update = open(update_file, 'rb'){|f| f.read} - else - update = string_or_file(update) - end - - if by_raw_post - SPARQL_update(service, update, args) - else - SPARQL_update_by_form(service, update, args) - end - exit(0) -end - -## ------- - -case $cmd -when "s-http", "sparql-http", "soh" - $banner="#{$cmd} [get|post|put|delete] datasetURI graph [file]" - cmd_soh -when "s-get", "s-head", "s-put", "s-delete", "s-post" - - case $cmd - when "s-get", "s-head", "s-delete" - $banner="#{$cmd} datasetURI graph" - when "s-put", "s-post" - $banner="#{$cmd} datasetURI graph file" - end - cmd2 = $cmd.sub(/^s-/, '').upcase - cmd_soh cmd2 - -when "s-query", "sparql-query" - cmd_sparql_query -when "s-update", "sparql-update" - cmd_sparql_update true -when "s-update-form", "sparql-update-form" - cmd_sparql_update false -else - warn_exit "Unknown: "+$cmd, 1 -end diff --git a/jena-fuseki1/s-update-form b/jena-fuseki1/s-update-form deleted file mode 100755 index 4f6590dc972..00000000000 --- a/jena-fuseki1/s-update-form +++ /dev/null @@ -1,713 +0,0 @@ -#!/usr/bin/env ruby -# -*- coding: utf-8 -*- - -# 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. - -# SPARQL HTTP Update, client. - -require 'optparse' -require 'net/http' -require 'uri' -require 'cgi' -require 'pp' -require 'ostruct' - -# ToDo -# Allow a choice of media type for GET -# --accept "content-type" (and abbreviations) -# --header "Add:this" -# --user, --password -# Basic authentication: request.basic_auth("username", "password") -# Follow redirects => 301: puts response["location"] # All headers are lowercase? - -SOH_NAME="SOH" -SOH_VERSION="0.0.0" - -$proxy = ENV['http_proxy'] ? URI.parse(ENV['http_proxy']) : OpenStruct.new - -# What about direct naming? - -# Names -$mtTurtle = 'text/turtle;charset=utf-8' -$mtRDF = 'application/rdf+xml' -$mtText = 'text/plain' -$mtNTriples = 'application/n-triples' -$mtNQuads = 'application/n-quads' -$mtJSONLD = 'application/ld+json' -$mtTriG = 'application/trig' -$mtSparqlResultsX = 'application/sparql-results+xml' -$mtSparqlResultsJ = 'application/sparql-results+json' -$mtAppJSON = 'application/json' -$mtAppXML = 'application/xml' -$mtSparqlResultsTSV = 'application/sparql-results+tsv' -$mtSparqlResultsCSV = 'application/sparql-results+csv' -$mtSparqlUpdate = 'application/sparql-update' -$mtWWWForm = 'application/x-www-form-urlencoded' -$mtSparqlQuery = "application/sparql-query" ; - -# Global media type table. -$fileMediaTypes = {} -$fileMediaTypes['ttl'] = $mtTurtle -$fileMediaTypes['n3'] = 'text/n3; charset=utf-8' -$fileMediaTypes['nt'] = $mtText -$fileMediaTypes['rdf'] = $mtRDF -$fileMediaTypes['owl'] = $mtRDF -$fileMediaTypes['nq'] = $mtNQuads -$fileMediaTypes['trig'] = $mtTriG -$fileMediaTypes['json-ld'] = $mtJSONLD -$fileMediaTypes['jsonld'] = $mtJSONLD - -# Global charset : no entry means "don't set" -$charsetUTF8 = 'utf-8' -$charset = {} -$charset[$mtTurtle] = 'utf-8' -$charset[$mtText] = 'ascii' -$charset[$mtTriG] = 'utf-8' -$charset[$mtNQuads] = 'utf-8' - -# Headers - -$hContentType = 'Content-Type' -# $hContentEncoding = 'Content-Encoding' -$hContentLength = 'Content-Length' -# $hContentLocation = 'Content-Location' -# $hContentRange = 'Content-Range' - -$hAccept = 'Accept' -$hAcceptCharset = 'Accept-Charset' -$hAcceptEncoding = 'Accept-Encoding' -$hAcceptRanges = 'Accept-Ranges' - -$headers = { "User-Agent" => "#{SOH_NAME}/Fuseki #{SOH_VERSION}"} -$print_http = false - -# Default for GET -# At least allow anything (and hope!) -$accept_rdf="#{$mtTurtle} , #{$mtNTriples};q=0.9 , #{$mtRDF};q=0.8 , #{$mtJSONLD};q=0.5" -# Datasets -$accept_ds="#{$mtTrig} , #{$mtNQuads};q=0.9 , #{$mtJSONLD};q=0.5" -# For SPARQL query -$accept_results="#{$mtSparqlResultsJ} , #{$mtSparqlResultsX};q=0.9 , #{$accept_rdf}" - -# Accept any in case of trouble. -$accept_rdf="#{$accept_rdf} , */*;q=0.1" -$accept_results="#{$accept_results} , */*;q=0.1" - -# The media type usually forces the charset. -$accept_charset=nil - -## Who we are. -## Two styles: -## s-query ..... -## soh query ..... - -$cmd = File.basename($0) -if $cmd == 'soh' -then - $cmd = (ARGV.size == 0) ? 'soh' : ARGV.shift -end - -if ! $cmd.start_with?('s-') && $cmd != 'soh' - $cmd = 's-'+$cmd -end - -## -------- - -def GET(dataset, graph) - print "GET #{dataset} #{graph}\n" if $verbose - requestURI = target(dataset, graph) - headers = {} - headers.merge!($headers) - headers[$hAccept] = $accept_rdf - headers[$hAcceptCharset] = $accept_charset unless $accept_charset.nil? - get_worker(requestURI, headers) -end - -def get_worker(requestURI, headers) - uri = URI.parse(requestURI) - request = Net::HTTP::Get.new(uri.request_uri) - request.initialize_http_header(headers) - print_http_request(uri, request) - response_print_body(uri, request) -end - -def HEAD(dataset, graph) - print "HEAD #{dataset} #{graph}\n" if $verbose - requestURI = target(dataset, graph) - headers = {} - headers.merge!($headers) - headers[$hAccept] = $accept_rdf - headers[$hAcceptCharset] = $accept_charset unless $accept_charset.nil? - uri = URI.parse(requestURI) - request = Net::HTTP::Head.new(uri.request_uri) - request.initialize_http_header(headers) - print_http_request(uri, request) - response_no_body(uri, request) -end - -def PUT(dataset, graph, file) - print "PUT #{dataset} #{graph} #{file}\n" if $verbose - send_body(dataset, graph, file, Net::HTTP::Put) -end - -def POST(dataset, graph, file) - print "POST #{dataset} #{graph} #{file}\n" if $verbose - send_body(dataset, graph, file, Net::HTTP::Post) -end - -def DELETE(dataset, graph) - print "DELETE #{dataset} #{graph}\n" if $verbose - requestURI = target(dataset, graph) - uri = URI.parse(requestURI) - request = Net::HTTP::Delete.new(uri.request_uri) - headers = {} - headers.merge!($headers) - request.initialize_http_header(headers) - print_http_request(uri, request) - response_no_body(uri, request) -end - -def uri_escape(string) - CGI.escape(string) -end - -def target(dataset, graph) - return dataset+"?default" if graph == "default" - return dataset+"?graph="+uri_escape(graph) -end - -def send_body(dataset, graph, file, method) - mt = content_type(file) - headers = {} - headers.merge!($headers) - headers[$hContentType] = mt - headers[$hContentLength] = File.size(file).to_s - ## p headers - - requestURI = target(dataset, graph) - uri = URI.parse(requestURI) - - request = method.new(uri.request_uri) - request.initialize_http_header(headers) - print_http_request(uri, request) - request.body_stream = File.open(file) - response_no_body(uri, request) -end - -def response_no_body(uri, request) - http = Net::HTTP::Proxy($proxy.host,$proxy.port).new(uri.host, uri.port) - http.read_timeout = nil - # check we can connect. - begin http.start - rescue Exception => e - # puts e.message - #puts e.backtrace.inspect - warn_exit "Failed to connect: #{uri.host}:#{uri.port}: #{e.message}", 3 - end - response = http.request(request) - print_http_response(response) - case response - when Net::HTTPSuccess, Net::HTTPRedirection - # OK - when Net::HTTPNotFound - warn_exit "404 Not found: #{uri}", 9 - #print response.body - else - warn_exit "#{response.code} #{response.message} #{uri}", 9 - # Unreachable - response.error! - end - # NO BODY IN RESPONSE -end - -def response_print_body(uri, request) - http = Net::HTTP::Proxy($proxy.host,$proxy.port).new(uri.host, uri.port) - http.read_timeout = nil - # check we can connect. - begin http.start - rescue => e - #puts e.backtrace.inspect - #print e.class - warn_exit "Failed to connect: #{uri.host}:#{uri.port}: #{e.message}", 3 - end - - # Add a blank line if headers were output. - print "\n" if $http_print ; - - begin - response = http.request(request) { |res| - print_http_response(res) - #puts res.code - res.read_body do |segment| - print segment - end - } - case response - when Net::HTTPSuccess, Net::HTTPRedirection - # OK - when Net::HTTPNotFound - warn_exit "404 Not found: #{uri}", 9 - #print response.body - else - warn_exit "#{response.code}: #{uri}", 9 - # Unreachable - response.error! - end - rescue EOFError => e - warn_exit "IO Error: "+e.message, 3 - end -end - -def print_http_request(uri, request) - return unless $print_http - #print "Request\n" - print request.method," ",uri, "\n" - print_headers(" ",request) -end - -def print_http_response(response) - return unless $print_http - #print "Response\n" - print response.code, " ", response.message, "\n" - print_headers(" ",response) -end - -def print_headers(marker, headers) - headers.each do |k,v| - k = k.split('-').map{|w| w.capitalize}.join('-')+':' - printf "%s%-20s %s\n",marker,k,v - end -end - -def content_type(file) - file =~ /\.([^.]*)$/ - ext = $1 - mt = $fileMediaTypes[ext] - cs = $charset[mt] - mt = mt+';charset='+cs if ! cs.nil? - return mt -end - -def charset(content_type) - return $charset[content_type] -end - -def warn_exit(msg, rc) - warn msg - exit rc ; -end - -def parseURI(uri_string) - begin - return URI.parse(uri_string).to_s - rescue URI::InvalidURIError => err - warn_exit "Bad URI: <#{uri_string}>", 2 - end -end - -## ---- Command - -def cmd_soh(command=nil) - ## Command line - options = {} - optparse = OptionParser.new do |opts| - # Set a banner, displayed at the top - # of the help screen. - case $cmd - when "s-http", "sparql-http", "soh" - banner="$cmd [get|post|put|delete] datasetURI graph [file]" - when "s-get", "s-head", "s-delete" - banner="$cmd datasetURI graph" - end - - opts.banner = $banner - # Define the options, and what they do - - options[:verbose] = false - opts.on( '-v', '--verbose', 'Verbose' ) do - options[:verbose] = true - end - - options[:version] = false - opts.on( '--version', 'Print version and exit' ) do - print "#{SOH_NAME} #{SOH_VERSION}\n" - exit - end - - # This displays the help screen, all programs are - # assumed to have this option. - opts.on( '-h', '--help', 'Display this screen and exit' ) do - puts opts - exit - end - end - - begin optparse.parse! - rescue OptionParser::InvalidArgument => e - warn e - exit - end - - $verbose = options[:verbose] - $print_http = $verbose - - if command.nil? - if ARGV.size == 0 - warn "No command given: expected one of 'get', 'put', 'post', 'delete', 'query' or 'update'" - exit 1 - end - cmdPrint=ARGV.shift - command=cmdPrint.upcase - else - cmdPrint=command - end - - case command - when "HEAD", "GET", "DELETE" - requiredFile=false - when "PUT", "POST" - requiredFile=true - when "QUERY" - cmd_sparql_query - when "UPDATE" - cmd_sparql_update - else - warn_exit "Unknown command: #{command}", 2 - end - - if requiredFile - then - if ARGV.size != 3 - warn_exit "Required: dataset URI, graph URI (or 'default') and file", 1 - end - else - if ARGV.size != 2 - warn_exit "Required: dataset URI and graph URI (or 'default')", 1 - end - end - - dataset=parseURI(ARGV.shift) - # Relative URI? - graph=parseURI(ARGV.shift) - file="" - if requiredFile - then - file = ARGV.shift if requiredFile - if ! File.exist?(file) - warn_exit "No such file: "+file, 3 - end - if File.directory?(file) - warn_exit "File is a directory: "+file, 3 - end - end - - case command - when "GET" - GET(dataset, graph) - when "HEAD" - HEAD(dataset, graph) - when "PUT" - PUT(dataset, graph, file) - when "DELETE" - DELETE(dataset, graph) - when "POST" - POST(dataset, graph, file) - else - warn_exit "Internal error: Unknown command: #{cmd}", 2 - end - exit 0 -end - -## -------- -def string_or_file(arg) - return arg if ! arg.match(/^@/) - a=(arg[1..-1]) - open(a, 'rb'){|f| f.read} -end - -## -------- SPARQL Query - -## Choose method -def SPARQL_query(service, query, query_file, forcePOST=false, args2={}) - if ! query_file.nil? - query = open(query_file, 'rb'){|f| f.read} - end - if forcePOST || query.length >= 2*1024 - SPARQL_query_POST(service, query, args2) - else - SPARQL_query_GET(service, query, args2) - end -end - -## By GET - -def SPARQL_query_GET(service, query, args2) - args = { "query" => query } - args.merge!(args2) - qs=args.collect { |k,v| "#{k}=#{uri_escape(v)}" }.join('&') - action="#{service}?#{qs}" - headers={} - headers.merge!($headers) - headers[$hAccept]=$accept_results - get_worker(action, headers) -end - -## By POST - -def SPARQL_query_POST(service, query, args2) - # DRY - body/no body for each of request and response. - post_params={ "query" => query } - post_params.merge!(args2) - uri = URI.parse(service) - headers={} - headers.merge!($headers) - headers[$hAccept]=$accept_results - execute_post_form_body(uri, headers, post_params) -end - -def execute_post_form_body(uri, headers, post_params) - request = Net::HTTP::Post.new(uri.request_uri) - qs=post_params.collect { |k,v| "#{k}=#{uri_escape(v)}" }.join('&') - headers[$hContentType] = $mtWWWForm - headers[$hContentLength] = qs.length.to_s - request.initialize_http_header(headers) - request.body = qs - print_http_request(uri, request) - response_print_body(uri, request) -end - -# Usage: -v --help --file= --query= -def cmd_sparql_query - options={} - optparse = OptionParser.new do |opts| - opts.banner = "Usage: #{$cmd} [--query QUERY] [--service URI] [--post] 'query' | @file" - opts.on('--service=URI', '--server=URI', 'SPARQL endpoint') do |uri| - options[:service]=uri - end - opts.on('--query=FILE','--file=FILE', 'Take query from a file') do |file| - options[:file]=file - end - opts.on('--output=TYPE', [:json,:xml,:text,:csv,:tsv], - 'Set the output argument') do |type| - options[:output]=type - end - opts.on('--accept=TYPE', [:json,:xml,:text,:csv,:tsv], - 'Set the accept header type') do |type| - options[:accept]=type - end - options[:verbose] = false - opts.on( '--post', 'Force use of POST' ) do - options[:post] = true - end - opts.on( '-v', '--verbose', 'Verbose' ) do - options[:verbose] = true - end - opts.on( '--version', 'Print version and exit' ) do - print "#{SOH_NAME} #{SOH_VERSION}\n" - exit - end - opts.on( '-h', '--help', 'Display this screen and exit' ) do - puts opts - exit - end - end - - begin optparse.parse! - rescue OptionParser::InvalidArgument, OptionParser::InvalidOption => e - warn e - exit 1 - end - - $verbose = options[:verbose] - $print_http = $verbose - usePOST = options[:post] - - service = options[:service] - warn_exit 'No service specified. Required --service=URI',1 if service.nil? - - # Query - query=nil - query_file=options[:file] - if query_file.nil? && ARGV.size == 0 - then - warn_exit 'No query specified.',1 - end - if query_file.nil? - query = ARGV.shift - if query.match(/^@/) - query_file = query[1..-1] - query = nil - end - end - - # --output ==> output= (non-standard) - args={} - case options[:output] - when nil - when "json","xml","text","csv","tsv" - args['output'] = options[:output] - when :json,:xml,:text,:csv,:tsv - args['output'] = options[:output].to_s - else - warn_exit "Unrecognized output type: "+options[:output],2 - end - - # --accept - # options[:accept] - - print "SPARQL #{service}\n" if $verbose - #args={"output"=>"text"} - SPARQL_query(service, query, query_file, usePOST, args) - exit(0) -end - -## -------- SPARQL Update - -# Update sent as a WWW form. -def SPARQL_update_by_form(service, update, args2={}) - args = {} - args.merge!(args2) - headers={} - headers.merge!($headers) - # args? encode? - body="update="+uri_escape(update) - headers[$hContentType] = $mtWWWForm - headers[$hContentLength] = body.length.to_s - uri = URI.parse(service) - execute_post_form(uri, headers, body) -end - -# DRY - query form. -def execute_post_form(uri, headers, body) - request = Net::HTTP::Post.new(uri.request_uri) - request.initialize_http_header(headers) - request.body = body - print_http_request(uri, request) - response_no_body(uri, request) -end - -def SPARQL_update(service, update, args2={}) - args = {} - args.merge!(args2) - headers={} - headers.merge!($headers) - headers[$hContentType] = $mtSparqlUpdate - uri = URI.parse(service) - request = Net::HTTP::Post.new(uri.request_uri) - request.initialize_http_header(headers) - request.body = update - print_http_request(uri, request) - response_no_body(uri, request) -end - -def cmd_sparql_update(by_raw_post=true) - # Share with cmd_sparql_query - options={} - optparse = OptionParser.new do |opts| - opts.banner = "Usage: #{$cmd} [--file REQUEST] [--service URI] 'request' | @file" - opts.on('--service=URI', '--server=URI', 'SPARQL endpoint') do |uri| - options[:service]=uri - end - opts.on('--update=FILE', '--file=FILE', 'Take update from a file') do |file| - options[:file]=file - end - options[:verbose] = false - opts.on( '-v', '--verbose', 'Verbose' ) do - options[:verbose] = true - end - opts.on( '--version', 'Print version and exit' ) do - print "#{SOH_NAME} #{SOH_VERSION}\n" - exit - end - opts.on( '-h', '--help', 'Display this screen and exit' ) do - puts opts - exit - end - end - - begin optparse.parse! - rescue OptionParser::InvalidArgument => e - warn e - exit - end - - $verbose = options[:verbose] - $print_http = $verbose - - service = options[:service] - warn_exit 'No service specified. Required --service=URI',1 if service.nil? - - update=nil - update_file=options[:file] - - if update_file.nil? && ARGV.size == 0 - then - warn_exit 'No update specified.',1 - end - if update_file.nil? - update = ARGV.shift - if update.match(/^@/) - update_file = update[1..-1] - update = nil - end - end - - print "SPARQL-Update #{service}\n" if $verbose - args={} - - # Reads in the file :-( - if update.nil? - then - update = open(update_file, 'rb'){|f| f.read} - else - update = string_or_file(update) - end - - if by_raw_post - SPARQL_update(service, update, args) - else - SPARQL_update_by_form(service, update, args) - end - exit(0) -end - -## ------- - -case $cmd -when "s-http", "sparql-http", "soh" - $banner="#{$cmd} [get|post|put|delete] datasetURI graph [file]" - cmd_soh -when "s-get", "s-head", "s-put", "s-delete", "s-post" - - case $cmd - when "s-get", "s-head", "s-delete" - $banner="#{$cmd} datasetURI graph" - when "s-put", "s-post" - $banner="#{$cmd} datasetURI graph file" - end - cmd2 = $cmd.sub(/^s-/, '').upcase - cmd_soh cmd2 - -when "s-query", "sparql-query" - cmd_sparql_query -when "s-update", "sparql-update" - cmd_sparql_update true -when "s-update-form", "sparql-update-form" - cmd_sparql_update false -else - warn_exit "Unknown: "+$cmd, 1 -end