According to the Xerces Java API it should be possible to search
an entire DOM-Document for an Element with a specific ID using
getElementById( String elementId ).

The documentation states that I have to tell the
DOM-Implementation what the name of the id-Attribute is.
Either by use of a DTD or a XML Schema.

If I use a DTD to specify my id-attribute and assign it to my
XML file, getElementById() returns an object of type Element.
If I use a XML Schema I get 'null' instead.
I tried Xerces 2.0.1 and 2.0.2 .

The FAQ-Page of the Apache-Group says about Xerces:
"According to the XML Schema specification, an instance document
might have more than one validation root and ID/IDREFS must be unique
only within the context of a particular validation root, meaning
that a document may potentially contain multiple identical ids.
In this case, the output of getElementById() is unspecified. On
the other hand, if the document root is a validation root of the
document, getElementById() should work as expected."
http://xml.apache.org/xerces2-j/faq-general.html#faq-5

Haeh???

Question: How do I have to change my XML-Schema or Java-code
to be able to use getElementById() in combination with a
XML-Schema?

Here is the XML- and Schema-code which I tried. Any help is welcome.

he XML-File:
-------------
<?xml version="1.0" encoding="UTF-8"?>
<katalog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
xsi:noNamespaceSchemaLocation="katalog.xsd">
  <book id="abc123">
    <author>Steven King</author>
  </book>
  <book id="abc124">
    <author>Tom Clancy</author>
  </book>
</katalog>


The XML Schema:
---------------
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema";
elementFormDefault="qualified">
  <xs:element name="katalog">
    <xs:complexType>
        <xs:sequence>
          <xs:element name="book" maxOccurs="unbounded">
            <xs:complexType>
                <xs:sequence>
                  <xs:element name="author" type="xs:string"/>
                </xs:sequence>
                <xs:attribute name="id" type="xs:ID" use="required"/>
            </xs:complexType>
          </xs:element>
        </xs:sequence>
    </xs:complexType>
    <xs:key name="schluessel">
        <xs:selector xpath=".//book"/>
        <xs:field xpath="@id"/>
    </xs:key>
  </xs:element>
</xs:schema>


  H.-Gerd


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to