簡體   English   中英

XML模式-順序鍵

[英]XML Schema - Key in sequence

我試圖按順序放置一個鍵,並被錯誤轟炸。 看來我做不到。 另外,有人告訴我我的鑰匙需要一個字段和選擇器,而我只能在上面找到很少的文檔。 (實際上,無奈之下,我下載了Liquid XML Studio [vs. Notepad]並搜索了它的幫助文件...甚至找不到對“選擇器”一詞的引用。)不管怎樣,我可以使用另一種方法來保證唯一性,不是序列中元素的null值? (有問題的內容是字符串)

請注意,如果沒有key元素,該模式將進行驗證。

錯誤

每個cvc-complex-type.1.2.4無效:元素{http://www.w3.org/2001/XMLSchema}:此處不允許在元素{http://www.w3.org/2001(1)中使用鍵/ XMLSchema}:序列,期望[{http://www.w3.org/2001/XMLSchema}:注釋,$,{http://www.w3.org/2001/XMLSchema}:元素,{http:/ /www.w3.org/2001/XMLSchema}:組,{http://www.w3.org/2001/XMLSchema}:選擇,{http://www.w3.org/2001/XMLSchema}:序列, {http://www.w3.org/2001/XMLSchema}:any]:

模式

<?xml version="1.0"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
 targetNamespace="READOO" elementFormDefault="qualified">

  <xs:element name="ReferralCollection">
    <xs:complexType>
      <xs:sequence>
    <xs:key name="URL" type="string" />
        <xs:element maxOccurs="unbounded" name="keyword">
          <xs:complexType>
            <xs:simpleContent>
              <xs:extension base="xs:string">
                <xs:attribute name="occurrences" type="xs:int" use="required" />
              </xs:extension>
            </xs:simpleContent>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

</xs:schema>

不應將key元素放入sequence元素內。 相反,您將其作為定義ReferralCollectionxs:element的子級。 selectorfieldkey元素的子元素,這些元素定義了應該是唯一的。 兩者都是XPath表達式。 selector值設置XPath上下文,並且field元素(可以有多個)定義應該唯一的值的組合。 因此,在您的情況下, key元素可能看起來像這樣:

<xs:key name="URL">
  <xs:selector xpath="."/>
  <xs:field xpath="rd:keyword"/>
</xs:key>

此處的選擇selector選擇元素本身,即ReferralCollection 然后,在該上下文中, field元素表示keyword元素的值,因此將其約束為唯一的。 XPath中元素的值是其文本內容。

我沒有對key元素(或一般來說為XML Schema)做很多事情,因此上面的一些細節可能不正確,但是基本思想是我所解釋的,因此應該很容易解決我犯的任何錯誤。 哦,還請注意,我為您的READOO名稱空間使用了rd前綴; 以我的經驗,在處理XPath時,最好使用顯式前綴,因此您需要在架構中使用適當的xmlns:rd屬性來使其正常工作。

編輯:所以看來您想要這樣的東西:

<xs:element name="ReferralCollection">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="URL" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="stem" type="xsd:string"/>
            <xs:element name="keyword" maxOccurs="unbounded">
            ...
            </xs:element>
          ...
  </xs:complexType>

  <xs:key name="URL">
    <xs:selector xpath="./URL"/>
    <xs:field xpath="stem"/>
  </xs:key>
</xs:element>

這更接近您的意思了嗎? 它具有一個或多個URL元素,每個元素都包含一個stem元素,后跟一個或多個keyword元素。 key約束應使stem元素的內容唯一。

請查看此鏈接是否可以幫助您:

編輯 :我幾年前建立架構; 請查看適合您的問題:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="urn:asp4d"
    xmlns:asp4d="urn:asp4d">
  <xs:element name="ASP4Developers">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Links" minOccurs="1" maxOccurs="1">
          <xs:keyref name="kUserId" refer="asp4d:UserId">
            <xs:selector xpath="Link"/>
            <xs:field xpath="@UserId"/>
          </xs:keyref>
        </xs:element>
      </xs:sequence>
    </xs:complexType>

    <xs:key name="UserId">
      <xs:selector xpath="Users/User"/>
      <xs:field xpath="@UserId"/>
    </xs:key>

  </xs:element>

</xs:schema>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM