Определение XМL schema вариантов языка SCL
Следующая часть schema, использующая элементы из нормативного определения SCL schema, сама по себе, однако, не является нормативной и формально определяет ограничения для различных вариантов языка SCL, которые представлены в разделе 7:
CID: описание сконфигурированного IED-устройства;
ICD: описание возможностей IED-устройства;
SCD: описание конфигурации подстанции;
SSD: описание системной спецификации; здесь приведена "чистая" версия без IED-устройств и версия с установкой некоторых уже известных IED-устройств.
Следует обратить внимание, что дополнительно к сформулированным здесь ограничениям действуют некоторые ограничения присваивания имен, описанные в разделе 7, которые не могут быть выражены с помощью XML schema.
<?xml version="1.0" encoding="UTF-8"?> <xs:schema targetNamespace="http://www.iec.ch/61850/2003/SCL" | ||
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.iec.ch/61850/2003/SCL" xmlns:scl="http://www.iec.ch/61850/2003/SCL" elementFormDefault="qualified" attributeFormDe- fault="unqualified" finalDefault="extension" version="1.0"> <xs:annotation> | ||
<xs:documentation xml:lang="en"> | ||
COPYRIGHT IEC, 2003. Version 1.0. Release 2003/08/20. This schema is for infomational purposes only, and is not normative! Notes: - Identity constraints are in comments, in order to avoid any clashes with the existing ones. - The elements are defined as abstract to prevent their usage in practice. </xs:documentation> </xs:annotation> <!--========================================= |
Включая общий случай:
========================================= --> | |
<xs:include schemaLocation="SCL.xsd"/> <!-- ========================================= |
Вариант описания возможностей IED-устройства (ICD)
========================================= --> | ||||||||
<xs:element name="SCL ICD" abstract="true"> | ||||||||
<xs:annotation> | ||||||||
<xs:documentation xml:lang="en">SCL for an IED Capability Description | ||||||||
(ICD)</xs:documentation> | ||||||||
</xs:annotation> <xs:complexType> | ||||||||
<xs:complexContent> | ||||||||
<xs:extension base="tBaseElement"> | ||||||||
<xs:sequence> | ||||||||
<xs:element name="Header" type="tHeader"> | ||||||||
<!--<xs:unique name="uniqueHitem"> | ||||||||
<xs:selector xpath="./scl:History/scl:Hitem"/> <xs:field xpath="@version"/> <xs:field xpath="@revision"/> </xs:unique>--> | ||||||||
</xs:element> <xs:element name="Substation" type="tSubstationTemplate" | ||||||||
minOccurs="0"> | ||||||||
<!--<xs:unique name="uniqueVoltageLevellnSubstation"> | ||||||||
<xs:selector xpath="./scl:VoltageLevel"/> <xs:field xpath="@name"/> </xs:unique> <xs:unique name="uniquePowerTranformerlnSubstation"> <xs:selector xpath="./scl:PowerTransformer"/> <xs:field xpath="@name"/> </xs:unique> <xs:unique name="uniqueFunctionlnSubstation"> <xs:selector xpath="./scl:Function"/> <xs:field xpath="@name"/> </xs:unique> <xs:key name="ConnectivityNodeKey"> <xs:selector xpath=".//scl:ConnectivityNode"/> <xs:field xpath="@pathName"/> </xs:key> <xs:keyref name="ref2ConnectivityNode" refer="ConnectivityNodeKey"> <xs:selector xpath=".//scl:Terminal"/> <xs:field xpath="@connectivityNode"/> </xs:keyref> <xs:unique name="uniqueLNode"> <xs:selector xpath=".//scl:LNode"/> <xs:field xpath="@lnlnst"/> <xs:field xpath="@lnClass"/> <xs:field xpath="@iedName"/> <xs:field xpath="@ldlnst"/> <xs:field xpath="@prefix"/> </xs:unique>--> | ||||||||
</xs:element> <xs:element ref="Communication" minOccurs="0"/> <xs:element name="IED" type="tlEDTemplate"> | ||||||||
<!--<xs:unique name="uniqueAccessPointlnlED"> | ||||||||
<xs:selector xpath="./scl:AccessPoint"/> <xs:field xpath="@name"/> </xs:unique> <xs:unique name="uniqueLDevicelnlED"> <xs:selector xpath=".//scl:LDevice"/> <xs:field xpath="@inst"/> </xs:unique> <xs:unique name="uniqueGSEControllnlED"> <xs:selector xpath=".//scl:GSEControl"/> <xs:field xpath="@name"/> </xs:unique> <xs:unique name="uniqueSMVControllnlED"> <xs:selector xpath=".//scl:SampledValueControl"/> <xs:field xpath="@name"/> </xs:unique> <xs:key name="LDevicelnlEDKey"> <xs:selector xpath="./scl:AccessPoint/scl:Server/scl:LDevice"/> <xs:field xpath="@inst"/> </xs:key> <xs:keyref name="ref2LDevicelnlED" refer="LDevicelnlEDKey"> <xs:selector xpath="./scl:AccessPoint/scl:Server/scl:LDevice/scl:LN0/scl:LogControl"/> <xs:field xpath="@logName"/> </xs:keyref>--> | ||||||||
</xs:element> <xs:element ref="DataTypeTemplates"/> | ||||||||
</xs:sequence> | ||||||||
</xs:extension> | ||||||||
</xs:complexContent> | ||||||||
</xs:complexType> <!--<xs:key name="LNodeTypeKey"> | ||||||||
<xs:selector xpath="./scl:DataTypeTemplates/scl:LNodeType"/> <xs:field xpath="@id"/> <xs:field xpath="@lnClass"/> </xs:key> <xs:keyref name="ref2LNodeTypeDomain1" refer="LNodeTypeKey"> <xs:selector xpath="./scl:IED/scl:AccessPoint/scl:LN"/> <xs:field xpath="@lnType"/> <xs:field xpath="@lnClass"/> </xs:keyref> <xs:keyref name="ref2LNodeTypeDomain2" refer="LNodeTypeKey"> <xs:selector xpath="./scl:IED/scl:AccessPoint/scl:Server/scl:LDevice/scl:LN"/> <xs:field xpath="@lnType"/> <xs:field xpath="@lnClass"/> </xs:keyref> <xs:keyref name="ref2LNodeTypeLLN0" refer="LNodeTypeKey"> <xs:selector xpath="./scl:IED/scl:AccessPoint/scl:Server/scl:LDevice/scl:LN0"/> <xs:field xpath="@lnType"/> <xs:field xpath="@lnClass"/> </xs:keyref>--> | ||||||||
</xs:element> <!-- ========================================= Вариант документа по спецификации "чистой" системы (SSD) | ||||||||
========================================= --> | ||||||||
<xs:element name="SCL_pureSSD" abstract="true"> | ||||||||
<xs:annotation> | ||||||||
<xs:documentation xml:lang="en">SCL for a "Pure" System Specification Document | ||||||||
(SSD)</xs:documentation> | ||||||||
</xs:annotation> <xs:complexType> | ||||||||
<xs:complexContent> | ||||||||
<xs:extension base="tBaseElement"> | ||||||||
<xs:sequence> | ||||||||
<xs:element name="Header" type="tHeader"> | ||||||||
<!--<xs:unique name="uniqueHitem"> | ||||||||
<xs:selector xpath="./scl:History/scl:Hitem"/> <xs:field xpath="@version"/> <xs:field xpath="@revision"/> </xs:unique>--> | ||||||||
</xs:element> <xs:element ref="Substation" maxOccurs="unbounded"/> | ||||||||
</xs:sequence> | ||||||||
</xs:extension> | ||||||||
</xs:complexContent> | ||||||||
</xs:complexType> <!--<xs:unique name="uniqueSubstation"> | ||||||||
<xs:selector xpath="./scl:Substation"/> <xs:field xpath="@name"/> </xs:unique>--> | ||||||||
</xs:element> <!-- ========================================= | ||||||||
Вариант документа по системной спецификации (SSD) | ||||||||
========================================= --> | ||||||||
<xs:element name="SCL_SSD" abstract="true"> | ||||||||
<xs:annotation> | ||||||||
<xs:documentation xml:lang="en">SCL for a System Specification Document | ||||||||
(SSD)</xs:documentation> | ||||||||
</xs:annotation> <xs:complexType> | ||||||||
<xs:complexContent> | ||||||||
<xs:extension base="tBaseElement"> | ||||||||
<xs:sequence> | ||||||||
<xs:element name="Header" type="tHeader"> | ||||||||
<!--<xs:unique name="uniqueHitem"> | ||||||||
<xs:selector xpath="./scl:History/scl:Hitem"/> <xs:field xpath="@version"/> <xs:field xpath="@revision"/> </xs:unique>--> | ||||||||
</xs:element> <xs:element ref="Substation" maxOccurs="unbounded"/> <xs:element ref="Communication" minOccurs="0"/> <xs:element ref="IED" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="DataTypeTemplates" minOccurs="0"/> | ||||||||
</xs:sequence> | ||||||||
</xs:extension> | ||||||||
</xs:complexContent> | ||||||||
</xs:complexType> <!--<xs:unique name="uniqueSubstation"> | ||||||||
<xs:selector xpath="./scl:Substation"/> <xs:field xpath="@name"/> </xs:unique> <xs:key name="IEDKey"> <xs:selector xpath="./scl:IED"/> <xs:field xpath="@name"/> </xs:key> <xs:key name="LNodeTypeKey"> <xs:selector xpath="./scl:DataTypeTemplates/scl:LNodeType"/> <xs:field xpath="@id"/> <xs:field xpath="@lnClass"/> </xs:key> <xs:keyref name="ref2LNodeTypeDomain1" refer="LNodeTypeKey"> <xs:selector xpath="./scl:IED/scl:AccessPoint/scl:LN"/> <xs:field xpath="@lnType"/> <xs:field xpath="@lnClass"/> </xs:keyref> <xs:keyref name="ref2LNodeTypeDomain2" refer="LNodeTypeKey"> <xs:selector xpath="./scl:IED/scl:AccessPoint/scl:Server/scl:LDevice/scl:LN"/> <xs:field xpath="@lnType"/> <xs:field xpath="@lnClass"/> </xs:keyref> <xs:keyref name="ref2LNodeTypeLLN0" refer="LNodeTypeKey"> <xs:selector xpath="./scl:IED/scl:AccessPoint/scl:Server/scl:LDevice/scl:LN0"/> <xs:field xpath="@lnType"/> <xs:field xpath="@lnClass"/> </xs:keyref>--> | ||||||||
</xs:element> <!-- ========================================= | ||||||||
Вариант описания конфигурации подстанции (SCD) | ||||||||
========================================= --> | ||||||||
<xs:element name="SCL_SCD" abstract="true"> | ||||||||
<xs:annotation> | ||||||||
<xs:documentation xml:lang="en">SCL for a Substation Configuration Description | ||||||||
(SCD)</xs:documentation> | ||||||||
</xs:annotation> <xs:complexType> | ||||||||
<xs:complexContent> | ||||||||
<xs:extension base="tBaseElement"> | ||||||||
<xs:sequence> | ||||||||
<xs:element name="Headef type="tHeader"> | ||||||||
<!--<xs:unique name="uniqueHitem"> | ||||||||
<xs:selector xpath="./scl:History/scl:Hitem"/> <xs:field xpath="@version"/> <xs:field xpath="@revision"/> </xs:unique>--> | ||||||||
</xs:element> <xs:element ref="Substation" maxOccurs="unbounded"/> <xs:element ref="Communication"/> <xs:element ref="IED" maxOccurs="unbounded"/> <xs:element ref="DataTypeTemplates"/> | ||||||||
</xs:sequence> | ||||||||
</xs:extension> | ||||||||
</xs:complexContent> | ||||||||
</xs:complexType> <!--<xs:unique name="uniqueSubstation"> | ||||||||
<xs:selector xpath="./scl:Substation"/> <xs:field xpath="@name"/> </xs:unique> <xs:key name="IEDKey"> <xs:selector xpath="./scl:IED"/> <xs:field xpath="@name"/> </xs:key> <xs:key name="LNodeTypeKey"> <xs:selector xpath="./scl:DataTypeTemplates/scl:LNodeType"/> <xs:field xpath="@id"/> <xs:field xpath="@lnClass"/> </xs:key> <xs:keyref name="ref2LNodeTypeDomain1" refer="LNodeTypeKey"> <xs:selector xpath="./scl:IED/scl:AccessPoint/scl:LN"/> <xs:field xpath="@lnType"/> <xs:field xpath="@lnClass"/> </xs:keyref> <xs:keyref name="ref2LNodeTypeDomain2" refer="LNodeTypeKey"> <xs:selector xpath="./scl:IED/scl:AccessPoint/scl:Server/scl:LDevice/scl:LN"/> <xs:field xpath="@lnType"/> <xs:field xpath="@lnClass"/> </xs:keyref> <xs:keyref name="ref2LNodeTypeLLN0" refer="LNodeTypeKey"> <xs:selector xpath="./scl:IED/scl:AccessPoint/scl:Server/scl:LDevice/scl:LN0"/> <xs:field xpath="@lnType"/> <xs:field xpath="@lnClass"/> </xs:keyref>--> | ||||||||
</xs:element> <!-- ========================================= | ||||||||
Вариант описания сконфигурированного IED-устройства (CID) | ||||||||
========================================= --> | ||||||||
<xs:element name="SCL_CID" abstract="true"> | ||||||||
<xs:annotation> | ||||||||
<xs:documentation xml:lang="en">SCL for a Configured IED Description | ||||||||
(CID)</xs:documentation> | ||||||||
</xs:annotation> <xs:complexType> | ||||||||
<xs:complexContent> | ||||||||
<xs:extension base="tBaseElement"> | ||||||||
<xs:sequence> | ||||||||
<xs:element name="Headef type="tHeader"> | ||||||||
<!--<xs:unique name="uniqueHitem"> | ||||||||
<xs:selector xpath="./scl:History/scl:Hitem"/> <xs:field xpath="@version"/> <xs:field xpath="@revision"/> </xs:unique>--> | ||||||||
</xs:element> <xs:element ref="Substation" minOccurs="0" | ||||||||
maxOccurs="unbounded"/> | ||||||||
<xs:element ref="Communication"/> <xs:element ref="IED" maxOccurs="unbounded"/> <xs:element ref="DataTypeTemplates"/> | ||||||||
</xs:sequence> | ||||||||
</xs:extension> | ||||||||
</xs:complexContent> | ||||||||
</xs:complexType> <!--<xs:key name="LNodeTypeKey"> | ||||||||
<xs:selector xpath="./scl:DataTypeTemplates/scl:LNodeType"/> <xs:field xpath="@id"/> <xs:field xpath="@lnClass"/> </xs:key> <xs:keyref name="ref2LNodeTypeDomain1" refer="LNodeTypeKey"> <xs:selector xpath="./scl:IED/scl:AccessPoint/scl:LN"/> <xs:field xpath="@lnType"/> <xs:field xpath="@lnClass"/> </xs:keyref> <xs:keyref name="ref2LNodeTypeDomain2" refer="LNodeTypeKey"> <xs:selector xpath="./scl:IED/scl:AccessPoint/scl:Server/scl:LDevice/scl:LN"/> <xs:field xpath="@lnType"/> <xs:field xpath="@lnClass"/> </xs:keyref> <xs:keyref name="ref2LNodeTypeLLN0" refer="LNodeTypeKey"> <xs:selector xpath="./scl:IED/scl:AccessPoint/scl:Server/scl:LDevice/scl:LN0"/> <xs:field xpath="@lnType"/> <xs:field xpath="@lnClass"/> </xs:keyref>--> | ||||||||
</xs:element> <!-- ========================================= | ||||||||
Ограничения различного типа | ||||||||
========================================= --> | ||||||||
<xs:complexType name="tSubstationTemplate"> | ||||||||
<xs:complexContent> | ||||||||
<xs:restriction base="tSubstation"> | ||||||||
<xs:sequence> | ||||||||
<xs:sequence> | ||||||||
<xs:any namespace="##other" minOccurs="0" | ||||||||
maxOccurs="unbounded"/> | ||||||||
<xs:element name="Text" type="tText" minOccurs="0"/> <xs:element name="Private" type="tPrivate" minOccurs="0" | ||||||||
maxOccurs="unbounded"/> | ||||||||
</xs:sequence> <xs:sequence> | ||||||||
<xs:element name="LNode" type="tLNode" minOccurs="0" | ||||||||
maxOccurs="unbounded"/> | ||||||||
</xs:sequence> <xs:sequence> | ||||||||
<xs:element name="PowerTransformer" type="tPowerTransformer" | ||||||||
minOccurs="0" maxOccurs="unbounded"> | ||||||||
<!--<xs:unique name="uniqueWindinglnPowerTransformer"> | ||||||||
<xs:selector xpath="./scl:TransformerWinding"/> <xs:field xpath="@name"/> </xs:unique>--> | ||||||||
</xs:element> | ||||||||
</xs:sequence> <xs:sequence> | ||||||||
<xs:element name="VoltageLevel" type="tVoltageLevel" | ||||||||
maxOccurs="unbounded"> | ||||||||
<!--<xs:unique name="uniqueBaylnVoltageLevel"> | ||||||||
<xs:selector xpath="./scl:Bay"/> <xs:field xpath="@name"/> </xs:unique> <xs:unique name="uniquePowerTransformerlnVoltageLevel"> <xs:selector xpath="./scl:PowerTransformer"/> <xs:field xpath="@name"/> </xs:unique> </xs:element> <xs:element name="Function" type="tFunction" minOccurs="0" maxOccurs="unbounded"> <xs:unique name="uniqueSubFunctionlnFunction"> <xs:selector xpath="./scl:SubFunction"/> <xs:field xpath="@name"/> </xs:unique> <xs:unique name="uniqueGeneralEquipmentlnFunction"> <xs:selector xpath="./scl:GeneralEquipment"/> <xs:field xpath="@name"/> </xs:unique>--> | ||||||||
</xs:element> | ||||||||
</xs:sequence> | ||||||||
</xs:sequence> <xs:attribute name="name" type="tName" use="required" fixed="TEMPLATE"/> | ||||||||
</xs:restriction> | ||||||||
</xs:complexContent> | ||||||||
</xs:complexType> | ||||||||
<xs:complexContent> | ||||||||
<xs:restriction base="tlED"> | ||||||||
<xs:sequence> | ||||||||
<xs:sequence> | ||||||||
<xs:any namespace="##other" minOccurs="0" | ||||||||
maxOccurs="unbounded"/> | ||||||||
<xs:element name="Text" type="tText" minOccurs="0"/> | ||||||||
maxOccurs="unbounded"/> | ||||||||
</xs:sequence> | ||||||||
<xs:element name="Services" type="tServices" minOccurs="0"/> <xs:element name="AccessPoint" type="tAccessPoint" | ||||||||
maxOccurs="unbounded"> | ||||||||
<!--<xs:unique name="uniqueLNInAccessPoint"> | ||||||||
<xs:annotation> <xs:documentation xml:lang="en">Only for those LN that are direct children of this AccessPoint.</xs:documentation> </xs:annotation> <xs:selector xpath=".//scl:LN"/> <xs:field xpath="@inst"/> <xs:field xpath="@lnClass"/> <xs:field xpath="@prefix"/> </xs:unique>--> | ||||||||
</xs:element> | ||||||||
</xs:sequence> | ||||||||
</xs:sequence> <xs:attribute name="name" type="tName" use="required" fixed="TEMPLATE"/> | ||||||||
</xs:restriction> | ||||||||
</xs:complexContent> | ||||||||
</xs:complexType> | ||||||||
</xs:schema> |