-
Notifications
You must be signed in to change notification settings - Fork 0
invadersmustdie/xpain
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
Abstract
========
DSL for creating simple xsd files (not xsd-feature complete)
Yeah for sure I could just learn writing xsd without copy'n'paste, but why not learning it by implementing a dsl for
creating it :)
Example
=======
schema = XPain::Builder.new do |xsd|
xsd.schema do
xsd.define_complex_type "mystring" do
xsd.extension :base => "string" do
xsd.attribute :name => "type", :type => "string", :use => "optional"
end
end
xsd.define_complex_type "myint", :type => "all" do
xsd.extension :base => "integer" do
xsd.attribute :name => "type", :type => "string", :use => "optional"
end
end
xsd.define_complex_type "t_address", :type => "all" do
xsd.element "street", :type => "string"
xsd.element "city", :type => "string"
end
xsd.element "customer" do
xsd.element "customer_number", :type => "mystring"
xsd.elements ["firstname", "lastname"], :type => "string", :minOccurs => 1
xsd.element "addresses", :ctype => "sequence" do
xsd.element "address", :type => "t_address"
end
end
end
end
puts schema.to_xml
=> output
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:complexType name="mystring">
<xsd:simpleContent>
<xsd:extension base="string">
<xsd:attribute type="string" use="optional" name="type"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
<xsd:complexType name="myint">
<xsd:all>
<xsd:extension base="integer">
<xsd:attribute type="string" use="optional" name="type"/>
</xsd:extension>
</xsd:all>
</xsd:complexType>
<xsd:complexType name="t_address">
<xsd:all>
<xsd:element type="string" name="street"/>
<xsd:element type="string" name="city"/>
</xsd:all>
</xsd:complexType>
<xsd:element name="customer">
<xsd:complexType>
<xsd:all>
<xsd:element type="mystring" name="customer_number"/>
<xsd:element type="string" minOccurs="1" name="firstname"/>
<xsd:element type="string" minOccurs="1" name="lastname"/>
<xsd:element name="addresses">
<xsd:complexType>
<xsd:sequence>
<xsd:element type="t_address" name="address"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:all>
</xsd:complexType>
</xsd:element>
</xsd:schema>
About
ruby dsl for creating xsd's
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published