2013-10-24 79 views
0

我有以下XSD,我需要添加另一个唯一约束。在XSD中唯一的设置元素

我想在其父组元素中使名称唯一,但是可以在每个WikiMeta中重复一个组。

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="AllMeta"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element maxOccurs="unbounded" name="WikiMeta"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element name="Subject" type="xs:string" minOccurs="1" maxOccurs="1" /> 
       <xs:element name="PageTitle" type="xs:string" minOccurs="1" maxOccurs="1" /> 
       <xs:element name="PageMetaDescription" type="xs:string" minOccurs="1" maxOccurs="1" /> 
       <xs:element name="Articles"> 
       <xs:complexType> 
        <xs:sequence> 
        <xs:element name="WikiArticle" minOccurs="1" maxOccurs="unbounded"> 
         <xs:complexType> 
         <xs:sequence> 
          <xs:element name="FileName" type="xs:string" minOccurs="1" maxOccurs="1" /> 
         </xs:sequence> 
         </xs:complexType> 
         <xs:unique name="uniqueFileName"> 
         <xs:selector xpath="WikiMeta"/> 
         <xs:field xpath="FileName"/> 
         </xs:unique> 
        </xs:element> 
        </xs:sequence> 
       </xs:complexType> 
       </xs:element> 
       <xs:element name="Groups"> 
       <xs:complexType> 
        <xs:sequence> 
        <xs:element maxOccurs="unbounded" name="WikiGroup"> 
         <xs:complexType> 
         <xs:sequence> 
          <xs:element name="Name" type="xs:string" minOccurs="1" maxOccurs="1" /> 
         </xs:sequence> 
         </xs:complexType> 
        </xs:element> 
        </xs:sequence> 
       </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    <xs:unique name="subject"> 
     <xs:selector xpath="WikiMeta"/> 
     <xs:field xpath="Subject"/> 
    </xs:unique> 
    <xs:unique name="fileName"> 
     <xs:selector xpath="WikiMeta/Articles/WikiArticle"/> 
     <xs:field xpath="FileName"/> 
    </xs:unique> 
    </xs:element> 
</xs:schema> 

任何想法?

回答

0

将约束添加到定义可见性级别的元素。下面是修改XSD:

<?xml version="1.0" encoding="utf-8" ?> 
<!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) --> 
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="AllMeta"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element maxOccurs="unbounded" name="WikiMeta"> 
        <xs:complexType> 
         <xs:sequence> 
          <xs:element name="Subject" type="xs:string" minOccurs="1" maxOccurs="1"/> 
          <xs:element name="PageTitle" type="xs:string" minOccurs="1" maxOccurs="1"/> 
          <xs:element name="PageMetaDescription" type="xs:string" minOccurs="1" maxOccurs="1"/> 
          <xs:element name="Articles"> 
           <xs:complexType> 
            <xs:sequence> 
             <xs:element name="WikiArticle" minOccurs="1" maxOccurs="unbounded"> 
              <xs:complexType> 
               <xs:sequence> 
                <xs:element name="FileName" type="xs:string" minOccurs="1" maxOccurs="1"/> 
               </xs:sequence> 
              </xs:complexType> 
              <xs:unique name="uniqueFileName"> 
               <xs:selector xpath="WikiMeta"/> 
               <xs:field xpath="FileName"/> 
              </xs:unique> 
             </xs:element> 
            </xs:sequence> 
           </xs:complexType> 
          </xs:element> 
          <xs:element name="Groups"> 
           <xs:complexType> 
            <xs:sequence> 
             <xs:element maxOccurs="unbounded" name="WikiGroup"> 
              <xs:complexType> 
               <xs:sequence> 
                <xs:element name="Name" type="xs:string" minOccurs="1" maxOccurs="1"/> 
               </xs:sequence> 
              </xs:complexType> 
             </xs:element> 
            </xs:sequence> 
           </xs:complexType> 
           <xs:key name="groupkey"> 
            <xs:selector xpath="WikiGroup"/> 
            <xs:field xpath="Name"/> 
           </xs:key> 
          </xs:element> 
         </xs:sequence> 
        </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
     </xs:complexType> 
     <xs:unique name="subject"> 
      <xs:selector xpath="WikiMeta"/> 
      <xs:field xpath="Subject"/> 
     </xs:unique> 
     <xs:unique name="fileName"> 
      <xs:selector xpath="WikiMeta/Articles/WikiArticle"/> 
      <xs:field xpath="FileName"/> 
     </xs:unique> 
    </xs:element> 
</xs:schema> 

视觉上可能更容易理解:

enter image description here

+0

是的,问题是,我是新来的XML/XSD的设计,它是相当困难越来越例子是与您的确切需求有关,所以感谢您的明确示例。出于兴趣,你用于XSD可视化编辑器的是什么? – dotnetnoob