2016-05-31 5 views
1

XMLで 異なる結果:XSD marklogic

<?xml version="1.0"?> 
<note 
xmlns="http://www.w3schools.com" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <to>Tove</to> 
    <from>Jani</from> 
    <heading>Reminder</heading> 
    <body xml:lang="en"><div></div></body> 
</note> 

XSD:

<?xml version="1.0"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
targetNamespace="http://www.w3schools.com" 
xmlns="http://www.w3schools.com" 
elementFormDefault="qualified"> 
    <xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd"> 
    </xs:import> 
    <xs:element name="note"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="to" type="xs:string"/> 
       <xs:element name="from" type="xs:string"/> 
       <xs:element name="heading" type="xs:string"/> 
       <xs:element name="body"> 
        <xs:complexType mixed="true"> 
         <xs:complexContent> 
          <xs:extension base="someType"> 
           <xs:attribute ref="xml:lang" use="required"> 
           </xs:attribute> 
          </xs:extension> 
         </xs:complexContent> 
        </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 

    <xs:complexType name="someType" mixed="true"> 
     <xs:sequence> 
      <xs:any maxOccurs="unbounded" minOccurs="1" processContents="skip"/> 
     </xs:sequence> 
    </xs:complexType> 

</xs:schema> 

チェックthis、それが動作します。しかし、これはMarklogicでは動作しません 、エラーは次のとおりです。深く掘る前に、私はしたいが

<body xml:lang="en"><div></div></body> 

答えて

1

MarkLogicスキーマの解析では、complexTypeが 'mixed'とマークされ、拡張子も持つバグがあるようです。

混在している別のタイプを拡張する場合、最初の「混在」が冗長であるため、これはすべて元どおりに動作します。

だから、スキーマを使用してみてください。

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3schools.com" xmlns="http://www.w3schools.com" elementFormDefault="qualified"> 
    <xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd"> 
    </xs:import> 
    <xs:element name="note"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="to" type="xs:string"/> 
     <xs:element name="from" type="xs:string"/> 
     <xs:element name="heading" type="xs:string"/> 
     <xs:element name="body"> 
      <xs:complexType> 
      <xs:complexContent> 
       <xs:extension base="someType"> 
       <xs:attribute ref="xml:lang" use="required"> 
       </xs:attribute> 
       </xs:extension> 
      </xs:complexContent> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
    <xs:complexType name="someType" mixed="true"> 
    <xs:sequence> 
     <xs:any maxOccurs="unbounded" minOccurs="1" processContents="skip"/> 
    </xs:sequence> 
    </xs:complexType> 
</xs:schema> 
0

XDMP-VALIDATEMISSINGELT: (err:XQDY0027) validate lax { $node } -- Missing required elements: Expected ((any(skip,!())+),(any(skip,!())+)) at fn:doc("d:/xml.xml")/*:note/*:body using schema "/schemas/xsd.xsd" 

私の意図は、このような体内のHTMLコンテンツの義務発生を持っていることですあなたのスキーマはどこですか?

MarkLogicは、特定のコンテンツデータベースの構成で参照されるスキーマデータベースにスキーマを保存する必要があります。これは、デフォルトではスキーマデータベースになります。

は、あなたが参照されるすべてのScemas含まれている

MarkLogicは、スキーマ解決される順序や場所などの詳細はこちらをご覧ください(XMLまたはスキーマデータベースにXSD経由の?):https://docs.marklogic.com/guide/admin/schemas

最後に、ときMarkLogicでスキーマの使用方法を調べ始めると、スキーマを変更するときにMarkLogicを再起動することをお勧めします。技術的には、再起動する必要はありませんが、実際には一部のキャッシュをクリアするだけですが、再起動しても問題がなければ、速く進み、学習曲線を少し下げます。

+0

はい、私のXSDスキーマデータベースです。上記のコードでも同じ動作をしますが、Mark LogicでエラーXDMP-VALIDATEMISSINGELT:(エラー:「エラー」と表示されます)が失敗しました

some_text
、 (任意の(スキップ、!())*、任意の(スキップ、!())+)必要な要素がありません。 – Ranvir

+0

正確な情報を得るために質問を編集しましたが、これはvalidateを使った例のフリーフォーマッタでチェックしていますが、marklogicにロードすると機能しません。 - > xqueryバージョン "1.0-ml"; let $ node:= xdmp:document-get( "d:/xml.xml") return try {xdmp:document-insert( "myxml/xml.xml"、lax {$ node}) } $ e/error:フォーマット文字列/テキスト()} catch($ e){"検証に失敗しました:" – Ranvir