تنسيق قيم مفصولة بفواصل

تعرض هذه الصفحة نموذج تنفيذ تنسيق قيم مفصولة بفواصل.

نموذج تنسيق الملف

في هذا النموذج، يتم تخزين البيانات كملف بتنسيق قيم مفصولة بفواصل.

ملاحظة: لا يمكن أن تحتوي القيم الموجودة في هذا المثال على فاصلة ثابتة. وتتم إضافة هذا التقييد لبساطة تنفيذ المحلل اللغوي للملف. يمكن إعادة تنفيذ منطق التحليل اللغوي لتجنب هذا التقييد. ولن يؤثر ذلك على بقية الوظيفة.

يحتوي نموذج ملف CSV على أنواع السجلات التالية:

استهلاك الفترة الزمنية: يتم استخدامها لقياسات استهلاك الفترة الزمنية

إجراءات الجهاز: يتم استخدامها لإجراءات الجهاز

سجل المسار: يتم استخدامه لتوفير تاريخ/وقت القراءة وعدد سجلات إجراءات الجهاز واستهلاكات الفترة الزمنية في الملف

تنسيق استهلاك الفترة الزمنية

الرقم

اسم الحقل

النوع

التعريف

1

معرف نوع السجل

القيمة الثابتة "U"

معرف نوع السجل

2

تاريخ/وقت البدء

الوقت بتنسيق الوقت Unix.

تاريخ/وقت بدء قراءة العداد

3

تاريخ/وقت الانتهاء

الوقت بتنسيق الوقت Unix.

تاريخ/وقت انتهاء قراءة العداد

4

معرف الجهاز

نص عشوائي

معرف الجهاز

5

مدة الفترة الزمنية

عدد صحيح

الفترة الزمنية بالثواني بين القراءات (عدد الثواني لكل فترة زمنية).

6

وحدة القياس

نص عشوائي

وصف وحدات قيم البيانات

7

إدخالات البيانات

نص عشوائي اختياري رقمي مزود بفاصلة عائمة، ويكون مفصولاً بالعلامة ":"

يمكن أن يحتوي كل سجل على عدد غير محدود من حقول إدخالات البيانات. وكل إدخال بيانات هو عبارة عن مجموعة من حقلين - قيمة القراءة وإشارة حالة القراءة الاختيارية. ويتم فصل الحقلين بالعلامة ":". ولا يكون الفاصل موجودًا عند عدم توفير إشارة حالة القراءة.

تنسيق إجراء الجهاز

الرقم

اسم الحقل

النوع

التعريف

1

معرف نوع السجل

القيمة الثابتة "E"

معرف نوع السجل

2

تاريخ/وقت الإجراء

الوقت بتنسيق الوقت Unix.

تاريخ ووقت حدوث الإجراء

3

معرف الجهاز

نص عشوائي

معرف الجهاز

4

اسم الإجراء

نص عشوائي

اسم التعريف الأساسي للإجراء

تنسيق سجل المسار

الرقم

اسم الحقل

النوع

التعريف

1

معرف نوع السجل

القيمة الثابتة "T"

معرف نوع السجل

2

تاريخ/وقت الإنشاء

الوقت بتنسيق الوقت Unix.

تاريخ/وقت بدء قراءة العداد

3

إجمالي عدد السجلات

عدد صحيح

عرض عدد السجلات في الملف

نموذج الملف

U,1,86400,DEVICE_DG_0,900,KWH,1:S,2.5,-3.99:R,4:B
E,86400,DEVICE_DG_1,Power Outage
U,2,86400,DEVICE_DG_2,900,KWH,1:S,2,3:R,4:B,5,6,7:A
E,86402,DEVICE_DG_3,Tamper attempt suspected
U,3,86400,DEVICE_DG_4,900,KWH,1:S
T,86401,5

نماذج السكريبتات

يتضمن نموذج التنفيذ نماذج السكريبتات التالية المصممة للاستخدام بتنسيق CSV الوارد أعلاه:

DG_SmplPrCSV: يحتوي نموذج السكريبت هذا على طريقة واحدة في واجهة المكتبة – getParser(). وتقوم الطريقة باسترجاع مثيل الفئة التي تقوم بتنفيذ واجهة com.splwg.d1.domain.sgg.dg.processing.PayloadParser. تحتوي الفئة على المنطق التالي:

  1. التحليل اللغوي لبيانات القياس المنقولة الواردة بتنسيق CSV.

  2. تحويل البيانات الواردة إلى الاستهلاك أو الإجراءات ذات الصلة بناء على أساس نوع البيانات الواردة

  3. استرجاع بنية تلو الأخرى بتنسيق XML العادي

