2013-12-24 2 views
1

Я пытаюсь создать XSD, чтобы определить сложные типы, на которые нужно ссылаться в других XSD. Все идет нормально. Внутри этого XSD (playlist.xsd) у меня есть один главный complexType «playlistType». Я хочу, чтобы playlistType мог содержать несколько экземпляров элемента типа «secondaryEventType», который я пытаюсь определить как отдельный complexType в том же файле XSD.XSD ссылается на тип, определенный в том же файле

Однако, когда я пытаюсь создать элемент «secondaryEvent» в «playlistType», я постоянно получаю сообщение об ошибке: «« secondaryEventType »должен ссылаться на существующий простой или сложный тип.». Я попытался поставить определение «secondaryEventType» как до, так и после определения основного «playlistType», я пробовал использовать и без префикса xs :.

Что я делаю неправильно?

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsB="baseTypes" targetNamespace="playlist"> 
    <xs:import namespace="baseTypes" schemaLocation="baseTypes.xsd"/> 

    <xs:complexType name="secondaryEventType"> 
     <xs:sequence> 
      <xs:element name="type"> 
       <xs:simpleType> 
        <xs:restriction base="xs:string"> 
         <xs:enumeration value="graphic"/> 
         <xs:enumeration value="bug"/> 
         <xs:enumeration value="voiceover"/> 
         <xs:enumeration value="subtitle"/> 
         <xs:enumeration value="addInsertionAvail"/> 
        </xs:restriction> 
       </xs:simpleType> 
      </xs:element> 
     </xs:sequence> 
    </xs:complexType> 

    <xs:complexType name="playlistType"> 
     <xs:sequence> 
      <xs:element name="primaryEvent" minOccurs="1" maxOccurs="unbounded"> 
       <xs:complexType> 
        <xs:sequence> 
         <xs:element name="eventID" type="xsB:guidType"/> 
         <xs:element name="eventTitle" type="xs:string"/> 
         <xs:element name="mediaID"> 
          <xs:simpleType> 
           <xs:restriction base="xs:string"> 
            <xs:minLength value="2"/> 
            <xs:pattern value="\S+"/> 
           </xs:restriction> 
          </xs:simpleType> 
         </xs:element> 
         <xs:element name="SOM" type="xsB:timecodeType"/> 
         <xs:element name="DUR" type="xsB:timecodeType"/> 
         <xs:element name="transition" minOccurs="0"> 
          <xs:simpleType> 
           <xs:restriction base="xs:string"> 
            <xs:enumeration value="cut"/> 
            <xs:enumeration value="dissolve"/> 
            <xs:enumeration value="fade"/> 
           </xs:restriction> 
          </xs:simpleType> 
         </xs:element> 
         <xs:element name="transitionDuration" type="xsB:timecodeType" minOccurs="0"/> 
         <xs:element name="secondaryEvent" type="secondaryEventType" minOccurs="0" maxOccurs="unbounded"/> 
<!-- Error occurs Here --> 
        </xs:sequence> 
       </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
    </xs:complexType> 

</xs:schema> 

ответ

1

Ссылка имя сложного типа playlistType с использованием пространства имен, заданных XSD-х targetNamespace. Обновленный, работая XSD следует ...

Сто baseTypes.xsd:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      xmlns:xsB="baseTypes" 
      targetNamespace="baseTypes"> 
    <xs:complexType name="guidType"/> 
    <xs:complexType name="timecodeType"/> 
</xs:schema> 

Работа главного XSD:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      xmlns:xsB="baseTypes" 
      xmlns:pl="playlist" 
      targetNamespace="playlist"> 
    <xs:import namespace="baseTypes" schemaLocation="baseTypes.xsd"/> 
    <xs:complexType name="secondaryEventType"> 
    <xs:sequence> 
     <xs:element name="type"> 
     <xs:simpleType> 
      <xs:restriction base="xs:string"> 
      <xs:enumeration value="graphic"/> 
      <xs:enumeration value="bug"/> 
      <xs:enumeration value="voiceover"/> 
      <xs:enumeration value="subtitle"/> 
      <xs:enumeration value="addInsertionAvail"/> 
      </xs:restriction> 
     </xs:simpleType> 
     </xs:element> 
    </xs:sequence> 
    </xs:complexType> 
    <xs:complexType name="playlistType"> 
    <xs:sequence> 
     <xs:element name="primaryEvent" 
        minOccurs="1" 
        maxOccurs="unbounded"> 
     <xs:complexType> 
      <xs:sequence> 
      <xs:element name="eventID" type="xsB:guidType"/> 
      <xs:element name="eventTitle" type="xs:string"/> 
      <xs:element name="mediaID"> 
       <xs:simpleType> 
       <xs:restriction base="xs:string"> 
        <xs:minLength value="2"/> 
        <xs:pattern value="\S+"/> 
       </xs:restriction> 
       </xs:simpleType> 
      </xs:element> 
      <xs:element name="SOM" type="xsB:timecodeType"/> 
      <xs:element name="DUR" type="xsB:timecodeType"/> 
      <xs:element name="transition" minOccurs="0"> 
       <xs:simpleType> 
       <xs:restriction base="xs:string"> 
        <xs:enumeration value="cut"/> 
        <xs:enumeration value="dissolve"/> 
        <xs:enumeration value="fade"/> 
       </xs:restriction> 
       </xs:simpleType> 
      </xs:element> 
      <xs:element name="transitionDuration" 
         type="xsB:timecodeType" 
         minOccurs="0"/> 
      <xs:element name="secondaryEvent" 
         type="pl:secondaryEventType" 
         minOccurs="0" 
         maxOccurs="unbounded"/> 
      </xs:sequence> 
     </xs:complexType> 
     </xs:element> 
    </xs:sequence> 
    </xs:complexType> 
</xs:schema> 
+0

Очень большое спасибо за получение меня через этот блок. – Granby

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