Oracle XMLDocument.validateContent()
От: Denis Popov Россия http://picasaweb.google.com/denislpopov
Дата: 20.02.08 11:08
Оценка:
Как в Oracle XDK проверить когда-то созданный XMLDocument на основании схемы?


import oracle.xml.parser.schema.XMLSchema;
import oracle.xml.parser.schema.XSDBuilder;
import oracle.xml.parser.v2.DOMParser;
import oracle.xml.parser.v2.XMLDocument;
import oracle.xml.parser.v2.XMLParseException;
import org.w3c.dom.Element;
import org.xml.sax.InputSource;

import java.io.StringReader;

public class DomValidateTest {

  public static void main(String[] args)
    throws Exception {
    // Schema
    XSDBuilder builder = new XSDBuilder();
    InputSource schemaSource = new InputSource(
      new StringReader(
        "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
          "<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">\n" +
          "  <xs:element name=\"root\" nillable=\"false\">\n" +
          "    <xs:complexType>\n" +
          "      <xs:sequence>\n" +
          "        <xs:element name=\"value\" type=\"xs:string\" nillable=\"false\"/>\n" +
          "      </xs:sequence>\n" +
          "    </xs:complexType>\n" +
          "  </xs:element>\n" +
          "</xs:schema>"
      )
    );
    XMLSchema schema = builder.build(schemaSource);

    // First document
    XMLDocument doc = new XMLDocument();
    Element rootElement = doc.createElement("root");
    doc.appendChild(rootElement);
    rootElement.appendChild(doc.createElement("value"));

    doc.print(System.out);
    try {
      doc.validateContent(schema);
      System.out.println("document validation succeed.");
    } catch (XMLParseException e) {
      System.err.println("document validation error: " + e.getMessage());
    }

    // Second document
    DOMParser parser = new DOMParser();
    parser.parse(new StringReader("<root><value/></root>"));
    XMLDocument doc2 = parser.getDocument();

    doc2.print(System.out);
    try {
      doc2.validateContent(schema);
      System.out.println("document2 validation succeed.");
    } catch (XMLParseException e) {
      System.err.println("document2 validation error: " + e.getMessage());
    }
  }
}


Вывод:

<root>
   <value/>
</root>
document validation error: Element not completed: 'null'
<root>
   <value/>
</root>
document2 validation succeed.


Почему в первом случае идет ошибка валидации?
Re: Oracle XMLDocument.validateContent()
От: Blazkowicz Россия  
Дата: 20.02.08 11:41
Оценка:
Здравствуйте, Denis Popov, Вы писали:

DP>
DP><root>
DP>   <value/>
DP></root>
DP>document validation error: Element not completed: 'null'
DP><root>
DP>   <value/>
DP></root>
DP>document2 validation succeed.
DP>


Есть ли stacktrace ошибки? А исходный код парсера? Попробуй в дебаггере посмотреть оба документа. Может там ссылка на родителя не проставилась али ещё что.
Re[2]: Oracle XMLDocument.validateContent()
От: Denis Popov Россия http://picasaweb.google.com/denislpopov
Дата: 20.02.08 12:59
Оценка:
Blazkowicz wrote:

> Есть ли stacktrace ошибки? А исходный код парсера? Попробуй в дебаггере

> посмотреть оба документа. Может там ссылка на родителя не проставилась
> али ещё что.

Исходников к Oracle XDK по-моему нет, к сожалению, и нет архивов, собранных с дополнительной
отладочной информацией, как в JDBC. Трасса небольшая:

oracle.xml.parser.v2.XMLParseException: Element not completed: 'null'
    at oracle.xml.parser.v2.XMLError.flushErrors(XMLError.java:271)
    at oracle.xml.parser.v2.XMLElement.validateContent(XMLElement.java:2781)
    at oracle.xml.parser.v2.XMLElement.validateContent(XMLElement.java:2697)
    at local.oracle.xml.dom.DomValidateTest.main(DomValidateTest.java:50)


вот и гадай тут..
Posted via RSDN NNTP Server 2.1 beta
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.