1

私は以下のようなXML構造を持っています(大きなXMLの一部です)

<Person>
<firstName>
<lastName>
<Partner>
   <firstName>
...
</Person>

たとえば、更新可能かどうかを示すために、各フィールドに追加のメタデータを保持する必要があります

ic 2 つのアプローチ

1) 各 FIELD レベルでメタデータを追加します。各要素がOBJECTになっているため、これはXSDを過度に複雑にしていると感じています

<Person>
   <firstName updatable="true" ... />
   ...
</Person>

2) 以下のようにメタデータを分離します

しかし、メタデータをデータにリンクするにはどうすればよいですか? ユニークな名前で?XML を使用している人は簡単にリンクできますか? より良い方法はありますか?ありがとう!

 <data>
     <Person>one
       <firstName>
       <lastName>
       <Partner>
           <firstName>
       ...
     </Person>
     <Person>two
       <firstName>
       <lastName>
       <Partner>
           <firstName>
       ...
    </Person>
</data>
<metadata>
    <field name="firstName" updateble="false"/>
    ....
</metadata>

これはAdd metadata to an XSD definition に似ていると思います が、答えはありません

4

1 に答える 1

0

私の(おそらく修辞的な)質問は、モデルとの関係で静的である場合、なぜ各 XML でこのメタデータを見たいと思うのでしょうか?

UBL XSD スニペットを示します (XML 名前空間は無関係として省略されています)。

 <xsd:element ref="cbc:UBLVersionID" minOccurs="0" maxOccurs="1">
    <xsd:annotation>
       <xsd:documentation>
          <ccts:Component>
             <ccts:ComponentType>BBIE</ccts:ComponentType>
             <ccts:DictionaryEntryName>Application Response. UBL Version Identifier. Identifier</ccts:DictionaryEntryName>
             <ccts:Definition>The earliest version of the UBL 2 schema for this document type that defines all of the elements that might be encountered in the current instance.</ccts:Definition>
             <ccts:Cardinality>0..1</ccts:Cardinality>
             <ccts:ObjectClass>Application Response</ccts:ObjectClass>
             <ccts:PropertyTerm>UBL Version Identifier</ccts:PropertyTerm>
             <ccts:RepresentationTerm>Identifier</ccts:RepresentationTerm>
             <ccts:DataType>Identifier. Type</ccts:DataType>
             <ccts:Examples>2.0.5</ccts:Examples>
          </ccts:Component>
       </xsd:documentation>
    </xsd:annotation>
 </xsd:element>

ここには、質問に関連するものとして簡単に渡すことができる多くの構造化データがあることがわかります。ただし、基本的には、これは XSD アノテーション メカニズムを使用して、XSD に関連することを実現するメカニズムです。もう 1 つは、JAXB カスタム バインディング メカニズムで使用されるものです。

<xsd:simpleType name="ZipCodeType">
    <xsd:annotation>
        <xsd:appinfo>
            <jxb:javaType name="int" parseMethod="javax.xml.bind.DatatypeConverter.parseInt" printMethod="javax.xml.bind.DatatypeConverter.printInt"/>
        </xsd:appinfo>
    </xsd:annotation>
    <xsd:restriction base="xsd:integer">
        <xsd:minInclusive value="10000"/>
        <xsd:maxInclusive value="99999"/>
    </xsd:restriction>
</xsd:simpleType>

これは UBL の例 (ドキュメントと appinfo) とは異なりますが、どちらも XSD 注釈メカニズムを使用しています。

JAXB のカスタム バインディングは、カスタム バインディングが XSD から分離されている (独自の個別の XML ファイル内にある) モデルもサポートしています。カスタム バインディング ファイル (この場合はメタデータ) と XSD (この場合は XML) の間の関連付けは、XPath の一致によって行われます。

これにより、別の明確化がもたらされます。あなたが考えている処理モデルは何ですか? 動的 (つまり、メタモデルは静的ですが、任意の XSD に適用できます)? プラットホーム?以下は、たまたまプラットフォームに一致する場合に、必要なものに対して動的に機能する可能性のあるソリューションです。

。ネット:

上記は基本的に、XML に適用された PSVI です。同じことが Java にも存在します (このXerces ページで を検索しますHow do I retrieve PSVI from the DOM?)...

XSLT のソリューションも想像できますし、XSD をまったく含まないソリューションも想像できます。

于 2013-04-18T00:36:56.493 に答える