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).