Как написать XQuery, который пересекает элемент xsd: any? - PullRequest
2 голосов
/ 06 октября 2011

Схема содержитэлемент.

Код, по некоторой внешней информации, знает, что вместо любой есть конкретная структура XML (например, foo).

XQuery будет выглядеть как / Root / Child / AnotherChild / book/title.

Но XQuery жалуется, что элемент книги неизвестен, и, следовательно, XQuery недопустим.

Как мне написать запрос, чтобы XQuery мог принять что-либо вместо может быть сопоставлено динамически, во время выполнения?

Если среда имеет какое-либо значение, это Java, Oracle BPEL, SOA-сервер 1.1.5.

Ответы [ 2 ]

1 голос
/ 07 октября 2011
<xsd:any/>

на самом деле не соответствует «любому» элементу, скорее, он соответствует любому элементу, объявленному где-то в схеме в области видимости.

Например, следующая схема определяет элемент, содержащий 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>

Тем не менее, следующий запрос не будет выполнен:

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

потому что my: Child объявлен нигде.

Если схема изменена следующим образом:

<?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>

тогда запрос должен быть успешным. Конечно, элемент, соответствующий xsd: any, может находиться в другом пространстве имен.

1 голос
/ 06 октября 2011

Этот работал для меня: // книга / название.

Конечно, это не достаточно точно, и не может использоваться, когда есть нескольков схеме.Для моей схемы, хотя этого достаточно.

Мне все еще интересно, каким будет Правильный путь (тм).

...