Attributes that are bound to the base type xs:ID (rail:tGenericID) should be named id or *ID.
XML validators check their uniqueness across an XML file. They also check references (xs:IDREF, rail:tGenericRef) to match one of their values.
Other attributes that represent domain specific unique identities across a company, country or region should either use the generic code attribute or should be named with “number” or something like that.
Some attributes appear really often, they could be named with an abbreviation.
example: dir for “direction”
Some attributes represent a domain specific acronym, which should be fully declared in its schema annotation.
example: srsVersion for “ETCS System Requirements Specification Version”
All other attribute names should not be abbreviated for easier understanding the XML content without special schema annotations.
example: numberNonDrivenAxles
The attribute name has to be interpreted in the elements context. It doesn’t need to be declarative without its elements context. The elements name shouldn’t be repeated inside the attributes name.
example: <axleWeight value="..."/>
Use of xs:sequence as xml model group for complex types
<xs:complexType name="eClassification">
<xs:sequence>
<xs:element name="manufacturer" type="rail:tManufacturer" minOccurs="0">
...
</xs:element>
<xs:element name="operator" type="rail:tOperator" minOccurs="0" maxOccurs="unbounded">
...
</xs:element>
</xs:sequence>
</xs:complexType>
Often the enumeration list can’t cover all possible values. Adding the xs:union with rail:tOtherEnumerationValue type allows for using “other:xxx” enumeration values in XML without declaring them in XML schema.
example:
<xs:simpleType name="tMotivePowerType">
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="electric" />
<xs:enumeration value="diesel" />
<xs:enumeration value="steam" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="rail:tOtherEnumerationValue" />
</xs:simpleType>
</xs:union>
</xs:simpleType>Enumeration values should be named with typical XML camel case. No whitespaces should be used.
example: <xs:enumeration value="outOfOrder" />
Implementation with 1 space before closing empty end-tags
example: <xs:restriction base="xs:ID" />
Implementation with 2 spaces
example:
<xs:element name="railml">
<xs:complexType>
<xs:sequence>
<xs:element name="metadata" type="dc:elementContainer" minOccurs="0" />
<xs:element ref="rail:infrastructure" minOccurs="0" />
example:
<xs:attributeGroup name="aPlaces">
<xs:attribute name="category" type="rail:tPlaceCategory" use="required" />
<xs:attribute name="count" type="rail:tCounter" use="required" />
Each component has to be fully declared on one line without line breaks.
example:
<xs:schema xmlns:rail="http://www.railml.org/schemas/2009" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:dc="http://purl.org/dc/elements/1.1/" targetNamespace="http://www.railml.org/schemas/2009" elementFormDefault="qualified" version="2.0">
see also: http://www.w3.org/TR/REC-xml/#NT-EmptyElemTag
Implementation with shortened syntax instead of extra closing tag
example: <xs:element ref="rail:infrastructure" minOccurs="0" />
see also: http://www.w3.org/TR/xmlschema-1/#declare-attribute
use="optional"example: <xs:attribute name="description" type="rail:tElementDescription" />
use="required"example: <xs:attribute name="id" type="rail:tGenericID" use="required" />
see also: http://www.w3.org/TR/xmlschema-1/#declare-element
minOccurs="1"example: <xs:element name="train" type="rail:eTrain" maxOccurs="unbounded" />
maxOccurs="1"example: <xs:element ref="rail:timetable" minOccurs="0" />
If possible, all occurence restrictions have to go into element definitions.
xs:sequence should stand without the attributes minOccurs and/or maxOccurs.
example:
<xs:extension base="rail:tElementWithIDAndName">
<xs:sequence>
<xs:element name="metadata" type="dc:elementContainer" minOccurs="0" />
</xs:sequence>
xsi:schemaLocationsee also: http://www.w3.org/TR/xmlschema-1/#schema-loc
example:
<railml xmlns="http://www.railml.org/schemas/2009"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.railml.org/schemas/2009 ../schema/railML.xsd">