XQuery for remote XML












0















Populating the baseX database with locally stored data is straight forward. But how would remote XML be fetched?






XQuery



The HTML Module provides a function for converting HTML to XML
documents.



Documents can also be converted by specifying the parser and
additional options in the query prolog:




declare option db:parser "html";
declare option db:htmlparser "html=false,nodefaults=true";
doc("index.html")


https://basex.readthedocs.io/en/search/Parsers/#xquery



To make concrete:



thufir@dur:~/basex$ 
thufir@dur:~/basex$ cat html_fetch_parse.xq


fetch:xml("http://books.toscrape.com/", map {
'parser': 'html',
'htmlparser': map { 'html': false(), 'nodefaults': true() }
})

thufir@dur:~/basex$


But what if the document is already XML?



HTML is fetched reasonably easily. Surely XML is even simpler.










share|improve this question

























  • As far as I understand it, the fetch:xml does simply returns fetched nodes and it doesn't insert the nodes in any data base. As for simply loading XML, you can also use the doc function, e.g. use doc('http://example.com/foo.xml'). To work with data bases from XQuery, see the module docs.basex.org/wiki/Database_Module, for instance docs.basex.org/wiki/Database_Module#db:add or docs.basex.org/wiki/Database_Module#db:create e.g. db:create("DB", doc('http://example.com/foo.xml'), 'foo.xml').

    – Martin Honnen
    Jan 2 at 13:35
















0















Populating the baseX database with locally stored data is straight forward. But how would remote XML be fetched?






XQuery



The HTML Module provides a function for converting HTML to XML
documents.



Documents can also be converted by specifying the parser and
additional options in the query prolog:




declare option db:parser "html";
declare option db:htmlparser "html=false,nodefaults=true";
doc("index.html")


https://basex.readthedocs.io/en/search/Parsers/#xquery



To make concrete:



thufir@dur:~/basex$ 
thufir@dur:~/basex$ cat html_fetch_parse.xq


fetch:xml("http://books.toscrape.com/", map {
'parser': 'html',
'htmlparser': map { 'html': false(), 'nodefaults': true() }
})

thufir@dur:~/basex$


But what if the document is already XML?



HTML is fetched reasonably easily. Surely XML is even simpler.










share|improve this question

























  • As far as I understand it, the fetch:xml does simply returns fetched nodes and it doesn't insert the nodes in any data base. As for simply loading XML, you can also use the doc function, e.g. use doc('http://example.com/foo.xml'). To work with data bases from XQuery, see the module docs.basex.org/wiki/Database_Module, for instance docs.basex.org/wiki/Database_Module#db:add or docs.basex.org/wiki/Database_Module#db:create e.g. db:create("DB", doc('http://example.com/foo.xml'), 'foo.xml').

    – Martin Honnen
    Jan 2 at 13:35














0












0








0








Populating the baseX database with locally stored data is straight forward. But how would remote XML be fetched?






XQuery



The HTML Module provides a function for converting HTML to XML
documents.



Documents can also be converted by specifying the parser and
additional options in the query prolog:




declare option db:parser "html";
declare option db:htmlparser "html=false,nodefaults=true";
doc("index.html")


https://basex.readthedocs.io/en/search/Parsers/#xquery



To make concrete:



thufir@dur:~/basex$ 
thufir@dur:~/basex$ cat html_fetch_parse.xq


fetch:xml("http://books.toscrape.com/", map {
'parser': 'html',
'htmlparser': map { 'html': false(), 'nodefaults': true() }
})

thufir@dur:~/basex$


But what if the document is already XML?



HTML is fetched reasonably easily. Surely XML is even simpler.










share|improve this question
















Populating the baseX database with locally stored data is straight forward. But how would remote XML be fetched?






XQuery



The HTML Module provides a function for converting HTML to XML
documents.



Documents can also be converted by specifying the parser and
additional options in the query prolog:




declare option db:parser "html";
declare option db:htmlparser "html=false,nodefaults=true";
doc("index.html")


