2009-09-19 62 views
1

我試圖彌補的XML架構如下:Xml架構問題 - 無法解決如何使用密鑰!

<tagSet> 
    <Structure> 
    <tag> 
     <name>Steve</name> 
    </tag> 
    <tag> 
     <name>Bob</name> 
    </tag> 
    <tag> 
     <name>Steve</name> 
    </tag> 
    </Structure> 
</tagSet> 

,我想我的架構抱怨史蒂夫有兩次,但我不能得到它的工作。

我有這樣的模式文件中的標記集元素:

<xs:key name="key" > 
     <xs:selector xpath="Structure/tag" /> 
     <xs:field xpath="name" /> 
    </xs:key> 

...但我清楚沒有理解是正確的,因爲這是行不通的。任何人發現我的錯誤?

謝謝:)

回答

3

關於您的xs:key定義沒有任何不正確的地方。您是否正確引用了XML文件中的XSD?

我複製你的XML數據轉換成文檔:

<?xml version="1.0" encoding="utf-8" ?> 
<tagSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:noNamespaceSchemaLocation="test.xsd"> 
    <Structure> 
    <tag> 
     <name>Steve</name> 
    </tag> 
    <tag> 
     <name>Bob</name> 
    </tag> 
    <tag> 
     <name>Steve</name> 
    </tag> 
    </Structure> 
</tagSet> 

然後我寫了你的XS一個簡單的XSD:關鍵包括:

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:element name="tagSet"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="Structure" type="Structure-type" /> 
     </xs:sequence> 
    </xs:complexType> 

    <xs:key name="key"> 
     <xs:selector xpath="Structure/tag" /> 
     <xs:field xpath="name" /> 
    </xs:key> 
    </xs:element> 

    <xs:complexType name ="Structure-type"> 
    <xs:sequence> 
     <xs:element name ="tag" type="tag-type" maxOccurs="unbounded" /> 
    </xs:sequence> 
    </xs:complexType> 

    <xs:complexType name="tag-type"> 
    <xs:sequence> 
     <xs:element name="name" type="xs:string" /> 
    </xs:sequence> 
    </xs:complexType> 

</xs:schema> 

它抱怨重複鍵「史蒂夫」精細。如果這個例子不能幫助你發現問題,你能發佈關於你的模式和XML文件的更多細節嗎?

+0

謝謝 - 我懶惰,並使用Visual Studio來創建一個模式,然後添加密鑰。看起來像VS設法搗毀命名空間引用 - 現在就得到它的工作。 – 2009-09-21 16:28:07

1

你試過:

<xs:key name="key" > 
    <xs:selector xpath=".//Structure/tag" /> 
    <xs:field xpath="name" /> 
</xs:key>