2012-03-18 2 views
3

Вот файл схемы, midi.xsd, который определяет тип, note, используемый для хранения значений MIDI-ноты:Включая/импорт локальных схем, которые имеют пространство имен

<?xml version="1.0" encoding="utf-8"?> 

<xs:schema elementFormDefault="qualified" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:simpleType name="note"> 
    <xs:restriction base="xs:integer"> 
     <xs:minInclusive value="0"/> 
     <xs:maxInclusive value="127"/> 
    </xs:restriction> 
    </xs:simpleType> 

</xs:schema> 

Вот другой файл схемы, octaves.xsd, который использует midi.xsd для помочь определить расположение должно быть исполнено на файл XML, содержащий данные о октав:

<?xml version="1.0" encoding="utf-8"?> 

<xs:schema elementFormDefault="qualified" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:include schemaLocation="midi.xsd"/> 

    <xs:element name="octaves"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="octave"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element name="name" type="xs:string" /> 

       <xs:element name="midi"> 
       <xs:complexType> 
        <xs:sequence> 

        <xs:element name="value" type="xs:integer" /> 
        <xs:element name="from" type="note" /> 
        <xs:element name="to" type="note" /> 

        </xs:sequence> 
       </xs:complexType> 
       </xs:element> 

      </xs:sequence> 

      <xs:attribute name="index" type="xs:integer" /> 

      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 

</xs:schema> 

Это нормально, и работает точно так же, как вы бы ожидать, что она, кроме того, что у меня есть еще одно требование: я хочу note быть в своем собственном пространстве имен, midi, так что

<xs:element name="from" type="note" /> 

становится

<xs:element name="from" type="midi:note" /> 

Try как я мог, я не могу получить эту работу. Мои попытки включали использование атрибута targetNamespace в разных местах, элемент import и либеральное использование xmlns:midi="...", но безрезультатно. Я бы поставил одну из этих попыток здесь, если бы она не была такой съедобной.

Может ли какая-то душа указать мне в правильном направлении? Я уверен, что проблема связана с тем, что midi.xsd является локальным файлом; он никогда не был и никогда не будет размещен на веб-сервере.

ответ

3

Изменение midi.xsd быть:

<xs:schema elementFormDefault="qualified" 
     xmlns:xs="http://www.w3.org/2001/XMLSchema" 
     targetnamespace="/my/midi/namespace"> 

А затем изменить octaves.xsd сказать:

<xs:schema elementFormDefault="qualified" 
     xmlns:xs="http://www.w3.org/2001/XMLSchema" 
     xmlns:midi="/my/midi/namespace"> 

    <xs:import namespace="/my/midi/namespace" schemaLocation="midi.xsd"/> 

    ... 

    <xs:element name="from" type="midi:note" /> 

Обратите внимание на использование xs:import вместо <xs:include> Две очень разные - вы используете import для привлечения другие пространства имен и include для встроенного включения других файлов схемы в текущий namesp Туз.

Обратите внимание, что /my/midi/namespace может быть любым, что вы хотите, это произвольный идентификатор.

Я уверен, что проблема связана с тем, что midi.xsd является локальным файлом

Неа, не имеет значения.

Смежные вопросы