DG_​SmPrCSVCh: تم توفير هذا السكريبت كنموذج لتوضيح كيفية تحليل تنسيق CSV لغويًا في الحزم (التي تم تكوينها من خلال معلمة chunkSize) باستخدام مساعد. ويحتوي نموذج السكريبت هذا على طريقة واحدة في واجهة المكتبة – getParser(). تعرض هذه الطريقة مثيلاً للفئة التي تُنفِّذ واجهتي com.splwg.d1.domain.sgg.dg.processing.ChunkProcessor وcom.splwg.d1.domain.sgg.dg.processing.GenericPayload.

تُميز واجهة ChunkProcessor المعالج الواعي بالحِزم عن باقي عمليات التنفيذ. ويمكن لمحلل مخصص تم تنفيذه في groovy تنفيذ هذه الواجهة. تحدد واجهة GenericPayload الطرق اللازمة للوصول إلى بيانات قياس منقولة من خلال مساعدين محددين. ومن خلال هذه الواجهة، يحصل محلل مخصص على صلاحية الوصول إلى مثيل من LineReaderChunked..

في حالة عدم تعيين المعلمة الديناميكية chunkSize في "تكوين معالجة بيانات القياس المنقولة الخاصة بجيت واي الشبكات الذكي"، ستتم معالجة بيانات القياس المنقولة بالكامل. لمزيد من المعلومات حول معلمة chunkSize.، راجع المعلمات العامة.

تحتوي الفئة على المنطق التالي:
  1. قراءة سطر من بيانات قياس منقولة واردة باستخدام طريقة LineReaderChunked.readLineWithinChunk()

  2. تحليل سطر في بيانات القياس المنقولة الواردة (بتنسيق CSV) تمت قراءته في الخطوة السابقة.

  3. تحويل البيانات الواردة إلى الاستهلاك أو الإجراءات ذات الصلة بناء على أساس نوع البيانات الواردة

  4. استرجاع بنية تلو الأخرى بتنسيق XML العادي

DG_SmplTrCSV: يحتوي نموذج السكريبت هذا على طريقة واحدة في واجهة المكتبة – getTransformer(). وتقوم الطريقة باسترجاع مثيل الفئة التي تقوم بتنفيذ واجهة com.splwg.d1.domain.sgg.dg.processing.PayloadTransformer. تحتوي الفئة على المنطق التالي:

  1. تحويل الرسالة الواردة بتنسيق XML العادي إلى التنسيق "الأصلي" (نقاط توصيل XML لمنشأ مثيل إجراء الجهاز أو منشأ مثيل بيانات القياس الأولية).

  2. إضافة نقاط توصيل XML جديدة كنقاط توصيل فرعية إلى قائمة النتائج المحددة.

لعرض هذه السكريبتات بمزيد من التفاصيل، استخدم بوابة السكريبت.

التحليل اللغوي

يقوم سكريبت المحلل اللغوي بتنفيذ ربط البيانات التالي.

ربط XML عادي باستهلاك الفترة الزمنية

يوضح الجدول التالي الربط بين الحقول في بيانات الفترة الزمنية الواردة والعناصر الفرعية لعنصر بيانات القياس المنقولة/الاستهلاك بتنسيق XML العادي:

حقل استهلاك الفترة الزمنية عنصر XML عادي

معرف نوع السجل

RecordType

تاريخ/وقت البدء

StartDateTime

تاريخ/وقت الانتهاء

EndDateTime

معرف الجهاز

DeviceId

مدة الفترة الزمنية

IntervalDuration

وحدة القياس

UOM

إدخالات البيانات

Intervals/

Interval/

Value

[Status]

محتوي السجل من ملف وارد.

RawData

ربط XML عادي بإجراء الجهاز

يوضح الجدول التالي الربط بين الحقول في بيانات الفترة الزمنية الواردة والعناصر الفرعية لعنصر بيانات القياس المنقولة/إجراء الجهاز بتنسيق XML العادي:

حقل إجراء الجهاز عنصر XML عادي

معرف نوع السجل

RecordType

تاريخ/وقت الإجراء

DateTime

معرف الجهاز

DeviceId

اسم الإجراء

Name

محتوي السجل من ملف وارد.

RawData

مخطط XML لتنسيق XML العادي

يتكون تنسيق XML العادي من العناصر المرتبطة باستهلاك الفترة الزمنية وإجراء الجهاز في نفس الوقت.