https://basex.readthedocs.io/en/search/Parsers/#xquery



To make concrete:



thufir@dur:~/basex$ 
thufir@dur:~/basex$ cat html_fetch_parse.xq


fetch:xml("http://books.toscrape.com/", map {
'parser': 'html',
'htmlparser': map { 'html': false(), 'nodefaults': true() }
})

thufir@dur:~/basex$


But what if the document is already XML?



HTML is fetched reasonably easily. Surely XML is even simpler.







xml xpath xml-parsing xquery basex






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Jan 2 at 3:55







Thufir

















asked Jan 2 at 2:29









ThufirThufir

3,1721771163




3,1721771163













  • As far as I understand it, the fetch:xml does simply returns fetched nodes and it doesn't insert the nodes in any data base. As for simply loading XML, you can also use the doc function, e.g. use doc('http://example.com/foo.xml'). To work with data bases from XQuery, see the module docs.basex.org/wiki/Database_Module, for instance docs.basex.org/wiki/Database_Module#db:add or docs.basex.org/wiki/Database_Module#db:create e.g. db:create("DB", doc('http://example.com/foo.xml'), 'foo.xml').

    – Martin Honnen
    Jan 2 at 13:35



















  • As far as I understand it, the fetch:xml does simply returns fetched nodes and it doesn't insert the nodes in any data base. As for simply loading XML, you can also use the doc function, e.g. use doc('http://example.com/foo.xml'). To work with data bases from XQuery, see the module docs.basex.org/wiki/Database_Module, for instance docs.basex.org/wiki/Database_Module#db:add or docs.basex.org/wiki/Database_Module#db:create e.g. db:create("DB", doc('http://example.com/foo.xml'), 'foo.xml').

    – Martin Honnen
    Jan 2 at 13:35

















As far as I understand it, the fetch:xml does simply returns fetched nodes and it doesn't insert the nodes in any data base. As for simply loading XML, you can also use the doc function, e.g. use doc('http://example.com/foo.xml'). To work with data bases from XQuery, see the module docs.basex.org/wiki/Database_Module, for instance docs.basex.org/wiki/Database_Module#db:add or docs.basex.org/wiki/Database_Module#db:create e.g. db:create("DB", doc('http://example.com/foo.xml'), 'foo.xml').

– Martin Honnen
Jan 2 at 13:35





As far as I understand it, the fetch:xml does simply returns fetched nodes and it doesn't insert the nodes in any data base. As for simply loading XML, you can also use the doc function, e.g. use doc('http://example.com/foo.xml'). To work with data bases from XQuery, see the module docs.basex.org/wiki/Database_Module, for instance docs.basex.org/wiki/Database_Module#db:add or docs.basex.org/wiki/Database_Module#db:create e.g. db:create("DB", doc('http://example.com/foo.xml'), 'foo.xml').

– Martin Honnen
Jan 2 at 13:35












1 Answer
1






active

oldest

votes


















0














This code populates a database in baseX correctly:



package org.basex.examples.local;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.Iterator;
import java.util.Properties;
import java.util.logging.Logger;
import org.basex.core.BaseXException;
import org.basex.core.Context;
import org.basex.core.Databases;
import org.basex.core.cmd.CreateDB;
import org.basex.core.cmd.DropDB;
import org.basex.core.cmd.List;
import org.basex.core.cmd.Set;
import org.basex.util.list.StringList;

