/ / Jak napisać XQuery, który przecina xsd: dowolny element? - java, oracle, xquery, bpel

Jak napisać XQuery, który przekracza xsd: dowolny element? - java, oracle, xquery, bpel

Schemat zawiera element <xsd: any />.

Kod, według niektórych informacji zewnętrznych, wie, że zamiast dowolnej istnieje specyficzna struktura XML (np. Foo).

XQuery wyglądałby jak / Root / Child / AnotherChild / book / title.

Ale XQuery narzeka, że ​​element książki nie jest znany, a zatem XQuery jest nieprawidłowy.

Jak napisać zapytanie, aby XQuery zaakceptowało, że wszystko w <dowolnym /> miejscu może być dynamicznie dopasowywane w czasie wykonywania?

Jeśli środowisko ma jakiekolwiek znaczenie, to Java, Oracle BPEL, SOA server 1.1.5.

Odpowiedzi:

1 dla odpowiedzi № 1
<xsd:any/>

tak naprawdę nie pasuje do „żadnego” elementu - raczej pasuje do dowolnego elementu zadeklarowanego gdzieś w zasięgu schematu.

Na przykład poniższy schemat definiuje element zawierający xsd: any:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.com/">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:any/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

Niemniej jednak następujące zapytanie nie powiedzie się:

import schema namespace my = "http://www.example.com/";
validate { <my:root><my:Child/></my:root> }

ponieważ moje: Dziecko nie zostało ogłoszone nigdzie.

Jeśli schemat zostanie zmodyfikowany w następujący sposób:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.com/">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:any/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Child" type="xs:anyType"/>
</xs:schema>

wówczas zapytanie powinno się powieść. Oczywiście element pasujący do xsd: any może znajdować się w innej przestrzeni nazw.


1 dla odpowiedzi nr 2

Ten działał dla mnie: // książka / tytuł.

Oczywiście nie jest to wystarczająco precyzyjne i nie można go użyć, gdy w schemacie jest wiele <xsd: any>. Dla mojego schematu jest to jednak wystarczające.

Nadal zastanawiam się, jaka byłaby właściwa droga (tm).