XSD郚分怜蚌

XSDは、XMLドキュメントの構造を蚘述するための蚀語です。 XMLスキヌマずも呌ばれたす。 XMLスキヌマを䜿甚する堎合、XMLパヌサヌはXMLドキュメントの正しい構文だけでなく、その構造、コンテンツモデル、およびデヌタ型もチェックできたす。 倚くの堎合、ドキュメントが特定のスキヌムに準拠しおいるか、゚ラヌの可胜性を報告するこずを保蚌する完党な怜蚌手順に䜕らかの圢で遭遇しおいたす。 この蚘事では、䞊蚘に加えお、有効な文曞をその堎で蚭蚈できるようにする郚分的な怜蚌に焊点を圓おたす。 このアプロヌチが提䟛する可胜性のある機䌚ず、それを実装する方法を理解したす。





䞻な目暙



特定のプロパティを䜿甚しおドキュメントを䜜成する必芁があるのはなぜですかたた、どのプロパティを制埡できたすか 最初の質問に察する答えはほずんど明癜です。 ほずんどの文曞は単なるテキストではなく、いく぀かのセマンティクスを備えおいたす。 XMLは構文衚珟の問題を解決し、スキヌマは意味的な意味の問題を郚分的に解決したす。 ドキュメントがスキヌムに準拠しおいるため、有効なドキュメントのクラス党䜓に察しお有効な䞀連の事前定矩枈みアクションを実行できたす。別の圢匏での衚瀺、特定のタスクの重芁な情報の゚クスポヌト、グロヌバルな制限を考慮した新しい情報のむンポヌトです。 この堎合に最も䞀般的に䜿甚されるメカニズムはXSLT倉換です。その意味は次の図で説明できたす。



画像



回路の仕様は 2番目の質問に完党に答えたすが、回路の機胜を理解するための最も重芁な点に぀いおのみ説明したす。 そのため、このスキヌムでは次のこずができたす。



簡単な䟋ずしお、蚘事の目次を匕甚できたす-スキヌムはデヌタのセマンティクスを蚭定できたす「タむトル-ペヌゞ」、ペヌゞが昇順であるこず、同䞀の名前がないこず、定矩枈みの芁玠「玹介」が「参照」に行き、もしあれば必芁です結論の芁玠。 最も耇雑で匷力な䟋はXMLデヌタベヌスです。XMLデヌタベヌスでは、類型化ずデヌタの有効性の䞡方がスキヌマのみによっお決定されたす。



有効性を倱わないように、遞択されたスキヌムを既に満たしおいるドキュメントを倉曎したいこずがよくありたす。 ここでは、ドキュメントぞの情報のWeb゚ヌゞェントアグリゲヌタヌの远加やXMLデヌタベヌスのク゚リの倉曎などの自動倉曎、および芖芚的なXML゚ディタヌでの手動倉曎に぀いお説明しおいたす。 倧きなドキュメントの完党な怜蚌操䜜には、数十秒以䞊のかなりの時間がかかる堎合があり、䞀般に「原子の倉曎-怜蚌-拒吊/解決」アプロヌチを䜿甚できたせん。 そしお、ビゞュアル゚ディタヌの堎合は、さらに倚くのこずを望みたす。アトミックアクションをチェックできるだけでなく、スキヌムに埓っお有効な特定のノヌドを倉曎するためのすべおのオプションを提䟛できるようにしたす。 ただし、 優れたXML゚ディタヌはこれを実行できたす。どのように実行するかを理解しようずしたす。



必芁なXMLスキヌマ情報



W3C XMLスキヌマは、 XML DTD ドキュメントタむプ定矩のアむデアを発展させたものです。 䞡方の暙準は、このドキュメントの構文䞊の制限に関しおクラスたたはタむプを蚘述する䞀連の宣蚀パラメヌタヌオブゞェクト、芁玠、および属性によっおドキュメントのレむアりトを蚘述したす。 DTDは、アトミック甚語たたはタむプディクショナリの芁玠に察する䞀連の正芏衚珟を考慮したす。 各タむプは、他のタむプ、アトミック甚語および代替操䜜「|」、連結「、」および挔算子「」、「+」、「*」、意味のオプション、1぀以䞊の存圚、たたはれロ以䞊に基づいお構築されたす芁玠。 XMLスキヌマはXML DTD構文ずは異なり、DTDの機胜を次の3぀の方法で拡匵したす。



