Announcement

Collapse
No announcement yet.

Key problem

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Key problem

    Hallo zusammen!

    Ich habe folgendes XML:
    <dataobject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="SimpleObject.xsd" xmlns="http://www.ekkaia.at/xml/namespaces/dataobject/v1.0">
    <metadata>
    <objects>
    <object name="test1">
    <columns>
    <column name="text" type="text" size="255"/>
    <column name="number" type="integer"/>
    </columns>
    </object>
    <object name="test2">
    <columns>
    <column name="texts" type="text" size="255"/>
    <ref object="test1"/>
    </columns>
    </object>
    </objects>
    </metadata>
    <data name="test1">
    <row id="1">
    <value name="texts">Hello World!</value>
    <value name="number" null="true"/>
    </row>
    </data>
    </dataobject>


    und habe versucht mittels xs:key zu erzwingen das innerhalb eines object tags jedes Attribut name nur einmal vorkommen darf und das in data/row/value/@name nur namen stehen dürfen die in object existieren.
    Beispiel:
    in data[test1]/row/value dürfen nur attributwerte "name" vorkommen die in metadata/objects/object[test1]/columns/column/@name existieren.

    Ich habe leider nach vielen versuchen keine lösung gefunden. mein bisheriger Ansatz:
    <?xml version="1.0" encoding="utf-8"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:do="http://www.ekkaia.at/xml/namespaces/dataobject/v1.0" targetNamespace="http://www.ekkaia.at/xml/namespaces/dataobject/v1.0" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:element name="dataobject">
    <xs:complexType>
    <xs:sequence>
    <xs:element ref="do:metadata" minOccurs="1" maxOccurs="1"/>
    <xs:element ref="do:data" minOccurs="1" maxOccurs="unbounded"/>
    </xs:sequence>
    </xs:complexType>
    <xs:key name="namekey">
    <xs:selector xpath="do:metadata/dobjects/dobject/do:columns"/>
    <xs:field xpath="@name"/>
    </xs:key>
    <xs:keyref name="namekeyref" refer="do:namekey">
    <xs:selector xpath="do:data/do:row/do:value"/>
    <xs:field xpath="@name"/>
    </xs:keyref>
    </xs:element>
    <xs:element name="metadata">
    <xs:complexType>
    <xs:sequence>
    <xs:element ref="dobjects" minOccurs="1" maxOccurs="1"/>
    </xs:sequence>
    </xs:complexType>
    </xs:element>
    <xs:element name="objects">
    <xs:complexType>
    <xs:sequence>
    <xs:element ref="dobject" minOccurs="1" maxOccurs="unbounded"/>
    </xs:sequence>
    </xs:complexType>
    </xs:element>
    <xs:element name="object">
    <xs:complexType>
    <xs:sequence>
    <xs:element ref="do:columns" minOccurs="1" maxOccurs="1"/>
    </xs:sequence>
    <xs:attribute name="name" use="required"/>
    </xs:complexType>
    </xs:element>
    <xs:element name="columns">
    <xs:complexType>
    <xs:sequence minOccurs="1" maxOccurs="unbounded">
    <xs:choice>
    <xs:element ref="do:column" minOccurs="1" maxOccurs="unbounded"/>
    <xs:element ref="do:ref" minOccurs="1" maxOccurs="unbounded"/>
    </xs:choice>
    </xs:sequence>
    </xs:complexType>
    <xs:unique name="uqcolumnname">
    <xs:selector xpath="column"/>
    <xs:field xpath="@name"/>
    </xs:unique>
    </xs:element>
    <xs:element name="ref">
    <xs:complexType>
    <xs:attribute name="object" use="required" type="xs:string"/>
    </xs:complexType>
    </xs:element>
    <xs:element name="column">
    <xs:complexType>
    <xs:attribute name="name" use="required" type="xs:string"/>
    <xs:attribute name="type" use="required">
    <xs:simpleType>
    <xs:restriction base="xs:string">
    <xs:enumeration value="integer"/>
    <xs:enumeration value="text"/>
    <xs:enumeration value="float"/>
    <xs:enumeration value="datetime"/>
    <xs:enumeration value="xml"/>
    <xs:enumeration value="blob"/>
    </xs:restriction>
    </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="size" use="optional">
    <xs:simpleType>
    <xs:restriction base="xs:int">
    <xs:minInclusive value="1"/>
    <xs:maxInclusive value="8000"/>
    </xs:restriction>
    </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="nullable" use="optional" default="false" type="xs:boolean"/>
    <xs:attribute name="autoincrement" use="optional" default="false" type="xs:boolean"/>
    <xs:attribute name="options" use="optional" type="xs:string"/>
    </xs:complexType>
    </xs:element>
    <xs:element name="data">
    <xs:complexType>
    <xs:sequence>
    <xs:element ref="do:row" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="name" use="required"/>
    </xs:complexType>
    </xs:element>
    <xs:element name="row">
    <xs:complexType>
    <xs:sequence>
    <xs:element ref="do:value" minOccurs="1" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="id" use="required" type="xs:int"/>
    </xs:complexType>
    <xs:unique name="uqvaluename">
    <xs:selector xpath="value"/>
    <xs:field xpath="@name"/>
    </xs:unique>
    </xs:element>
    <xs:element name="value">
    <xs:complexType>
    <xs:simpleContent>
    <xs:extension base="xs:string">
    <xs:attribute name="name" use="required" type="xs:string"/>
    <xs:attribute name="null" use="optional" type="xs:boolean" default="false"/>
    </xs:extension>
    </xs:simpleContent>
    </xs:complexType>
    </xs:element>
    </xs:schema>


    Kann mir bitte jemand helfen?

    lg

  • #2
    Hi, ekkaia

    wenn ich in Zeile 15 den xpath korrigiere, funktioniert es bei mir: do:column fehlt m.A. nach

    do:metadata/dobjects/dobject/do:columns/do:column

    Nochwas zu Zeile 47: was bedeuten die vielen min/maxOccurs?:

    <xs:sequence minOccurs="1" maxOccurs="unbounded">
    <xs:choice>
    <xs:element ref="do:column" minOccurs="1" maxOccurs="unbounded"/>
    <xs:element ref="do:ref" minOccurs="1" maxOccurs="unbounded"/>
    </xs:choice>
    </xs:sequence>
    Meint nicht folgendes das gleiche?:

    <xs:sequence>
    <xs:choice minOccurs="1" maxOccurs="unbounded">
    <xs:element ref="do:column"/>
    <xs:element ref="do:ref"/>
    </xs:choice>
    </xs:sequence>


    Gruß

    ngong

    Comment

    Working...
    X