2009-08-06 4 views
2

У меня есть определение XSD, которое имеет список помеченных элементов. Каким образом можно позволить разработчику выбирать из списка элементов, уже определенных в файле XML, при вводе значений для элемента с ограниченным выбором?Как указать список вариантов в XSD

Другими словами, при этом XML-декларация:

<collection> 
     <myItem name="Item_1"> 
     <childElement /> 
     </myItem> 

     <myItem name="Item_2"> 
     <childElement> 
      <item name="Item_1"/> 
     </childElement> 
     </myItem> 

     <myItem name="Item_3"> 
     <childElement> 
      <item name="Child_2"/> 
     </childElement> 
     </myItem> 
</collection> 

... и это определение XSD

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="collection"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element maxOccurs="unbounded" name="collection"> 
      <xs:complexType> 
      <xs:sequence minOccurs="0" maxOccurs="unbounded"> 
       <xs:element name="childElement" > 
       <xs:complexType> 
        <xs:sequence minOccurs="0" maxOccurs="unbounded"> 
        <xs:element name="item"> 
         <xs:complexType> 
         <xs:attribute name="name" type="xs:string" use="optional" /> 
         </xs:complexType> 
        </xs:element> 
        </xs:sequence> 
       </xs:complexType> 
       </xs:element> 
      </xs:sequence> 

      <xs:attribute name="name" type="xs:string" use="required"/> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

Я хотел бы, чтобы позволить пользователям выбрать из списка myItem элементов уже определен в файле XML всякий раз, когда они хотят ввести значение namechildEelement?

Эта концепция видна при выборе значений атрибутов в XAML или даже некоторых из схем Visual Studio 2008.

ответ

0

Вы попробовали элемент <choice/>?

+0

Я заметил тег, но это выглядит так, как будто мне нужно ссылаться на другой элемент в документе, который не был бы практичным, если я должен вручную ссылаться на * физическое * заявление и там может быть много пункта. У вас есть какие-то указания в этом отношении? –

3

Возможно, вы захотите ознакомиться с identity constraints, которые доступны через XML-схему. Эти ограничения позволяют применять выражение XPath для обозначения как уникальности, так и ссылочных ограничений для данного элемента.

Вы должны иметь возможность написать что-то вроде следующего, хотя мой синтаксис, вероятно, не содержит определения или <complexType>. Я не проверял это, но идея состоит в том, чтобы создать «ключ» для значений, которые вы хотите ограничить, а затем обратиться к клавише с «ключ-ref» в элементах, которые вы хотите ограничить.

<xs:element name="myItem"> 
    <xs:complexType> 
    <xs:attribute name="name" type="xs:string" use="optional"/> 
    <xs:key name="itemNameKey"> 
     <xs:selector xpath="myItem"/> 
     <xs:field xpath="@name"/> 
    </xs:key> 
    </xs:complexType> 
</xs:element> 

<xs:element name="childElement"> 
    <xs:complexType> 
    <xs:attribute name="name" type="xs:string" use="optional"/> 
    <xs:keyref name="itemConstraint" refer="itemNameKey"> 
     <xs:selector xpath="childElement"/> 
     <xs:field xpath="@name"/> 
    </xs:key> 
    </xs:complexType> 
</xs:element> 
+0

Спасибо за этот образец. Я попробую его сейчас и отправлю отзыв. :) –

+0

Я пробовал эту опцию, и хотя часть проверки работает, это не совсем дает мне Intellisense, который я ищу. Я наткнулся на тег , и это похоже на более близкое совпадение, но на самом деле не является динамическим, основанным на содержимом XML-файла. –

+0

Я не уверен, как заставить Intellisense работать для этого типа XML. Возможно, вы можете изучить файл XAML, о котором идет речь, чтобы узнать, есть ли какие-либо сходства? –