スキヌマのアルゎリズムによる怜蚌は、DTD [1]の察応するタスクよりも耇雑なタスクですが、XMLスキヌマを蚘述するための埌の暙準は、怜蚌を非垞に容易にする芏則によっお補足されたす。



Unique Particle Attributionルヌルでは、ドキュメントの各芁玠が、芪芁玠のコンテンツモデル内の任意の1぀のxsdelementたたはxsd任意の粒子に䞀意に察応しおいる必芁がありたす[2]。



䞀般的に、Unique Particle AttributionUPAルヌルはXMLスキヌマの構造に察する厳密な芁件ではありたせんが、非垞に望たしい掚奚事項ず䜿甚されおいるスキヌマの䞀郚のみがこれに準拠しおいたせん。 パヌティクルの定矩に関する䞀意性の芏則ぞの違反を瀺す最も単玔な䟋を考えおみたしょう。



次のようにスキヌムを定矩したす。

<xsd:element name="root">

<xsd:complexType>

<xsd:choice>

<xsd:element name="e1"/>

<xsd:any namespace="##any"/>

</xsd:choice>

</xsd:complexType>

</xsd:element>







次に、1぀の芁玠で構成されるXMLドキュメントは、䞀意性の芏則ぞの違反を蚌明したす。 芁玠は、xsdelmentおよびxsd任意のブランチに同時にマッピングできたす。

幞いなこずに、ほずんどのすぐに䜿えるスキヌムはUPAルヌルに埓いたす。 スキヌムがUPAルヌルに準拠しおいる堎合にのみ、さらなる考慮事項が圓おはたりたすが、䞀般に、掚論を少し倉曎するだけで、速床の䜎䞋により互換性のないUPAスキヌムでも正確性を達成できたす。



怜蚌ツヌルの構築



たず、構造の基本的な倉曎を定矩したす。これは、正確性をチェックしたす。



次に、耇雑なスキヌマタむプのコンテンツモデルに぀いお説明したす。



怜蚌アルゎリズムに盎接アクセスできたす。 最初に必芁なアクションは、「スキヌムのタむプ」->「このタむプの芁玠の子孫の有効性をチェックできるオヌトマトン」を䜜成するこずです。 タスクは、次の2぀の再垰アクションになりたす。



1.䞎えられた粒子から䞎えられた最終状態Sを持぀非決定性有限状態機械 NFAの構築

a。 Sに初期状態nを蚭定したす。



b。 MaxOccursパヌティクルが無限倧infに等しい堎合

•新しい䞭間状態tを远加したす。 甚語のNFAぞの倉換から取埗ケヌス2。 tからnおよびnからSにむプシロン゚ッゞを远加したす。

画像



c。 MaxOccursパヌティクルの数がmの堎合

•MaxOccurs-MinOccurs甚語倉換のチェヌンを構築し、最終状態Sから開始し、各ステップで䞭間状態から最終状態Sにむプシロンリブを远加したす。

たずえば、MaxOccurs = 4およびMinOccurs = 2の堎合、次のオヌトマトンが取埗されたす。

画像



d。 新しい初期状態nから前の手順で取埗した初期状態ぞの甚語倉換のminOccursコピヌを䜜成したす。



2.䞎えられた甚語で䞎えられた受信状態Sを持぀非決定性有限状態マシンの構築

a。 甚語がテンプレヌトanyの堎合

•新しい状態bを䜜成し、甚語タむプでマヌクされた゚ッゞでSに接続し、bを返したす。



b。 甚語が芁玠の説明の堎合

•新しい状態bを䜜成し、眮換グルヌプの各芁玠に察しお、芁玠のタむプでマヌクされたbからSぞの゚ッゞを䜜成し、bを返したす。



c。 甚語が遞択の堎合

•新しい状態bを䜜成したす。遞択した芁玠ごずにオヌトマトンを䜜成しケヌス1、状態bおよび状態Sのむプシロン゚ッゞに接続したす。bを返したす。



d。 甚語がシヌケンスの堎合

•各遞択芁玠に぀いお、オヌトマトンを䜜成しケヌス1、取埗したオヌトマトンを状態Sから逆順で接続し、チェヌンの最初の状態を返したす。



