2014-01-30 2 views
2

Я пытаюсь создать XSD для следующей схемы, и я не уверен, как самостоятельно ссылаться на один и тот же элемент. Я попытался использовать атрибут ref, но визуальная студия продолжает поднимать ошибку, когда создаю xml-файл. При создании XML внутри предварительно REQ элемента, который он ждет меня, чтобы обеспечить ему полный элемент курса с описанием/отдела/кредитовКак использовать ссылку в XSD

может кто-то помочь создать XSD для XML в конце

<xs:element name="Course"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="Description" /> 
     <xs:element name="Department" /> 
     <xs:element name="Credits" type="xs:decimal" /> 
     <xs:element name="Prerequisite" minOccurs="0" maxOccurs="unbounded"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element ref="Course" minOccurs="1" maxOccurs="unbounded"/> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
     <xs:attribute name="CourseCode" type="xs:string" use="required" /> 
    </xs:complexType> 
    </xs:element> 

    <xs:element name="Courses"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element ref="Course" minOccurs="0" maxOccurs="unbounded"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 

И вот XML

<Courses> 
    <Course CourseCode="ABC123"> 
    <Description>This is Math Level 2</Description> 
    <Department>Maths</Department> 
    <Credits>7.5</Credits> 
    <Prerequisite> 
     <Course CourseCode="MTH001"></Course> 
    </Prerequisite> 
    </Course> 
    <Course CourseCode="MTH001"> 
    <Description>This is Math Level 1</Description> 
    <Department>Maths</Department> 
    <Credits>5.0</Credits> 
    </Course> 
</Courses> 

ответ

2

это логично, что полный элемент курса ожидается: это то, что вы определили в вашем XSD, когда вы сказали <xs:element ref="Course" - вы рекурсивно называется ваш полный курс элемент.

Вы можете создать локальное определение элемента для элемента <Course, имеющего другой тип, а затем он может иметь разные правила проверки.

Это первый шаг.

Второй шаг заключается в том, что xml-схема имеет встроенную поддержку идентификатора, к которому вы можете обратиться. В атрибуте, определяющем идентификатор, вы должны использовать тип xs: ID вместо xs: string. И в атрибуте, который ссылается на идентификатор, вы должны использовать тип xs: IDREF вместо xs: string.

Объединение двух, вы получите:

<xs:element name="Course"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="Description" /> 
      <xs:element name="Department" /> 
      <xs:element name="Credits" type="xs:decimal" /> 
      <xs:element name="Prerequisite" minOccurs="0" maxOccurs="unbounded"> 
       <xs:complexType> 
        <xs:sequence> 
         <xs:element name="Course" minOccurs="1" maxOccurs="unbounded"> 
          <xs:complexType> 
           <xs:attribute name="CourseCode" type="xs:IDREF" use="required" /> 
          </xs:complexType> 
         </xs:element> 
        </xs:sequence> 
       </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
     <xs:attribute name="CourseCode" type="xs:ID" use="required" /> 
    </xs:complexType> 
</xs:element> 

Это должно подтвердить свой входной XML, а в качестве бонуса, когда курс идентификатор, который вы использовали в вашем <Prerequisite> не существует в вашем XML, сейчас вызывает ошибку проверки.

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