<xs:schema attributeFormDefault="unqualified" 
elementFormDefault="qualified" 
targetNamespace="http://xmlns.oracle.com/GenericAdapter" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:ga="http://xmlns.oracle.com/GenericAdapter">
  <xs:element name="Payload" type="ga:PayloadType"/>
  <xs:complexType name="PayloadType">
    <xs:sequence>
      <xs:choice>
        <xs:element name="Usage" type="ga:UsageType"/>
        <xs:element name="Event" type="ga:EventType"/>
      </xs:choice>
      <xs:element name="RawData"  type="ga:NonEmptyString"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="UsageType">
    <xs:sequence>
      <xs:element name="RecordType" type="ga:RecordTypeUsageType"/>
      <xs:element name="StartDateTime" type="xs:integer"/>
      <xs:element name="EndDateTime" type="xs:integer"/>
      <xs:element name="DeviceId" type="ga:NonEmptyString"/>
      <xs:element name="IntervalDuration" type="xs:integer"/>
      <xs:element name="UOM" type="ga:NonEmptyString"/>
      <xs:element name="Intervals" type="ga:IntervalList"/>
    </xs:sequence>
  </xs:complexType>
  <xs:simpleType name="RecordTypeUsageType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="U"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="IntervalList">
    <xs:sequence maxOccurs="unbounded">
      <xs:element name="Interval" type="ga:IntervalType"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="IntervalType">
    <xs:sequence>
      <xs:element name="Value" type="xs:float"/>
      <xs:element name="Status" type="ga:NonEmptyString" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="EventType">
    <xs:sequence>
      <xs:element name="RecordType" type="ga:RecordTypeEventType"/>
      <xs:element name="DateTime" type="xs:integer"/>
      <xs:element name="DeviceId" type="ga:NonEmptyString"/>
      <xs:element name="Name" type="ga:NonEmptyString"/>
    </xs:sequence>
  </xs:complexType>
  <xs:simpleType name="RecordTypeEventType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="E"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="NonEmptyString">
    <xs:restriction base="xs:string">
      <xs:minLength value="1"/>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>
ملاحظة: ملاحظة: سيتم وضع جزء من الملف الوارد الذي كان يتم استخدامه لإنشاء بنية XML العادي الحالية في عنصر بيانات القياس المنقولة/RawData.

التحويل

يقوم سكريبت المحول بتنفيذ الربط التالي.

ربط XML لمنشأ المثيل بتنسيق XML العادي

يقوم محول بيانات القياس المنقولة بإنشاء عناصر XML لمنشأ مثيل إجراء الجهاز و/أو بيانات القياس الأولية على النحو التالي:

تعيين الاستهلاك: إذا كان اسم نقطة توصيل بيانات القياس المنقولة/* مطابقًا إلى "الاستهلاك" (استهلاك الفترة الزمنية)، يقوم السكريبت بإنشاء عنصر XML بالاسم المحدد في حقل تكوين معالجة بيانات القياس المنقولة الخاصة بجيت واي الشبكات الذكي "كائن عمل منشأ مثيل بيانات القياس الأولية (الفترة الزمنية)" والبنية وفقًا لجدول التعيينات التالي:

عنصر XML عادي

عنصر منشأ مثيل بيانات القياس الأولية

الملاحظات

RecordType

N/A

DeviceId

dvcIdN

UOM

externalUOM

IntervalDuration

spi

StartDateTime

stDt

تحويل إلى النوع "dateTime" في إطار عمل تطبيق الخدمات والمرافق من أوراكل

EndDateTime

enDt

تحويل إلى النوع "dateTime" في إطار عمل تطبيق الخدمات والمرافق من أوراكل

Intervals/

Interval/

Value [Status]

msrs

القيمة

msrs/mL/q

Status ->

msrs/mL/sts/stsL/st

N/A

imdType

القيمة الثابتة "D1IL"

externalId

قيمة مخزنة بطريقة setOrigin.

serviceProviderExternalId

قيمة مخزنة بطريقة setConfiguration.

RawData

rawData

في حالة تحديد خانة الاختيار ملء كبيانات أولية في تكوين معالجة بيانات القياس المنقولة الخاصة بجيت واي الشبكات الذكي.

ربط إجراء الجهاز: إذا كان اسم نقطة توصيل بيانات القياس المنقولة/* مطابقًا إلى "الإجراء" (بيانات إجراء الجهاز)، يقوم السكريبت بإنشاء عنصر XML بالاسم المحدد في حقل تكوين معالجة بيانات القياس المنقولة الخاصة بجيت واي الشبكات الذكي "كائن عمل منشأ مثيل إجراء الجهاز" والبنية وفقًا لجدول التعيينات التالي:

عنصر XML عادي

عنصر منشأ مثيل إجراء الجهاز

ملاحظة

RecordType

N/A

DateTime

eventDateTime

تحويل إلى النوع "dateTime" في إطار عمل تطبيق الخدمات والمرافق من أوراكل

DeviceId

externalUOM

Name

externalEventName

externalSourceIdentifier

قيمة مخزنة بطريقة setOrigin.

externalSenderId

قيمة مخزنة بطريقة setConfiguration.

RawData

rawEventInformation

في حالة تحديد خانة الاختيار ملء كبيانات أولية في تكوين معالجة بيانات القياس المنقولة الخاصة بجيت واي الشبكات الذكي.