Pattern matching sur xsd: nom de l'élément

regex sqlbulkcopy xml xml-parsing xsd

Question

J'utilise SQL XML pour charger en bloc les données directement dans la base de données. Mon XML et xsd sont les suivants:

XML:

<?xml version="1.0"?>
<Data> 
  <USEFUL>
        <Value>3.1</Value>
        <Date>12/20/2001</Date>
  </USEFUL>

  <Something>
        <Value>3.1</Value>
        <Date>12/20/2001</Date>
  </Something>

</Data>

XSD:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        xmlns:sql="urn:schemas-microsoft-com:mapping-schema">

    <xsd:simpleType name="anyElement">
        <xs:restriction base="xs:string">
            <xs:pattern value="[A-Za-z]+" />   
        </xs:restriction> 
    </xsd:simpleType>

    <xsd:element name="USEFUL" sql:relation="DATA" >

        <xsd:complexType>
           <xsd:sequence>
                <xsd:element name="Value" type="xsd:string" />
                <xsd:element name="Date" type="xsd:date" />
           </xsd:sequence>
        </xsd:complexType>

    </xsd:element>

    <xsd:element type="anyElement" sql:relation="NON-DATA" >

        <xsd:complexType>
           <xsd:sequence>
                <xsd:element name="Value" type="xsd:string" />
                <xsd:element name="Date" type="xsd:date" />
           </xsd:sequence>
        </xsd:complexType>

    </xsd:element>

</xsd:schema> 

Je veux insérer les éléments "UTILES" dans la même table et tout le reste dans une autre table. Existe-t-il un moyen d'utiliser wildchar * comme nom ou une expression régulière pour filtrer les éléments indésirables dans une autre table?

Je vous remercie.

Réponse populaire

Non, ce n'est pas possible - il n'y a aucun moyen de définir dans un XSD un type complexe qui s'applique à un élément dont le nom est différent de celui spécifié. Vous devrez définir le type:

 <xsd:complexType name="anyElement"> 
    <xsd:sequence> 
        <xsd:element name="Value" type="xsd:string" /> 
        <xsd:element name="Date" type="xsd:date" /> 
    </xsd:sequence> 
 </xsd:complexType> 

puis lister explicitement tous les éléments qui vont à la table 'other':

 <xsd:element name="Something" type="anyElement" sql:relation="NON-DATA"/>
 <xsd:element name="SomethingElse" type="anyElement" sql:relation="NON-DATA"/>
 <xsd:element name="YetAnotherOne" type="anyElement" sql:relation="NON-DATA"/>
 . . . 


Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi