2016-06-17 10 views
0

grailsのxsd 1.1に対してxmlドキュメントを検証したいと考えています。Grailsがxsd 1.1に対してxmlドキュメントを検証する

検証するための私のコードは:

def checkXmlAgainstXsd(InputStream xsd, InputStream xml) throws IOException, SAXException { 
    def factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI) 
    def schema = factory.newSchema(new StreamSource(xsd)) 
    def validator = schema.newValidator() 
    validator.validate(new StreamSource(xml)) 
} 

がどのように私は、XSD 1.1妥当性を検証することができますか?私はこのXSDしようとすると

は:

<?xml version="1.1"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
<xs:element name="WaitForSoap"> 
    <xs:complexType mixed="true"> 
    <xs:all> 
     <xs:element name="Firstname" maxOccurs="3"> 
     <xs:simpleType> 
      <xs:restriction base="xs:string"></xs:restriction> 
     </xs:simpleType> 
     </xs:element> 
     <xs:element name="Lastname" minOccurs="1"> 
     <xs:simpleType> 
      <xs:restriction base="xs:string"></xs:restriction> 
      </xs:simpleType> 
     </xs:element> 
    </xs:all> 
    </xs:complexType> 
</xs:element> 
</xs:schema> 

を私はエラーを取得:いくつかの変換のために

org.xml.sax.SAXParseException; lineNumber: 5; 
columnNumber: 9; cos-all-limited.2: The {max occurs} of an 
element in an 'all' model group must be 0 or 1 

私はすでにサクソン-HE使用し9.7.0-5

だから何ができます私は自分のアプリケーションをXSD 1.1に対して検証するのですか?

答えて

0

あなたはスキーマ検証エンジンとしてサクソンを使用する場合:まず、あなたがロードされているスキーマプロセッサはサクソン-EEであることを確認

(A)、およびライセンスキーがインストールされていること。

(B)次に、XSD 1.1のサポートが有効になっていることを確認します。

(A)については、Saxon-EEを直接インスタンス化するのが最も簡単な方法です。私はGrailsを知らないので、コードを与えることはできませんが、 "SchemaFactory.newInstance(...)"を "new com.saxonica.ee.jaxp.SchemaFactoryImpl"に置き換えたいとします。あるいは、ロードするファクトリ・クラスを選択するために様々なJAXPメカニズムを使用できます。

(B)あなた可能性があるため:上isSchemaLanguageSupported("http://www.w3.org/XML/XMLSchema/v1.1")を呼び出す

(B1)の文字列を渡す "http://www.w3.org/XML/XMLSchema/v1.1" あなたがしたいスキーマ言語の識別子として、のnewInstance()メソッドに

(B2)工場(サクソンの実装では、この最初の1.1のサポートを有効にし、その後、trueを返します)

(B3)( "http://saxon.sf.net/feature/xsd-version"、 "1.1")factory.setPropertyを呼び出す

関連する問題