2017-03-03 10 views
1

おはよう!異なる名前空間のXSDがサポートされています

次のように私は、xmlファイルを生成:

<object xmlns:el="elements_namespace" xmlns:vlprops="vl_props_namespace" 
    xmlns:vlsvc="vl_svc_params_namespace" xmlns:p="general_params_namespace"> 
    <el:BTN vlprops:link="../clientdb/#abn/fl" vlprops:btnType="hist" 
     vlprops:linkInTab="true" p:nm_title="some_text" 
     p:vl_order="0" p:nm_service="null" p:pr_visible="true" p:nm_endpoint="null" 
     p:nm_logical_id="null" p:nm_description="null"> 
     <vlprops:linkCols><![CDATA[[]]]></vlprops:linkCols> 
     <p:window_BTN /> 
    </el:BTN> 
    <el:GRID vlprops:rows="15" p:nm_title="null" p:vl_order="3" 
     p:nm_service="some_text" p:pr_visible="true" p:nm_endpoint="CLDB" 
     p:nm_logical_id="some_text" p:nm_description="some_text"> 
     <vlsvc:vars><![CDATA[["vl_params"]]]></vlsvc:vars> 
     <vlsvc:consts><![CDATA[{"in_function": "mdTotalTags"}]]></vlsvc:consts> 
     <p:columns_GRID> 
      <el:GRDCOL vlprops:rows="15" p:nm_title="null" p:vl_order="0" 
       p:nm_service="null" p:pr_visible="true" p:nm_endpoint="null" 
       p:nm_logical_id="null" p:nm_description="some_text"> 
       <vlprops:linkCols><![CDATA[["id_client"]]]></vlprops:linkCols> 
      </el:GRDCOL> 
      <el:GRDCOL vlprops:rows="15" p:nm_title="some_text" 
       p:vl_order="1" p:nm_service="null" p:pr_visible="true" 
       p:nm_endpoint="null" p:nm_logical_id="null" p:nm_description="null"></el:GRDCOL> 
      <el:GRDCOL vlprops:rows="15" p:nm_title="some_text" p:vl_order="2" 
       p:nm_service="null" p:pr_visible="true" p:nm_endpoint="null" 
       p:nm_logical_id="null" p:nm_description="null"></el:GRDCOL> 
      <el:GRDCOL vlprops:rows="15" p:nm_title="some_text" 
       p:vl_order="3" p:nm_service="null" p:pr_visible="true" 
       p:nm_endpoint="null" p:nm_logical_id="null" p:nm_description="null"></el:GRDCOL> 
      <el:GRDCOL vlprops:rows="15" p:nm_title="some_text" p:vl_order="4" 
       p:nm_service="null" p:pr_visible="true" p:nm_endpoint="null" 
       p:nm_logical_id="null" p:nm_description="null"></el:GRDCOL> 
      <el:GRDCOL vlprops:rows="15" p:nm_title="some_text" p:vl_order="5" 
       p:nm_service="null" p:pr_visible="true" p:nm_endpoint="null" 
       p:nm_logical_id="null" p:nm_description="null"></el:GRDCOL> 
      <el:GRDCOL vlprops:rows="15" p:nm_title="some_text" 
       p:vl_order="6" p:nm_service="null" p:pr_visible="true" 
       p:nm_endpoint="null" p:nm_logical_id="null" p:nm_description="null"></el:GRDCOL> 
      <el:GRDCOL vlprops:rows="15" p:nm_title="some_text почта" 
       p:vl_order="7" p:nm_service="null" p:pr_visible="true" 
       p:nm_endpoint="null" p:nm_logical_id="null" p:nm_description="null"></el:GRDCOL> 
      <el:GRDCOL vlprops:rows="15" p:nm_title="some_text" p:vl_order="8" 
       p:nm_service="null" p:pr_visible="true" p:nm_endpoint="null" 
       p:nm_logical_id="null" p:nm_description="null"></el:GRDCOL> 
     </p:columns_GRID> 

     <p:footDetail_GRID /> 
     <p:rowDetail_GRID /> 
    </el:GRID> 
</object> 

を今、私はXSDスキーマを生成する必要があり、私はインターネットでいくつかの情報をGoogleで検索してきた、いくつかの例に出くわしました。それらのすべてには名前空間が1つしかありません。

<?xml version="1.0"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      targetNamespace="http://www.my.com/book" 
      elementFormDefault="qualified"> 

    <xs:element name="book"> 
     <xs:complexType> 
      <xs:attribute name="author" type="xs:string"/> 
     </xs:complexType> 
    </xs:element>  
</xs:schema> 

ようにそれは、xsが含まれています。これが可能であるならば、私は私のxml内のすべての名前空間を受け入れるだろう1つのXSDファイルを作ることができるならば、名前空間にのみ、私は疑問に思う

(
el="elements_namespace" 
xmlns:vlprops="vl_props_namespace" 
xmlns:vlsvc="vl_svc_params_namespace" 
xmlns:p="general_params_namespace" 
) 

あなたは私の少しの例を与えることができます私のXMLと?事前に感謝します

+0

これは間違った方法ではありませんが、その要素の要素と属性を2つの別々の名前空間に持つ理由は何ですか?ネームスペースは、大部分の場合、まずは肥大化しています。あなたはまた、 "ヌル"属性を含まないと考えるかもしれません。 –

+1

異なる名前空間で項目を区切らなければならなかったいくつかの問題のため、必要な挿入文を作成するパーサーを作成しなければなりませんでした。また、値がヌルであるか、ヌルでないか、まったく渡されなかったかどうかを追跡する必要があります。 –

答えて

0

XMLスキーマは通常、名前空間ごとに1つのスキーマで配置されますが、スキーマは相互にインポートできます。

たとえば、ルート要素の場合は、ターゲットの名前空間のない最初のスキーマを定義できます。elスキーマがインポートされます。次に、elスキーマで定義された要素をref属性で参照できます。

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema 
     xmlns:xs="http://www.w3.org/2001/XMLSchema" 
     xmlns:el="elements_namespace"> 
    <xs:import namespace="elements_namespace" schemaLocation="el.xsd"/> 
    <xs:element name="object"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element ref="el:BTN"/> 
       <xs:element ref="el:GRID"/> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

要素と属性をインポートし、参照するために同じメカニズムが他のスキーマがターゲット名前空間を持つことになりますことを除いて、すべてのスキーマで再利用することができます。

通常混乱をもたらす一点あります:スキーマのターゲット名前空間でのライブで宣言された要素は、(このため、elementFormDefaultがあることを確認しているので

  • name属性は、接頭辞なしで、ローカル名を持っているが、 qualified、対象の名前空間を持たないエントリスキーマを除く)
  • ref属性には接頭辞付きのQNameが必要です。したがって、上記のように接頭辞をバインドする必要があります。

最後に、名前空間にURIを使用することをお勧めします。実際には多くのプロセッサが実際に文字列として扱い、不平を言うことはありませんが、XML Names仕様ではこれが必要です。

関連する問題