From f705ac121ee442543740b8947cff113f484f25e9 Mon Sep 17 00:00:00 2001 From: Mark van Renswoude Date: Wed, 27 Aug 2008 10:10:04 +0000 Subject: [PATCH] Added: start of DataBindingHints manual (Dutch) Fixed: elements which reference a complex type are no longer resolved away, which means they can now be used as document elements --- Docs/DataBindingHints.html | 126 ++++++++++++++++++++++++ Units/DelphiXMLDataBindingGenerator.pas | 2 +- Units/XMLDataBindingGenerator.pas | 12 ++- X2XMLDataBinding.cfg | 4 - 4 files changed, 138 insertions(+), 6 deletions(-) create mode 100644 Docs/DataBindingHints.html diff --git a/Docs/DataBindingHints.html b/Docs/DataBindingHints.html new file mode 100644 index 0000000..842a873 --- /dev/null +++ b/Docs/DataBindingHints.html @@ -0,0 +1,126 @@ + + + + +X²XMLDataBinding - Het gebruik van Hints + + + + +

Inhoudsopgave

+
    +
  1. + Introductie +
  2. +
  3. + Algemeen +
      +
    1. XPath
    2. +
    +
  4. +
  5. + Elementen +
      +
    1. Enumerations
    2. +
    +
  6. +
+ +

Introductie

+

+ Bij het genereren van een XML Data Binding zijn er situaties waarin de geproduceerde code een paar kleine wijzigingen nodig heeft om er lekker mee te kunnen werken. Om te voorkomen dat deze wijzigingen na elke vertaling handmatig gedaan moeten worden is er ondersteuning voor een Hints bestand. Als het bronbestand "Input.xsd" heet moet het Hints bestand "Input.hints.xml" heten. Middels de knop "Generate blank Hints file" in de applicatie wordt er een kaal Hints bestand gegenereerd met de juiste target namespace. +

+ +

+ De technische specificaties van het Hints bestand zijn beschreven in DataBindingHints.xsd. +

+ +

Algemeen

+

Gebruik van XPath

+

+ Om te bepalen op welk element de hint van toepassing is wordt gebruik gemaakt van XPath. Tevens kan worden opgegeven op welke Schema deze XPath moet worden toegepast indien gebruik wordt gemaakt van includes of imports. +

+ +

+ ToDo: uitzoeken en omschrijven hoe het Schema attribute ingevuld dient te worden. Volledig pad, bestandsnaam, excl. extensie, enz. +

+ +

+ We nemen de volgende XSD als voorbeeld: +

+ +

+<?xml version="1.0" encoding="utf-8"?> +<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> + <xs:simpleType name="Status"> + <xs:restriction base="xs:string"> + <xs:enumeration value="" /> + <xs:enumeration value="De gegevens zijn verwerkt" /> + <xs:enumeration value="Er was een probleem bij de verwerking" /> + </xs:restriction> + </xs:simpleType> +</xs:schema> +

+ +

+ Een geldige XPath om het Status element te benoemen zou zijn: +

+ +

+//xs:simpleType[@name='Status'] +

+ +

Elementen

+ + + diff --git a/Units/DelphiXMLDataBindingGenerator.pas b/Units/DelphiXMLDataBindingGenerator.pas index 3d5a0b2..3f3c52c 100644 --- a/Units/DelphiXMLDataBindingGenerator.pas +++ b/Units/DelphiXMLDataBindingGenerator.pas @@ -700,7 +700,7 @@ begin WriteDocumentation(AStream, AItem); AStream.WriteLnNamedFmt(InterfaceItemInterface, ['Name', AItem.TranslatedName, - 'ParentName', parent]); + 'ParentName', parent]); AStream.WriteLn(' ' + CreateNewGUID()); WriteSchemaInterfaceProperties(AStream, AItem, ASection); diff --git a/Units/XMLDataBindingGenerator.pas b/Units/XMLDataBindingGenerator.pas index afb6bf3..2a621fe 100644 --- a/Units/XMLDataBindingGenerator.pas +++ b/Units/XMLDataBindingGenerator.pas @@ -1004,6 +1004,7 @@ var item: TXMLDataBindingItem; complexAliasItem: TXMLDataBindingComplexTypeAliasItem; simpleAliasItem: TXMLDataBindingSimpleTypeAliasItem; + interfaceItem: TXMLDataBindingInterface; begin for itemIndex := Pred(ASchema.ItemCount) downto 0 do @@ -1017,7 +1018,16 @@ begin complexAliasItem := TXMLDataBindingComplexTypeAliasItem(item); if Assigned(complexAliasItem.Item) then begin - ReplaceItem(complexAliasItem, complexAliasItem.Item); + // (MvR) 27-8-2008: instead, we allow the generation of an alias in + // code, so it can be used as a document element + // ReplaceItem(complexAliasItem, complexAliasItem.Item); + + interfaceItem := TXMLDataBindingInterface.Create(Self, complexAliasItem.SchemaItem, complexAliasItem.Name); + interfaceItem.BaseItem := (complexAliasItem.Item as TXMLDataBindingInterface); + interfaceItem.BaseName := complexAliasItem.Item.Name; + ASchema.AddItem(interfaceItem); + + ReplaceItem(complexAliasItem, interfaceItem); FreeAndNil(complexAliasItem); end; end; diff --git a/X2XMLDataBinding.cfg b/X2XMLDataBinding.cfg index fe87b98..5ea2a42 100644 --- a/X2XMLDataBinding.cfg +++ b/X2XMLDataBinding.cfg @@ -35,10 +35,6 @@ -N"lib" -LE"c:\program files\borland\delphi7\Projects\Bpl" -LN"c:\program files\borland\delphi7\Projects\Bpl" --U"c:\program files\borland\delphi7\Lib\Debug" --O"c:\program files\borland\delphi7\Lib\Debug" --I"c:\program files\borland\delphi7\Lib\Debug" --R"c:\program files\borland\delphi7\Lib\Debug" -w-UNSAFE_TYPE -w-UNSAFE_CODE -w-UNSAFE_CAST