Avatar billede powerpunk Nybegynder
27. juni 2011 - 14:07 Der er 4 kommentarer

Konstanter i XML Schema

Hej eksperter.

Jeg har et XML Schema, hvor jeg godt kunne tænke mig at kunne erklære nogle 'konstanter' som kan benyttes ned gennem schema'et.

Altså noget i retning af dette stærkt simplificerede eksempel:

<xs:schema id="MySchema"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    elementFormDefault="qualified">

  <xs:complexType name="MyType1">
    <xs:sequence>
      <xs:element name="values" type="xs:int" minOccurs="[MYTYPE1_LOW]" maxOccurs="[MYTYPE1_HIGH]" />
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="MyType2">
    <xs:sequence>
      <xs:element name="values" type="xs:float" minOccurs="[MYTYPE2_LOW]" maxOccurs="[MYTYPE2_HIGH]" />
    </xs:sequence>
  </xs:complexType>

</xs:schema>

Kan man det?

Det skal måske nævnes at schemaet efterfølgende skal kunne benyttes til validering via msxml 6.0.
Avatar billede arne_v Ekspert
28. juni 2011 - 03:51 #1
Jeg vil mene at the XML way maa vaere at lade minOccurs og maxOccurs vaere en del af type definitionen og hvos du skal have flere med samme dimension saa extend fra en faelles basis type.
Avatar billede powerpunk Nybegynder
28. juni 2011 - 10:37 #2
Mener du noget á la:

  <xs:complexType name="arr_11">
    <xs:sequence>
      <xs:element name="values" minOccurs="11" maxOccurs="11" />
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="MyType1">
    <xs:sequence>
      <xs:element name="values">
        <xs:complexType>
          <xs:complexContent>
            <xs:restriction base="arr_11">
              <xs:sequence>
              <xs:element name="values" type="xs:int" minOccurs="11" maxOccurs="11" />
              </xs:sequence>
            </xs:restriction>
          </xs:complexContent>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  <xs:complexType>

  <xs:complexType name="MyType2">
    <xs:sequence>
      <xs:element name="values">
        <xs:complexType>
          <xs:complexContent>
            <xs:restriction base="arr_11">
              <xs:sequence>
              <xs:element name="values" type="xs:float" minOccurs="11" maxOccurs="11" />
              </xs:sequence>
            </xs:restriction>
          </xs:complexContent>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  <xs:complexType>

Fra et objektorienteret synspunkt giver det vel mening... Men der synes at være noget dobbeltbogholderi, som jeg ikke er helt vild med; Hvis ikke jeg angiver minOccurs/maxOccurs på mine restrictions også er mit schema tilsyneladende ikke gyldigt...

Hvis samlingerne i en senere version af systemet skal være større, kan jeg så ændre størrelsen på basetypen, men skal stadig ind og rette det i alle de nedarvede, så der er stadig lidt 'magic numbers' over det. Jeg får dog (givet en fornuftig XML editor) lidt hjælp til at lokalisere dem, fordi schemaet ikke er gyldigt ellers....

Og så bliver mit schema lidt tungere at overskue :-S - men det er måske prisen...
Avatar billede arne_v Ekspert
29. juni 2011 - 01:42 #3
Jeg ville lave en basis type for integer og en for float.
Avatar billede arne_v Ekspert
08. august 2011 - 00:59 #4
Kommet videre?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester