1
1
mirror of https://github.com/dgis/xsddiagram.git synced 2024-08-16 14:00:40 +03:00

- Add multi-(language) documentation (https://github.com/dgis/xsddiagram/issues/8).

- Fix the URL escaping in the import (https://github.com/dgis/xsddiagram/issues/11).
- Add the attributes of an element with the option -a for text output only.
This commit is contained in:
dgis 2017-02-10 18:14:01 +01:00
parent 0a003a6558
commit 5aa36a3b40
14 changed files with 545 additions and 388 deletions

View File

@ -636,70 +636,8 @@ namespace XSDDiagram
ShowEnumerate(annotated); ShowEnumerate(annotated);
// Attributes enumeration // Attributes enumeration
List<XSDAttribute> listAttributes = new List<XSDAttribute>(); List<XSDAttribute> listAttributes = DiagramHelpers.GetAnnotatedAttributes(this.schema, annotated, nameSpace);
if (annotated is XMLSchema.element)
{
XMLSchema.element element = annotated as XMLSchema.element;
if (element.Item is XMLSchema.complexType)
{
XMLSchema.complexType complexType = element.Item as XMLSchema.complexType;
listAttributes.AddRange(ShowAttributes(complexType, nameSpace));
}
else if (element.type != null)
{
//XSDObject xsdObject = this.schema.ElementsByName[QualifiedNameToFullName("type", element.type)] as XSDObject;
//if (xsdObject != null)
XSDObject xsdObject;
if (this.schema.ElementsByName.TryGetValue(QualifiedNameToFullName("type", element.type), out xsdObject) && xsdObject != null)
{
XMLSchema.annotated annotatedElement = xsdObject.Tag as XMLSchema.annotated;
if (annotatedElement is XMLSchema.complexType)
{
XMLSchema.complexType complexType = annotatedElement as XMLSchema.complexType;
listAttributes.AddRange(ShowAttributes(complexType, nameSpace));
}
else
{
}
}
else
{
}
}
else
{
}
}
else if (annotated is XMLSchema.complexType)
{
XMLSchema.complexType complexType = annotated as XMLSchema.complexType;
listAttributes.AddRange(ShowAttributes(complexType, nameSpace));
}
//RC++ Original code
//else
//{
//}
//this.listViewAttributes.Items.Clear();
//foreach (XSDAttribute attribute in listAttributes)
// this.listViewAttributes.Items.Add(new ListViewItem(new string[] { attribute.Name, attribute.Type, attribute.Use, attribute.DefaultValue })).Tag = attribute;
//RC--
//Adrian++
//This part i modify
else if (annotated is XMLSchema.simpleType)
{
XMLSchema.attribute attr = new XMLSchema.attribute();
XMLSchema.localSimpleType def = new XMLSchema.localSimpleType();
def.Item = (annotated as XMLSchema.simpleType).Item;
attr.simpleType = def;
string type = "";
if (def.Item is XMLSchema.restriction) type = (def.Item as XMLSchema.restriction).@base.Name;
XSDAttribute XSDattr = new XSDAttribute("filename", (annotated as XMLSchema.simpleType).name, "namespace", type, false, "", "", attr);
listAttributes.Add(XSDattr);
}
//This part i modify //This part i modify
this.listViewAttributes.Items.Clear(); this.listViewAttributes.Items.Clear();
listAttributes.Reverse(); listAttributes.Reverse();
@ -725,245 +663,6 @@ namespace XSDDiagram
} }
} }
private List<XSDAttribute> ShowAttributes(XMLSchema.complexType complexType, string nameSpace)
{
List<XSDAttribute> listAttributes = new List<XSDAttribute>();
ParseComplexTypeAttributes(nameSpace, listAttributes, complexType, false);
return listAttributes;
}
private void ParseComplexTypeAttributes(string nameSpace, List<XSDAttribute> listAttributes, XMLSchema.complexType complexType, bool isRestriction)
{
if (complexType.ItemsElementName != null)
{
for (int i = 0; i < complexType.ItemsElementName.Length; i++)
{
switch (complexType.ItemsElementName[i])
{
case XMLSchema.ItemsChoiceType4.attribute:
{
XMLSchema.attribute attribute = complexType.Items[i] as XMLSchema.attribute;
ParseAttribute(nameSpace, listAttributes, attribute, false);
}
break;
case XMLSchema.ItemsChoiceType4.attributeGroup:
{
XMLSchema.attributeGroup attributeGroup = complexType.Items[i] as XMLSchema.attributeGroup;
ParseAttributeGroup(nameSpace, listAttributes, attributeGroup, false);
}
break;
case XMLSchema.ItemsChoiceType4.anyAttribute:
XMLSchema.wildcard wildcard = complexType.Items[i] as XMLSchema.wildcard;
XSDAttribute xsdAttribute = new XSDAttribute("", "*", wildcard.@namespace, "", false, null, null, null);
listAttributes.Add(xsdAttribute);
break;
case XMLSchema.ItemsChoiceType4.simpleContent:
case XMLSchema.ItemsChoiceType4.complexContent:
XMLSchema.annotated annotatedContent = null;
if (complexType.Items[i] is XMLSchema.complexContent)
{
XMLSchema.complexContent complexContent = complexType.Items[i] as XMLSchema.complexContent;
annotatedContent = complexContent.Item;
}
else if (complexType.Items[i] is XMLSchema.simpleContent)
{
XMLSchema.simpleContent simpleContent = complexType.Items[i] as XMLSchema.simpleContent;
annotatedContent = simpleContent.Item;
}
if (annotatedContent is XMLSchema.extensionType)
{
XMLSchema.extensionType extensionType = annotatedContent as XMLSchema.extensionType;
//XSDObject xsdExtensionType = this.schema.ElementsByName[QualifiedNameToFullName("type", extensionType.@base)] as XSDObject;
//if (xsdExtensionType != null)
XSDObject xsdExtensionType;
if (this.schema.ElementsByName.TryGetValue(QualifiedNameToFullName("type", extensionType.@base), out xsdExtensionType) && xsdExtensionType != null)
{
XMLSchema.annotated annotatedExtension = xsdExtensionType.Tag as XMLSchema.annotated;
if (annotatedExtension != null)
{
if (annotatedExtension is XMLSchema.complexType)
ParseComplexTypeAttributes(extensionType.@base.Namespace, listAttributes, annotatedExtension as XMLSchema.complexType, false);
}
}
if (extensionType.Items != null)
{
foreach (XMLSchema.annotated annotated in extensionType.Items)
{
if (annotated is XMLSchema.attribute)
{
ParseAttribute(nameSpace, listAttributes, annotated as XMLSchema.attribute, false);
}
else if (annotated is XMLSchema.attributeGroup)
{
ParseAttributeGroup(nameSpace, listAttributes, annotated as XMLSchema.attributeGroup, false);
}
}
}
}
else if (annotatedContent is XMLSchema.restrictionType)
{
XMLSchema.restrictionType restrictionType = annotatedContent as XMLSchema.restrictionType;
//XSDObject xsdRestrictionType = this.schema.ElementsByName[QualifiedNameToFullName("type", restrictionType.@base)] as XSDObject;
//if (xsdRestrictionType != null)
XSDObject xsdRestrictionType;
if (this.schema.ElementsByName.TryGetValue(QualifiedNameToFullName("type", restrictionType.@base), out xsdRestrictionType) && xsdRestrictionType != null)
{
XMLSchema.annotated annotatedRestriction = xsdRestrictionType.Tag as XMLSchema.annotated;
if (annotatedRestriction != null)
{
if (annotatedRestriction is XMLSchema.complexType)
ParseComplexTypeAttributes(restrictionType.@base.Namespace, listAttributes, annotatedRestriction as XMLSchema.complexType, false);
}
}
if (restrictionType.Items1 != null)
{
foreach (XMLSchema.annotated annotated in restrictionType.Items1)
{
if (annotated is XMLSchema.attribute)
{
ParseAttribute(nameSpace, listAttributes, annotated as XMLSchema.attribute, true);
}
else if (annotated is XMLSchema.attributeGroup)
{
ParseAttributeGroup(nameSpace, listAttributes, annotated as XMLSchema.attributeGroup, true);
}
}
}
}
break;
}
}
}
else
{
}
}
private XSDAttribute ParseAttribute(string nameSpace, List<XSDAttribute> listAttributes, XMLSchema.attribute attribute, bool isRestriction)
{
bool isReference = false;
string filename = "";
string name = attribute.name;
string type = "";
if (attribute.@ref != null)
{
object o = null;
this.schema.AttributesByName.TryGetValue(QualifiedNameToFullName("attribute", attribute.@ref), out o);
if (o is XSDAttribute)
{
XSDAttribute xsdAttributeInstance = o as XSDAttribute;
XSDAttribute refXSDAttribute = ParseAttribute(nameSpace, listAttributes, xsdAttributeInstance.Tag, isRestriction);
if(refXSDAttribute != null)
{
// Override the "use" field with
refXSDAttribute.Use = attribute.use.ToString();
}
return null;
}
else // Reference not found!
{
type = QualifiedNameToAttributeTypeName(attribute.@ref);
name = attribute.@ref.Name;
nameSpace = attribute.@ref.Namespace;
isReference = true;
}
}
else if (attribute.type != null)
{
type = QualifiedNameToAttributeTypeName(attribute.type);
nameSpace = attribute.type.Namespace;
}
else if (attribute.simpleType != null)
{
XMLSchema.simpleType simpleType = attribute.simpleType as XMLSchema.simpleType;
if (simpleType.Item is XMLSchema.restriction)
{
XMLSchema.restriction restriction = simpleType.Item as XMLSchema.restriction;
type = QualifiedNameToAttributeTypeName(restriction.@base);
nameSpace = restriction.@base.Namespace;
}
else if (simpleType.Item is XMLSchema.list)
{
XMLSchema.list list = simpleType.Item as XMLSchema.list;
type = QualifiedNameToAttributeTypeName(list.itemType);
nameSpace = list.itemType.Namespace;
}
else
{
}
}
else
{
}
if (string.IsNullOrEmpty(attribute.name) && string.IsNullOrEmpty(name))
{
}
if (isRestriction)
{
if (attribute.use == XMLSchema.attributeUse.prohibited)
{
foreach (XSDAttribute xsdAttribute in listAttributes)
{
if (xsdAttribute.Name == name)
{
//listAttributes.Remove(xsdAttribute);
xsdAttribute.Use = attribute.use.ToString();
break;
}
}
}
}
else
{
XSDAttribute xsdAttribute = new XSDAttribute(filename, name, nameSpace, type, isReference, attribute.@default, attribute.use.ToString(), attribute);
listAttributes.Insert(0, xsdAttribute);
return xsdAttribute;
}
return null;
}
private void ParseAttributeGroup(string nameSpace, List<XSDAttribute> listAttributes, XMLSchema.attributeGroup attributeGroup, bool isRestriction)
{
if (attributeGroup is XMLSchema.attributeGroupRef && attributeGroup.@ref != null)
{
object o = null;
this.schema.AttributesByName.TryGetValue(QualifiedNameToFullName("attributeGroup", attributeGroup.@ref), out o);
if (o is XSDAttributeGroup)
{
XSDAttributeGroup xsdAttributeGroup = o as XSDAttributeGroup;
XMLSchema.attributeGroup attributeGroupInstance = xsdAttributeGroup.Tag;
foreach (XMLSchema.annotated annotated in attributeGroupInstance.Items)
{
if (annotated is XMLSchema.attribute)
{
ParseAttribute(nameSpace, listAttributes, annotated as XMLSchema.attribute, isRestriction);
}
else if (annotated is XMLSchema.attributeGroup)
{
ParseAttributeGroup(nameSpace, listAttributes, annotated as XMLSchema.attributeGroup, isRestriction);
}
}
}
}
else
{
}
}
private static string QualifiedNameToFullName(string type, System.Xml.XmlQualifiedName xmlQualifiedName)
{
return xmlQualifiedName.Namespace + ':' + type + ':' + xmlQualifiedName.Name;
}
private static string QualifiedNameToAttributeTypeName(System.Xml.XmlQualifiedName xmlQualifiedName)
{
return xmlQualifiedName.Name + " : " + xmlQualifiedName.Namespace;
}
private void ShowEnumerate(XMLSchema.attribute attribute) private void ShowEnumerate(XMLSchema.attribute attribute)
{ {
this.listViewEnumerate.Items.Clear(); this.listViewEnumerate.Items.Clear();
@ -971,10 +670,10 @@ namespace XSDDiagram
{ {
if (attribute.type != null) if (attribute.type != null)
{ {
//XSDObject xsdObject = this.schema.ElementsByName[QualifiedNameToFullName("type", attribute.type)] as XSDObject; //XSDObject xsdObject = this.schema.ElementsByName[DiagramHelpers.QualifiedNameToFullName("type", attribute.type)] as XSDObject;
//if (xsdObject != null) //if (xsdObject != null)
XSDObject xsdObject; XSDObject xsdObject;
if (this.schema.ElementsByName.TryGetValue(QualifiedNameToFullName("type", attribute.type), out xsdObject) && xsdObject != null) if (this.schema.ElementsByName.TryGetValue(DiagramHelpers.QualifiedNameToFullName("type", attribute.type), out xsdObject) && xsdObject != null)
{ {
XMLSchema.annotated annotatedElement = xsdObject.Tag as XMLSchema.annotated; XMLSchema.annotated annotatedElement = xsdObject.Tag as XMLSchema.annotated;
if (annotatedElement is XMLSchema.simpleType) if (annotatedElement is XMLSchema.simpleType)
@ -997,10 +696,10 @@ namespace XSDDiagram
XMLSchema.element element = annotated as XMLSchema.element; XMLSchema.element element = annotated as XMLSchema.element;
if (element != null && element.type != null) if (element != null && element.type != null)
{ {
//XSDObject xsdObject = this.schema.ElementsByName[QualifiedNameToFullName("type", element.type)] as XSDObject; //XSDObject xsdObject = this.schema.ElementsByName[DiagramHelpers.QualifiedNameToFullName("type", element.type)] as XSDObject;
//if (xsdObject != null) //if (xsdObject != null)
XSDObject xsdObject; XSDObject xsdObject;
if (this.schema.ElementsByName.TryGetValue(QualifiedNameToFullName("type", element.type), out xsdObject) && xsdObject != null) if (this.schema.ElementsByName.TryGetValue(DiagramHelpers.QualifiedNameToFullName("type", element.type), out xsdObject) && xsdObject != null)
{ {
XMLSchema.annotated annotatedElement = xsdObject.Tag as XMLSchema.annotated; XMLSchema.annotated annotatedElement = xsdObject.Tag as XMLSchema.annotated;
if (annotatedElement is XMLSchema.simpleType) if (annotatedElement is XMLSchema.simpleType)
@ -1081,49 +780,37 @@ namespace XSDDiagram
return; return;
} }
foreach (object o in annotation.Items) bool isWebDocumentation = false;
{ Uri uriResult;
if (o is XMLSchema.documentation) foreach (object o in annotation.Items)
{ {
XMLSchema.documentation documentation = o as XMLSchema.documentation; if (o is XMLSchema.documentation)
if (documentation.Any != null && documentation.Any.Length > 0 && documentation.Any[0].Value != null) {
{ XMLSchema.documentation documentation = o as XMLSchema.documentation;
string text = documentation.Any[0].Value; if (documentation.Any != null && documentation.Any.Length > 0 && documentation.Any[0].Value != null)
text = text.Replace("\n", " "); {
text = text.Replace("\t", " "); }
text = text.Replace("\r", ""); else if (documentation.source != null && Uri.TryCreate(documentation.source, UriKind.Absolute, out uriResult) && (uriResult.Scheme == Uri.UriSchemeHttp || uriResult.Scheme == Uri.UriSchemeHttps))
text = Regex.Replace(text, " +", " "); {
text = text.Trim();
//text = text.Replace(, " ");
//text = text.Trim('\n', '\t', '\r', ' ');
//string[] textLines = text.Split(new char[] { '\n' });
//for (int i = 0; i < textLines.Length; i++)
// textLines[i] = textLines[i].Trim('\n', '\t', '\r', ' ');
//text = string.Join("\r\n", textLines);
this.textBoxAnnotation.Text = text;
this.textBoxAnnotation.Visible = true;
if (this.webBrowserDocumentation != null)
this.webBrowserDocumentation.Visible = false;
}
else if (documentation.source != null)
{
if (this.webBrowserDocumentation != null) if (this.webBrowserDocumentation != null)
{ {
isWebDocumentation = true;
this.textBoxAnnotation.Visible = false; this.textBoxAnnotation.Visible = false;
this.webBrowserDocumentation.Visible = true; this.webBrowserDocumentation.Visible = true;
this.webBrowserDocumentation.Navigate(documentation.source); this.webBrowserDocumentation.Navigate(documentation.source);
} }
else }
{ break;
this.textBoxAnnotation.Text = documentation.source; }
this.textBoxAnnotation.Visible = true; }
}
} if(!isWebDocumentation)
break; {
} this.textBoxAnnotation.Text = DiagramHelpers.GetAnnotationText(annotation);
} this.textBoxAnnotation.Visible = true;
if (this.webBrowserDocumentation != null)
this.webBrowserDocumentation.Visible = false;
}
} }
private void listViewAttributes_SelectedIndexChanged(object sender, EventArgs e) private void listViewAttributes_SelectedIndexChanged(object sender, EventArgs e)

View File

@ -37,6 +37,7 @@ namespace XSDDiagram
public static string Username { get; private set; } public static string Username { get; private set; }
public static string Password { get; private set; } public static string Password { get; private set; }
public static IList<string> TextOutputFields { get; private set; } public static IList<string> TextOutputFields { get; private set; }
public static bool DisplayAttributes { get; private set; }
public static bool NoGUI { get; private set; } public static bool NoGUI { get; private set; }
static Options() static Options()
@ -52,6 +53,7 @@ namespace XSDDiagram
ForceHugeImageGeneration = false; ForceHugeImageGeneration = false;
RequestHelp = false; RequestHelp = false;
TextOutputFields = new List<string>(); TextOutputFields = new List<string>();
DisplayAttributes = false;
NoGUI = false; NoGUI = false;
IsRunningOnMono = Type.GetType("Mono.Runtime") != null; IsRunningOnMono = Type.GetType("Mono.Runtime") != null;
@ -157,6 +159,10 @@ namespace XSDDiagram
TextOutputFields.Add(field.Trim()); TextOutputFields.Add(field.Trim());
} }
} }
else if (string.Compare("-a", argument, true) == 0)
{
DisplayAttributes = true;
}
else if (string.Compare("-no-gui", argument, true) == 0) else if (string.Compare("-no-gui", argument, true) == 0)
{ {
NoGUI = true; NoGUI = true;

View File

@ -35,7 +35,7 @@ namespace XSDDiagram
//static extern bool AllocConsole(); //static extern bool AllocConsole();
static string usage = @"XSD Diagram, version {0} static string usage = @"XSD Diagram, version {0}
Usage: {1} [-o output.svg] [-os EXTENSION] [-r RootElement[@namespace]]* [-e N] [-d] [-z N] [-f PATH,NAME,TYPE,NAMESPACE,COMMENT] [-y] [-u USERNAME] [-p PASSWORD] [file.xsd or URL] Usage: {1} [-o output.svg] [-os EXTENSION] [-r RootElement[@namespace]]* [-e N] [-d] [-z N] [-f PATH,NAME,TYPE,NAMESPACE,COMMENT] [-a] [-y] [-u USERNAME] [-p PASSWORD] [file.xsd or URL]
-o FILE -o FILE
specifies the output image. '.png','.jpg', '.svg', '.txt', '.csv' ('.emf' on Windows) are allowed. specifies the output image. '.png','.jpg', '.svg', '.txt', '.csv' ('.emf' on Windows) are allowed.
@ -58,6 +58,8 @@ Usage: {1} [-o output.svg] [-os EXTENSION] [-r RootElement[@namespace]]* [-e N]
Work only with the '-o', '-os png' or '-os jpg' option. Work only with the '-o', '-os png' or '-os jpg' option.
-f PATH,NAME,TYPE,NAMESPACE,COMMENT -f PATH,NAME,TYPE,NAMESPACE,COMMENT
specifies the fields you want to output when rendering to a txt or csf file. specifies the fields you want to output when rendering to a txt or csf file.
-a
outputs the attributes in text mode only (.txt and .csv).
-y -y
force huge image generation without user prompt. force huge image generation without user prompt.
-u USERNAME -u USERNAME
@ -90,7 +92,7 @@ Example 4:
'TotoRoot' and expanding the tree from the root until the 3rd level. 'TotoRoot' and expanding the tree from the root until the 3rd level.
Example 5: Example 5:
> XSDDiagramConsole.exe -os txt -r TotoRoot -e 3 -f NAME,TYPE,COMMENT ./folder1/toto.xsd > XSDDiagramConsole.exe -os txt -r TotoRoot -e 3 -f PATH,TYPE,COMMENT -a ./folder1/toto.xsd
will write a textual representation in the standard output from a diagram with a root element will write a textual representation in the standard output from a diagram with a root element
'TotoRoot' and expanding the tree from the root until the 3rd level. 'TotoRoot' and expanding the tree from the root until the 3rd level.
"; ";
@ -197,8 +199,10 @@ Example 5:
DiagramExporter exporter = new DiagramExporter(diagram); DiagramExporter exporter = new DiagramExporter(diagram);
IDictionary<string, object> specificRendererParameters = new Dictionary<string, object>() IDictionary<string, object> specificRendererParameters = new Dictionary<string, object>()
{ {
{ "TextOutputFields", Options.TextOutputFields } { "TextOutputFields", Options.TextOutputFields },
{ "DisplayAttributes", Options.DisplayAttributes },
{ "Schema", schema }
//For future parameters, {} //For future parameters, {}
}; };
if (Options.OutputOnStdOut) if (Options.OutputOnStdOut)

View File

@ -1,6 +1,6 @@
XSD Diagram is a free xml schema definition diagram viewer (http://regis.cosnier.free.fr). XSD Diagram is a free xml schema definition diagram viewer (http://regis.cosnier.free.fr).
Version 1.2alpha Copyright (c) 2006-2016 Regis Cosnier, All Rights Reserved. Version 1.2alpha Copyright (c) 2006-2017 Regis Cosnier, All Rights Reserved.
This program is free software and may be distributed This program is free software and may be distributed
according to the terms of the GNU General Public License (GPL). according to the terms of the GNU General Public License (GPL).
@ -39,7 +39,7 @@ COMMAND LINE USAGE:
or on Windows use 'XSDDiagramConsole.exe' instead of 'XSDDiagram.exe' if you need the console: or on Windows use 'XSDDiagramConsole.exe' instead of 'XSDDiagram.exe' if you need the console:
> XSDDiagramConsole.exe [-o output.svg] [-os EXTENSION] [-r RootElement[@namespace]]* [-e N] [-d] [-z N] [-f PATH,NAME,TYPE,NAMESPACE,COMMENT] [-y] [-u USERNAME] [-p PASSWORD] [file.xsd or URL] > XSDDiagramConsole.exe [-o output.svg] [-os EXTENSION] [-r RootElement[@namespace]]* [-e N] [-d] [-z N] [-f PATH,NAME,TYPE,NAMESPACE,COMMENT] [-a] [-y] [-u USERNAME] [-p PASSWORD] [file.xsd or URL]
Options: Options:
@ -63,6 +63,8 @@ Options:
Work only with the '-o', '-os png' or '-os jpg' option. Work only with the '-o', '-os png' or '-os jpg' option.
-f PATH,NAME,TYPE,NAMESPACE,COMMENT -f PATH,NAME,TYPE,NAMESPACE,COMMENT
specifies the fields you want to output when rendering to a txt or csf file. specifies the fields you want to output when rendering to a txt or csf file.
-a
outputs the attributes in text mode only (.txt and .csv).
-y -y
force huge image generation without user prompt. force huge image generation without user prompt.
-u USERNAME -u USERNAME
@ -96,7 +98,7 @@ Example 4:
'TotoRoot' and expanding the tree from the root until the 3rd level. 'TotoRoot' and expanding the tree from the root until the 3rd level.
Example 5: Example 5:
> XSDDiagramConsole.exe -os txt -r TotoRoot -e 3 -f NAME,TYPE,COMMENT ./folder1/toto.xsd > XSDDiagramConsole.exe -os txt -r TotoRoot -e 3 -f PATH,TYPE,COMMENT -a ./folder1/toto.xsd
will write a textual representation in the standard output from a diagram with a root element will write a textual representation in the standard output from a diagram with a root element
'TotoRoot' and expanding the tree from the root until the 3rd level. 'TotoRoot' and expanding the tree from the root until the 3rd level.
@ -112,7 +114,6 @@ TODO LIST:
- Add an icon "Go to Diagram" on tool bar, to help working with lot of includes (Majo). - Add an icon "Go to Diagram" on tool bar, to help working with lot of includes (Majo).
- Show/hide group elements in the settings (Mario M.). - Show/hide group elements in the settings (Mario M.).
- Font look blurry on Windows, add default font size in the settings (Mario M.). - Font look blurry on Windows, add default font size in the settings (Mario M.).
- Multi-(language) documentation (https://github.com/dgis/xsddiagram/issues/8)
- Add the infer XSD file in the command line. - Add the infer XSD file in the command line.
- NoukNouk suggestions: - NoukNouk suggestions:
+ Add some display parameter like font type / size for tags / annotation... background color, vertical margin between tags... + Add some display parameter like font type / size for tags / annotation... background color, vertical margin between tags...
@ -136,11 +137,14 @@ TODO LIST:
CHANGES: CHANGES:
version 1.2alpha (2016-11-??) version 1.2alpha (2017-02-??)
- Add infer XSD from XML menu. - Add infer XSD from XML menu.
- Fix a null reference exception in the documentation (Thanks Mario M.). - Fix a null reference exception in the documentation (Thanks Mario M.).
- Add the namespace in the command line option -r (Thanks Kevin). - Add the namespace in the command line option -r (Thanks Kevin).
- Add the option --no-gui to prevent the UI to be shown (Thanks Kevin). - Add the option --no-gui to prevent the UI to be shown (Thanks Kevin).
- Add multi-(language) documentation (https://github.com/dgis/xsddiagram/issues/8).
- Fix the URL escaping in the import (https://github.com/dgis/xsddiagram/issues/11).
- Add the attributes of an element with the option -a for text output only.
version 1.1 (2016-07-08) version 1.1 (2016-07-08)
- Fix SVG page size. - Fix SVG page size.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,368 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
namespace XSDDiagram
{
/// <summary>
/// Helper functions to work with the diagram.
/// </summary>
public class DiagramHelpers
{
/// <summary>
/// Gives the display string of a type.
/// </summary>
/// <param name="type">The type.</param>
/// <param name="xmlQualifiedName">Name of the XML qualified.</param>
/// <returns></returns>
public static string QualifiedNameToFullName(string type, System.Xml.XmlQualifiedName xmlQualifiedName)
{
return xmlQualifiedName.Namespace + ':' + type + ':' + xmlQualifiedName.Name;
}
private static string QualifiedNameToAttributeTypeName(System.Xml.XmlQualifiedName xmlQualifiedName)
{
return xmlQualifiedName.Name + " : " + xmlQualifiedName.Namespace;
}
private static void ParseComplexTypeAttributes(Schema schema, string nameSpace, List<XSDAttribute> listAttributes, XMLSchema.complexType complexType, bool isRestriction)
{
if (complexType.ItemsElementName != null)
{
for (int i = 0; i < complexType.ItemsElementName.Length; i++)
{
switch (complexType.ItemsElementName[i])
{
case XMLSchema.ItemsChoiceType4.attribute:
{
XMLSchema.attribute attribute = complexType.Items[i] as XMLSchema.attribute;
ParseAttribute(schema, nameSpace, listAttributes, attribute, false);
}
break;
case XMLSchema.ItemsChoiceType4.attributeGroup:
{
XMLSchema.attributeGroup attributeGroup = complexType.Items[i] as XMLSchema.attributeGroup;
ParseAttributeGroup(schema, nameSpace, listAttributes, attributeGroup, false);
}
break;
case XMLSchema.ItemsChoiceType4.anyAttribute:
XMLSchema.wildcard wildcard = complexType.Items[i] as XMLSchema.wildcard;
XSDAttribute xsdAttribute = new XSDAttribute("", "*", wildcard.@namespace, "", false, null, null, null);
listAttributes.Add(xsdAttribute);
break;
case XMLSchema.ItemsChoiceType4.simpleContent:
case XMLSchema.ItemsChoiceType4.complexContent:
XMLSchema.annotated annotatedContent = null;
if (complexType.Items[i] is XMLSchema.complexContent)
{
XMLSchema.complexContent complexContent = complexType.Items[i] as XMLSchema.complexContent;
annotatedContent = complexContent.Item;
}
else if (complexType.Items[i] is XMLSchema.simpleContent)
{
XMLSchema.simpleContent simpleContent = complexType.Items[i] as XMLSchema.simpleContent;
annotatedContent = simpleContent.Item;
}
if (annotatedContent is XMLSchema.extensionType)
{
XMLSchema.extensionType extensionType = annotatedContent as XMLSchema.extensionType;
//XSDObject xsdExtensionType = this.schema.ElementsByName[QualifiedNameToFullName("type", extensionType.@base)] as XSDObject;
//if (xsdExtensionType != null)
XSDObject xsdExtensionType;
if (schema.ElementsByName.TryGetValue(QualifiedNameToFullName("type", extensionType.@base), out xsdExtensionType) && xsdExtensionType != null)
{
XMLSchema.annotated annotatedExtension = xsdExtensionType.Tag as XMLSchema.annotated;
if (annotatedExtension != null)
{
if (annotatedExtension is XMLSchema.complexType)
ParseComplexTypeAttributes(schema, extensionType.@base.Namespace, listAttributes, annotatedExtension as XMLSchema.complexType, false);
}
}
if (extensionType.Items != null)
{
foreach (XMLSchema.annotated annotated in extensionType.Items)
{
if (annotated is XMLSchema.attribute)
{
ParseAttribute(schema, nameSpace, listAttributes, annotated as XMLSchema.attribute, false);
}
else if (annotated is XMLSchema.attributeGroup)
{
ParseAttributeGroup(schema, nameSpace, listAttributes, annotated as XMLSchema.attributeGroup, false);
}
}
}
}
else if (annotatedContent is XMLSchema.restrictionType)
{
XMLSchema.restrictionType restrictionType = annotatedContent as XMLSchema.restrictionType;
//XSDObject xsdRestrictionType = this.schema.ElementsByName[QualifiedNameToFullName("type", restrictionType.@base)] as XSDObject;
//if (xsdRestrictionType != null)
XSDObject xsdRestrictionType;
if (schema.ElementsByName.TryGetValue(QualifiedNameToFullName("type", restrictionType.@base), out xsdRestrictionType) && xsdRestrictionType != null)
{
XMLSchema.annotated annotatedRestriction = xsdRestrictionType.Tag as XMLSchema.annotated;
if (annotatedRestriction != null)
{
if (annotatedRestriction is XMLSchema.complexType)
ParseComplexTypeAttributes(schema, restrictionType.@base.Namespace, listAttributes, annotatedRestriction as XMLSchema.complexType, false);
}
}
if (restrictionType.Items1 != null)
{
foreach (XMLSchema.annotated annotated in restrictionType.Items1)
{
if (annotated is XMLSchema.attribute)
{
ParseAttribute(schema, nameSpace, listAttributes, annotated as XMLSchema.attribute, true);
}
else if (annotated is XMLSchema.attributeGroup)
{
ParseAttributeGroup(schema, nameSpace, listAttributes, annotated as XMLSchema.attributeGroup, true);
}
}
}
}
break;
}
}
}
else
{
}
}
private static XSDAttribute ParseAttribute(Schema schema, string nameSpace, List<XSDAttribute> listAttributes, XMLSchema.attribute attribute, bool isRestriction)
{
bool isReference = false;
string filename = "";
string name = attribute.name;
string type = "";
if (attribute.@ref != null)
{
object o = null;
schema.AttributesByName.TryGetValue(QualifiedNameToFullName("attribute", attribute.@ref), out o);
if (o is XSDAttribute)
{
XSDAttribute xsdAttributeInstance = o as XSDAttribute;
XSDAttribute refXSDAttribute = ParseAttribute(schema, nameSpace, listAttributes, xsdAttributeInstance.Tag, isRestriction);
if (refXSDAttribute != null)
{
// Override the "use" field with
refXSDAttribute.Use = attribute.use.ToString();
}
return null;
}
else // Reference not found!
{
type = QualifiedNameToAttributeTypeName(attribute.@ref);
name = attribute.@ref.Name;
nameSpace = attribute.@ref.Namespace;
isReference = true;
}
}
else if (attribute.type != null)
{
type = QualifiedNameToAttributeTypeName(attribute.type);
nameSpace = attribute.type.Namespace;
}
else if (attribute.simpleType != null)
{
XMLSchema.simpleType simpleType = attribute.simpleType as XMLSchema.simpleType;
if (simpleType.Item is XMLSchema.restriction)
{
XMLSchema.restriction restriction = simpleType.Item as XMLSchema.restriction;
type = QualifiedNameToAttributeTypeName(restriction.@base);
nameSpace = restriction.@base.Namespace;
}
else if (simpleType.Item is XMLSchema.list)
{
XMLSchema.list list = simpleType.Item as XMLSchema.list;
type = QualifiedNameToAttributeTypeName(list.itemType);
nameSpace = list.itemType.Namespace;
}
else
{
}
}
else
{
}
if (string.IsNullOrEmpty(attribute.name) && string.IsNullOrEmpty(name))
{
}
if (isRestriction)
{
if (attribute.use == XMLSchema.attributeUse.prohibited)
{
foreach (XSDAttribute xsdAttribute in listAttributes)
{
if (xsdAttribute.Name == name)
{
//listAttributes.Remove(xsdAttribute);
xsdAttribute.Use = attribute.use.ToString();
break;
}
}
}
}
else
{
XSDAttribute xsdAttribute = new XSDAttribute(filename, name, nameSpace, type, isReference, attribute.@default, attribute.use.ToString(), attribute);
listAttributes.Insert(0, xsdAttribute);
return xsdAttribute;
}
return null;
}
private static void ParseAttributeGroup(Schema schema, string nameSpace, List<XSDAttribute> listAttributes, XMLSchema.attributeGroup attributeGroup, bool isRestriction)
{
if (attributeGroup is XMLSchema.attributeGroupRef && attributeGroup.@ref != null)
{
object o = null;
schema.AttributesByName.TryGetValue(QualifiedNameToFullName("attributeGroup", attributeGroup.@ref), out o);
if (o is XSDAttributeGroup)
{
XSDAttributeGroup xsdAttributeGroup = o as XSDAttributeGroup;
XMLSchema.attributeGroup attributeGroupInstance = xsdAttributeGroup.Tag;
foreach (XMLSchema.annotated annotated in attributeGroupInstance.Items)
{
if (annotated is XMLSchema.attribute)
{
ParseAttribute(schema, nameSpace, listAttributes, annotated as XMLSchema.attribute, isRestriction);
}
else if (annotated is XMLSchema.attributeGroup)
{
ParseAttributeGroup(schema, nameSpace, listAttributes, annotated as XMLSchema.attributeGroup, isRestriction);
}
}
}
}
else
{
}
}
private static List<XSDAttribute> GetComplexTypeAttributes(Schema schema, XMLSchema.complexType complexType, string nameSpace)
{
List<XSDAttribute> listAttributes = new List<XSDAttribute>();
DiagramHelpers.ParseComplexTypeAttributes(schema, nameSpace, listAttributes, complexType, false);
return listAttributes;
}
/// <summary>
/// Gets the annotated attributes.
/// </summary>
/// <param name="schema">The schema.</param>
/// <param name="annotated">The annotated.</param>
/// <param name="nameSpace">The name space.</param>
/// <returns>The list of all the attributes.</returns>
public static List<XSDAttribute> GetAnnotatedAttributes(Schema schema, XMLSchema.annotated annotated, string nameSpace)
{
// Attributes enumeration
List<XSDAttribute> listAttributes = new List<XSDAttribute>();
if (annotated is XMLSchema.element)
{
XMLSchema.element element = annotated as XMLSchema.element;
if (element.Item is XMLSchema.complexType)
{
XMLSchema.complexType complexType = element.Item as XMLSchema.complexType;
listAttributes.AddRange(GetComplexTypeAttributes(schema, complexType, nameSpace));
}
else if (element.type != null)
{
//XSDObject xsdObject = this.schema.ElementsByName[DiagramHelpers.QualifiedNameToFullName("type", element.type)] as XSDObject;
//if (xsdObject != null)
XSDObject xsdObject;
if (schema.ElementsByName.TryGetValue(DiagramHelpers.QualifiedNameToFullName("type", element.type), out xsdObject) && xsdObject != null)
{
XMLSchema.annotated annotatedElement = xsdObject.Tag as XMLSchema.annotated;
if (annotatedElement is XMLSchema.complexType)
{
XMLSchema.complexType complexType = annotatedElement as XMLSchema.complexType;
listAttributes.AddRange(GetComplexTypeAttributes(schema, complexType, nameSpace));
}
else
{
}
}
else
{
}
}
else
{
}
}
else if (annotated is XMLSchema.complexType)
{
XMLSchema.complexType complexType = annotated as XMLSchema.complexType;
listAttributes.AddRange(GetComplexTypeAttributes(schema, complexType, nameSpace));
}
else if (annotated is XMLSchema.simpleType)
{
XMLSchema.attribute attr = new XMLSchema.attribute();
XMLSchema.localSimpleType def = new XMLSchema.localSimpleType();
def.Item = (annotated as XMLSchema.simpleType).Item;
attr.simpleType = def;
string type = "";
if (def.Item is XMLSchema.restriction) type = (def.Item as XMLSchema.restriction).@base.Name;
XSDAttribute XSDattr = new XSDAttribute("filename", (annotated as XMLSchema.simpleType).name, "namespace", type, false, "", "", attr);
listAttributes.Add(XSDattr);
}
return listAttributes;
}
public static string GetAnnotationText(XMLSchema.annotation annotation)
{
string textDocumentation = "";
foreach (object o in annotation.Items)
{
if (o is XMLSchema.documentation)
{
string text = "";
XMLSchema.documentation documentation = o as XMLSchema.documentation;
if (documentation.Any != null && documentation.Any.Length > 0 && documentation.Any[0].Value != null)
{
text = documentation.Any[0].Value;
text = text.Replace("\n", " ");
text = text.Replace("\t", " ");
text = text.Replace("\r", "");
text = Regex.Replace(text, " +", " ");
text = text.Trim();
}
else if (documentation.source != null)
{
text = documentation.source;
}
if(!string.IsNullOrEmpty(textDocumentation))
textDocumentation += "\r\n";
textDocumentation += text;
if (!string.IsNullOrEmpty(documentation.lang) || !string.IsNullOrEmpty(documentation.source))
{
textDocumentation += " (";
if (!string.IsNullOrEmpty(documentation.lang))
textDocumentation += documentation.lang;
if (!string.IsNullOrEmpty(documentation.lang) && !string.IsNullOrEmpty(documentation.source))
textDocumentation += ", ";
if (!string.IsNullOrEmpty(documentation.source))
textDocumentation += documentation.source;
textDocumentation += ")";
}
}
}
return textDocumentation;
}
}
}

View File

@ -163,6 +163,8 @@ namespace XSDDiagram
if (!string.IsNullOrEmpty(schemaLocation)) if (!string.IsNullOrEmpty(schemaLocation))
{ {
schemaLocation = Uri.UnescapeDataString(schemaLocation);
loadedFileName = basePath + Path.DirectorySeparatorChar + schemaLocation.Replace('/', Path.DirectorySeparatorChar); loadedFileName = basePath + Path.DirectorySeparatorChar + schemaLocation.Replace('/', Path.DirectorySeparatorChar);
string url = schemaLocation.Trim(); string url = schemaLocation.Trim();
@ -260,7 +262,7 @@ namespace XSDDiagram
{ {
uri = new Uri(url); uri = new Uri(url);
} }
catch (UriFormatException) catch (UriFormatException ex)
{ {
throw new Exception("Cannot read the URL '" + url + "'!"); throw new Exception("Cannot read the URL '" + url + "'!");
} }

View File

@ -41,7 +41,7 @@ namespace XSDDiagram.Rendering
private List<DiagramItem> _rootElements; private List<DiagramItem> _rootElements;
private DiagramItem _selectedElement; private DiagramItem _selectedElement;
private XMLSchema.any _fakeAny; private XMLSchema.any _fakeAny;
#endregion #endregion

View File

@ -68,10 +68,10 @@ namespace XSDDiagram.Rendering
DiagramAlertHandler alerteDelegate, IDictionary<string, object> specificRendererParameters) DiagramAlertHandler alerteDelegate, IDictionary<string, object> specificRendererParameters)
{ {
string extension = Path.GetExtension(outputFilename).ToLower(); string extension = Path.GetExtension(outputFilename).ToLower();
if (string.IsNullOrEmpty(extension)) if (string.IsNullOrEmpty(extension))
{ {
extension = ".svg"; extension = ".svg";
outputFilename += extension; outputFilename += extension;
} }
using (FileStream stream = File.Create(outputFilename)) using (FileStream stream = File.Create(outputFilename))
{ {
@ -97,10 +97,10 @@ namespace XSDDiagram.Rendering
{ {
_diagram.Scale = 1.0f; _diagram.Scale = 1.0f;
_diagram.Layout(referenceGraphics); _diagram.Layout(referenceGraphics);
IntPtr hdc = referenceGraphics.GetHdc(); IntPtr hdc = referenceGraphics.GetHdc();
Metafile metafile = new Metafile(stream, hdc); Metafile metafile = new Metafile(stream, hdc);
Graphics graphics = Graphics.FromImage(metafile); Graphics graphics = Graphics.FromImage(metafile);
graphics.SmoothingMode = SmoothingMode.HighQuality; graphics.SmoothingMode = SmoothingMode.HighQuality;
_diagram.Layout(graphics); _diagram.Layout(graphics);
DiagramGdiRenderer.Draw(_diagram, graphics); DiagramGdiRenderer.Draw(_diagram, graphics);
@ -117,13 +117,13 @@ namespace XSDDiagram.Rendering
} }
} }
else if (extension.Equals(".png", StringComparison.OrdinalIgnoreCase) || else if (extension.Equals(".png", StringComparison.OrdinalIgnoreCase) ||
extension.Equals(".jpg", StringComparison.OrdinalIgnoreCase) || extension.Equals(".jpg", StringComparison.OrdinalIgnoreCase) ||
extension.Equals(".jpeg", StringComparison.OrdinalIgnoreCase)) extension.Equals(".jpeg", StringComparison.OrdinalIgnoreCase))
{ {
Rectangle bbox = _diagram.ScaleRectangle(_diagram.BoundingBox); Rectangle bbox = _diagram.ScaleRectangle(_diagram.BoundingBox);
bool bypassAlert = true; bool bypassAlert = true;
if (alerteDelegate != null && (bbox.Width > 10000 || bbox.Height > 10000)) if (alerteDelegate != null && (bbox.Width > 10000 || bbox.Height > 10000))
bypassAlert = alerteDelegate("Huge image generation", bypassAlert = alerteDelegate("Huge image generation",
String.Format("Do you agree to generate a {0}x{1} image?", bbox.Width, bbox.Height)); String.Format("Do you agree to generate a {0}x{1} image?", bbox.Width, bbox.Height));
if (bypassAlert) if (bypassAlert)
{ {
@ -153,8 +153,14 @@ namespace XSDDiagram.Rendering
renderer.IsCSV = extension.CompareTo(".csv") == 0; renderer.IsCSV = extension.CompareTo(".csv") == 0;
IDictionary<string, object> parameters = specificRendererParameters as IDictionary<string, object>; IDictionary<string, object> parameters = specificRendererParameters as IDictionary<string, object>;
object o; object o;
if (parameters != null && parameters.TryGetValue("TextOutputFields", out o)) if (parameters != null) {
renderer.TextOutputFields = o as IList<string>; if (parameters.TryGetValue("TextOutputFields", out o))
renderer.TextOutputFields = o as IList<string>;
if (parameters.TryGetValue("DisplayAttributes", out o) && o is bool)
renderer.DisplayAttributes = (bool)o;
if (parameters.TryGetValue("Schema", out o))
renderer.Schema = o as Schema;
}
renderer.Render(_diagram); renderer.Render(_diagram);
} }

View File

@ -490,28 +490,30 @@ namespace XSDDiagram.Rendering
XMLSchema.annotated annotated = this.TabSchema as XMLSchema.annotated; XMLSchema.annotated annotated = this.TabSchema as XMLSchema.annotated;
if (annotated != null && annotated.annotation != null) if (annotated != null && annotated.annotation != null)
{ {
foreach (object o in annotated.annotation.Items) text = DiagramHelpers.GetAnnotationText(annotated.annotation);
{
if (o is XMLSchema.documentation)
{
XMLSchema.documentation documentation = o as XMLSchema.documentation;
if (documentation.Any != null && documentation.Any.Length > 0 && documentation.Any[0].Value != null)
{
text = documentation.Any[0].Value;
text = text.Replace("\n", " ");
text = text.Replace("\t", " ");
text = text.Replace("\r", "");
text = Regex.Replace(text, " +", " ");
text = text.Trim();
}
else if (documentation.source != null)
{
text = documentation.source;
}
break; //foreach (object o in annotated.annotation.Items)
} //{
} // if (o is XMLSchema.documentation)
// {
// XMLSchema.documentation documentation = o as XMLSchema.documentation;
// if (documentation.Any != null && documentation.Any.Length > 0 && documentation.Any[0].Value != null)
// {
// text = documentation.Any[0].Value;
// text = text.Replace("\n", " ");
// text = text.Replace("\t", " ");
// text = text.Replace("\r", "");
// text = Regex.Replace(text, " +", " ");
// text = text.Trim();
// }
// else if (documentation.source != null)
// {
// text = documentation.source;
// }
//
// break;
// }
//}
} }
return text; return text;

View File

@ -28,6 +28,8 @@ namespace XSDDiagram.Rendering
private string _fieldSeparator; private string _fieldSeparator;
private IList<string> _textOutputFields; private IList<string> _textOutputFields;
private IList<string> _finalTextOutputFields; private IList<string> _finalTextOutputFields;
private bool _displayAttributes;
private Schema _schema;
private static List<string> fields = new List<string>() { private static List<string> fields = new List<string>() {
"PATH", "NAME", "TYPE", "NAMESPACE", "COMMENT" "PATH", "NAME", "TYPE", "NAMESPACE", "COMMENT"
@ -91,7 +93,30 @@ namespace XSDDiagram.Rendering
} }
} }
public bool DisplayAttributes
{
get
{
return _displayAttributes;
}
set
{
_displayAttributes = value;
}
}
public Schema Schema
{
get
{
return _schema;
}
set
{
_schema = value;
}
}
#endregion #endregion
@ -115,6 +140,10 @@ namespace XSDDiagram.Rendering
{ {
} }
/// <summary>
/// Renders the specified diagram.
/// </summary>
/// <param name="diagram">The diagram.</param>
public override void Render(Diagram diagram) public override void Render(Diagram diagram)
{ {
_fieldSeparator = IsCSV ? "," : "\t"; _fieldSeparator = IsCSV ? "," : "\t";
@ -137,6 +166,10 @@ namespace XSDDiagram.Rendering
this.EndItemsRender(); this.EndItemsRender();
} }
/// <summary>
/// Renders the specified drawing item.
/// </summary>
/// <param name="drawingItem">The drawing item.</param>
public override void Render(DiagramItem drawingItem) public override void Render(DiagramItem drawingItem)
{ {
string type = ""; string type = "";
@ -159,6 +192,7 @@ namespace XSDDiagram.Rendering
parentElement = parentElement.Parent; parentElement = parentElement.Parent;
} }
// Get the comment/documentation
string comment = ""; string comment = "";
XMLSchema.annotated annotated = drawingItem.TabSchema as XMLSchema.annotated; XMLSchema.annotated annotated = drawingItem.TabSchema as XMLSchema.annotated;
if (annotated != null && annotated.annotation != null) if (annotated != null && annotated.annotation != null)
@ -187,6 +221,7 @@ namespace XSDDiagram.Rendering
} }
} }
// Output the item
for (int i = 0; i < _finalTextOutputFields.Count; i++) for (int i = 0; i < _finalTextOutputFields.Count; i++)
{ {
if (i > 0) if (i > 0)
@ -204,6 +239,48 @@ namespace XSDDiagram.Rendering
_writer.WriteLine(); _writer.WriteLine();
// Output the item attributes
if (this.Schema != null && this.DisplayAttributes)
{
string nameSpace = drawingItem.NameSpace;
if (annotated != null)
{
// Attributes enumeration
List<XSDAttribute> listAttributes = DiagramHelpers.GetAnnotatedAttributes(this.Schema, annotated, nameSpace);
listAttributes.Reverse();
for (int a = 0; a < listAttributes.Count; a++)
{
XSDAttribute xsdAttribute = listAttributes[a];
if(xsdAttribute != null)
{
string commentAttribute = "";
XMLSchema.attribute attribute = xsdAttribute.Tag;
if (attribute != null && attribute.annotation != null)
commentAttribute = DiagramHelpers.GetAnnotationText(attribute.annotation);
for (int i = 0; i < _finalTextOutputFields.Count; i++)
{
if (i > 0)
_writer.Write(_fieldSeparator);
string field = _finalTextOutputFields[i];
switch (field)
{
case "PATH": _writer.Write(path + "@" + xsdAttribute.Name); break;
case "NAME": _writer.Write(drawingItem.Name + "@" + xsdAttribute.Name); break;
case "TYPE": _writer.Write(xsdAttribute.Type); break;
case "NAMESPACE": _writer.Write(xsdAttribute.NameSpace); break;
case "COMMENT": _writer.Write(commentAttribute); break;
}
}
_writer.WriteLine();
}
//this.listViewAttributes.Items.Add(new ListViewItem(new string[] { attribute.Name, attribute.Type, attribute.Use, attribute.DefaultValue, s })).Tag = attribute;
}
}
}
//// Draw the inheritor line //// Draw the inheritor line
//if (drawingItem.InheritFrom != null) //if (drawingItem.InheritFrom != null)
//{ //{

View File

@ -61,6 +61,7 @@
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="DiagramHelpers.cs" />
<Compile Include="Parsing\Schema.cs" /> <Compile Include="Parsing\Schema.cs" />
<Compile Include="Parsing\XmlSchema.cs" /> <Compile Include="Parsing\XmlSchema.cs" />
<Compile Include="Parsing\XMLSchemaEx.cs" /> <Compile Include="Parsing\XMLSchemaEx.cs" />

View File

@ -12,6 +12,6 @@ start "" /wait XSDDiagramConsole.exe -o Tests\fileDoc.svg -r COLLADA -e 2 -d Tes
XSDDiagramConsole.exe -os png -r COLLADA -e 3 -y Tests\COLLADASchema_141.xsd > Tests\stdout.png XSDDiagramConsole.exe -os png -r COLLADA -e 3 -y Tests\COLLADASchema_141.xsd > Tests\stdout.png
XSDDiagramConsole.exe -os jpg -r COLLADA -e 3 -y Tests\COLLADASchema_141.xsd > Tests\stdout.jpg XSDDiagramConsole.exe -os jpg -r COLLADA -e 3 -y Tests\COLLADASchema_141.xsd > Tests\stdout.jpg
XSDDiagramConsole.exe -os svg -r COLLADA -e 3 -y Tests\COLLADASchema_141.xsd > Tests\stdout.svg XSDDiagramConsole.exe -os svg -r COLLADA -e 3 -y Tests\COLLADASchema_141.xsd > Tests\stdout.svg
XSDDiagramConsole.exe -os txt -r COLLADA -e 2 -f NAME,TYPE,COMMENT Tests\COLLADASchema_141.xsd XSDDiagramConsole.exe -os txt -r COLLADA -e 2 -f NAME,TYPE,COMMENT -a Tests\COLLADASchema_141.xsd
XSDDiagramConsole.exe -h XSDDiagramConsole.exe -h
@pause @pause