2016-08-15 19 views
1

私は、楽しい目的のためにプロジェクトの変更を保存するXMLファイルを作成しています。したがって、私は小さなXMLスキーマを書いています。問題は、それぞれのRevisionid属性を一意にすることです。xsd:uniqueの使い方?

私はインターネットとスタックオーバーフローで検索しましたが、この問題を解決できませんでした。 Visual Studio 2015を使用していますが、これが問題になるかどうかはわかりません。

私が使用しているXMLスキーマは次のとおりです。

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema targetNamespace="http://tempuri.org/XMLSchema.xsd" 
    elementFormDefault="qualified" 
    xmlns="http://tempuri.org/XMLSchema.xsd" 
    xmlns:mstns="http://tempuri.org/XMLSchema.xsd" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
> 
    <xs:element name="Revisions"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="Revision" maxOccurs="unbounded"> 
        <xs:complexType> 
         <xs:sequence> 
          <xs:element name="Author" type="xs:string"/> 
          <xs:element name="Date" type="xs:date"/> 
          <xs:element name="Comments" type="xs:string"/> 
         </xs:sequence> 
         <xs:attribute name="id" type="xs:string" use="required"/> 
        </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
     </xs:complexType> 
     <xs:unique name="Revision"> 
      <xs:annotation> 
       <xs:documentation> 
        The id of each Revision element must be unique. 
       </xs:documentation> 
      </xs:annotation> 
      <xs:selector xpath="Revision"/> 
      <xs:field xpath="@id"/> 
     </xs:unique> 
    </xs:element> 
</xs:schema> 

そして、私が使用しているXMLファイル:

<?xml version="1.0" encoding="utf-8"?> 
<Revisions xmlns="http://tempuri.org/XMLSchema.xsd"> 
    <Revision id="1"> 
     <Author>JP</Author> 
     <Date>2014-07-09</Date> 
     <Comments>Initial version</Comments> 
    </Revision> 
    <Revision id="2"> 
     <Author>JP</Author> 
     <Date>2016-01-26</Date> 
     <Comments> 
      Created a RegistrationValidator class which uses regular expressions to check 
      if usernames, passwords, email addresses, etc.. are in correct format 
     </Comments> 
    </Revision> 
    <Revision id="3"> 
     <Author>JP</Author> 
     <Date>2016-08-14</Date> 
     <Comments>Created an XML schema which validates this XML file</Comments> 
    </Revision> 
    <Revision id="3"> 
     <Author>Test</Author> 
     <Date>2016-08-14</Date> 
     <Comments>dummy comments</Comments> 
    </Revision> 
</Revisions> 

をあなたは私が同じid値を割り当てた見ることができるように最後のRevisionタグに移動し、エラーリストからエラー、警告、またはメッセージを取得しません。 誰かが私が間違っていることを知っていますか?

+0

いくつかの関連の質問がここにあります:http://stackoverflow.com/questions/5541305/xml-xsd-schema-enforce-uniqueだけで問題を解決するためにxs:selector/@xpathに、名前空間接頭辞、mstnsを追加-attribute-values-in-schema http://stackoverflow.com/questions/15509504/xml-schema-add-unique-id-for-several-child-elements http://stackoverflow.com/questions/14893435/xml -schema-still-allowed-duplicate-ids-with-unique – SilverSkin

答えて

1

あなたは非常に近くでした。

<xs:unique name="Revision"> 
    <xs:annotation> 
    <xs:documentation> 
     The id of each Revision element must be unique. 
    </xs:documentation> 
    </xs:annotation> 
    <xs:selector xpath="mstns:Revision"/> 
    <xs:field xpath="@id"/> 
</xs:unique>