XSD

2013-04-12 36 views
1

我有XML結構如下(只是大型XML的一部分)XSD

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

我需要保持附加的元數據與例如每個字段以指示如果可更新或不

ic兩種方法

1)在每個FIELD級別添加元數據。我感覺這因爲每個元件現在是一個對象

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

2)分離出的元數據如下面

的XSD過於複雜但我如何元數據鏈接的數據?通過一個獨特的名字?有人可以使用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 ,但沒有任何回答

+0

它也不會只是一個元數據屬性(「可更新」),但它可以很多像對。 – nigel

+0

此元數據是否與描述您的XML的模型保持靜態關係,還是特定於您的XML實例?請澄清,我會給你我的意見... –

+0

靜態關係模型彼得。 – nigel

回答

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的關係。另一種是通過使用自定義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)?平臺?如果碰巧與您的平臺相匹配,下面是一個可以滿足您需求的解決方案,並且能夠以動態的方式進行工作。

.NET:

以上基本上是將PSVI應用於您的XML。對於Java也是如此(在Xerces page上搜索How do I retrieve PSVI from the DOM?)...

我也可以爲XSLT提供圖片解決方案,或者根本不涉及XSD ...上面的內容應該足以讓您開始。

+0

感謝Petru的詳細解答。但我想我誤解了你「靜態與動態」的問題n誤導了你,對不起。
。元數據來自數據庫,即其動態。但它的相同類型
相同,我的意思是,可以有多個實例,但它們都將具有相同的元數據。
我現在已決定通過FIELD方法將數據n元數據保存在一起。 – nigel

+0

好的,別擔心。 –