Проблемы с импортом NameSpace в Xquery

Я пытаюсь импортировать свое пространство имен, но по какой-то причине оно не сдвинется с места. Я пробовал это, а также добавлял путь

import schema namespace r = "http://www.w3.org/2001/XMLSchema" at "Assignment-Xquery3.xsd";

Я продолжаю получать эту ошибку:

Error in schema http://www.w3.org/2001/XMLSchema: No valid schema was found

Я тоже устал от «-Instance», но безрезультатно. Я управляю Saxon EE. Я попытался добавить свой путь к файлу. Я не уверен, что не так, это шаблон, который нам предоставил мой учитель.

Остальная часть моего кода, если необходимо:

import schema namespace r = "http://www.w3.org/2001/XMLSchema" at "Assignment-Xquery3.xsd";
<provider>{
    for $r in
    distinc-values(doc("instance.xml")/r:patient/r:treatment/r:provider)
    return
        <info>
        <patient>{string($r)}</patient>
            {for $rr in doc("instance.xml"/r:patient
            where $r = $rr/r:treatment}
            return
                <treatment>
                    <id>{$rr/r:id/text()}</id>
                   <diagnosis>{$rr/r:diagnosis/text()}</diagnosis>
                   <drug>{$rr/r:drug/text()}</drug>
                </treatment>

        </info>
}</provider>

Это шаблон, который предоставил нам мой учитель


person Bhagyesh    schedule 16.02.2020    source источник
comment
Если вы хотите использовать пространства имен в выражениях пути XQuery, используйте declare namespace r = "http://example.com";. Схема используется для XQuery с поддержкой схемы (который поддерживает Saxon EE), но я не вижу никаких попыток использовать типы схемы в вашем коде XQuery. И маловероятно, что целевое пространство имен вашей схемы Assignment-Xquery3.xsd является пространством имен W3C XSD, поскольку это пространство имен самого языка схемы.   -  person Martin Honnen    schedule 16.02.2020
comment
значит, вы предлагаете просто удалить часть schema, также известную как import namespace r = "http://www.w3.org/2001/XMLSchema";? Если это так, я получаю другую ошибку, которая говорит: Unexpected token name "namespace" beyond end of query   -  person Bhagyesh    schedule 16.02.2020
comment
Я предложил объявить пространство имен, как показано. Если вам нужна помощь в импорте схемы осмысленным образом, покажите нам соответствующую часть схемы (targetNamespace).   -  person Martin Honnen    schedule 16.02.2020
comment
это тег схемы в Assignment-Xquery3.xsd файле, который нам дали: <schema targetNamespace="http://cs548.stevens.edu/clinic/db" elementFormDefault="unqualified" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://cs548.stevens.edu/clinic/db" attributeFormDefault="unqualified"> я могу добавить весь файл, если вам это нужно   -  person Bhagyesh    schedule 16.02.2020
comment
Если вы хотите импортировать эту схему, вам понадобится import schema namespace r = "http://cs548.stevens.edu/clinic/db" at "Assignment-Xquery3.xsd";. Чтобы просто использовать пространство имен в коде XQuery, также достаточно использовать declare namespace r = "http://cs548.stevens.edu/clinic/db";. Я думаю, что сам код XQuery должен использовать group by, но это другой вопрос.   -  person Martin Honnen    schedule 17.02.2020


Ответы (1)


Не очень понятно, чего вы пытаетесь достичь, но очень ясно, что вы делаете неправильно.

Когда вы пишете

import schema namespace r = "http://www.w3.org/2001/XMLSchema" at "Assignment-Xquery3.xsd";

Ты

(a) попытка загрузить схему в местоположении «Assignment-Xquery3.xsd». Это, вероятно, нормально; Я осмелюсь сказать, что в этом месте, вероятно, есть действующая схема.

(b) подтверждение того, что схема в этом месте имеет целевое пространство имен «http://www.w3.org/2001/XMLSchema". Это кажется крайне маловероятным, поскольку маловероятно, что пользовательские приложения захотят получить доступ к схеме для документов схемы.

(c) привязка префикса «r» к этому пространству имен. Опять же, это кажется неправдоподобным, (i) потому что обычно люди используют префикс для этого пространства имен «xs» или «xsd», и (ii) потому что вы продолжаете использовать имя r:treatment, и в этом пространстве имен определенно нет имени с местное название «лечение».

Я сильно подозреваю, хотя и не могу быть уверен, что вы вообще не хотите импортировать схему; вы просто хотите привязать префикс "r" к некоторому пространству имен (возможно, http://www.example.org/review, но мы не можем быть уверены). Если это так, то вы просто хотите

declare namespace r = "http://www.example.org/review";
person Michael Kay    schedule 16.02.2020