2016-06-27 2 views
1

Я пытаюсь написать XML-схему для этого XML-структуры:XML Schema вложенный ребенка в каком-либо элемент

<castle> 
    <parameters> 
     <firstParameter>text</firstParameter> 
     <secondParameter> 
      <list> 
       <item>a</item> 
       <item>b</item> 
       <item>c</item> 
      </list> 
     </secondParameter> 
     <thirdParameter> 
      <array> 
       <item>a</item> 
       <item>b</item> 
       <item>c</item> 
      </array> 
     </thirdParameter> 
     <fourthParameter> 
      <parameters> 
       <firstParameter>text</firstParameter> 
       <secondParameter> 
        <list> 
         <item>a</item> 
         <item>b</item> 
         <item>c</item> 
        </list> 
       </secondParameter> 
      </parameters> 
     </fourthParameter> 
    </parameters> 
</castle> 

Я не знал, как указать элемент с любым именем. Мой фактический XSD выглядит так:

<xs:element name="parameters"> 
    <xs:complexType> 
    <xs:choice maxOccurs="unbounded" minOccurs="0"> 
     <xs:any processContents="skip" namespace="##targetNamespace"/> 
    </xs:choice> 
    </xs:complexType> 
</xs:element> 

Но он пропускает проверку на уровне вложенных параметров. Вы знаете, как написать это, чтобы быть более конкретным?

ответ

0

Проверка прошла, потому что вы сказали это сделать, используя xsd:any с processContents="skip". Ваши другие контрольные точки были бы

  • Набор processContents для lax, чтобы указать, что объявления элементов должны быть использованы, если они определены, но не должны быть определены.
  • Установить processContents на номер strict, чтобы указать, что элементы должны быть использованы и должны быть определены.
  • Используйте XSD 1.1 и создайте утверждения над элементами xsd:any.

Вы можете получить более ограничительные, если вы зафиксируете элементы, разрешенные параметрами, путем ограничения или параметризации их имен.

+0

Спасибо, я знаю поведение 'processContents'. Я не знаю, как указать элемент с подстановочным именем, содержащим определенное имя элемента (список | массив | словарь | параметры) или простую строку. – trejjam

+0

Мне действительно не нужно проверять XML, но Visual Studio использует этот XSD для цели intelliSense. – trejjam

+0

Возможно, вам не нужно проверять XML, но вам все равно нужно соблюдать правила XSD, касающиеся ограничений, которые могут быть наложены вместе с 'xsd: any', которые я попытался передать в этом ответе. Если вам нужно указать больше структуры, выходящей за рамки обсуждаемых положений, вам нужно избегать 'xsd: any', чтобы получить больше контроля над моделью контента. – kjhughes