2010-09-26 4 views
3

Мне очень сложно построить мою первую схему XML. Мне нужно, чтобы проверить правильность XML-документа, который формирует анкету.
Итак, вот раздел, который не указан:XML-схема: как иметь несколько идентичных элементов?

Я изменил источник. Первый ответ относится к этому коду:

<root> 
    <values> 
     <value>Lorem</value> 
     <value>ipsum</value> 
     <value>dolor</value> 
    </values> 
</root> 

Теперь моя фактической цель заключается в следующем:

<requires> 
    <require requires-id="2" type="included"> 
     <values> 
      <value isRequired="true">Lorem</value> 
      <value isRequired="false">Lorem</value> 
      <value isRequired="false">Lorem</value> 
     </values> 
    </require> 
    <require requires-id="5" type="excluded"> 
     <values> 
      <value isRequired="true">Lorem</value> 
      <value isRequired="false">Lorem</value> 
     </values> 
    </require> 
</requires> 

Может кто-нибудь, пожалуйста, помогите сделать правильные схемы? Я использую Sun Multi-Schema XML Validator (MSV) для проверки документа по схеме.

Спасибо заранее,
Стеффа

ответ

3

Это должно сделать это за 1 XML:

<xs:complexType name="Values"> 
    <xs:sequence> 
     <xs:element name="value" minOccurs="0" maxOccurs="200"> 
      <xs:complexType> 
       <xs:simpleContent> 
        <xs:extension base="xs:string"> 
         <xs:attribute name="isOnlyOption" type="xs:boolean"/> 
        </xs:extension> 
       </xs:simpleContent> 
      </xs:complexType> 
     </xs:element> 
    </xs:sequence> 
</xs:complexType> 
<xs:element name="values" type="Values" minOccurs="0"/> 

2-й один выглядит следующим образом:

<xs:element name="requires" minOccurs="0"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="require" minOccurs="1" maxOccurs="200"> 
       <xs:complexType> 
        <xs:attribute name="requires-id" type="xs:IDREF"/> 
        <xs:attribute name="type" type="RequiresType"/> 
        <xs:all> 
         <xs:element name="values" type="Values" minOccurs="0" maxOccurs="1"/> 
        </xs:all> 
       </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

Примечание ссылка на обычае тип данных «Значения» из первого фрагмента.

Спасибо,
Стефф

2

Я не знаю, что должно быть подтверждено точно, но следующая схема XML будет проверять для трех значений тегов в пределах значений тега в пределах корневого тега. Значения должны быть строки:

<?xml version="1.0" encoding="UTF-8"?> 
<xsd:schema xmlns:xsd="http://yourSchema"> 
    <xsd:element name="root"> 
    <xsd:complexType> 
     <xsd:sequence> 
     <xsd:element ref="values" /> 
     </xsd:sequence> 
    </xsd:complexType> 
    </xsd:element> 
    <xsd:element name="values"> 
    <xsd:complexType> 
     <xsd:sequence> 
     <xsd:element name="value" type="xsd:string" minOccurs="3" maxOccurs="3" /> 
     </xsd:sequence> 
    </xsd:complexType> 
    </xsd:element> 
</xsd:schema> 
+0

Это схема для XML вы публикуемой перед редактированием вашего вопроса. – Jan

+0

Да, я знаю. Я верну его обратно. Извините. Но спасибо, это довольно трюк. Думаю, я забыл указать theaxOccurs = «X», так как я хотел разрешить от 0 до N ... – stfn

+0

, чтобы вы могли объявить maxOccurs, чтобы мин работал? –

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