Hi Andy,

> I am setting up the xml schema namespace the same way eclipse does when
> you create a new XSD or XML file. I entered
> *http://www.w3.org/2001/XMLSchema-instance*in the address bar of my
> browsers and got quite a surprise!
> 
The XML Namespace spec(1) states that the namespace URI need not be a
valid URL (i.e. point to a valid document on the network). In other
words, you are declaring your namespaces correctly.

> http://www.w3.org/TR/xmlschema-1/#no-xsi is very confusing. 
If you look at section 3.2.7 (first table) at that location, you'll see
that using 'xsi:type' is perfectly fine.

> where does libxml get the schema lang schema/dtd? As a test I put some
> typos in my xsd file. libxml generated an error when I tried to validate
> the xsd file as expected?
You don't have to worry about libxml retrieving resources at namespace
locations, that does not happen. Only the actual URI string matters (as
per (1)).

> what URL should I be using?
> 
> Do I need to make a special call to cause the libxml to use this other
> location?
Nope, you're using the right URIs, no network access is necessary.

> Would you be willing to send my your sample C program? 
Sure thing (I should have done so in my original reply).

[] to compile:
$ gcc `xml2-config --cflags --libs` zoo.c -o zoo

[] sample run:
$ ./zoo zoo.xml ZooRequest.xsd
Attempting to validate zoo.xml with ZooRequest.xsd
Document in zoo.xml is valid

[] contents of zoo.xml:
$ cat zoo.xml
<?xml version="1.0" encoding="UTF-8"?>
<zoo:cageRequest xmlns:zoo="http://www.example.org/Zoo";
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
  <animal xsi:type="zoo:Fish">
    <name>Blue Fin Tuna</name>
    <numberOfFins>4</numberOfFins>
  </animal>
</zoo:cageRequest>

Hope you get things sorted out.

Piotr


(1) - http://www.w3.org/TR/REC-xml-names/#ns-decl
/** 
 * Sample namespace XSD validation program. 
 * Released into public domain.
 * Piotr Sipika
 */

#include <stdlib.h>
#include <stdio.h>

#include <libxml/xmlschemas.h>
#include <libxml/parser.h>
#include <libxml/tree.h>

int
main(int argc, char * argv[])
{
  if (argc != 3)
    {
      fprintf(stderr, "Need file name and schema file name\n");

      return EXIT_FAILURE;
    }

  const char *pczFile = argv[1];
  const char *pczSchema = argv[2];

  xmlInitParser();

  xmlDocPtr pDoc = xmlReadFile(pczFile, NULL, XML_PARSE_NONET);

  if (!pDoc)
    {
      fprintf(stderr, "Unable to read %s\n", pczFile);

      xmlCleanupParser();

      return EXIT_FAILURE;
    }

  xmlDocPtr pSchemaDoc = xmlReadFile(pczSchema, NULL, XML_PARSE_NONET);

  if (!pSchemaDoc)
    {
      fprintf(stderr, "Unable to read %s\n", pczSchema);

      xmlFreeDoc(pDoc);

      xmlCleanupParser();

      return EXIT_FAILURE;
    }

  // create actual schema
  xmlSchemaParserCtxtPtr pSchemaCtxt = xmlSchemaNewDocParserCtxt(pSchemaDoc);

  if (!pSchemaCtxt)
    {
      fprintf(stderr, "Unable to create schema context\n");

      xmlFreeDoc(pDoc);

      xmlFreeDoc(pSchemaDoc);

      xmlCleanupParser();

      return EXIT_FAILURE;
    }

  xmlSchemaPtr pSchema = xmlSchemaParse(pSchemaCtxt);

  if (!pSchema)
    {
      fprintf(stderr, "Unable to create schema\n");

      xmlSchemaFreeParserCtxt(pSchemaCtxt);

      xmlFreeDoc(pDoc);

      xmlFreeDoc(pSchemaDoc);

      xmlCleanupParser();

      return EXIT_FAILURE;
    }

  xmlSchemaValidCtxtPtr pValidCtxt = xmlSchemaNewValidCtxt(pSchema);

  if (!pValidCtxt)
    {
      fprintf(stderr, "Unable to create validity context for schema\n");

      xmlSchemaFree(pSchema);

      xmlSchemaFreeParserCtxt(pSchemaCtxt);

      xmlFreeDoc(pDoc);

      xmlFreeDoc(pSchemaDoc);

      xmlCleanupParser();

      return EXIT_FAILURE;
    }

  fprintf(stdout, "Attempting to validate %s with %s\n", pczFile, pczSchema);

  xmlSchemaFreeParserCtxt(pSchemaCtxt);

  xmlFreeDoc(pSchemaDoc);

  int iError = xmlSchemaValidateDoc(pValidCtxt, pDoc);

  if (iError == 0)
    {
      fprintf(stdout, "Document in %s is valid\n", pczFile);
    }
  else
    {
      fprintf(stdout, "Document in %s is NOT valid\n", pczFile);
    }

  xmlSchemaFree(pSchema);
  
  //  xmlSchemaFreeParserCtxt(pSchemaCtxt);
  
  xmlFreeDoc(pDoc);
  
  //  xmlFreeDoc(pSchemaDoc);
  
  xmlCleanupParser();
                               
  return EXIT_SUCCESS;
}
_______________________________________________
xml mailing list, project page  http://xmlsoft.org/
xml@gnome.org
http://mail.gnome.org/mailman/listinfo/xml

Reply via email to