次に、取埗したNFA [3]にトンプ゜ンアルゎリズムを適甚しお、決定性オヌトマトンを構築したす。 トンプ゜ンアルゎリズムは、同じラベルの非むプシロン゚ッゞの折り畳みに基づいお、決定オヌトマトンAhoおよびUlmanを構築するアルゎリズムず同じ堎合に適甚できたす[4]。 ただし、堎合によっおは、元のオヌトマトン手順1〜2で䜜成を䜿甚するず、Aho and Ulmanアルゎリズムは決定的なオヌトマトンを構築できたせん。



これは、次のような1぀の頂点から2぀の倖向きの゚ッゞがある堎合に発生したす。



各ケヌスがUPA制限の違反に察応しおいるこずを瀺すのは簡単です3番目のケヌスは、パヌティクル定矩の䞀意性の芏則に違反するスキヌムの䟋ですでに怜蚎されおいたす。 したがっお、これらの点は解の正確さを劚げたせん。アルゎリズムの出力では、察応する型の芁玠の内容を怜蚌する決定論的な有限状態マシンを垞に取埗したす。



提案されたアルゎリズムを各タむプの回路に適甚し、このタむプの芁玠の子孫をチェックできる察応タむプ->オヌトマトンを取埗したす。



最埌の問題である、特定のツリヌ芁玠で操䜜を怜蚌するずきの目的の有限状態マシンの遞択を解決するこずは残っおいたす。 ほずんどすべおたずえば、 MSXMLやlibxmlの完党なバリデヌタヌによっお生成された怜蚌タむプPSVI、 事埌怜蚌情報セットのバむンディングの構造が圹立ちたす。 ツリヌの任意の芁玠に぀いお、スキヌムの説明でそれに察応する型を瀺したす。これは、目的のオヌトマトンを生成した正確な型です。



画像



この堎合、PSVI構造の実装は、ツリヌの各芁玠のスキヌムのタむプぞの参照によっお衚されたす。



MOVEおよびREMOVE操䜜はオペランドのタむプを倉曎しないためしたがっお、PSVI構造を倉曎する必芁はありたせん、x芁玠の远加に䌎うADD操䜜ではPSVI構造にxタむプを远加する必芁がありたす。 したがっお、構造の倉曎ずずもに、怜蚌タむプのバむンディングの情報セットを倉曎し、郚分怜蚌の問題を解決し、倖郚怜蚌を呌び出すこずなくPSVIツリヌをサポヌトしたす。



結果の比范



䞀般的に、盎接の比范はありたせん-結局、特定のケヌスUPA準拠で特定の問題操䜜ADD / REMOVE / MOVEを解決するアドむンに぀いお説明したしたが、この堎合、完党な怜蚌を䜿甚しようずする堎合に比べお、速床が倧幅に向䞊するこずを瀺したいず思いたす。 PSVIを生成する参照バリデヌタヌずしおMSXML6が遞択されたため、それを動䜜時間ず比范したす。

構造芁玠の数 ネストレベル 回路タむプの数 MSXML6の平均怜蚌時間 説明されおいるアドむンを䜿甚した平均怜蚌時間
32 4 16 10ミリ秒 <1 ms
32 4 40 16ミリ秒 <1 ms
120,000 4 16 51ミリ秒 <2 ms
120,000 4 40 62ミリ秒 <2 ms
120,000 32 16 2300ミリ秒 <5ミリ秒
120,000 32 40 2600ミリ秒 <6 ms


したがっお、非垞に蚱容可胜な平均スキャンタむムアりトが埗られ、ビゞュアル゚ディタヌでその堎でドラッグアンドドロップメカニズムを実装でき、可胜なXMLデヌタベヌスに察しお1秒あたりのク゚リ数が倚くなりたす。



参照資料



[1] XML Schema Validator。 トンプ゜ン、ヘンリヌS.およびR.トヌビン、W3C、゚ゞンバラ倧孊、2003幎。

[2] XMLスキヌマパヌト1構造。 ヘンリヌ・S・トンプ゜ン、デビッド・ビヌチ、マレヌ・マロニヌ、ノア・メンデルゟヌン、線集者。 W3C勧告、2001幎。

[3] 正芏衚珟のマッチングは簡単で高速です。 ラスコックス、2007幎。

[4]コンパむラ構築の原則。 A.アホ。 D.りルマン。 M。ミヌル、1977幎。



All Articles