2016-08-04 11 views
0

私はxsdにはかなり新しいです。私はQ &でも多くの質問を見つけましたが、私の問題を解決することはできませんでした。 xsdバリデーションを使用して検証したいhtmlファイルがあります。使用している標準はhttp://www.ihe.net/uploadedFiles/Documents/Radiology/IHE_RAD_Suppl_MRRT.pdfです。そして、それは、HTMLファイルがフォーマットされる方法は、任意のXMLバリデータを使用してそれを検証することが可能でなければならないと言います。この質問XSD for same tag different attribute namesに注意してください、私は何をしたいのではないが近いです。ここで私はxsdを使用して同じフィールドを複数の異なる属性で複数回検証する

<!DOCTYPE html> 
<html> 
<head> 
    <tittle>Hello World</title> 
    <meta charset="UTF-8"/> 
    <meta name="d1" content="c1"/> 
    <meta name="d2" content="c2"/> 
</head> 
</html> 

に標準を検証したいHTMLのセクションがある属性の文字セット、および属性名を持つゼロ以上、内容の正確に1 metaタグがなければならないと言います。だから私は次のxsdファイルを作ろうとしました。

<?xml version="1.0"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="html"> 
     <xs:complextType> 
      <xs:sequence> 
       <xs:element name="title" type="xs:string"/> 
       <xs:element name="meta"> 
        <xs:complexType> 
         <xs:attribute name="charset" type="xs:string"/> 
        </xs:complexType> 
       </xs:element> 
       <!-- obviously this wouldn't work --> 
       <xs:element name="meta" minOccurs="0" maxOccurs="unbounded"> 
        <xs:complexType> 
         <xs:attribute name="name" type="xs:string"/> 
         <xs:attribute name="content" type="xs:string"/> 
        </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

明らかに、上記のスキーマはmeta要素の繰り返しによって機能しません。私は複数の要素のエラーを取得します。だから私は、以下のようなグループ要素の他のメタタグをラップしようとしましたが、それはうまくいきませんでした。私は二つのアプローチを知って

<xs:group name="otherMetatags"> 
     <xs:element name="meta" minOccurs="0" maxOccurs="unbounded"> 
      <xs:complexType> 
       <xs:attribute name="name" type="xs:string"/> 
       <xs:attribute name="content" type="xs:string"/> 
      </xs:complexType> 
     </xs:element> 
    </xs:group> 
</xs:schema> 

は愚かなように見えるが、私が以前言ったように、XSDに新しいです。

答えて

0

XSD 1.0では、metaの属性のシーケンスのうち、1つだけにcharsetの属性が必要であるという制約を表すことはできません。

XSD 1.1では、アサーションを使用することができます。例については、XSD: Restrict only one child element to have specific valueを参照してください。

+0

あなたが問題を与えた例とはかなり異なる点があります。まず、ある要素を特定の値に制限しようとしていますが、特定の属性を持つように1要素を制限しようとしています。他の要素の属性を含めるべきではありません。 – ivange94

+0

ポイントは完全一致ではなく、あなたの目標を達成する方法を示します。いずれかのアサーションベースのソリューションに時間を費やす前に、検証ツールがXSD 1.1をサポートしていることを確認してください。また、以前の質問に対する回答のいくつかを[**承認**](http://meta.stackoverflow.com/q/5234/234215)してください。ありがとう。 – kjhughes

+0

ご協力いただきありがとうございます。私は私の検証(具体的にはjava8)を行うために標準Java検証APIを使用しています。質問について、そこの答えは実際に私の問題を解決しなかったし、良い解決策がない。私は1を受け入れた。私が最終的に行ったことに近いものでした。 – ivange94

関連する問題