Вот файл схемы, 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" />
Как ни старайся, я не могу заставить это работать.Мои попытки включали использование атрибута targetNamespace
в разных местах, элемента import
и либеральное использование xmlns:midi="..."
, но безрезультатно.Я бы опубликовал одну из этих попыток здесь, если бы она не была настолько ужасной.
Может ли какая-то добрая душа направить меня в правильном направлении? Я почти уверен, что проблема в том, что midi.xsd
является локальным файлом ;он никогда не был и никогда не будет размещен на веб-сервере.