2012-01-06 75 views
0

我有2個模式。
第一:使用兩個模式時只允許一個xml根元素

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

<element name="A" type="string"/> 

</schema> 

二:

<?xml version="1.0" encoding="utf-8"?> 
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
     targetNamespace="ns2" 
     xmlns:ns1="ns1" 
     elementFormDefault="qualified"> 

<element name="B"> 
    <complexType> 
     <sequence> 
      <element ref="ns1:A"/> 
     </sequence> 
    </complexType> 
</element> 

</schema> 

因此,在實例的xml我可以使用2個元素。
實施例1:

<?xml version="1.0" encoding="utf-8" ?> 
<A xmlns="ns1">sdfdfd</A> 

實施例2:

<?xml version="1.0" encoding="utf-8" ?> 
<B xmlns="ns2"><A xmlns="ns1">sdfdfd</A></B> 

如何允許僅實施例2?

+0

爲什麼要不讓例如1? – 2012-01-06 10:49:20

+0

這是因爲我需要schema來驗證帶有數字簽名的xml。所以我總是需要'A'作爲根元素。當然,我可以在沒有模式的情況下對其進行驗證,但是我不知道在模式驗證期間是否可以這樣做。 – Stanislav 2012-01-09 04:39:06

回答

1

它取決於您的模式驗證器的API。一般來說,如果一個元素對一個模式有效,那麼該元素的每個子元素也是有效的:因此,如果你的第二個實例是有效的,那麼你的第一個元素也是有效的,因爲XSD驗證元素而不是文檔。

但是,模式驗證器可能允許您指定用於驗證的根節點。因爲如果你使用撒克遜爲您的架構驗證例如,然後在命令行中,你可以指定

機頂:{} NS2乙

http://www.saxonica.com/documentation/schema-processing/commandline.xml

+0

C#中是否有類似XmlReader的.Net類模擬指令? – Stanislav 2012-01-06 11:50:19

相關問題