Hi Frans,

thanks for your further tests, we will have a look at that issue.

Kind regards,
Andreas

Am 26.03.2011 um 17:53 schrieb frans@planet:

Hi Andreas,

Thanks for your answer.  I added some cases to your Test-class and I ran it against the newest release of BaseX (6.6).

 
<Test.java>

setContent and setContentAsDOM work fine. setContentAsSax works fine for <tag xmlns=\"http://example.org\"/>.
For <tns:tag xmlns:tns=\"http://example.org\"/> setContentAsSax gives <tns:tag xmlnstns="http://example.org"/>. The colon is missing in xmlnstns.

Regards,
Frans

Op 25 mrt 2011, om 09:37 heeft Andreas Weiler het volgende geschreven:

Hi Frans,

the following code with the newest release of BaseX produces correct results:

package org.basex.examples.xmldb;

import org.basex.api.xmldb.BXCollection;
import org.xmldb.api.base.*;
import org.xmldb.api.modules.XMLResource;
import org.xmldb.api.*;

/**
 * This class serves as an example for creating a database with the XML:DB API.
 *
 * @author BaseX Team 2005-11, BSD License
 */
public final class Test {
  /** Database driver. */
  public static final String DRIVER = "org.basex.api.xmldb.BXDatabase";

  /**
   * Main method of the example class.
   * @param args (ignored) command-line arguments
   * @throws Exception exception
   */
  public static void main(final String[] args) throws Exception {

    System.out.println("=== XMLDBCreate ===");

    try {
      // Register the database
      Class<?> c = Class.forName(DRIVER);
      Database db = (Database) c.newInstance();
      DatabaseManager.registerDatabase(db);

      System.out.println("\n* Create a new collection.");

      // Create a new collection
      BXCollection col = new BXCollection("Collection", false);

      // ID for the first document
      String id1 = "doc1";
      // Content of the first document
      String doc1 = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" +
      "<tag xmlns=\"http://example.org\">" +
      "</tag>";

      // ID for the second document
      String id2 = "doc2";
      // Content of the second document
      String doc2 = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" +
      "<tns:tag xmlns:tns=\"http://example.org\">" +
      "</tns:tag>";

      System.out.println("\n* Create new resources.");

      // Create a new XML resource with the specified ID
      XMLResource res1 = col.createResource(id1, XMLResource.RESOURCE_TYPE);
      XMLResource res2 = col.createResource(id2, XMLResource.RESOURCE_TYPE);

      // Set the content of the XML resource as the document
      res1.setContent(doc1);
      res2.setContent(doc2);

      System.out.println("\n* Store new resource.");

      // Store the resource into the database
      col.storeResource(res1);
      col.storeResource(res2);

      col.close();

    } catch(final XMLDBException ex) {
      // Handle exceptions
      System.err.println("XML:DB Exception occured " + ex.errorCode);
    }
  }
}

-- Andreas

Am 25.03.2011 um 08:34 schrieb Andreas Weiler:

Hi Frans,

could you send me your java class, so i can have a look at it.

-- Andreas

Am 25.03.2011 um 00:01 schrieb frans@planet:

I'am accessing BaseX 6.5.1 through the XMLDB API. There are some issues with namespace handling when storing resources. Let me clarify that with some examples.

First example

I want to store the following as a resource:

String example =  "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" +
                           "<tag xmlns=\"http://example.org\">" +
                           "</tag>";

This yields <tag xmlns="http://example.org"/> in the GUI. So this is OK.

Second example

I want to store the following as a resource and INTPARSE = false:

String example =  "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" +
                           "<tns:tag xmlns:tns=\"http://example.org\">" +
                           "</tns:tag>";

This yields the following exception:
org.xmldb.api.base.XMLDBException: "null" (Line 1): The prefix "tns" for element "tns:tag" is not bound

Third example

I want to store the following as a resource and INTPARSE = true:

String example =  "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" +
                           "<tns:tag xmlns:tns=\"http://example.org\">" +
                           "</tns:tag>";

This yields <tns:tag xmlnstns="http://example.org"/> in the GUI. The colon is missing in ' xmlnstns' . So this is not OK.

Are the second and third examples bugs or should I change some setting to get a proper handling of namespaces?

Regards,
Frans
_______________________________________________
BaseX-Talk mailing list
BaseX-Talk@mailman.uni-konstanz.de
https://mailman.uni-konstanz.de/mailman/listinfo/basex-talk

_______________________________________________
BaseX-Talk mailing list
BaseX-Talk@mailman.uni-konstanz.de
https://mailman.uni-konstanz.de/mailman/listinfo/basex-talk