2016-05-09 64 views
0

的模式驗證我有一個這樣的XML實體,XHTML場

a:news-article xmlns:c="http://abc/core" xmlns:f="http://abc/fields" xmlns:a="http://abc/assets" xmlns:r="http://abc/refdata"> 
    <c:id>xyz</c:id> 
    <c:type>asset</c:type> 
    <c:created-on>2016-03-17T08:26:27.764Z</c:created-on> 
    <c:released-on>1985-11-03T00:00:00Z</c:released-on> 
    <c:expires-on>2009-12-12T00:00:00Z</c:expires-on> 
    <f:short-headline> 
    <c:content><c:l10n xml:lang="en"> 
    <p> 
     Carbide technology for South Korean project 
    </p> 
     </c:l10n></c:content> 
    <c:resources/> 
    </f:short-headline> 
</a:news-article> 

在這個XML,是一個XHTML領域。我需要使用模式驗證來驗證這樣的XHTML字段。即如果我提供了空值,那麼它應該拋出一個模式驗證錯誤。

回答

1

對於每個名稱空間,您需要單獨的模式。

在XSD爲「http://abc/core」命名空間,你可能需要一個圖案以檢查元素的含量非空:

<xs:element name="id"> 
      <xs:simpleType> 
       <xs:restriction base="xs:string"> 
        <xs:pattern value="\S+"/> 
       </xs:restriction> 
      </xs:simpleType> 
    </xs:element> 

然後您需要導入模式變成你的「根」模式(在您的示例我假定 「一個:」 前綴表示根模式)是這樣的:

<xs:import namespace="http://abc/core" 

的schemaLocation = 「core.xsd」/>

,最後引用該在正確的位置,從外部名稱空間的元素:

<xs:element name="authors"> 
     <xs:complexType> 
      <xs:sequence>news-article 
      <xs:element ref="c:id"/> 
      <xs:element ref="c:type"/> 
      <!-- ... --> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 

如果你想確保p元素是非空的,你需要編寫自己的模式,千篇一律如上 - 申報非 - p的空模式,並在c:l10n元素的模式中引用它。