public class ScraperForXML {

private static final Logger LOG = Logger.getLogger(App.class.getName());
private Properties properties = new Properties();

private ScraperForXML() {
}

public ScraperForXML(Properties properties) {
this.properties = properties;
LOG.fine(properties.toString());
}

public void fetch() throws BaseXException, MalformedURLException {
URL url = new URL(properties.getProperty("xmlURL"));
String databaseName = properties.getProperty("databaseName");

Context context = new Context();
LOG.info(new List().execute(context));

new Set("parser", "xml").execute(context);
new CreateDB(databaseName, url.toString()).execute(context);


Databases databases = context.databases();
StringList stringListOfDatabases = databases.listDBs();
String currentDatabaseName = null;

Iterator<String> databaseIterator = stringListOfDatabases.iterator();

while (databaseIterator.hasNext()) {
currentDatabaseName=databaseIterator.next();
LOG.info(currentDatabaseName);
//not quite sure how to query a database...
}


new DropDB(databaseName).execute(context);
context.close();
}

}


although it's not an actual XQuery which is the goal.






share|improve this answer























    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54000563%2fxquery-for-remote-xml%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0














    This code populates a database in baseX correctly:



    package org.basex.examples.local;

    import java.net.MalformedURLException;
    import java.net.URL;
    import java.util.Iterator;
    import java.util.Properties;
    import java.util.logging.Logger;
    import org.basex.core.BaseXException;
    import org.basex.core.Context;
    import org.basex.core.Databases;
    import org.basex.core.cmd.CreateDB;
    import org.basex.core.cmd.DropDB;
    import org.basex.core.cmd.List;
    import org.basex.core.cmd.Set;
    import org.basex.util.list.StringList;

    public class ScraperForXML {

    private static final Logger LOG = Logger.getLogger(App.class.getName());
    private Properties properties = new Properties();

    private ScraperForXML() {
    }

    public ScraperForXML(Properties properties) {
    this.properties = properties;
    LOG.fine(properties.toString());
    }

    public void fetch() throws BaseXException, MalformedURLException {
    URL url = new URL(properties.getProperty("xmlURL"));
    String databaseName = properties.getProperty("databaseName");

    Context context = new Context();
    LOG.info(new List().execute(context));

    new Set("parser", "xml").execute(context);
    new CreateDB(databaseName, url.toString()).execute(context);


    Databases databases = context.databases();
    StringList stringListOfDatabases = databases.listDBs();
    String currentDatabaseName = null;

    Iterator<String> databaseIterator = stringListOfDatabases.iterator();

    while (databaseIterator.hasNext()) {
    currentDatabaseName=databaseIterator.next();
    LOG.info(currentDatabaseName);
    //not quite sure how to query a database...
    }


    new DropDB(databaseName).execute(context);
    context.close();
    }

    }


    although it's not an actual XQuery which is the goal.






    share|improve this answer




























      0














      This code populates a database in baseX correctly:



      package org.basex.examples.local;

      import java.net.MalformedURLException;
      import java.net.URL;
      import java.util.Iterator;
      import java.util.Properties;
      import java.util.logging.Logger;
      import org.basex.core.BaseXException;
      import org.basex.core.Context;
      import org.basex.core.Databases;
      import org.basex.core.cmd.CreateDB;
      import org.basex.core.cmd.DropDB;
      import org.basex.core.cmd.List;
      import org.basex.core.cmd.Set;
      import org.basex.util.list.StringList;

      public class ScraperForXML {

      private static final Logger LOG = Logger.getLogger(App.class.getName());
      private Properties properties = new Properties();

      private ScraperForXML() {
      }

      public ScraperForXML(Properties properties) {
      this.properties = properties;
      LOG.fine(properties.toString());
      }

      public void fetch() throws BaseXException, MalformedURLException {
      URL url = new URL(properties.getProperty("xmlURL"));
      String databaseName = properties.getProperty("databaseName");

      Context context = new Context();
      LOG.info(new List().execute(context));

      new Set("parser", "xml").execute(context);
      new CreateDB(databaseName, url.toString()).execute(context);


      Databases databases = context.databases();
      StringList stringListOfDatabases = databases.listDBs();
      String currentDatabaseName = null;

      Iterator<String> databaseIterator = stringListOfDatabases.iterator();

      while (databaseIterator.hasNext()) {
      currentDatabaseName=databaseIterator.next();
      LOG.info(currentDatabaseName);
      //not quite sure how to query a database...
      }


      new DropDB(databaseName).execute(context);
      context.close();
      }

      }


      although it's not an actual XQuery which is the goal.






      share|improve this answer


























        0












        0








        0







        This code populates a database in baseX correctly:



        package org.basex.examples.local;

        import java.net.MalformedURLException;
        import java.net.URL;
        import java.util.Iterator;
        import java.util.Properties;
        import java.util.logging.Logger;
        import org.basex.core.BaseXException;
        import org.basex.core.Context;
        import org.basex.core.Databases;
        import org.basex.core.cmd.CreateDB;
        import org.basex.core.cmd.DropDB;
        import org.basex.core.cmd.List;
        import org.basex.core.cmd.Set;
        import org.basex.util.list.StringList;

        public class ScraperForXML {

        private static final Logger LOG = Logger.getLogger(App.class.getName());
        private Properties properties = new Properties();

        private ScraperForXML() {
        }

        public ScraperForXML(Properties properties) {
        this.properties = properties;
        LOG.fine(properties.toString());
        }

        public void fetch() throws BaseXException, MalformedURLException {
        URL url = new URL(properties.getProperty("xmlURL"));
        String databaseName = properties.getProperty("databaseName");

        Context context = new Context();
        LOG.info(new List().execute(context));

        new Set("parser", "xml").execute(context);
        new CreateDB(databaseName, url.toString()).execute(context);


        Databases databases = context.databases();
        StringList stringListOfDatabases = databases.listDBs();
        String currentDatabaseName = null;

        Iterator<String> databaseIterator = stringListOfDatabases.iterator();

        while (databaseIterator.hasNext()) {
        currentDatabaseName=databaseIterator.next();
        LOG.info(currentDatabaseName);
        //not quite sure how to query a database...
        }


        new DropDB(databaseName).execute(context);
        context.close();
        }

        }


        although it's not an actual XQuery which is the goal.






        share|improve this answer













        This code populates a database in baseX correctly:



        package org.basex.examples.local;

        import java.net.MalformedURLException;
        import java.net.URL;
        import java.util.Iterator;
        import java.util.Properties;
        import java.util.logging.Logger;
        import org.basex.core.BaseXException;
        import org.basex.core.Context;
        import org.basex.core.Databases;
        import org.basex.core.cmd.CreateDB;
        import org.basex.core.cmd.DropDB;
        import org.basex.core.cmd.List;
        import org.basex.core.cmd.Set;
        import org.basex.util.list.StringList;

        public class ScraperForXML {

        private static final Logger LOG = Logger.getLogger(App.class.getName());
        private Properties properties = new Properties();

        private ScraperForXML() {
        }

        public ScraperForXML(Properties properties) {
        this.properties = properties;
        LOG.fine(properties.toString());
        }

        public void fetch() throws BaseXException, MalformedURLException {
        URL url = new URL(properties.getProperty("xmlURL"));
        String databaseName = properties.getProperty("databaseName");

        Context context = new Context();
        LOG.info(new List().execute(context));

        new Set("parser", "xml").execute(context);
        new CreateDB(databaseName, url.toString()).execute(context);


        Databases databases = context.databases();
        StringList stringListOfDatabases = databases.listDBs();
        String currentDatabaseName = null;

        Iterator<String> databaseIterator = stringListOfDatabases.iterator();

        while (databaseIterator.hasNext()) {
        currentDatabaseName=databaseIterator.next();
        LOG.info(currentDatabaseName);
        //not quite sure how to query a database...
        }


        new DropDB(databaseName).execute(context);
        context.close();
        }

        }


        although it's not an actual XQuery which is the goal.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Jan 2 at 3:54









        ThufirThufir

        3,1721771163




        3,1721771163
































            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54000563%2fxquery-for-remote-xml%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            MongoDB - Not Authorized To Execute Command

            How to fix TextFormField cause rebuild widget in Flutter

            Npm cannot find a required file even through it is in the searched directory